Mercurial > projects > doodle
diff doodle/dia/tool_layer.d @ 64:eb5436b47d13
Implemented crossing events
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Thu, 12 Aug 2010 22:21:12 +0930 |
parents | 20d6327c4a75 |
children | 6f2525e170f2 |
line wrap: on
line diff
--- a/doodle/dia/tool_layer.d Thu Aug 12 16:35:24 2010 +0930 +++ b/doodle/dia/tool_layer.d Thu Aug 12 22:21:12 2010 +0930 @@ -83,32 +83,6 @@ return true; } - 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; - } - bool handleMotion(scope IViewport viewport, in MotionEvent event) { //writefln("%s", event); @@ -143,6 +117,66 @@ return true; } + bool handleEnter(scope IViewport viewport, CrossingEvent event) { + trace("Enter %s", event); + + if (_grabbedTool is null) { + foreach_reverse(ref tool; _staticTools) { + if (tool.handleEnter(viewport, event)) { + break; + } + } + } + else { + _grabbedTool.handleEnter(viewport, event); + } + + return true; + } + + bool handleLeave(scope IViewport viewport, CrossingEvent event) { + trace("Leave %s", event); + + if (_grabbedTool is null) { + foreach_reverse(ref tool; _staticTools) { + if (tool.handleLeave(viewport, event)) { + break; + } + } + } + else { + _grabbedTool.handleLeave(viewport, event); + } + + return true; + } + + 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; + } + private { Tool[] _staticTools; IToolStackObserver _observer;