changeset 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 d5823ccfddc6
children 6e33b00595e9
files dynamin/gui/windows_theme.d
diffstat 1 files changed, 26 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/dynamin/gui/windows_theme.d	Tue Aug 04 20:59:38 2009 -0500
+++ b/dynamin/gui/windows_theme.d	Tue Aug 04 21:02:35 2009 -0500
@@ -186,6 +186,14 @@
 			g.stroke();
 		}
 	}
+	/// draws a dotted focus rectangle
+	void drawFocus(Graphics g, int colorIndex, real x, real y, real w, real h) {
+		g.lineWidth = 1;
+		g.source = getColor(colorIndex);
+		g.setDash([1, 1], 0.5);
+		g.rectangle(x, y, w, h);
+		g.stroke();
+	}
 	//}}}
 
 	string name() {
@@ -208,6 +216,8 @@
 			auto uxState = findUxState(c, PBS_DISABLED, PBS_NORMAL, PBS_HOT, PBS_PRESSED);
 			Ux.drawBackground(g, Rect(0, 0, c.width, c.height), "BUTTON", BP_PUSHBUTTON, uxState);
 
+			if(c.focused)
+				drawFocus(g, COLOR_WINDOWTEXT, 3.5, 3.5, c.width-7, c.height-7);
 			g.source = getColor(COLOR_WINDOWTEXT);
 			c.paintFore(g);
 			return;
@@ -226,12 +236,8 @@
 			draw3dRectangle(g, 1, 1, c.width-2, c.height-2,
 				getColor(COLOR_3DLIGHT), getColor(COLOR_3DSHADOW));
 		}
-		if(c.focused) {
-			g.source = getColor(COLOR_WINDOWTEXT);
-			g.setDash([1, 1], 0.5);
-			g.rectangle(3.5, 3.5, c.width-7, c.height-7);
-			g.stroke();
-		}
+		if(c.focused)
+			drawFocus(g, COLOR_WINDOWTEXT, 3.5, 3.5, c.width-7, c.height-7);
 		g.source = getColor(COLOR_WINDOWTEXT);
 		c.paintFore(g);
 	}
@@ -249,8 +255,11 @@
 			}
 			Ux.drawBackground(g, Rect(0, 0, 13, c.height), "BUTTON", BP_CHECKBOX, uxState);
 
+			if(c.focused)
+				drawFocus(g, COLOR_WINDOWTEXT,
+					15.5, 0.5, c.width-16, c.height-1);
 			g.source = getColor(COLOR_WINDOWTEXT);
-			g.translate(15, 0);
+			g.translate(16, 0);
 			c.paintFore(g);
 			return;
 		}
@@ -272,8 +281,10 @@
 			drawCheck(g, 3, 3);
 		//	drawCheck(g, 0, 0, 13, 13);
 
+		if(c.focused)
+			drawFocus(g, COLOR_WINDOWTEXT, 15.5, 0.5, c.width-16, c.height-1);
 		g.source = getColor(COLOR_WINDOWTEXT);
-		g.translate(15, 0);
+		g.translate(16, 0);
 		c.paintFore(g);
 	}
 	//}}}
@@ -290,8 +301,11 @@
 			}
 			Ux.drawBackground(g, Rect(0, 0, 13, c.height), "BUTTON", BP_RADIOBUTTON, uxState);
 
+			if(c.focused)
+				drawFocus(g, COLOR_WINDOWTEXT,
+					15.5, 0.5, c.width-16, c.height-1);
 			g.source = getColor(COLOR_WINDOWTEXT);
-			g.translate(15, 0);
+			g.translate(16, 0);
 			c.paintFore(g);
 			return;
 		}
@@ -347,8 +361,10 @@
 			g.translate(-4, -4);
 		}
 
+		if(c.focused)
+			drawFocus(g, COLOR_WINDOWTEXT, 15.5, 0.5, c.width-16, c.height-1);
 		g.source = getColor(COLOR_WINDOWTEXT);
-		g.translate(15, 0);
+		g.translate(16, 0);
 		c.paintFore(g);
 	}
 	//}}}