changeset 19:e4dabffaa784

Add silver theme, which was referred to, but missing in last commit.
author Jordan Miner <jminer7@gmail.com>
date Fri, 24 Jul 2009 00:40:31 -0500
parents 836a064828e8
children 63cbfb167240
files dynamin/gui/silver_theme.d
diffstat 1 files changed, 207 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dynamin/gui/silver_theme.d	Fri Jul 24 00:40:31 2009 -0500
@@ -0,0 +1,207 @@
+// Written in the D programming language
+// www.digitalmars.com/d/
+
+/*
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Dynamin library.
+ *
+ * The Initial Developer of the Original Code is Jordan Miner.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Jordan Miner <jminer7@gmail.com>
+ *
+ */
+
+module dynamin.gui.silver_theme;
+
+import dynamin.core.string;
+import dynamin.all_painting;
+import dynamin.all_gui;
+import dynamin.core.math;
+import dynamin.c.cairo;
+
+static this() {
+	Theme.add(new SilverTheme());
+}
+
+/*
+ * Colors used in this theme:
+ * - Silver (192, 192, 192)
+ * - Light Silver (220, 220, 220)
+ * - Dark Silver (170, 170, 170)
+ * - (150, 150, 150)
+ */
+class SilverTheme : Theme {
+	string name() {
+		return "Silver";
+	}
+
+	void Window_paint(Window c, Graphics g) {
+		g.source = Color.Silver;
+		g.paint();
+	}
+	Size Button_bestSize(Button c) {
+		return Size(70, 25);
+	}
+
+	private Color _silver = Color(192, 192, 192);
+	private Color _lightSilver = Color(220, 220, 220);
+	private Color _darkSilver = Color(170, 170, 170);
+	private Color _gray = Color(150, 150, 150);
+	private Color _black = Color(0, 0, 0);
+	private Color _white = Color(255, 255, 255);
+	//{{{ common
+	void drawButtonBack(Graphics g, real x, real y, real width, real height, ButtonState state) {
+		with(g) {
+			if(state == ButtonState.Normal)
+				source = _silver;
+			else if(state == ButtonState.Hot) {
+				auto grad = cairo_pattern_create_radial(width/2, height, 0,
+					width/2, height, height);
+				cairo_pattern_add_color_stop_rgb(grad, 0, 0.863, 0.863, 0.863);
+				cairo_pattern_add_color_stop_rgb(grad, 1, 0.753, 0.753, 0.753);
+				cairo_set_source(handle, grad);
+			} else if(state == ButtonState.Pressed)
+				source = _darkSilver;
+			roundedRectangle(x+0.5, y+0.5, width-1, height-1, 2);
+			fill();
+
+			if(state == ButtonState.Normal)
+				source = _lightSilver;
+			else if(state == ButtonState.Hot)
+				source = _white;
+			else if(state == ButtonState.Pressed)
+				source = _gray;
+			roundedRectangle(x+0.5, y+0.5, width-1, height-1, 2);
+			stroke();
+		}
+	}
+	//}}}
+
+	void Button_paint(Button c, Graphics g) {
+		with(g) {
+			drawButtonBack(g, 0, 0, c.width, c.height, c.state);
+			source = _black;
+			c.paintFore(g);
+		}
+	}
+
+	void CheckBox_paint(CheckBox c, Graphics g) {
+		with(g) {
+			Point box = Point(2, cast(int)(c.height/2-6));
+			fontSize = 13;
+			drawText(c.text, box.x+18, 2);
+
+			source = c.state == ButtonState.Pressed ? Color.Black : Color.White;
+			rectangle(box.x, box.y, 13, 13);
+			fill();
+			source = Color.Black;
+			rectangle(box.x+0.5, box.y+0.5, 12, 12);
+			stroke();
+			if(c.state == ButtonState.Hot) {
+				rectangle(box.x+1.5, box.y+1.5, 10, 10);
+				stroke();
+			}
+
+			source = c.state == ButtonState.Pressed ? Color.White : Color.Black;
+			if(c.checked) {
+				moveTo(box.x+2.5, box.y+7.5);
+				relLineTo(2, 3);
+				relLineTo(6, -8);
+				stroke();
+			}
+		}
+	}
+	void RadioButton_paint(CheckBox c, Graphics g) {
+		with(g) {
+			int radius = 6;
+			Point circle = Point(2, cast(int)(c.height/2-radius));
+			fontSize = 13;
+			drawText(c.text, circle.x+18, 2);
+
+			source = c.state == ButtonState.Pressed ? Color.Black : Color.White;
+			ellipse(circle.x+radius, circle.y+radius, radius);
+			fill();
+			source = Color.Black;
+			if(c.state == ButtonState.Hot) {
+				lineWidth = 2;
+				ellipse(circle.x+radius, circle.y+radius, radius-1);
+			} else {
+				ellipse(circle.x+radius, circle.y+radius, radius-0.5);
+			}
+			stroke();
+			lineWidth = 1;
+
+			source = c.state == ButtonState.Pressed ? Color.White : Color.Black;
+			if(c.checked) {
+				ellipse(circle.x+radius, circle.y+radius, radius-4);
+				fill();
+			}
+		}
+	}
+
+	void ScrollBarTrack_paint(ScrollBarTrack c, Graphics g) {
+		if(c.state == ButtonState.Pressed)
+			g.paint();
+		else if(isOdd(cast(int)round(c.x)) || isOdd(cast(int)round(c.y)))
+			drawCheckerboard(g, 0, 0, c.width, c.height,
+				Color.White, Color.Black);
+		else
+			drawCheckerboard(g, 0, 0, c.width, c.height,
+				Color.Black, Color.White);
+	}
+
+	void ScrollBarThumb_paint(ScrollBarThumb c, Graphics g) {
+		with(g) {
+			source = Color.White;
+			paint();
+			source = Color.Black;
+			rectangle(0.5, 0.5, c.width-1, c.height-1);
+			stroke();
+		}
+	}
+
+	real ScrollBar_size() {
+		// TODO: all themes should get this from SystemGui.ScrollBarSize
+		return 18;
+	}
+
+	void ArrowButton_paint(ArrowButton c, Graphics g) {
+		Button_paint(c, g);
+	}
+
+	BorderSize Scrollable_borderSize(Scrollable c) {
+		return BorderSize(1, 1, 1, 1);
+	}
+
+	void Scrollable_paint(Scrollable c, Graphics g) {
+		g.source = Color.White;
+		g.paint();
+		g.source = Color.Black;
+		g.rectangle(0.5, 0.5, c.width-0.5, c.height-0.5);
+		g.stroke();
+	}
+
+	BorderSize Notebook_borderSize(Notebook c) {
+		return BorderSize(1, 1, 1, 1);
+	}
+	void Tab_paint(TabPage page, Notebook c, Graphics g){
+		g.translate(page.tabLocation);
+		g.drawText(page.text, 5, (page.tabSize.height-g.getTextExtents(page.text).height)/2);
+		g.translate(-page.tabLocation);
+	}
+	void Notebook_paint(Notebook c, Graphics g){}
+
+}
+