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;