mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-10 11:59:58 -05:00
Initial community commit
This commit is contained in:
128
Src/Plugins/General/gen_ml/skinneddivider.cpp
Normal file
128
Src/Plugins/General/gen_ml/skinneddivider.cpp
Normal file
@ -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);
|
||||
}
|
Reference in New Issue
Block a user