Mercurial > projects > doodle
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){