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