Mercurial > projects > doodle
diff doodle/dia/tool_layer.d @ 63:20d6327c4a75
Event progress. Got key press/release working and panning via keyboard.
author | daveb |
---|---|
date | Thu, 12 Aug 2010 16:35:24 +0930 |
parents | e64baac3efb2 |
children | eb5436b47d13 |
line wrap: on
line diff
--- a/doodle/dia/tool_layer.d Thu Aug 12 11:48:55 2010 +0930 +++ b/doodle/dia/tool_layer.d Thu Aug 12 16:35:24 2010 +0930 @@ -19,9 +19,9 @@ } final class ToolLayer : Layer, IEventHandler, IToolStack { - this(in Tool[] tools, IToolStackObserver observer, in string name = "Tool") { + this(in Tool[] staticTools, IToolStackObserver observer, in string name = "Tool") { super(name); - _tools = tools.dup; + _staticTools = staticTools.dup; _observer = observer; } @@ -30,7 +30,7 @@ void use(Tool tool) { assert(_grabbedTool is null); message("using new tool: %s", tool.name); - _tools ~= tool; + _staticTools ~= tool; _observer.toolChanged(tool); } @@ -54,9 +54,9 @@ // writefln("%s", event); if (_grabbedTool is null) { - foreach_reverse(ref tool; _tools) { + foreach_reverse(ref tool; _staticTools) { if (tool.handleButtonPress(viewport, event)) { - _grabbedTool = &tool; + _grabbedTool = tool; _grabbedButton = event.buttonName; break; } @@ -86,12 +86,26 @@ bool handleKeyPress(scope IViewport viewport, in KeyEvent event) { // writefln("%s", event); + // FIXME not sure how these should work + foreach_reverse(ref tool; _staticTools) { + if (tool.handleKeyPress(viewport, event)) { + break; + } + } + return true; } bool handleKeyRelease(scope IViewport viewport, in KeyEvent event) { // writefln("%s", event); + // FIXME not sure how these should work + foreach_reverse(ref tool; _staticTools) { + if (tool.handleKeyRelease(viewport, event)) { + break; + } + } + return true; } @@ -99,7 +113,7 @@ //writefln("%s", event); if (_grabbedTool is null) { - foreach_reverse(ref tool; _tools) { + foreach_reverse(ref tool; _staticTools) { if (tool.handleMotion(viewport, event)) { break; } @@ -116,7 +130,7 @@ // writefln("%s", event); if (_grabbedTool is null) { - foreach_reverse(ref tool; _tools) { + foreach_reverse(ref tool; _staticTools) { if (tool.handleScroll(viewport, event)) { break; } @@ -130,10 +144,10 @@ } private { - Tool[] _tools; + Tool[] _staticTools; IToolStackObserver _observer; - Tool * _grabbedTool; + Tool _grabbedTool; ButtonName _grabbedButton; } }