diff options
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; +} |