aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/General/gen_ml/skinneddivider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Plugins/General/gen_ml/skinneddivider.cpp')
-rw-r--r--Src/Plugins/General/gen_ml/skinneddivider.cpp128
1 files changed, 128 insertions, 0 deletions
diff --git a/Src/Plugins/General/gen_ml/skinneddivider.cpp b/Src/Plugins/General/gen_ml/skinneddivider.cpp
new file mode 100644
index 00000000..4e28f51f
--- /dev/null
+++ b/Src/Plugins/General/gen_ml/skinneddivider.cpp
@@ -0,0 +1,128 @@
+#include "./skinneddivider.h"
+#include "../winamp/wa_dlg.h"
+#include "./skinning.h"
+
+SkinnedDivider::SkinnedDivider(void) : SkinnedWnd(FALSE)
+{
+ callback = NULL;
+ userParam = 0L;
+ clickoffs = 0;
+}
+
+SkinnedDivider::~SkinnedDivider(void)
+{
+}
+
+BOOL SkinnedDivider::Attach(HWND hwndDivider)
+{
+ if(!SkinnedWnd::Attach(hwndDivider)) return FALSE;
+ SetType(SKINNEDWND_TYPE_DIVIDER);
+ SetWindowPos(hwnd, NULL, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE | SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED);
+ return TRUE;
+}
+
+BOOL SkinnedDivider::OnMediaLibraryIPC(INT msg, INT_PTR param, LRESULT *pResult)
+{
+ switch(msg)
+ {
+ case ML_IPC_SKINNEDDIVIDER_SETCALLBACK:
+ if ( 0 != param)
+ {
+ callback = ((MLDIVIDERCALLBACK*)param)->fnCallback;
+ userParam = ((MLDIVIDERCALLBACK*)param)->userParam;
+ }
+ else { callback = NULL; userParam= 0L;}
+ return TRUE;
+ }
+ return __super::OnMediaLibraryIPC(msg, param, pResult);
+}
+
+void SkinnedDivider::OnPaint(void)
+{
+ PAINTSTRUCT ps;
+ RECT rc, rh;
+ HDC hdc = BeginPaint(hwnd, &ps);
+
+ GetClientRect(hwnd, &rc);
+
+ SetBkColor(hdc, WADlg_getColor(WADLG_WNDBG));
+ if (SWDIV_NOHILITE & style)
+ {
+ ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rc, L"", 0, NULL);
+ }
+ else
+ {
+ int l;
+ HPEN pen = (HPEN)MlStockObjects_Get(HILITE_PEN),
+ penOld = (HPEN)SelectObject(hdc, pen);
+
+ if (SWDIV_VERT & style)
+ {
+ l = (rc.right - rc.left)/2 - 1;
+ SetRect(&rh, ps.rcPaint.left, ps.rcPaint.top, l, ps.rcPaint.bottom);
+ if (rh.left < rh.right) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
+ SetRect(&rh, l + 1, ps.rcPaint.top, ps.rcPaint.right, ps.rcPaint.bottom);
+ if (rh.left < rh.right) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
+
+ MoveToEx(hdc, l, rc.top, NULL);
+ LineTo(hdc, l, rc.bottom);
+ }
+ else
+ {
+ l = (rc.bottom - rc.top)/2 - 1;
+
+ SetRect(&rh, ps.rcPaint.left, ps.rcPaint.top, ps.rcPaint.right, l);
+ if (rh.top < rh.bottom) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
+ SetRect(&rh, ps.rcPaint.left, l + 1, ps.rcPaint.right, ps.rcPaint.bottom);
+ if (rh.left < rh.right) ExtTextOutW(hdc, 0, 0, ETO_OPAQUE, &rh, L"", 0, 0);
+
+ MoveToEx(hdc, rc.left, l, NULL);
+ LineTo(hdc, rc.right, l);
+ }
+
+ SelectObject(hdc, penOld);
+ }
+ EndPaint(hwnd, &ps);
+}
+
+LRESULT SkinnedDivider::WindowProc(UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ switch(uMsg)
+ {
+ case WM_NCHITTEST: return HTCLIENT;
+ case WM_ERASEBKGND: return 0;
+ case WM_PAINT: OnPaint(); return 0;
+
+ case WM_LBUTTONDOWN:
+ clickoffs = (SWDIV_VERT & style) ? LOWORD(lParam) : HIWORD(lParam);
+ SetCapture(hwnd);
+ break;
+ case WM_LBUTTONUP:
+ ReleaseCapture();
+ clickoffs = 0;
+ break;
+
+ case WM_SETCURSOR:
+ SetCursor(LoadCursor(NULL, (SWDIV_VERT & style) ? IDC_SIZEWE : IDC_SIZENS));
+ return TRUE;
+
+ case WM_MOUSEMOVE:
+ if (GetCapture() == hwnd)
+ {
+ RECT rw;
+ BOOL vert = (SWDIV_VERT & style);
+ GetWindowRect(hwnd, &rw);
+ GetCursorPos(((LPPOINT)&rw) + 1);
+ (SWDIV_VERT & style) ? rw.right -= clickoffs : rw.bottom -= clickoffs;
+
+ if ((vert && rw.left != rw.right) || (!vert && rw.top != rw.bottom))
+ {
+ MapWindowPoints(HWND_DESKTOP, GetParent(hwnd), ((LPPOINT)&rw) + 1, 1);
+ if (callback) callback(hwnd, (vert) ? rw.right : rw.bottom, userParam);
+ }
+ }
+ break;
+
+ }
+ return __super::WindowProc(uMsg, wParam, lParam);
+} \ No newline at end of file