diff doodle/gtk/canvas.d @ 64:eb5436b47d13

Implemented crossing events
author "David Bryant <bagnose@gmail.com>"
date Thu, 12 Aug 2010 22:21:12 +0930
parents 20d6327c4a75
children 31d10176415d
line wrap: on
line diff
--- a/doodle/gtk/canvas.d	Thu Aug 12 16:35:24 2010 +0930
+++ b/doodle/gtk/canvas.d	Thu Aug 12 22:21:12 2010 +0930
@@ -101,9 +101,7 @@
         _drawingArea.addOnFocusIn(&onFocusIn);
         _drawingArea.addOnFocusOut(&onFocusOut);
         _drawingArea.addOnMoveFocus(&onMoveFocus);
-        /*
         _drawingArea.addOnGrabBroken(&onGrabBroken);
-        */
         _drawingArea.addOnGrabFocus(&onGrabFocus);
         _drawingArea.addOnGrabNotify(&onGrabNotify);
         // addOnPopupMenu
@@ -400,7 +398,6 @@
          */
         bool onKeyPressEvent(GdkEventKey * event, Widget widget) {
             assert(widget is _drawingArea);
-            message("Got key event");
 
             auto keyEvent = new KeyEvent(event.string[0..strlen(event.string)].idup,
                                          event.keyval,
@@ -419,7 +416,7 @@
             auto keyEvent = new KeyEvent(event.string[0..strlen(event.string)].idup,
                                          event.keyval,
                                          gtk2tkMask(event.state));
-            message("Got key release %s", keyEvent);
+            //message("Got key release %s", keyEvent);
             _eventHandler.handleKeyRelease(this, keyEvent);
 
             fixDamage;
@@ -437,8 +434,8 @@
             Point modelPoint = pixelToModel(pixelPoint);
 
             auto motionEvent = new MotionEvent(pixelPoint,
-                                                modelPoint,
-                                                gtk2tkMask(event.state));
+                                               modelPoint,
+                                               gtk2tkMask(event.state));
 
             _eventHandler.handleMotion(this, motionEvent);
 
@@ -455,9 +452,9 @@
             Point modelPoint = pixelToModel(pixelPoint);
 
             auto scrollEvent = new ScrollEvent(gtk2tkDirection(event.direction),
-                                                pixelPoint,
-                                                modelPoint,
-                                                gtk2tkMask(event.state));
+                                               pixelPoint,
+                                               modelPoint,
+                                               gtk2tkMask(event.state));
 
             _eventHandler.handleScroll(this, scrollEvent);
 
@@ -495,15 +492,41 @@
 
         bool onEnterNotify(GdkEventCrossing * event, Widget widget) {
             assert(widget is _drawingArea);
-            message("Enter %d %d %d", cast(int)event.mode, event.focus, event.state);
-            // TODO
+
+            Point pixelPoint = Point(event.x + 0.5, _viewSize.y - (event.y + 0.5));
+            Point modelPoint = pixelToModel(pixelPoint);
+
+            auto crossingEvent = new CrossingEvent(gtk2tkCrossingMode(event.mode),
+                                                   pixelPoint,
+                                                   modelPoint,
+                                                   gtk2tkMask(event.state));
+
+            _eventHandler.handleEnter(this, crossingEvent);
+
+            fixDamage;
+
+            //message("Enter %d %d %d", cast(int)event.mode, event.focus, event.state);
+
             return true;
         }
 
         bool onLeaveNotify(GdkEventCrossing * event, Widget widget) {
             assert(widget is _drawingArea);
-            message("Leave %d %d %d", cast(int)event.mode, event.focus, event.state);
-            // TODO
+
+            Point pixelPoint = Point(event.x + 0.5, _viewSize.y - (event.y + 0.5));
+            Point modelPoint = pixelToModel(pixelPoint);
+
+            auto crossingEvent = new CrossingEvent(gtk2tkCrossingMode(event.mode),
+                                                   pixelPoint,
+                                                   modelPoint,
+                                                   gtk2tkMask(event.state));
+
+            _eventHandler.handleLeave(this, crossingEvent);
+
+            fixDamage;
+
+            //message("Leave %d %d %d", cast(int)event.mode, event.focus, event.state);
+
             return true;
         }
 
@@ -529,15 +552,13 @@
             trace("onMoveFocus");
         }
 
-        /*
-        bool onGrabBroken(Event event, Widget widget) {
+        bool onGrabBroken(gdk.Event.Event event, Widget widget) {
             trace("onGrabBroken");
             return true;
         }
-        */
 
         void onGrabFocus(Widget widget) {
-            trace("onGrabFocus");
+            //trace("onGrabFocus");
         }
 
         void onGrabNotify(gboolean what, Widget widget){