Fix some bugs in Paint.
[reactos.git] / reactos / base / applications / paint / toolsettings.c
1 /*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL
4 * FILE: toolsettings.c
5 * PURPOSE: Window procedure of the tool settings window
6 * PROGRAMMERS: Benedikt Freisen
7 */
8
9 /* INCLUDES *********************************************************/
10
11 #include <windows.h>
12 #include "globalvar.h"
13 #include "drawing.h"
14
15 /* FUNCTIONS ********************************************************/
16
17 LRESULT CALLBACK SettingsWinProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
18 {
19 switch (message)
20 {
21 case WM_PAINT:
22 {
23 DefWindowProc (hwnd, message, wParam, lParam);
24
25 HDC hdc = GetDC(hwnd);
26
27 int rectang[4] = {0, 0, 42, 66};
28 DrawEdge(hdc, (LPRECT)&rectang, BDR_SUNKENOUTER, BF_RECT | BF_MIDDLE);
29 int rectang2[4] = {0, 70, 42, 136};
30 if (activeTool>=13)
31 DrawEdge(hdc, (LPRECT)&rectang2, BDR_SUNKENOUTER, BF_RECT | BF_MIDDLE);
32 else
33 DrawEdge(hdc, (LPRECT)&rectang2, 0, BF_RECT | BF_MIDDLE);
34 switch (activeTool)
35 {
36 case 1:
37 case 2:
38 case 10:
39 {
40 HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
41 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
42 Rectangle(hdc, 2, transpBg*31+2, 41, transpBg*31+33);
43 DeleteObject(SelectObject(hdc, oldPen));
44 DrawIconEx(hdc, 1, 2, hNontranspIcon, 40, 30, 0, NULL, DI_NORMAL);
45 DrawIconEx(hdc, 1, 33, hTranspIcon, 40, 30, 0, NULL, DI_NORMAL);
46 }
47 break;
48 case 3:
49 {
50 int i;
51 HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
52 for (i=0; i<4; i++)
53 {
54 if (rubberRadius==i+2)
55 {
56 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
57 Rectangle(hdc, 14, i*15+2, 29, i*15+17);
58 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHTTEXT));
59 } else SelectObject(hdc, GetSysColorBrush(COLOR_WINDOWTEXT));
60 Rectangle(hdc, 19-i, i*14+7, 24+i, i*16+12);
61 }
62 DeleteObject(SelectObject(hdc, oldPen));
63 }
64 break;
65 case 8:
66 {
67 HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
68 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
69 Rectangle(hdc, brushStyle%3*13+2, brushStyle/3*15+2, brushStyle%3*13+15, brushStyle/3*15+17);
70 DeleteObject(SelectObject(hdc, oldPen));
71 int i;
72 for (i=0; i<12; i++)
73 if (i==brushStyle)
74 Brush(hdc, i%3*13+7, i/3*15+8, i%3*13+7, i/3*15+8, GetSysColor(COLOR_HIGHLIGHTTEXT), i);
75 else
76 Brush(hdc, i%3*13+7, i/3*15+8, i%3*13+7, i/3*15+8, GetSysColor(COLOR_WINDOWTEXT), i);
77 }
78 break;
79 case 9:
80 {
81 HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
82 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
83 switch (airBrushWidth)
84 {
85 case 5:
86 Rectangle(hdc, 2, 2, 21, 31);
87 break;
88 case 8:
89 Rectangle(hdc, 20, 2, 41, 31);
90 break;
91 case 3:
92 Rectangle(hdc, 2, 30, 16, 61);
93 break;
94 case 12:
95 Rectangle(hdc, 15, 30, 41, 61);
96 break;
97 }
98 if (airBrushWidth==5)
99 Airbrush(hdc, 10, 15, GetSysColor(COLOR_HIGHLIGHTTEXT), 5);
100 else
101 Airbrush(hdc, 10, 15, GetSysColor(COLOR_WINDOWTEXT), 5);
102 if (airBrushWidth==8)
103 Airbrush(hdc, 30, 15, GetSysColor(COLOR_HIGHLIGHTTEXT), 8);
104 else
105 Airbrush(hdc, 30, 15, GetSysColor(COLOR_WINDOWTEXT), 8);
106 if (airBrushWidth==3)
107 Airbrush(hdc, 8, 45, GetSysColor(COLOR_HIGHLIGHTTEXT), 3);
108 else
109 Airbrush(hdc, 8, 45, GetSysColor(COLOR_WINDOWTEXT), 3);
110 if (airBrushWidth==12)
111 Airbrush(hdc, 27, 45, GetSysColor(COLOR_HIGHLIGHTTEXT), 12);
112 else
113 Airbrush(hdc, 27, 45, GetSysColor(COLOR_WINDOWTEXT), 12);
114 DeleteObject(SelectObject(hdc, oldPen));
115 }
116 break;
117 case 11:
118 case 12:
119 {
120 int i;
121 HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
122 for (i=0; i<5; i++)
123 {
124 if (lineWidth==i+1)
125 {
126 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
127 Rectangle(hdc, 2, i*12+2, 41, i*12+14);
128 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHTTEXT));
129 } else SelectObject(hdc, GetSysColorBrush(COLOR_WINDOWTEXT));
130 Rectangle(hdc, 5, i*12+6, 38, i*12+8+i);
131 }
132 DeleteObject(SelectObject(hdc, oldPen));
133 }
134 break;
135 case 13:
136 case 14:
137 case 15:
138 case 16:
139 {
140 int i;
141 HPEN oldPen = SelectObject(hdc, CreatePen(PS_NULL, 0, 0));
142 for (i=0; i<3; i++)
143 {
144 if (shapeStyle==i)
145 {
146 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
147 Rectangle(hdc, 2, i*20+2, 41, i*20+22);
148 }
149 }
150 if (shapeStyle==0)
151 Rect(hdc, 5, 6, 37, 16, GetSysColor(COLOR_HIGHLIGHTTEXT), GetSysColor(COLOR_APPWORKSPACE), 1, FALSE);
152 else
153 Rect(hdc, 5, 6, 37, 16, GetSysColor(COLOR_WINDOWTEXT), GetSysColor(COLOR_APPWORKSPACE), 1, FALSE);
154 if (shapeStyle==1)
155 Rect(hdc, 5, 26, 37, 36, GetSysColor(COLOR_HIGHLIGHTTEXT), GetSysColor(COLOR_APPWORKSPACE), 1, TRUE);
156 else
157 Rect(hdc, 5, 26, 37, 36, GetSysColor(COLOR_WINDOWTEXT), GetSysColor(COLOR_APPWORKSPACE), 1, TRUE);
158 Rect(hdc, 5, 46, 37, 56, GetSysColor(COLOR_APPWORKSPACE), GetSysColor(COLOR_APPWORKSPACE), 1, TRUE);
159 for (i=0; i<5; i++)
160 {
161 if (lineWidth==i+1)
162 {
163 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHT));
164 Rectangle(hdc, 2, i*12+72, 41, i*12+84);
165 SelectObject(hdc, GetSysColorBrush(COLOR_HIGHLIGHTTEXT));
166 } else SelectObject(hdc, GetSysColorBrush(COLOR_WINDOWTEXT));
167 Rectangle(hdc, 5, i*12+76, 38, i*12+78+i);
168 }
169 DeleteObject(SelectObject(hdc, oldPen));
170 }
171 break;
172 }
173 ReleaseDC(hwnd, hdc);
174 }
175 break;
176 case WM_LBUTTONDOWN:
177 {
178 switch (activeTool)
179 {
180 case 1:
181 case 2:
182 case 10:
183 if ((HIWORD(lParam)>1)&&(HIWORD(lParam)<64))
184 {
185 transpBg = (HIWORD(lParam)-2)/31;
186 SendMessage(hwnd, WM_PAINT, 0, 0);
187 }
188 break;
189 case 3:
190 if ((HIWORD(lParam)>1)&&(HIWORD(lParam)<62))
191 {
192 rubberRadius = (HIWORD(lParam)-2)/15+2;
193 SendMessage(hwnd, WM_PAINT, 0, 0);
194 }
195 break;
196 case 8:
197 if ((LOWORD(lParam)>1)&&(LOWORD(lParam)<40)&&(HIWORD(lParam)>1)&&(HIWORD(lParam)<62))
198 {
199 brushStyle = (HIWORD(lParam)-2)/15*3+(LOWORD(lParam)-2)/13;
200 SendMessage(hwnd, WM_PAINT, 0, 0);
201 }
202 break;
203 case 9:
204 if (HIWORD(lParam)<62)
205 {
206 if (HIWORD(lParam)<30)
207 {
208 if (LOWORD(lParam)<20) airBrushWidth=5; else airBrushWidth=8;
209 }else
210 {
211 if (LOWORD(lParam)<15) airBrushWidth=3; else airBrushWidth=12;
212 }
213 SendMessage(hwnd, WM_PAINT, 0, 0);
214 }
215 break;
216 case 11:
217 case 12:
218 if (HIWORD(lParam)<=62)
219 {
220 lineWidth = (HIWORD(lParam)-2)/12+1;
221 SendMessage(hwnd, WM_PAINT, 0, 0);
222 }
223 break;
224 case 13:
225 case 14:
226 case 15:
227 case 16:
228 if (HIWORD(lParam)<=60)
229 {
230 shapeStyle = (HIWORD(lParam)-2)/20;
231 SendMessage(hwnd, WM_PAINT, 0, 0);
232 }
233 if ((HIWORD(lParam)>=70)&&(HIWORD(lParam)<=132))
234 {
235 lineWidth = (HIWORD(lParam)-72)/12+1;
236 SendMessage(hwnd, WM_PAINT, 0, 0);
237 }
238 break;
239 }
240 }
241 break;
242
243 default:
244 return DefWindowProc (hwnd, message, wParam, lParam);
245 }
246
247 return 0;
248 }
249