Mercurial > projects > dynamin
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 |