changeset 56:b190a9d9352e

Checkpoint
author "David Bryant <bagnose@gmail.com>"
date Sun, 08 Aug 2010 21:56:54 +0930
parents 4922e746dd76
children 9960c4fbd0dd
files doodle/dia/standard_tools.d doodle/dia/tool.d doodle/dia/tool_layer.d doodle/main/prog/doodler.d doodle/tk/palette.d
diffstat 5 files changed, 73 insertions(+), 44 deletions(-) [+]
line wrap: on
line diff
--- a/doodle/dia/standard_tools.d	Sun Aug 08 21:37:38 2010 +0930
+++ b/doodle/dia/standard_tools.d	Sun Aug 08 21:56:54 2010 +0930
@@ -91,7 +91,7 @@
     }
 }
 
-final class LassoTool : Tool {      // TODO convert to SelectTool
+final class SelectTool : Tool {
     override bool handleButtonPress(scope Viewport viewport, in ButtonEvent event) {
         if (event.button_name == ButtonName.LEFT) {
             _active = true;
@@ -127,21 +127,21 @@
     }
 
     override void draw(in Viewport viewport,
-                       in Rectangle pixelDamage, scope Context pixelCr,
-                       in Rectangle modelDamage, scope Context modelCr) const {
+                       in Rectangle pixelDamage, scope Context pixelCr) const {
         if (_active) {
+            /*
             pixelCr.save; {
                 pixelCr.setSourceRgba(0.0, 0.0, 0.8, 0.3);
                 rectangle(pixelCr, Rectangle(_currentPoint, _anchorPoint));
                 pixelCr.fill();
             } pixelCr.restore();
+            */
 
             pixelCr.save(); {
-                //double[] dashes = [ 4.0, 4.0 ];
-                //pixelCr.setDash(dashes, 0.0);
+                double[] dashes = [ 4.0, 4.0 ];
+                pixelCr.setDash(dashes, 0.0);
                 pixelCr.setSourceRgba(0.0, 0.0, 0.5, 1.0);
                 pixelCr.setLineWidth(LINE_WIDTH);
-                //writefln("Drawing rectangle: %s", Rectangle(_currentPoint, _anchorPoint));
                 rectangle(pixelCr, Rectangle(_currentPoint, _anchorPoint));
                 pixelCr.stroke;
             } pixelCr.restore;
--- a/doodle/dia/tool.d	Sun Aug 08 21:37:38 2010 +0930
+++ b/doodle/dia/tool.d	Sun Aug 08 21:56:54 2010 +0930
@@ -44,6 +44,5 @@
     bool handleKeyRelease(scope Viewport viewport, in KeyEvent event) { return false; }
 
     void draw(in Viewport viewport,
-              in Rectangle pixelDamage, scope Context pixelCr,
-              in Rectangle modelDamage, scope Context modelCr) const { }
+              in Rectangle pixelDamage, scope Context pixelCr) const { }
 }
--- a/doodle/dia/tool_layer.d	Sun Aug 08 21:37:38 2010 +0930
+++ b/doodle/dia/tool_layer.d	Sun Aug 08 21:56:54 2010 +0930
@@ -9,7 +9,10 @@
     import doodle.cairo.routines;
 }
 
-class ToolLayer : Layer, EventHandler {
+interface ToolStack {
+}
+
+class ToolLayer : Layer, EventHandler, ToolStack {
     this(in Tool[] tools, in string name) {
         super(name);
         _tools = tools.dup;
@@ -24,9 +27,8 @@
     override void draw(const Viewport viewport,
                        in Rectangle pixelDamage, scope Context pixelCr,
                        in Rectangle modelDamage, scope Context modelCr) const {
-        // FIXME this isn't how we will really draw the tools...
-        foreach (const Tool tool; _tools) {
-            tool.draw(viewport, pixelDamage, pixelCr, modelDamage, modelCr);
+        if (_grabbedTool) {
+            _grabbedTool.draw(viewport, pixelDamage, pixelCr);
         }
     }
 
--- a/doodle/main/prog/doodler.d	Sun Aug 08 21:37:38 2010 +0930
+++ b/doodle/main/prog/doodler.d	Sun Aug 08 21:56:54 2010 +0930
@@ -18,43 +18,68 @@
     import std.stdio;
 }
 
-void main(string[] args) {
-    void paletteCallback(int index) {
-        writefln("Callback %s", index);
-    }
+class TopLevel {
+    this(string[] args) {
+        Main.init(args);
+        auto window = new MainWindow("Doodle");
+        auto vbox = new VBox(false, 0);
 
-    Main.init(args);
-    auto window = new MainWindow("Doodle");
-    auto vbox = new VBox(false, 0);
-
-    auto palette = new Palette;
-    IPalette.Item[] items =
-        [
-        { "select.svg", "Select", &paletteCallback },
-        { "rectangle.svg", "Rectangle", &paletteCallback },
-        { "ellipse.svg", "Ellipse", &paletteCallback },
-        { "polyline.svg", "Polyline", &paletteCallback }
+        auto palette = new Palette;
+        IPalette.Item[] items = [
+        { "select.svg",    "Select",    "Select and modify elements", &paletteCallback },
+        { "rectangle.svg", "Rectangle", "Create rectangle",           &paletteCallback },
+        { "ellipse.svg",   "Ellipse",   "Create ellipse",             &paletteCallback },
+        { "polyline.svg",  "Polyline",  "Create polyline",            &paletteCallback }
         ];
         palette.configure(items);
-    vbox.packStart(palette, false, false, 0);
+        vbox.packStart(palette, false, false, 0);
+
+        Tool[] tools;
+        tools ~= new PanTool;
+        tools ~= new ZoomTool;
+        tools ~= new SelectTool;
+        auto toolLayer = new ToolLayer(tools, "Tools");
+        _toolStack = toolLayer;
+
+        auto gridLayer = new GridLayer("Grid");
 
-    Tool[] tools;
-    tools ~= new PanTool;
-    tools ~= new ZoomTool;
-    tools ~= new LassoTool;
-    auto toolLayer = new ToolLayer(tools, "Tools");
+        Layer[] layers;
+        layers ~= new PageLayer("Page");
+        layers ~= gridLayer;
+        layers ~= toolLayer;
+        auto canvas = new Canvas(layers, toolLayer, gridLayer, 120.0);
 
-    auto gridLayer = new GridLayer("Grid");
+        vbox.packStart(canvas, true, true, 0);
+        window.add(vbox);
+        window.setDefaultSize(640, 580);
+        window.showAll();
+        Main.run();
+    }
 
-    Layer[] layers;
-    layers ~= new PageLayer("Page");
-    layers ~= gridLayer;
-    layers ~= toolLayer;
-    auto canvas = new Canvas(layers, toolLayer, gridLayer, 120.0);
+    private {
+        ToolStack _toolStack;
 
-    vbox.packStart(canvas, true, true, 0);
-    window.add(vbox);
-    window.setDefaultSize(640, 580);
-    window.showAll();
-    Main.run();
+        void paletteCallback(int index) {
+            switch (index) {
+            case 0:
+                // Select
+                break;
+            case 1:
+                // Rectangle
+                break;
+            case 2:
+                // Ellipse
+                break;
+            case 3:
+                // Polyline
+                break;
+            default:
+                assert(0);
+            }
+        }
+    }
 }
+
+void main(string[] args) {
+    new TopLevel(args);
+}
--- a/doodle/tk/palette.d	Sun Aug 08 21:37:38 2010 +0930
+++ b/doodle/tk/palette.d	Sun Aug 08 21:56:54 2010 +0930
@@ -1,8 +1,11 @@
 module doodle.tk.palette;
 
+// XXX Not sure whether to use delegates or observer pattern...
+
 interface IPalette {
     struct Item {
         string iconPath;
+        string labelText;
         string tooltipText;
         void delegate(int) callback;
     }