2 * PROJECT: PAINT for ReactOS
4 * FILE: base/applications/paint/palette.c
5 * PURPOSE: Window procedure of the palette window
6 * PROGRAMMERS: Benedikt Freisen
9 /* INCLUDES *********************************************************/
14 /* FUNCTIONS ********************************************************/
20 /* initializing and registering the window class used for the palette window */
21 wclPal
.hInstance
= hProgInstance
;
22 wclPal
.lpszClassName
= _T("Palette");
23 wclPal
.lpfnWndProc
= PalWinProc
;
24 wclPal
.style
= CS_DBLCLKS
;
25 wclPal
.cbSize
= sizeof(WNDCLASSEX
);
27 wclPal
.hIconSm
= NULL
;
28 wclPal
.hCursor
= LoadCursor(NULL
, IDC_ARROW
);
29 wclPal
.lpszMenuName
= NULL
;
30 wclPal
.cbClsExtra
= 0;
31 wclPal
.cbWndExtra
= 0;
32 wclPal
.hbrBackground
= GetSysColorBrush(COLOR_BTNFACE
);
33 RegisterClassEx (&wclPal
);
37 PalWinProc(HWND hwnd
, UINT message
, WPARAM wParam
, LPARAM lParam
)
43 RECT rc
= { 0, 0, 31, 32 };
44 HDC hDC
= GetDC(hwnd
);
49 DefWindowProc(hwnd
, message
, wParam
, lParam
);
51 for(b
= 2; b
< 30; b
++)
52 for(a
= 2; a
< 29; a
++)
54 SetPixel(hDC
, a
, b
, GetSysColor(COLOR_BTNHILIGHT
));
56 DrawEdge(hDC
, &rc
, EDGE_RAISED
, BF_TOPLEFT
);
57 DrawEdge(hDC
, &rc
, BDR_SUNKENOUTER
, BF_TOPLEFT
| BF_BOTTOMRIGHT
);
58 SetRect(&rc
, 11, 12, 26, 27);
59 DrawEdge(hDC
, &rc
, BDR_RAISEDINNER
, BF_RECT
| BF_MIDDLE
);
60 oldPen
= SelectObject(hDC
, CreatePen(PS_NULL
, 0, 0));
61 oldBrush
= SelectObject(hDC
, CreateSolidBrush(bgColor
));
62 Rectangle(hDC
, rc
.left
, rc
.top
+ 2, rc
.right
- 1, rc
.bottom
- 1);
63 DeleteObject(SelectObject(hDC
, oldBrush
));
64 SetRect(&rc
, 4, 5, 19, 20);
65 DrawEdge(hDC
, &rc
, BDR_RAISEDINNER
, BF_RECT
| BF_MIDDLE
);
66 oldBrush
= SelectObject(hDC
, CreateSolidBrush(fgColor
));
67 Rectangle(hDC
, rc
.left
+ 2, rc
.top
+ 2, rc
.right
- 1, rc
.bottom
- 1);
68 DeleteObject(SelectObject(hDC
, oldBrush
));
69 DeleteObject(SelectObject(hDC
, oldPen
));
71 for(i
= 0; i
< 28; i
++)
73 SetRect(&rc
, 31 + (i
% 14) * 16,
74 0 + (i
/ 14) * 16, 16 + 31 + (i
% 14) * 16, 16 + 0 + (i
/ 14) * 16);
75 DrawEdge(hDC
, &rc
, EDGE_RAISED
, BF_TOPLEFT
);
76 DrawEdge(hDC
, &rc
, BDR_SUNKENOUTER
, BF_RECT
);
77 oldPen
= SelectObject(hDC
, CreatePen(PS_NULL
, 0, 0));
78 oldBrush
= SelectObject(hDC
, CreateSolidBrush(palColors
[i
]));
79 Rectangle(hDC
, rc
.left
+ 2, rc
.top
+ 2, rc
.right
- 1, rc
.bottom
- 1);
80 DeleteObject(SelectObject(hDC
, oldBrush
));
81 DeleteObject(SelectObject(hDC
, oldPen
));
87 if (GET_X_LPARAM(lParam
) >= 31)
89 fgColor
= palColors
[(GET_X_LPARAM(lParam
) - 31) / 16 + (GET_Y_LPARAM(lParam
) / 16) * 14];
90 InvalidateRect(hwnd
, NULL
, FALSE
);
92 ForceRefreshSelectionContents();
96 if (GET_X_LPARAM(lParam
) >= 31)
98 bgColor
= palColors
[(GET_X_LPARAM(lParam
) - 31) / 16 + (GET_Y_LPARAM(lParam
) / 16) * 14];
99 InvalidateRect(hwnd
, NULL
, FALSE
);
100 if (activeTool
== 10)
101 ForceRefreshSelectionContents();
104 case WM_LBUTTONDBLCLK
:
105 if (GET_X_LPARAM(lParam
) >= 31)
106 if (ChooseColor(&choosecolor
))
108 palColors
[(GET_X_LPARAM(lParam
) - 31) / 16 + (GET_Y_LPARAM(lParam
) / 16) * 14] =
109 choosecolor
.rgbResult
;
110 fgColor
= choosecolor
.rgbResult
;
111 InvalidateRect(hwnd
, NULL
, FALSE
);
112 if (activeTool
== 10)
113 ForceRefreshSelectionContents();
116 case WM_RBUTTONDBLCLK
:
117 if (GET_X_LPARAM(lParam
) >= 31)
118 if (ChooseColor(&choosecolor
))
120 palColors
[(GET_X_LPARAM(lParam
) - 31) / 16 + (GET_Y_LPARAM(lParam
) / 16) * 14] =
121 choosecolor
.rgbResult
;
122 bgColor
= choosecolor
.rgbResult
;
123 InvalidateRect(hwnd
, NULL
, FALSE
);
124 if (activeTool
== 10)
125 ForceRefreshSelectionContents();
130 return DefWindowProc(hwnd
, message
, wParam
, lParam
);