Mercurial > projects > doodle
diff doodle/dia/tool_layer.d @ 58:c63719604adb
Beginnings of creating a rectangle...
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Mon, 09 Aug 2010 21:43:24 +0930 |
parents | 9960c4fbd0dd |
children | e64baac3efb2 |
line wrap: on
line diff
--- a/doodle/dia/tool_layer.d Sun Aug 08 22:01:54 2010 +0930 +++ b/doodle/dia/tool_layer.d Mon Aug 09 21:43:24 2010 +0930 @@ -5,17 +5,33 @@ } private { - import std.stdio; import doodle.cairo.routines; + import doodle.core.logging; +} + +// This interface is used by the palette +interface IToolStack { + void use(Tool tool); +} + +interface IToolStackObserver { + void toolChanged(int index); } -interface IToolStack { -} - -class ToolLayer : Layer, IEventHandler, IToolStack { - this(in Tool[] tools, in string name) { +final class ToolLayer : Layer, IEventHandler, IToolStack { + this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") { super(name); _tools = tools.dup; + _observer = observer; + } + + // IToolStack overrides: + + void use(Tool tool) { + assert(_grabbedTool is null); + message("using new tool: %s", tool.name); + _tools ~= tool; + //_observer.toolChanged(_tools.length - 1); } // Layer overrides: @@ -34,14 +50,14 @@ // EventHandler overrides: - override bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { + bool handleButtonPress(scope IViewport viewport, in ButtonEvent event) { // writefln("%s", event); if (_grabbedTool is null) { foreach_reverse(ref tool; _tools) { if (tool.handleButtonPress(viewport, event)) { _grabbedTool = &tool; - _grabbedButton = event.button_name; + _grabbedButton = event.buttonName; break; } } @@ -53,13 +69,13 @@ return true; } - override bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { + bool handleButtonRelease(scope IViewport viewport, in ButtonEvent event) { // writefln("%s", event); if (_grabbedTool !is null) { _grabbedTool.handleButtonRelease(viewport, event); - if (_grabbedButton == event.button_name) { + if (_grabbedButton == event.buttonName) { _grabbedTool = null; } } @@ -67,19 +83,19 @@ return true; } - override bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { + bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { // writefln("%s", event); return true; } - override bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { + bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { // writefln("%s", event); return true; } - override bool handleMotion(scope IViewport viewport, in MotionEvent event) { + bool handleMotion(scope IViewport viewport, in MotionEvent event) { //writefln("%s", event); if (_grabbedTool is null) { @@ -96,7 +112,7 @@ return true; } - override bool handleScroll(scope IViewport viewport, in ScrollEvent event) { + bool handleScroll(scope IViewport viewport, in ScrollEvent event) { // writefln("%s", event); if (_grabbedTool is null) { @@ -113,19 +129,10 @@ return true; } - /* - override void push(Tool tool) { - } - - override void pop() { - } - - override void replace(Tool tool) { - } - */ - private { Tool[] _tools; + IToolStackObserver _observer; + Tool * _grabbedTool; ButtonName _grabbedButton; }