comparison dynamin/gui/windows_theme.d @ 52:d82c7e5b037b

Draw focus rectangles for buttons, check boxes, and radio buttons in WindowsTheme. Make a utility function to draw the rectangles.
author Jordan Miner <jminer7@gmail.com>
date Tue, 04 Aug 2009 21:02:35 -0500
parents aa4efef0f0b1
children c138461bf845
comparison
equal deleted inserted replaced
51:d5823ccfddc6 52:d82c7e5b037b
184 g.moveTo(x + i + 0.5, y + cy); 184 g.moveTo(x + i + 0.5, y + cy);
185 g.lineTo(x + i + 0.5, y + cy + 3); 185 g.lineTo(x + i + 0.5, y + cy + 3);
186 g.stroke(); 186 g.stroke();
187 } 187 }
188 } 188 }
189 /// draws a dotted focus rectangle
190 void drawFocus(Graphics g, int colorIndex, real x, real y, real w, real h) {
191 g.lineWidth = 1;
192 g.source = getColor(colorIndex);
193 g.setDash([1, 1], 0.5);
194 g.rectangle(x, y, w, h);
195 g.stroke();
196 }
189 //}}} 197 //}}}
190 198
191 string name() { 199 string name() {
192 return "Windows"; 200 return "Windows";
193 } 201 }
206 version(Windows) { 214 version(Windows) {
207 if(Ux.isThemeActive()) { 215 if(Ux.isThemeActive()) {
208 auto uxState = findUxState(c, PBS_DISABLED, PBS_NORMAL, PBS_HOT, PBS_PRESSED); 216 auto uxState = findUxState(c, PBS_DISABLED, PBS_NORMAL, PBS_HOT, PBS_PRESSED);
209 Ux.drawBackground(g, Rect(0, 0, c.width, c.height), "BUTTON", BP_PUSHBUTTON, uxState); 217 Ux.drawBackground(g, Rect(0, 0, c.width, c.height), "BUTTON", BP_PUSHBUTTON, uxState);
210 218
219 if(c.focused)
220 drawFocus(g, COLOR_WINDOWTEXT, 3.5, 3.5, c.width-7, c.height-7);
211 g.source = getColor(COLOR_WINDOWTEXT); 221 g.source = getColor(COLOR_WINDOWTEXT);
212 c.paintFore(g); 222 c.paintFore(g);
213 return; 223 return;
214 } 224 }
215 } 225 }
224 draw3dRectangle(g, 0, 0, c.width, c.height, 234 draw3dRectangle(g, 0, 0, c.width, c.height,
225 getColor(COLOR_3DHIGHLIGHT), getColor(COLOR_3DDKSHADOW)); 235 getColor(COLOR_3DHIGHLIGHT), getColor(COLOR_3DDKSHADOW));
226 draw3dRectangle(g, 1, 1, c.width-2, c.height-2, 236 draw3dRectangle(g, 1, 1, c.width-2, c.height-2,
227 getColor(COLOR_3DLIGHT), getColor(COLOR_3DSHADOW)); 237 getColor(COLOR_3DLIGHT), getColor(COLOR_3DSHADOW));
228 } 238 }
229 if(c.focused) { 239 if(c.focused)
230 g.source = getColor(COLOR_WINDOWTEXT); 240 drawFocus(g, COLOR_WINDOWTEXT, 3.5, 3.5, c.width-7, c.height-7);
231 g.setDash([1, 1], 0.5);
232 g.rectangle(3.5, 3.5, c.width-7, c.height-7);
233 g.stroke();
234 }
235 g.source = getColor(COLOR_WINDOWTEXT); 241 g.source = getColor(COLOR_WINDOWTEXT);
236 c.paintFore(g); 242 c.paintFore(g);
237 } 243 }
238 //}}} 244 //}}}
239 245
247 } else { 253 } else {
248 uxState = findUxState(c, CBS_UNCHECKEDDISABLED, CBS_UNCHECKEDNORMAL, CBS_UNCHECKEDHOT, CBS_UNCHECKEDPRESSED); 254 uxState = findUxState(c, CBS_UNCHECKEDDISABLED, CBS_UNCHECKEDNORMAL, CBS_UNCHECKEDHOT, CBS_UNCHECKEDPRESSED);
249 } 255 }
250 Ux.drawBackground(g, Rect(0, 0, 13, c.height), "BUTTON", BP_CHECKBOX, uxState); 256 Ux.drawBackground(g, Rect(0, 0, 13, c.height), "BUTTON", BP_CHECKBOX, uxState);
251 257
258 if(c.focused)
259 drawFocus(g, COLOR_WINDOWTEXT,
260 15.5, 0.5, c.width-16, c.height-1);
252 g.source = getColor(COLOR_WINDOWTEXT); 261 g.source = getColor(COLOR_WINDOWTEXT);
253 g.translate(15, 0); 262 g.translate(16, 0);
254 c.paintFore(g); 263 c.paintFore(g);
255 return; 264 return;
256 } 265 }
257 } 266 }
258 267
270 279
271 if(c.checked) 280 if(c.checked)
272 drawCheck(g, 3, 3); 281 drawCheck(g, 3, 3);
273 // drawCheck(g, 0, 0, 13, 13); 282 // drawCheck(g, 0, 0, 13, 13);
274 283
284 if(c.focused)
285 drawFocus(g, COLOR_WINDOWTEXT, 15.5, 0.5, c.width-16, c.height-1);
275 g.source = getColor(COLOR_WINDOWTEXT); 286 g.source = getColor(COLOR_WINDOWTEXT);
276 g.translate(15, 0); 287 g.translate(16, 0);
277 c.paintFore(g); 288 c.paintFore(g);
278 } 289 }
279 //}}} 290 //}}}
280 291
281 //{{{ RadioButton 292 //{{{ RadioButton
288 } else { 299 } else {
289 uxState = findUxState(c, RBS_UNCHECKEDDISABLED, RBS_UNCHECKEDNORMAL, RBS_UNCHECKEDHOT, RBS_UNCHECKEDPRESSED); 300 uxState = findUxState(c, RBS_UNCHECKEDDISABLED, RBS_UNCHECKEDNORMAL, RBS_UNCHECKEDHOT, RBS_UNCHECKEDPRESSED);
290 } 301 }
291 Ux.drawBackground(g, Rect(0, 0, 13, c.height), "BUTTON", BP_RADIOBUTTON, uxState); 302 Ux.drawBackground(g, Rect(0, 0, 13, c.height), "BUTTON", BP_RADIOBUTTON, uxState);
292 303
304 if(c.focused)
305 drawFocus(g, COLOR_WINDOWTEXT,
306 15.5, 0.5, c.width-16, c.height-1);
293 g.source = getColor(COLOR_WINDOWTEXT); 307 g.source = getColor(COLOR_WINDOWTEXT);
294 g.translate(15, 0); 308 g.translate(16, 0);
295 c.paintFore(g); 309 c.paintFore(g);
296 return; 310 return;
297 } 311 }
298 } 312 }
299 313
345 g.rectangle(1, 3, 2, 1); 359 g.rectangle(1, 3, 2, 1);
346 g.fill(); 360 g.fill();
347 g.translate(-4, -4); 361 g.translate(-4, -4);
348 } 362 }
349 363
364 if(c.focused)
365 drawFocus(g, COLOR_WINDOWTEXT, 15.5, 0.5, c.width-16, c.height-1);
350 g.source = getColor(COLOR_WINDOWTEXT); 366 g.source = getColor(COLOR_WINDOWTEXT);
351 g.translate(15, 0); 367 g.translate(16, 0);
352 c.paintFore(g); 368 c.paintFore(g);
353 } 369 }
354 //}}} 370 //}}}
355 371
356 //{{{ ScrollBar 372 //{{{ ScrollBar