Mercurial > projects > doodle
changeset 54:30ecedfe2ce2
Partial palette support
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 08 Aug 2010 21:07:47 +0930 |
parents | fbabd1957c89 |
children | 4922e746dd76 |
files | doodle/fig/diagram_elements.d doodle/fig/diagram_layer.d doodle/fig/fig.d doodle/fig/fig_layer.d doodle/gtk/canvas.d doodle/gtk/palette.d doodle/main/prog/doodler.d doodle/tk/palette.d |
diffstat | 8 files changed, 150 insertions(+), 105 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doodle/fig/diagram_elements.d Sun Aug 08 21:07:47 2010 +0930 @@ -0,0 +1,60 @@ +module doodle.fig.diagram_elements; + +private { + import doodle.tk.geometry; + import doodle.cairo.routines; +} + +abstract class DiagramElement { + Rectangle bounds() const; + + void draw(in Rectangle damage, scope Context cr) const; + + private { + GraphElement _container; + } +} + +abstract class SemanticModelBridge { +}; + +abstract class GraphElement : DiagramElement { + // Link to model via bridge goes here + private { + SemanticModelBridge _modelBridge; + GraphConnector[] _anchorages; + } +} + +final class GraphConnector { +} + +final class GraphNode : GraphElement { +} + +final class GraphEdge : GraphElement { + private { + GraphConnector[2] _anchors; + } +} + +abstract class LeafElement : DiagramElement { +} + +final class TextElement : LeafElement { +} + +abstract class GraphicPrimitive : LeafElement { +} + +final class PolylinePrimitive : GraphicPrimitive { + private { + Point[] _waypoints; + } +} + +final class RectanglePrimitive : GraphicPrimitive { + override void draw(in Rectangle damage, scope Context cr) const { + rectangle(cr, bounds); + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doodle/fig/diagram_layer.d Sun Aug 08 21:07:47 2010 +0930 @@ -0,0 +1,39 @@ +module doodle.fig.diagram_layer; + +public { + import doodle.dia.icanvas; + import doodle.fig.diagram_elements; + import std.array; +} + +class DiagramLayer : Layer { + this(in string name) { + super(name); + } + + void add(DiagramElement element) { + _elements ~= element; + } + + // Layer overrides: + + override Rectangle bounds() const { + return Rectangle.DEFAULT; + } + + override void draw(in Viewport viewport, + in Rectangle pixelDamage, scope Context pixelCr, + in Rectangle modelDamage, scope Context modelCr) const { + foreach (e; _elements) { + if ((e.bounds & modelDamage).valid) { + e.draw(modelDamage, modelCr); + } + } + } + + private { + // Root elements in z-buffer order, ie we draw in forward + // order thru the array + DiagramElement[] _elements; + } +}
--- a/doodle/fig/fig.d Fri Aug 06 09:38:36 2010 +0930 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -module doodle.fig.fig; - -private { - import doodle.tk.geometry; - import cairo.Context; -} - -interface FigParent { -} - -abstract class Fig { - Rectangle bounds() const; - - void draw(in Rectangle damage, scope Context cr) const; - - private { - FigParent mParent; - } -} - -abstract class FigElement : Fig { - // Link to model via bridge goes here -} - -class Connection { -} - -class FigNode : FigElement { -} - -class FigEdge : FigElement { - private { - Connection[] _connections; - } -} - -abstract class FigLeaf : Fig { -}
--- a/doodle/fig/fig_layer.d Fri Aug 06 09:38:36 2010 +0930 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -module doodle.fig.fig_layer; - -public { - import doodle.dia.icanvas; - import doodle.fig.fig; -} - -class FigLayer : Layer { - this(in string name) { - super(name); - } - - // Layer overrides: - - override Rectangle bounds() const { - return Rectangle.DEFAULT; - } - - override void draw(in Viewport viewport, - in Rectangle pixelDamage, scope Context pixelCr, - in Rectangle modelDamage, scope Context modelCr) const { - } - - private { - Fig[] _figs; - } -}
--- a/doodle/gtk/canvas.d Fri Aug 06 09:38:36 2010 +0930 +++ b/doodle/gtk/canvas.d Sun Aug 08 21:07:47 2010 +0930 @@ -65,7 +65,6 @@ // Create our child widgets and register callbacks - info("B1"); _hRuler = new HRuler; attach(_hRuler, 1, 2, @@ -74,16 +73,13 @@ 0, 0); _hRuler.setMetric(MetricType.PIXELS); - info("B2"); _vRuler = new VRuler; attach(_vRuler, 0, 1, 1, 2, AttachOptions.SHRINK, AttachOptions.FILL | AttachOptions.EXPAND, 0, 0); - info("B3"); _vRuler.setMetric(MetricType.PIXELS); - info("J"); _drawingArea = new DrawingArea; _drawingArea.addOnRealize(&onRealize); @@ -109,7 +105,6 @@ EventMask.LEAVE_NOTIFY_MASK | EventMask.FOCUS_CHANGE_MASK | EventMask.SCROLL_MASK); - info("M"); attach(_drawingArea, 1, 2, @@ -128,7 +123,6 @@ 2, 3, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.SHRINK, 0, 0); - info("Q"); _vAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5); _vAdjustment.addOnValueChanged(&onValueChanged); @@ -216,7 +210,6 @@ Rectangle paddedLayerBounds = expand(move(layerBounds, - layerBounds.size), 2.0 * layerBounds.size); if (!_hadConfigure) { - info("1"); const double MM_PER_INCH = 25.4; _zoom = 0.25 * _ppi / MM_PER_INCH;
--- a/doodle/gtk/palette.d Fri Aug 06 09:38:36 2010 +0930 +++ b/doodle/gtk/palette.d Sun Aug 08 21:07:47 2010 +0930 @@ -6,11 +6,12 @@ } private { + import doodle.core.logging; import gtk.ToolButton; + import gtk.RadioToolButton; + import gtk.Image; import glib.ListSG; import std.stdio; - import gtk.RadioToolButton; - import gtk.Image; } class Palette : Toolbar, IPalette { @@ -21,41 +22,41 @@ setTooltips(true); } - //void set( + override void configure(in Item[] items) { + _items = items.dup; + ListSG group; - int add(in string iconPath, in string tooltipText, void delegate(int) dg) { - auto button = new RadioToolButton(_group); - auto image = new Image(iconBase ~ "/" ~ iconPath); - button.setLabelWidget(image); - int * i = new int; - *i = _delegates.length; - _delegates[*i] = dg; - button.objectGSetDataFull(indexStr, cast(gpointer)i); - button.addOnClicked(&onClicked); - insert(button); - return *i; + foreach(index, item; _items) { + auto button = new RadioToolButton(group); + if (index == 0) group = button.getGroup; + auto image = new Image(_iconBase ~ "/" ~ item.iconPath); + button.setLabelWidget(image); + button.setTooltipText(item.tooltipText); + + int * i = new int; + *i = index; + button.objectGSetDataFull(_indexStr, cast(gpointer)i); + button.addOnClicked(&onClicked); + + insert(button); + } } - void remove(in int id) { - } - - void activate(in int id) { + override void activate(in int index) { + warning("Not yet implemented"); } private { - immutable iconBase = "/home/daveb/source/d/doodle/source/doodle/gtk/data"; - immutable indexStr = "index"; - ListSG _group; - void delegate(int) _delegates[int]; + immutable _iconBase = "/home/daveb/source/d/doodle/doodle/gtk/data"; + immutable _indexStr = "index"; + Item[] _items; - void onClicked(ToolButton tool_button) { - int * i = cast(int *)tool_button.getData(indexStr); - _delegates[*i](*i); + void onClicked(ToolButton toolButton) { + RadioToolButton button = cast(RadioToolButton)toolButton; + if (button.getActive) { + int * i = cast(int *)button.getData(_indexStr); + _items[*i].callback(*i); + } } - - /* - ToolButton find(int index) { - } - */ } }
--- a/doodle/main/prog/doodler.d Fri Aug 06 09:38:36 2010 +0930 +++ b/doodle/main/prog/doodler.d Sun Aug 08 21:07:47 2010 +0930 @@ -20,6 +20,10 @@ } void main(string[] args) { + void paletteCallback(int index) { + writefln("Callback %s", index); + } + Main.init(args); auto window = new MainWindow("Doodle"); auto vbox = new VBox(false, 0); @@ -29,11 +33,19 @@ +/ auto palette = new Palette; + IPalette.Item[] items = + [ + { "select.svg", "Select", &paletteCallback }, + { "select.svg", "Select", &paletteCallback } + ]; + palette.configure(items); + /* palette.add("select.svg", "tooltip-text", (int i){ writefln("Wow %s", i); }); palette.add("select.svg", "tooltip-text", (int i){ writefln("Wow %s", i); }); palette.add("select.svg", "tooltip-text", (int i){ writefln("Wow %s", i); }); palette.add("select.svg", "tooltip-text", (int i){ writefln("Wow %s", i); }); palette.add("select.svg", "tooltip-text", (int i){ writefln("Wow %s", i); }); + */ vbox.packStart(palette, false, false, 0); Tool[] tools;
--- a/doodle/tk/palette.d Fri Aug 06 09:38:36 2010 +0930 +++ b/doodle/tk/palette.d Sun Aug 08 21:07:47 2010 +0930 @@ -1,7 +1,12 @@ module doodle.tk.palette; interface IPalette { - int add(in string iconPath, in string tooltipText, void delegate(int) dg); - void remove(in int id); - void activate(in int id); + struct Item { + string iconPath; + string tooltipText; + void delegate(int) callback; + } + + void configure(in Item[] items); + void activate(in int index); }