diff options
author | George Hazan <ghazan@miranda.im> | 2018-03-13 13:59:18 +0300 |
---|---|---|
committer | George Hazan <ghazan@miranda.im> | 2018-03-13 13:59:18 +0300 |
commit | f9a6f40b7834edd693e8e5b8d64dbc7cd8921262 (patch) | |
tree | 7bc15bfe8681a98ce96695d37455c8b32829dbf3 /plugins/MagneticWindows/src/SnapToListService.cpp | |
parent | d4e64ad19a3bc6d384c973715497fc6283750e3a (diff) |
fixes #1179 (Resurrect MagneticWindows plugin)
Diffstat (limited to 'plugins/MagneticWindows/src/SnapToListService.cpp')
-rw-r--r-- | plugins/MagneticWindows/src/SnapToListService.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/plugins/MagneticWindows/src/SnapToListService.cpp b/plugins/MagneticWindows/src/SnapToListService.cpp new file mode 100644 index 0000000000..779e733827 --- /dev/null +++ b/plugins/MagneticWindows/src/SnapToListService.cpp @@ -0,0 +1,52 @@ +#include "stdafx.h" + +INT_PTR SnapToList(WPARAM wParam, LPARAM Align) +{ + HWND hWnd = (HWND)wParam; + HWND hWndList = pcli->hwndContactList; + + RECT WndRect, ListRect; + GetWindowRect(hWnd, &WndRect); + GetWindowRect(hWndList, &ListRect); + + RECT AlignRect = ListRect; + if ((!(MS_MW_STL_List_Left & Align)) && (MS_MW_STL_List_Right & Align)) + AlignRect.left = AlignRect.right; + else if ((MS_MW_STL_List_Left & Align) && (!(MS_MW_STL_List_Right & Align))) + AlignRect.right = AlignRect.left; + + if ((!(MS_MW_STL_List_Top & Align)) && (MS_MW_STL_List_Bottom & Align)) + AlignRect.top = AlignRect.bottom; + else if ((MS_MW_STL_List_Top & Align) && (!(MS_MW_STL_List_Bottom & Align))) + AlignRect.bottom = AlignRect.top; + + RECT ResultRect = WndRect; + if ((MS_MW_STL_Wnd_Left & Align) && (MS_MW_STL_Wnd_Right & Align)) { + ResultRect.left = AlignRect.left; + ResultRect.right = AlignRect.right; + } + else if ((!(MS_MW_STL_Wnd_Left & Align)) && (MS_MW_STL_Wnd_Right & Align)) { + ResultRect.left = AlignRect.right - (WndRect.right - WndRect.left); + ResultRect.right = AlignRect.right; + } + else if ((MS_MW_STL_Wnd_Left & Align) && (!(MS_MW_STL_Wnd_Right & Align))) { + ResultRect.left = AlignRect.left; + ResultRect.right = AlignRect.left + (WndRect.right - WndRect.left); + } + + if ((MS_MW_STL_Wnd_Top & Align) && (MS_MW_STL_Wnd_Bottom & Align)) { + ResultRect.top = AlignRect.top; + ResultRect.bottom = AlignRect.bottom; + } + else if ((!(MS_MW_STL_Wnd_Top & Align)) && (MS_MW_STL_Wnd_Bottom & Align)) { + ResultRect.top = AlignRect.bottom - (WndRect.bottom - WndRect.top); + ResultRect.bottom = AlignRect.bottom; + } + else if ((MS_MW_STL_Wnd_Top & Align) && (!(MS_MW_STL_Wnd_Bottom & Align))) { + ResultRect.top = AlignRect.top; + ResultRect.bottom = AlignRect.top + (WndRect.bottom - WndRect.top); + } + + MoveWindow(hWnd, ResultRect.left, ResultRect.top, ResultRect.right - ResultRect.left, ResultRect.bottom - ResultRect.top, true); + return 0; +} |