Implemented mouse control of the SV area; updated the color button immediately after a change.
This commit is contained in:
parent
9654ca793d
commit
571faf9582
|
@ -41,6 +41,7 @@ static BOOL onWM_COMMAND(uiControl *c, HWND hwnd, WORD code, LRESULT *lResult)
|
||||||
b->g = rgba.g;
|
b->g = rgba.g;
|
||||||
b->b = rgba.b;
|
b->b = rgba.b;
|
||||||
b->a = rgba.a;
|
b->a = rgba.a;
|
||||||
|
invalidateRect(b->hwnd, NULL, TRUE);
|
||||||
(*(b->onChanged))(b, b->onChangedData);
|
(*(b->onChanged))(b, b->onChangedData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -363,13 +363,22 @@ static LRESULT CALLBACK svChooserSubProc(HWND hwnd, UINT uMsg, WPARAM wParam, LP
|
||||||
{
|
{
|
||||||
ID2D1RenderTarget *rt;
|
ID2D1RenderTarget *rt;
|
||||||
struct colorDialog *c;
|
struct colorDialog *c;
|
||||||
|
D2D1_POINT_2F *pos;
|
||||||
|
D2D1_SIZE_F *size;
|
||||||
|
|
||||||
|
c = (struct colorDialog *) dwRefData;
|
||||||
switch (uMsg) {
|
switch (uMsg) {
|
||||||
case msgD2DScratchPaint:
|
case msgD2DScratchPaint:
|
||||||
rt = (ID2D1RenderTarget *) lParam;
|
rt = (ID2D1RenderTarget *) lParam;
|
||||||
c = (struct colorDialog *) dwRefData;
|
|
||||||
drawSVChooser(c, rt);
|
drawSVChooser(c, rt);
|
||||||
return 0;
|
return 0;
|
||||||
|
case msgD2DScratchLButtonDown:
|
||||||
|
pos = (D2D1_POINT_2F *) wParam;
|
||||||
|
size = (D2D1_SIZE_F *) lParam;
|
||||||
|
c->s = pos->x / size->width;
|
||||||
|
c->v = 1 - (pos->y / size->height);
|
||||||
|
updateDialog(c, NULL);
|
||||||
|
return 0;
|
||||||
case WM_NCDESTROY:
|
case WM_NCDESTROY:
|
||||||
if (RemoveWindowSubclass(hwnd, svChooserSubProc, uIdSubclass) == FALSE)
|
if (RemoveWindowSubclass(hwnd, svChooserSubProc, uIdSubclass) == FALSE)
|
||||||
logLastError(L"error removing color dialog SV chooser subclass");
|
logLastError(L"error removing color dialog SV chooser subclass");
|
||||||
|
|
|
@ -6,6 +6,10 @@
|
||||||
// - wParam - 0
|
// - wParam - 0
|
||||||
// - lParam - ID2D1RenderTarget *
|
// - lParam - ID2D1RenderTarget *
|
||||||
// - lResult - 0
|
// - lResult - 0
|
||||||
|
// You can optionally also handle msgD2DScratchLButtonDown, which is sent when the left mouse button is either pressed for the first time or held while the mouse is moving.
|
||||||
|
// - wParam - position in DIPs, as D2D1_POINT_2F *
|
||||||
|
// - lParam - size of render target in DIPs, as D2D1_SIZE_F *
|
||||||
|
// - lResult - 0
|
||||||
// Other messages can also be handled here.
|
// Other messages can also be handled here.
|
||||||
|
|
||||||
// TODO allow resize
|
// TODO allow resize
|
||||||
|
@ -37,6 +41,26 @@ static HRESULT d2dScratchDoPaint(HWND hwnd, ID2D1RenderTarget *rt)
|
||||||
return rt->EndDraw(NULL, NULL);
|
return rt->EndDraw(NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void d2dScratchDoLButtonDown(HWND hwnd, ID2D1RenderTarget *rt, LPARAM lParam)
|
||||||
|
{
|
||||||
|
double xpix, ypix;
|
||||||
|
FLOAT dpix, dpiy;
|
||||||
|
D2D1_POINT_2F pos;
|
||||||
|
D2D1_SIZE_F size;
|
||||||
|
|
||||||
|
xpix = (double) GET_X_LPARAM(lParam);
|
||||||
|
ypix = (double) GET_Y_LPARAM(lParam);
|
||||||
|
// these are in pixels; we need points
|
||||||
|
// TODO separate the function from areautil.cpp?
|
||||||
|
rt->GetDpi(&dpix, &dpiy);
|
||||||
|
pos.x = (xpix * 96) / dpix;
|
||||||
|
pos.y = (ypix * 96) / dpiy;
|
||||||
|
|
||||||
|
size = rt->GetSize();
|
||||||
|
|
||||||
|
SendMessageW(hwnd, msgD2DScratchLButtonDown, (WPARAM) (&pos), (LPARAM) (&size));
|
||||||
|
}
|
||||||
|
|
||||||
static LRESULT CALLBACK d2dScratchWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
static LRESULT CALLBACK d2dScratchWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
LONG_PTR init;
|
LONG_PTR init;
|
||||||
|
@ -83,6 +107,14 @@ static LRESULT CALLBACK d2dScratchWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, L
|
||||||
case WM_PRINTCLIENT:
|
case WM_PRINTCLIENT:
|
||||||
// TODO
|
// TODO
|
||||||
break;
|
break;
|
||||||
|
case WM_LBUTTONDOWN:
|
||||||
|
d2dScratchDoLButtonDown(hwnd, rt, lParam);
|
||||||
|
return 0;
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
// also send LButtonDowns when dragging
|
||||||
|
if ((wParam & MK_LBUTTON) != 0)
|
||||||
|
d2dScratchDoLButtonDown(hwnd, rt, lParam);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,8 +13,8 @@ enum {
|
||||||
msgNOTIFY,
|
msgNOTIFY,
|
||||||
msgHSCROLL,
|
msgHSCROLL,
|
||||||
msgQueued,
|
msgQueued,
|
||||||
// TODO convert to a function like with container?
|
|
||||||
msgD2DScratchPaint,
|
msgD2DScratchPaint,
|
||||||
|
msgD2DScratchLButtonDown,
|
||||||
};
|
};
|
||||||
|
|
||||||
// alloc.cpp
|
// alloc.cpp
|
||||||
|
|
Loading…
Reference in New Issue