# HG changeset patch # User "David Bryant " # Date 1281270414 -34200 # Node ID b190a9d9352ea3f22a521d15a7ac4a7c8cf5acf7 # Parent 4922e746dd76dcaaa0f72d1894e5abb955974631 Checkpoint diff -r 4922e746dd76 -r b190a9d9352e doodle/dia/standard_tools.d --- 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; diff -r 4922e746dd76 -r b190a9d9352e doodle/dia/tool.d --- 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 { } } diff -r 4922e746dd76 -r b190a9d9352e doodle/dia/tool_layer.d --- 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); } } diff -r 4922e746dd76 -r b190a9d9352e doodle/main/prog/doodler.d --- 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); +} diff -r 4922e746dd76 -r b190a9d9352e doodle/tk/palette.d --- 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; }