3 static const TCHAR szFloatWndClass
[] = TEXT("ImageSoftFloatWndClass");
9 TBBUTTON ToolsButtons
[] = {
10 /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
11 {TBICON_RECTSEL
, ID_RECTSEL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* rectangle select */
12 {TBICON_MOVESEL
, ID_MOVESEL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* move selected pixels */
13 {TBICON_LASOO
, ID_LASOO
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* lasso select */
14 {TBICON_MOVE
, ID_MOVE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* move selection */
15 {TBICON_ECLIPSESEL
, ID_ECLIPSESEL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* elipse select */
16 {TBICON_ZOOM
, ID_ZOOM
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* zoom */
17 {TBICON_MAGICWAND
, ID_MAGICWAND
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* magic wand */
18 {TBICON_TEXT
, ID_TEXT
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* text */
19 {TBICON_PAINTBRUSH
, ID_PAINTBRUSH
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* paintbrush */
20 {TBICON_ERASER
, ID_ERASER
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* eraser */
21 {TBICON_PENCIL
, ID_PENCIL
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* pencil */
22 {TBICON_COLORPICKER
, ID_COLORPICKER
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* color picker */
23 {TBICON_CLONESTAMP
, ID_CLONESTAMP
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* clone stamp */
24 {TBICON_RECOLORING
, ID_RECOLORING
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* recolor */
25 {TBICON_PAINTBUCKET
, ID_PAINTBUCKET
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* paint bucket */
26 {TBICON_LINE
, ID_LINE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* line */
27 {TBICON_RECTANGLE
, ID_RECTANGLE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* rectangle */
28 {TBICON_ROUNDRECT
, ID_ROUNDRECT
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* round rectangle */
29 {TBICON_ECLIPSE
, ID_ECLIPSE
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* elipse */
30 {TBICON_FREEFORM
, ID_FREEFORM
, TBSTATE_ENABLED
, BTNS_BUTTON
| TBSTYLE_GROUP
| TBSTYLE_CHECK
, {0}, 0, 0}, /* free form */
32 {10, 0, TBSTATE_ENABLED
, BTNS_SEP
, {0}, 0, 0},
35 TBBUTTON HistoryButtons
[] = {
36 {TBICON_BACKSM
, ID_BACK
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* back */
37 {TBICON_UNDOSM
, ID_UNDO
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* undo */
38 {TBICON_REDOSM
, ID_REDO
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* redo */
39 {TBICON_FORWARDSM
, ID_FORWARD
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* forward */
40 {TBICON_DELETESM
, ID_DELETE
, TBSTATE_ENABLED
, BTNS_BUTTON
, {0}, 0, 0 }, /* delete */
45 ShowHideWindow(HWND hwnd
)
47 if (IsWindowVisible(hwnd
))
48 return ShowWindow(hwnd
, SW_HIDE
);
50 return ShowWindow(hwnd
, SW_SHOW
);
55 FloatToolbarCreateToolsGui(PMAIN_WND_INFO Info
)
58 HIMAGELIST hImageList
;
61 NumButtons
= sizeof(ToolsButtons
) / sizeof(ToolsButtons
[0]);
63 hTb
= CreateWindowEx(0,
66 WS_CHILD
| WS_VISIBLE
| TBSTYLE_FLAT
| TBSTYLE_WRAPABLE
| CCS_NODIVIDER
,
68 Info
->fltTools
->hSelf
,
77 TBSTYLE_EX_HIDECLIPPEDBUTTONS
);
81 sizeof(ToolsButtons
[0]),
87 (LPARAM
)MAKELONG(16, 16));
89 hImageList
= InitImageList(NumButtons
,
92 ImageList_Destroy((HIMAGELIST
)SendMessage(hTb
,
100 (LPARAM
)ToolsButtons
);
115 FloatWindowPaintColorPicker(HWND hColorPicker
)
120 InvalidateRect(hColorPicker
,
123 UpdateWindow(hColorPicker
);
125 hdc
= GetDC(hColorPicker
);
127 GetClientRect(hColorPicker
,
136 ReleaseDC(hColorPicker
,
142 FloatWindowPaintHueSlider(HWND hHueSlider
)
147 InvalidateRect(hHueSlider
,
150 UpdateWindow(hHueSlider
);
152 hdc
= GetDC(hHueSlider
);
154 GetClientRect(hHueSlider
,
163 ReleaseDC(hHueSlider
,
170 FloatToolbarCreateColorsGui(PMAIN_WND_INFO Info
)
179 GetClientRect(Info
->fltColors
->hSelf
,
182 hColorPicker
= CreateWindowEx(0,
185 WS_CHILD
| WS_VISIBLE
| CBS_DROPDOWN
,
188 (int) (rect
.right
* 0.65),
190 Info
->fltColors
->hSelf
,
194 if (hColorPicker
== NULL
)
197 hHueSlider
= CreateWindowEx(0,
200 WS_CHILD
| WS_VISIBLE
| CBS_DROPDOWN
,
205 Info
->fltColors
->hSelf
,
209 if (hHueSlider
== NULL
)
212 hMouseButton
= CreateWindowEx(0,
215 WS_CHILD
| WS_VISIBLE
| CBS_DROPDOWN
,
217 Info
->fltColors
->hSelf
,
221 if (hMouseButton
== NULL
)
224 MakeFlatCombo(hMouseButton
);
226 /* temp, just testing */
227 SendMessage(hMouseButton
, CB_ADDSTRING
, 0, (LPARAM
)_T("Primary"));
228 SendMessage(hMouseButton
, CB_ADDSTRING
, 0, (LPARAM
)_T("Secondary"));
229 SendMessage(hMouseButton
, CB_SETCURSEL
, 0, 0);
232 hMore
= CreateWindowEx(WS_EX_STATICEDGE
,
235 WS_CHILD
| WS_VISIBLE
| BS_BITMAP
,
239 Info
->fltColors
->hSelf
,
246 hMoreBitmap
= (HBITMAP
)LoadImage(hInstance
,
247 MAKEINTRESOURCE(IDB_COLORSMORE
),
251 LR_LOADTRANSPARENT
| LR_LOADMAP3DCOLORS
);
252 if (hMoreBitmap
!= NULL
)
257 (LPARAM
)hMoreBitmap
);
261 /* temp functions for playing about with possible layouts */
262 FloatWindowPaintHueSlider(hHueSlider
);
263 FloatWindowPaintColorPicker(hColorPicker
);
265 if (hColorPicker
!= NULL
)
267 HDC hDc
= GetDC(hColorPicker
);
268 TextOut(hDc
, 8, 75, _T("Possible layout?"), 16);
269 ReleaseDC(hColorPicker
, hDc
);
278 FloatToolbarCreateHistoryGui(PMAIN_WND_INFO Info
)
282 HIMAGELIST hImageList
;
285 hList
= CreateWindowEx(0,
288 WS_CHILD
| WS_VISIBLE
| LBS_EXTENDEDSEL
,
290 Info
->fltHistory
->hSelf
,
297 NumButtons
= sizeof(HistoryButtons
) / sizeof(HistoryButtons
[0]);
298 hButtons
= CreateWindowEx(0,
301 WS_CHILD
| WS_VISIBLE
| TBSTYLE_FLAT
| CCS_BOTTOM
| CCS_NODIVIDER
,
303 Info
->fltHistory
->hSelf
,
307 if (hButtons
!= NULL
)
309 SendMessage(hButtons
,
311 sizeof(ToolsButtons
[0]),
314 SendMessage(hButtons
,
317 (LPARAM
)MAKELONG(10, 10));
319 hImageList
= InitImageList(NumButtons
,
322 ImageList_Destroy((HIMAGELIST
)SendMessage(hButtons
,
325 (LPARAM
)hImageList
));
327 SendMessage(hButtons
,
332 SendMessage(hButtons
,
335 (LPARAM
)HistoryButtons
);
345 DoTimer(PFLT_WND FltInfo
,
350 /* timer to check if cursor is in toolbar coords */
355 /* kill timer if toobar is not opaque */
356 if (FltInfo
->bOpaque
!= TRUE
)
358 KillTimer(FltInfo
->hSelf
,
363 if (GetCursorPos(&pt
))
367 if (GetWindowRect(FltInfo
->hSelf
,
373 KillTimer(FltInfo
->hSelf
,
375 KillTimer(FltInfo
->hSelf
,
378 /* timer to fade out toolbar */
379 SetTimer(FltInfo
->hSelf
,
389 /* timer to fade in toolbar */
392 SetLayeredWindowAttributes(FltInfo
->hSelf
,
394 (255 * FltInfo
->Transparancy
) / 100,
397 /* increment transparancy until it is opaque (100) */
398 FltInfo
->Transparancy
+= 5;
400 if (FltInfo
->Transparancy
== 100)
402 SetWindowLongPtr(FltInfo
->hSelf
,
404 GetWindowLongPtr(FltInfo
->hSelf
,
405 GWL_EXSTYLE
) & ~WS_EX_LAYERED
);
407 FltInfo
->bOpaque
= TRUE
;
409 KillTimer(FltInfo
->hSelf
,
419 Style
= GetWindowLongPtr(FltInfo
->hSelf
,
422 if (Style
& ~WS_EX_LAYERED
)
424 SetWindowLongPtr(FltInfo
->hSelf
,
426 Style
| WS_EX_LAYERED
);
429 FltInfo
->Transparancy
-= 5;
431 if (FltInfo
->Transparancy
>= 60)
433 /* set the tranclucency to 60% */
434 SetLayeredWindowAttributes(FltInfo
->hSelf
,
436 (255 * FltInfo
->Transparancy
) / 100,
439 if (FltInfo
->Transparancy
== 60)
441 FltInfo
->bOpaque
= FALSE
;
443 KillTimer(FltInfo
->hSelf
,
454 FloatToolbarWndProc(HWND hwnd
,
461 /* Get the window context */
462 FltInfo
= (PFLT_WND
)GetWindowLongPtr(hwnd
,
464 if (FltInfo
== NULL
&& Message
!= WM_CREATE
)
466 goto HandleDefaultMessage
;
473 FltInfo
= (PFLT_WND
)(((LPCREATESTRUCT
)lParam
)->lpCreateParams
);
475 /*FIXME: read this from registry */
476 // FltInfo->bShow = TRUE;
478 SetWindowLongPtr(hwnd
,
482 FltInfo
->bOpaque
= FALSE
;
484 SetWindowLongPtr(hwnd
,
486 GetWindowLongPtr(hwnd
,
487 GWL_EXSTYLE
) | WS_EX_LAYERED
);
489 /* set the tranclucency to 60% */
490 FltInfo
->Transparancy
= 60;
491 SetLayeredWindowAttributes(hwnd
,
493 (255 * FltInfo
->Transparancy
) / 100,
508 if (FltInfo
->bOpaque
== FALSE
)
514 RDW_ERASE
| RDW_INVALIDATE
| RDW_FRAME
| RDW_ALLCHILDREN
);
516 FltInfo
->bOpaque
= TRUE
;
517 //MessageBox(NULL, _T("in"), _T("Hit test"), MB_OK | MB_ICONEXCLAMATION);
519 /* timer to check if cursor is in toolbar coords */
525 /* timer to fade in the toolbars */
535 ShowHideWindow(FltInfo
->hSelf
);
540 if (LOWORD(wParam
) == IDCANCEL
)
541 ShowHideWindow(FltInfo
->hSelf
);
543 switch(LOWORD(wParam
))
546 MessageBox(hwnd
, _T("Kapow!"), _T("Hit test"), MB_OK
| MB_ICONEXCLAMATION
);
568 /*SendMessage(Info->hSelf,
578 /* FIXME: needs fully implementing */
579 return DefWindowProc(hwnd
,
586 SetWindowLongPtr(hwnd
,
592 HandleDefaultMessage
:
593 return DefWindowProc(hwnd
,
604 InitFloatWndClass(VOID
)
608 wc
.cbSize
= sizeof(WNDCLASSEX
);
609 wc
.style
= CS_HREDRAW
| CS_VREDRAW
;
610 wc
.lpfnWndProc
= FloatToolbarWndProc
;
611 wc
.hInstance
= hInstance
;
613 wc
.hCursor
= LoadCursor(NULL
,
615 wc
.hbrBackground
= (HBRUSH
)(COLOR_BTNFACE
+ 1);
616 wc
.lpszClassName
= szFloatWndClass
;
619 return RegisterClassEx(&wc
) != (ATOM
)0;
623 UninitFloatWndImpl(VOID
)
625 UnregisterClass(szFloatWndClass
,