[CSRSS]
[reactos.git] / reactos / base / applications / mspaint / palette.c
1 /*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL
4 * FILE: base/applications/paint/palette.c
5 * PURPOSE: Window procedure of the palette window
6 * PROGRAMMERS: Benedikt Freisen
7 */
8
9 /* INCLUDES *********************************************************/
10
11 #include "precomp.h"
12
13 /* FUNCTIONS ********************************************************/
14
15 LRESULT CALLBACK
16 PalWinProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
17 {
18 switch (message)
19 {
20 case WM_PAINT:
21 {
22 RECT rc = { 0, 0, 31, 32 };
23 HDC hDC = GetDC(hwnd);
24 HPEN oldPen;
25 HBRUSH oldBrush;
26 int i, a, b;
27
28 DefWindowProc(hwnd, message, wParam, lParam);
29
30 for(b = 2; b < 30; b++)
31 for(a = 2; a < 29; a++)
32 if ((a + b) % 2 == 1)
33 SetPixel(hDC, a, b, GetSysColor(COLOR_BTNHILIGHT));
34
35 DrawEdge(hDC, &rc, EDGE_RAISED, BF_TOPLEFT);
36 DrawEdge(hDC, &rc, BDR_SUNKENOUTER, BF_TOPLEFT | BF_BOTTOMRIGHT);
37 SetRect(&rc, 11, 12, 26, 27);
38 DrawEdge(hDC, &rc, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
39 oldPen = SelectObject(hDC, CreatePen(PS_NULL, 0, 0));
40 oldBrush = SelectObject(hDC, CreateSolidBrush(bgColor));
41 Rectangle(hDC, rc.left, rc.top + 2, rc.right - 1, rc.bottom - 1);
42 DeleteObject(SelectObject(hDC, oldBrush));
43 SetRect(&rc, 4, 5, 19, 20);
44 DrawEdge(hDC, &rc, BDR_RAISEDINNER, BF_RECT | BF_MIDDLE);
45 oldBrush = SelectObject(hDC, CreateSolidBrush(fgColor));
46 Rectangle(hDC, rc.left + 2, rc.top + 2, rc.right - 1, rc.bottom - 1);
47 DeleteObject(SelectObject(hDC, oldBrush));
48 DeleteObject(SelectObject(hDC, oldPen));
49
50 for(i = 0; i < 28; i++)
51 {
52 SetRect(&rc, 31 + (i % 14) * 16,
53 0 + (i / 14) * 16, 16 + 31 + (i % 14) * 16, 16 + 0 + (i / 14) * 16);
54 DrawEdge(hDC, &rc, EDGE_RAISED, BF_TOPLEFT);
55 DrawEdge(hDC, &rc, BDR_SUNKENOUTER, BF_RECT);
56 oldPen = SelectObject(hDC, CreatePen(PS_NULL, 0, 0));
57 oldBrush = SelectObject(hDC, CreateSolidBrush(palColors[i]));
58 Rectangle(hDC, rc.left + 2, rc.top + 2, rc.right - 1, rc.bottom - 1);
59 DeleteObject(SelectObject(hDC, oldBrush));
60 DeleteObject(SelectObject(hDC, oldPen));
61 }
62 ReleaseDC(hwnd, hDC);
63 break;
64 }
65 case WM_LBUTTONDOWN:
66 if (LOWORD(lParam) >= 31)
67 {
68 fgColor = palColors[(LOWORD(lParam) - 31) / 16 + (HIWORD(lParam) / 16) * 14];
69 SendMessage(hwnd, WM_PAINT, 0, 0);
70 }
71 break;
72 case WM_RBUTTONDOWN:
73 if (LOWORD(lParam) >= 31)
74 {
75 bgColor = palColors[(LOWORD(lParam) - 31) / 16 + (HIWORD(lParam) / 16) * 14];
76 SendMessage(hwnd, WM_PAINT, 0, 0);
77 }
78 break;
79 case WM_LBUTTONDBLCLK:
80 if (LOWORD(lParam) >= 31)
81 if (ChooseColor(&choosecolor))
82 {
83 palColors[(LOWORD(lParam) - 31) / 16 + (HIWORD(lParam) / 16) * 14] =
84 choosecolor.rgbResult;
85 fgColor = choosecolor.rgbResult;
86 SendMessage(hwnd, WM_PAINT, 0, 0);
87 }
88 break;
89 case WM_RBUTTONDBLCLK:
90 if (LOWORD(lParam) >= 31)
91 if (ChooseColor(&choosecolor))
92 {
93 palColors[(LOWORD(lParam) - 31) / 16 + (HIWORD(lParam) / 16) * 14] =
94 choosecolor.rgbResult;
95 bgColor = choosecolor.rgbResult;
96 SendMessage(hwnd, WM_PAINT, 0, 0);
97 }
98 break;
99
100 default:
101 return DefWindowProc(hwnd, message, wParam, lParam);
102 }
103
104 return 0;
105 }