3 static const TCHAR szFloatWndClass
[] = TEXT("ImageSoftFloatWndClass");
7 TBBUTTON ToolsButtons
[] = {
8 /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
9 {TBICON_RECTSEL
, ID_RECTSEL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* rectangle select */
10 {TBICON_MOVESEL
, ID_MOVESEL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* move selected pixels */
11 {TBICON_LASOO
, ID_LASOO
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* lasso select */
12 {TBICON_MOVE
, ID_MOVE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* move selection */
13 {TBICON_ECLIPSESEL
, ID_ECLIPSESEL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* elipse select */
14 {TBICON_ZOOM
, ID_ZOOM
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* zoom */
15 {TBICON_MAGICWAND
, ID_MAGICWAND
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* magic wand */
16 {TBICON_TEXT
, ID_TEXT
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* text */
17 {TBICON_PAINTBRUSH
, ID_PAINTBRUSH
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* paintbrush */
18 {TBICON_ERASER
, ID_ERASER
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* eraser */
19 {TBICON_PENCIL
, ID_PENCIL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* pencil */
20 {TBICON_COLORPICKER
, ID_COLORPICKER
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* color picker */
21 {TBICON_CLONESTAMP
, ID_CLONESTAMP
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* clone stamp */
22 {TBICON_RECOLORING
, ID_RECOLORING
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* recolor */
23 {TBICON_PAINTBUCKET
, ID_PAINTBUCKET
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* paint bucket */
24 {TBICON_LINE
, ID_LINE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* line */
25 {TBICON_RECTANGLE
, ID_RECTANGLE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* rectangle */
26 {TBICON_ROUNDRECT
, ID_ROUNDRECT
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* round rectangle */
27 {TBICON_ECLIPSE
, ID_ECLIPSE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* elipse */
28 {TBICON_FREEFORM
, ID_FREEFORM
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* free form */
30 {10, 0, TBSTATE_ENABLED
, BTNS_SEP
, {0}, 0, 0},
33 TBBUTTON HistoryButtons
[] = {
34 {TBICON_BACKSM
, ID_BACK
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* back */
35 {TBICON_UNDOSM
, ID_UNDO
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* undo */
36 {TBICON_REDOSM
, ID_REDO
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* redo */
37 {TBICON_FORWARDSM
, ID_FORWARD
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* forward */
38 {TBICON_DELETESM
, ID_DELETE
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* delete */
43 ShowHideWindow(PFLT_WND FltInfo
)
45 ShowWindow(FltInfo
->hSelf
, FltInfo
->bShow
? SW_HIDE
: SW_SHOW
);
46 FltInfo
->bShow
= ~FltInfo
->bShow
;
48 return FltInfo
->bShow
;
53 FloatToolbarCreateToolsGui(PMAIN_WND_INFO Info
)
56 HIMAGELIST hImageList
;
59 NumButtons
= sizeof(ToolsButtons
) / sizeof(ToolsButtons
[0]);
61 hTb
= CreateWindowEx(0,
64 WS_CHILD
| WS_VISIBLE
| TBSTYLE_FLAT
| TBSTYLE_WRAPABLE
| CCS_NODIVIDER
,
66 Info
->fltTools
->hSelf
,
75 TBSTYLE_EX_HIDECLIPPEDBUTTONS
);
79 sizeof(ToolsButtons
[0]),
85 (LPARAM
)MAKELONG(16, 16));
87 hImageList
= InitImageList(NumButtons
,
90 ImageList_Destroy((HIMAGELIST
)SendMessage(hTb
,
98 (LPARAM
)ToolsButtons
);
113 FloatWindowPaintColorPicker(HWND hColorPicker
)
118 InvalidateRect(hColorPicker
,
121 UpdateWindow(hColorPicker
);
123 hdc
= GetDC(hColorPicker
);
125 GetClientRect(hColorPicker
,
134 ReleaseDC(hColorPicker
,
140 FloatWindowPaintHueSlider(HWND hHueSlider
)
145 InvalidateRect(hHueSlider
,
148 UpdateWindow(hHueSlider
);
150 hdc
= GetDC(hHueSlider
);
152 GetClientRect(hHueSlider
,
161 ReleaseDC(hHueSlider
,
168 FloatToolbarCreateColorsGui(PMAIN_WND_INFO Info
)
177 GetClientRect(Info
->fltColors
->hSelf
,
180 hColorPicker
= CreateWindowEx(0,
183 WS_CHILD
| WS_VISIBLE
| CBS_DROPDOWN
,
188 Info
->fltColors
->hSelf
,
192 if (hColorPicker
== NULL
)
195 hHueSlider
= CreateWindowEx(0,
198 WS_CHILD
| WS_VISIBLE
| CBS_DROPDOWN
,
203 Info
->fltColors
->hSelf
,
207 if (hHueSlider
== NULL
)
210 hMouseButton
= CreateWindowEx(0,
213 WS_CHILD
| WS_VISIBLE
| CBS_DROPDOWN
,
215 Info
->fltColors
->hSelf
,
219 if (hMouseButton
== NULL
)
222 //MakeFlatCombo(hMouseButton);
224 /* temp, just testing */
225 SendMessage(hMouseButton
, CB_ADDSTRING
, 0, (LPARAM
)_T("Primary"));
226 SendMessage(hMouseButton
, CB_ADDSTRING
, 0, (LPARAM
)_T("Secondary"));
227 SendMessage(hMouseButton
, CB_SETCURSEL
, 0, 0);
230 hMore
= CreateWindowEx(WS_EX_STATICEDGE
,
233 WS_CHILD
| WS_VISIBLE
| BS_BITMAP
,
237 Info
->fltColors
->hSelf
,
244 hMoreBitmap
= (HBITMAP
)LoadImage(hInstance
,
245 MAKEINTRESOURCE(IDB_COLORSMORE
),
249 LR_LOADTRANSPARENT
| LR_LOADMAP3DCOLORS
);
250 if (hMoreBitmap
!= NULL
)
255 (LPARAM
)hMoreBitmap
);
259 /* temp functions for playing about with possible layouts */
260 FloatWindowPaintHueSlider(hHueSlider
);
261 FloatWindowPaintColorPicker(hColorPicker
);
263 if (hColorPicker
!= NULL
)
265 HDC hDc
= GetDC(hColorPicker
);
266 TextOut(hDc
, 8, 75, _T("Possible layout?"), 16);
267 ReleaseDC(hColorPicker
, hDc
);
276 FloatToolbarCreateHistoryGui(PMAIN_WND_INFO Info
)
280 HIMAGELIST hImageList
;
283 hList
= CreateWindowEx(0,
286 WS_CHILD
| WS_VISIBLE
| LBS_EXTENDEDSEL
,
288 Info
->fltHistory
->hSelf
,
295 NumButtons
= sizeof(HistoryButtons
) / sizeof(HistoryButtons
[0]);
296 hButtons
= CreateWindowEx(0,
299 WS_CHILD
| WS_VISIBLE
| TBSTYLE_FLAT
| CCS_BOTTOM
| CCS_NODIVIDER
,
301 Info
->fltHistory
->hSelf
,
305 if (hButtons
!= NULL
)
307 SendMessage(hButtons
,
309 sizeof(ToolsButtons
[0]),
312 SendMessage(hButtons
,
315 (LPARAM
)MAKELONG(10, 10));
317 hImageList
= InitImageList(NumButtons
,
320 ImageList_Destroy((HIMAGELIST
)SendMessage(hButtons
,
323 (LPARAM
)hImageList
));
325 SendMessage(hButtons
,
330 SendMessage(hButtons
,
333 (LPARAM
)HistoryButtons
);
342 FloatToolbarWndProc(HWND hwnd
,
349 /* Get the window context */
350 FltInfo
= (PFLT_WND
)GetWindowLongPtr(hwnd
,
352 if (FltInfo
== NULL
&& Message
!= WM_CREATE
)
354 goto HandleDefaultMessage
;
361 FltInfo
= (PFLT_WND
)(((LPCREATESTRUCT
)lParam
)->lpCreateParams
);
363 /*FIXME: read this from registry */
364 FltInfo
->bShow
= TRUE
;
366 FltInfo
->bOpaque
= FALSE
;
371 GWL_EXSTYLE
) | WS_EX_LAYERED
);
373 /* set the tranclucency to 60% */
374 SetLayeredWindowAttributes(hwnd
,
385 if (FltInfo
->bOpaque
!= TRUE
)
392 if (GetCursorPos(&pt
))
396 if (GetWindowRect(hwnd
,
399 if (! PtInRect(&rect
,
405 FltInfo
->bOpaque
= FALSE
;
410 GWL_EXSTYLE
) | WS_EX_LAYERED
);
412 /* set the tranclucency to 60% */
413 SetLayeredWindowAttributes(hwnd
,
426 if (FltInfo
->bOpaque
== FALSE
)
431 GWL_EXSTYLE
) & ~WS_EX_LAYERED
);
436 RDW_ERASE
| RDW_INVALIDATE
| RDW_FRAME
| RDW_ALLCHILDREN
);
438 FltInfo
->bOpaque
= TRUE
;
439 MessageBox(NULL
, _T("in"), _T("Hit test"), MB_OK
| MB_ICONEXCLAMATION
);
448 ShowHideWindow(FltInfo
);
452 if (LOWORD(wParam
) == IDCANCEL
)
453 ShowHideWindow(FltInfo
);
455 switch(LOWORD(wParam
))
458 MessageBox(hwnd
, _T("Kapow!"), _T("Hit test"), MB_OK
| MB_ICONEXCLAMATION
);
480 /*SendMessage(Info->hSelf,
489 /* FIXME: needs fully implementing */
490 return DefWindowProc(hwnd
,
497 SetWindowLongPtr(hwnd
,
503 HandleDefaultMessage
:
504 return DefWindowProc(hwnd
,
515 InitFloatWndClass(VOID
)
519 wc
.cbSize
= sizeof(WNDCLASSEX
);
520 wc
.style
= CS_HREDRAW
| CS_VREDRAW
;
521 wc
.lpfnWndProc
= FloatToolbarWndProc
;
522 wc
.hInstance
= hInstance
;
524 wc
.hCursor
= LoadCursor(NULL
,
526 wc
.hbrBackground
= (HBRUSH
)(COLOR_BTNFACE
+ 1);
527 wc
.lpszClassName
= szFloatWndClass
;
530 return RegisterClassEx(&wc
) != (ATOM
)0;
534 UninitFloatWndImpl(VOID
)
536 UnregisterClass(szFloatWndClass
,