+++ /dev/null
-#include "precomp.h"
-
-static const TCHAR szFloatWndClass[] = TEXT("ImageSoftFloatWndClass");
-
-#define ID_TIMER1 1
-#define ID_TIMER2 2
-#define ID_TIMER3 3
-
-TBBUTTON ToolsButtons[] = {
-/* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */
- {TBICON_RECTSEL, ID_RECTSEL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* rectangle select */
- {TBICON_MOVESEL, ID_MOVESEL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* move selected pixels */
- {TBICON_LASOO, ID_LASOO, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* lasso select */
- {TBICON_MOVE, ID_MOVE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* move selection */
- {TBICON_ECLIPSESEL, ID_ECLIPSESEL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* elipse select */
- {TBICON_ZOOM, ID_ZOOM, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* zoom */
- {TBICON_MAGICWAND, ID_MAGICWAND, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* magic wand */
- {TBICON_TEXT, ID_TEXT, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* text */
- {TBICON_PAINTBRUSH, ID_PAINTBRUSH, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* paintbrush */
- {TBICON_ERASER, ID_ERASER, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* eraser */
- {TBICON_PENCIL, ID_PENCIL, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* pencil */
- {TBICON_COLORPICKER, ID_COLORPICKER, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* color picker */
- {TBICON_CLONESTAMP, ID_CLONESTAMP, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* clone stamp */
- {TBICON_RECOLORING, ID_RECOLORING, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* recolor */
- {TBICON_PAINTBUCKET, ID_PAINTBUCKET, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* paint bucket */
- {TBICON_LINE, ID_LINE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* line */
- {TBICON_RECTANGLE, ID_RECTANGLE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* rectangle */
- {TBICON_ROUNDRECT, ID_ROUNDRECT, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* round rectangle */
- {TBICON_ECLIPSE, ID_ECLIPSE, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* elipse */
- {TBICON_FREEFORM, ID_FREEFORM, TBSTATE_ENABLED, BTNS_BUTTON | TBSTYLE_GROUP | TBSTYLE_CHECK, {0}, 0, 0}, /* free form */
-
- {10, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0},
-};
-
-TBBUTTON HistoryButtons[] = {
- {TBICON_BACKSM, ID_BACK, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* back */
- {TBICON_UNDOSM, ID_UNDO, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* undo */
- {TBICON_REDOSM, ID_REDO, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* redo */
- {TBICON_FORWARDSM, ID_FORWARD, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* forward */
- {TBICON_DELETESM, ID_DELETE, TBSTATE_ENABLED, BTNS_BUTTON, {0}, 0, 0 }, /* delete */
-};
-
-
-BOOL
-ShowHideWindow(HWND hwnd)
-{
- if (IsWindowVisible(hwnd))
- return ShowWindow(hwnd, SW_HIDE);
- else
- return ShowWindow(hwnd, SW_SHOW);
-}
-
-
-BOOL
-FloatToolbarCreateToolsGui(PMAIN_WND_INFO Info)
-{
- HWND hTb;
- HIMAGELIST hImageList;
- INT NumButtons;
-
- NumButtons = sizeof(ToolsButtons) / sizeof(ToolsButtons[0]);
-
- hTb = CreateWindowEx(0,
- TOOLBARCLASSNAME,
- NULL,
- WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | TBSTYLE_WRAPABLE | CCS_NODIVIDER,
- 0, 0, 32, 200,
- Info->fltTools->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hTb != NULL)
- {
- SendMessage(hTb,
- TB_SETEXTENDEDSTYLE,
- 0,
- TBSTYLE_EX_HIDECLIPPEDBUTTONS);
-
- SendMessage(hTb,
- TB_BUTTONSTRUCTSIZE,
- sizeof(ToolsButtons[0]),
- 0);
-
- SendMessage(hTb,
- TB_SETBITMAPSIZE,
- 0,
- (LPARAM)MAKELONG(16, 16));
-
- hImageList = InitImageList(NumButtons,
- IDB_TOOLSRECTSEL);
-
- ImageList_Destroy((HIMAGELIST)SendMessage(hTb,
- TB_SETIMAGELIST,
- 0,
- (LPARAM)hImageList));
-
- SendMessage(hTb,
- TB_ADDBUTTONS,
- NumButtons,
- (LPARAM)ToolsButtons);
-
- SendMessage(hTb,
- TB_AUTOSIZE,
- 0,
- 0);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-VOID
-FloatWindowPaintColorPicker(HWND hColorPicker)
-{
- HDC hdc;
- RECT rect;
-
- InvalidateRect(hColorPicker,
- NULL,
- TRUE);
- UpdateWindow(hColorPicker);
-
- hdc = GetDC(hColorPicker);
-
- GetClientRect(hColorPicker,
- &rect);
-
- Ellipse(hdc,
- rect.left,
- rect.top,
- rect.right,
- rect.bottom);
-
- ReleaseDC(hColorPicker,
- hdc);
-
-}
-
-VOID
-FloatWindowPaintHueSlider(HWND hHueSlider)
-{
- HDC hdc;
- RECT rect;
-
- InvalidateRect(hHueSlider,
- NULL,
- TRUE);
- UpdateWindow(hHueSlider);
-
- hdc = GetDC(hHueSlider);
-
- GetClientRect(hHueSlider,
- &rect);
-
- Rectangle(hdc,
- rect.left,
- rect.top,
- rect.right,
- rect.bottom);
-
- ReleaseDC(hHueSlider,
- hdc);
-
-}
-
-
-BOOL
-FloatToolbarCreateColorsGui(PMAIN_WND_INFO Info)
-{
- HWND hColorPicker;
- HWND hHueSlider;
- HWND hMouseButton;
- HWND hMore;
- RECT rect;
- HBITMAP hMoreBitmap;
-
- GetClientRect(Info->fltColors->hSelf,
- &rect);
-
- hColorPicker = CreateWindowEx(0,
- WC_STATIC,
- NULL,
- WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
- 2,
- 2,
- (int) (rect.right * 0.65),
- rect.bottom - 2,
- Info->fltColors->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hColorPicker == NULL)
- return FALSE;
-
- hHueSlider = CreateWindowEx(0,
- WC_STATIC,
- NULL,
- WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
- 145,
- 35,
- 25,
- 135,
- Info->fltColors->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hHueSlider == NULL)
- return FALSE;
-
- hMouseButton = CreateWindowEx(0,
- WC_COMBOBOX,
- NULL,
- WS_CHILD | WS_VISIBLE | CBS_DROPDOWN,
- 118, 5, 75, 25,
- Info->fltColors->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hMouseButton == NULL)
- return FALSE;
-
- MakeFlatCombo(hMouseButton);
-
- /* temp, just testing */
- SendMessage(hMouseButton, CB_ADDSTRING, 0, (LPARAM)_T("Primary"));
- SendMessage(hMouseButton, CB_ADDSTRING, 0, (LPARAM)_T("Secondary"));
- SendMessage(hMouseButton, CB_SETCURSEL, 0, 0);
-
-
- hMore = CreateWindowEx(WS_EX_STATICEDGE,
- WC_BUTTON,
- NULL,
- WS_CHILD | WS_VISIBLE | BS_BITMAP,
- rect.right - 15,
- rect.bottom - 15,
- 15, 15,
- Info->fltColors->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hMore == NULL)
- return FALSE;
-
- hMoreBitmap = (HBITMAP)LoadImage(hInstance,
- MAKEINTRESOURCE(IDB_COLORSMORE),
- IMAGE_BITMAP,
- 12,
- 11,
- LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS);
- if (hMoreBitmap != NULL)
- {
- SendMessage(hMore,
- BM_SETIMAGE,
- IMAGE_BITMAP,
- (LPARAM)hMoreBitmap);
- }
-
-
- /* temp functions for playing about with possible layouts */
- FloatWindowPaintHueSlider(hHueSlider);
- FloatWindowPaintColorPicker(hColorPicker);
-
- if (hColorPicker != NULL)
- {
- HDC hDc = GetDC(hColorPicker);
- TextOut(hDc, 8, 75, _T("Possible layout?"), 16);
- ReleaseDC(hColorPicker, hDc);
- }
-
- return TRUE;
-
-}
-
-
-BOOL
-FloatToolbarCreateHistoryGui(PMAIN_WND_INFO Info)
-{
- HWND hList;
- HWND hButtons;
- HIMAGELIST hImageList;
- INT NumButtons;
-
- hList = CreateWindowEx(0,
- WC_LISTBOX,
- NULL,
- WS_CHILD | WS_VISIBLE | LBS_EXTENDEDSEL,
- 0, 0, 143, 100,
- Info->fltHistory->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hList == NULL)
- return FALSE;
-
- NumButtons = sizeof(HistoryButtons) / sizeof(HistoryButtons[0]);
- hButtons = CreateWindowEx(0,
- TOOLBARCLASSNAME,
- NULL,
- WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT | CCS_BOTTOM | CCS_NODIVIDER,
- 0, 0, 0, 0,
- Info->fltHistory->hSelf,
- NULL,
- hInstance,
- NULL);
- if (hButtons != NULL)
- {
- SendMessage(hButtons,
- TB_BUTTONSTRUCTSIZE,
- sizeof(ToolsButtons[0]),
- 0);
-
- SendMessage(hButtons,
- TB_SETBITMAPSIZE,
- 0,
- (LPARAM)MAKELONG(10, 10));
-
- hImageList = InitImageList(NumButtons,
- IDB_HISTBACK);
-
- ImageList_Destroy((HIMAGELIST)SendMessage(hButtons,
- TB_SETIMAGELIST,
- 0,
- (LPARAM)hImageList));
-
- SendMessage(hButtons,
- TB_SETBUTTONSIZE,
- 0,
- MAKELONG(18, 16));
-
- SendMessage(hButtons,
- TB_ADDBUTTONS,
- NumButtons,
- (LPARAM)HistoryButtons);
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-
-static VOID
-DoTimer(PFLT_WND FltInfo,
- UINT_PTR idTimer)
-{
- switch (idTimer)
- {
- /* timer to check if cursor is in toolbar coords */
- case ID_TIMER1:
- {
- POINT pt;
-
- /* kill timer if toobar is not opaque */
- if (FltInfo->bOpaque != TRUE)
- {
- KillTimer(FltInfo->hSelf,
- ID_TIMER1);
- break;
- }
-
- if (GetCursorPos(&pt))
- {
- RECT rect;
-
- if (GetWindowRect(FltInfo->hSelf,
- &rect))
- {
- if (!PtInRect(&rect,
- pt))
- {
- KillTimer(FltInfo->hSelf,
- ID_TIMER1);
- KillTimer(FltInfo->hSelf,
- ID_TIMER2);
-
- /* timer to fade out toolbar */
- SetTimer(FltInfo->hSelf,
- ID_TIMER3,
- 50,
- NULL);
- }
- }
- }
- }
- break;
-
- /* timer to fade in toolbar */
- case ID_TIMER2:
- {
- SetLayeredWindowAttributes(FltInfo->hSelf,
- 0,
- (255 * FltInfo->Transparancy) / 100,
- LWA_ALPHA);
-
- /* increment transparancy until it is opaque (100) */
- FltInfo->Transparancy += 5;
-
- if (FltInfo->Transparancy == 100)
- {
- SetWindowLongPtr(FltInfo->hSelf,
- GWL_EXSTYLE,
- GetWindowLongPtr(FltInfo->hSelf,
- GWL_EXSTYLE) & ~WS_EX_LAYERED);
-
- FltInfo->bOpaque = TRUE;
-
- KillTimer(FltInfo->hSelf,
- ID_TIMER2);
- }
- }
- break;
-
- case ID_TIMER3:
- {
- LONG_PTR Style;
-
- Style = GetWindowLongPtr(FltInfo->hSelf,
- GWL_EXSTYLE);
-
- if (Style & ~WS_EX_LAYERED)
- {
- SetWindowLongPtr(FltInfo->hSelf,
- GWL_EXSTYLE,
- Style | WS_EX_LAYERED);
- }
-
- FltInfo->Transparancy -= 5;
-
- if (FltInfo->Transparancy >= 60)
- {
- /* set the tranclucency to 60% */
- SetLayeredWindowAttributes(FltInfo->hSelf,
- 0,
- (255 * FltInfo->Transparancy) / 100,
- LWA_ALPHA);
-
- if (FltInfo->Transparancy == 60)
- {
- FltInfo->bOpaque = FALSE;
-
- KillTimer(FltInfo->hSelf,
- ID_TIMER3);
- }
-
- }
- }
- break;
- }
-}
-
-LRESULT CALLBACK
-FloatToolbarWndProc(HWND hwnd,
- UINT Message,
- WPARAM wParam,
- LPARAM lParam)
-{
- PFLT_WND FltInfo;
-
- /* Get the window context */
- FltInfo = (PFLT_WND)GetWindowLongPtr(hwnd,
- GWLP_USERDATA);
- if (FltInfo == NULL && Message != WM_CREATE)
- {
- goto HandleDefaultMessage;
- }
-
- switch(Message)
- {
- case WM_CREATE:
- {
- FltInfo = (PFLT_WND)(((LPCREATESTRUCT)lParam)->lpCreateParams);
-
- /*FIXME: read this from registry */
-// FltInfo->bShow = TRUE;
-
- SetWindowLongPtr(hwnd,
- GWLP_USERDATA,
- (LONG_PTR)FltInfo);
-
- FltInfo->bOpaque = FALSE;
-
- SetWindowLongPtr(hwnd,
- GWL_EXSTYLE,
- GetWindowLongPtr(hwnd,
- GWL_EXSTYLE) | WS_EX_LAYERED);
-
- /* set the tranclucency to 60% */
- FltInfo->Transparancy = 60;
- SetLayeredWindowAttributes(hwnd,
- 0,
- (255 * FltInfo->Transparancy) / 100,
- LWA_ALPHA);
- }
- break;
-
- case WM_TIMER:
- {
- DoTimer(FltInfo,
- wParam);
- }
- break;
-
- case WM_NCMOUSEMOVE:
- case WM_MOUSEMOVE:
- {
- if (FltInfo->bOpaque == FALSE)
- {
-
- RedrawWindow(hwnd,
- NULL,
- NULL,
- RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
-
- FltInfo->bOpaque = TRUE;
- //MessageBox(NULL, _T("in"), _T("Hit test"), MB_OK | MB_ICONEXCLAMATION);
-
- /* timer to check if cursor is in toolbar coords */
- SetTimer(hwnd,
- ID_TIMER1,
- 200,
- NULL);
-
- /* timer to fade in the toolbars */
- SetTimer(hwnd,
- ID_TIMER2,
- 50,
- NULL);
- }
- }
- break;
-
- case WM_CLOSE:
- ShowHideWindow(FltInfo->hSelf);
- break;
-
- case WM_COMMAND:
- {
- if (LOWORD(wParam) == IDCANCEL)
- ShowHideWindow(FltInfo->hSelf);
-
- switch(LOWORD(wParam))
- {
- case ID_NEW:
- MessageBox(hwnd, _T("Kapow!"), _T("Hit test"), MB_OK | MB_ICONEXCLAMATION);
- break;
-
- case ID_CLONESTAMP:
- case ID_COLORPICKER:
- case ID_ECLIPSE:
- case ID_ECLIPSESEL:
- case ID_ERASER:
- case ID_FREEFORM:
- case ID_LASOO:
- case ID_LINE:
- case ID_MAGICWAND:
- case ID_MOVE:
- case ID_MOVESEL:
- case ID_PAINTBRUSH:
- case ID_PAINTBUCKET:
- case ID_PENCIL:
- case ID_RECOLORING:
- case ID_RECTANGLE:
- case ID_ROUNDRECT:
- case ID_TEXT:
- case ID_ZOOM:
- /*SendMessage(Info->hSelf,
- LOWORD(wParam),
- wParam,
- lParam);*/
- break;
- }
- }
- break;
-
- case WM_NCACTIVATE:
- /* FIXME: needs fully implementing */
- return DefWindowProc(hwnd,
- Message,
- TRUE,
- lParam);
- break;
-
- case WM_DESTROY:
- SetWindowLongPtr(hwnd,
- GWLP_USERDATA,
- 0);
- break;
-
- default:
-HandleDefaultMessage:
- return DefWindowProc(hwnd,
- Message,
- wParam,
- lParam);
- }
-
- return 0;
-}
-
-
-BOOL
-InitFloatWndClass(VOID)
-{
- WNDCLASSEX wc = {0};
-
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = FloatToolbarWndProc;
- wc.hInstance = hInstance;
- wc.hIcon = NULL;
- wc.hCursor = LoadCursor(NULL,
- IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);
- wc.lpszClassName = szFloatWndClass;
- wc.hIconSm = NULL;
-
- return RegisterClassEx(&wc) != (ATOM)0;
-}
-
-VOID
-UninitFloatWndImpl(VOID)
-{
- UnregisterClass(szFloatWndClass,
- hInstance);
-}
-
-