summaryrefslogtreecommitdiff
path: root/plugins/MagneticWindows/src/SnapToListService.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/MagneticWindows/src/SnapToListService.cpp')
-rw-r--r--plugins/MagneticWindows/src/SnapToListService.cpp52
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;
+}