Mercurial > projects > doodle
diff canvas.d @ 20:d6e7a5a6f008
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Wed, 15 Jul 2009 23:23:02 +0930 |
parents | 22abbf4cde96 |
children |
line wrap: on
line diff
--- a/canvas.d Mon Jul 13 22:08:18 2009 +0930 +++ b/canvas.d Wed Jul 15 23:23:02 2009 +0930 @@ -58,7 +58,7 @@ 0, 1, AttachOptions.FILL | AttachOptions.EXPAND, AttachOptions.SHRINK, 0, 0); - mHRuler.setMetric(GtkMetricType.PIXELS); + mHRuler.setMetric(MetricType.PIXELS); mVRuler = new VRuler; attach(mVRuler, @@ -66,7 +66,7 @@ 1, 2, AttachOptions.SHRINK, AttachOptions.FILL | AttachOptions.EXPAND, 0, 0); - mVRuler.setMetric(GtkMetricType.PIXELS); + mVRuler.setMetric(MetricType.PIXELS); mDrawingArea = new DrawingArea; mDrawingArea.addOnRealize(&onRealize); @@ -78,6 +78,21 @@ mDrawingArea.addOnKeyRelease(&onKeyEvent); mDrawingArea.addOnMotionNotify(&onMotionNotify); mDrawingArea.addOnScroll(&onScroll); + mDrawingArea.addOnEnterNotify(&onEnterNotify); + mDrawingArea.addOnLeaveNotify(&onLeaveNotify); + mDrawingArea.setEvents(EventMask.EXPOSURE_MASK | + EventMask.POINTER_MOTION_MASK | + EventMask.POINTER_MOTION_HINT_MASK | + EventMask.BUTTON_MOTION_MASK | + EventMask.BUTTON_PRESS_MASK | + EventMask.BUTTON_RELEASE_MASK | + EventMask.KEY_PRESS_MASK | + EventMask.KEY_RELEASE_MASK | + EventMask.ENTER_NOTIFY_MASK | + EventMask.LEAVE_NOTIFY_MASK | + EventMask.FOCUS_CHANGE_MASK | + EventMask.SCROLL_MASK); + attach(mDrawingArea, 1, 2, 1, 2, @@ -108,7 +123,7 @@ 0, 0); } - override void rel_zoom(Point pixel_datum, double factor) { + override void zoom_relative(Point pixel_datum, double factor) { // Work out pixel distance from current centre to datum, // Do the zoom, then work out the new centre that keeps the // pixel distance the same @@ -123,7 +138,7 @@ queueDraw; } - override void rel_pan(Vector pixel_displacement) { + override void pan_relative(Vector pixel_displacement) { mViewCentre = mViewCentre + pixel_to_model(pixel_displacement); update_adjustments; @@ -371,6 +386,45 @@ return true; } + /* + public enum GdkCrossingMode { + NORMAL, + GRAB, + UNGRAB, + GTK_GRAB, + GTK_UNGRAB, + STATE_CHANGED + } + + public struct GdkEventCrossing { + GdkEventType type; + GdkWindow *window; + byte sendEvent; + GdkWindow *subwindow; + uint time; + double x; + double y; + double xRoot; + double yRoot; + GdkCrossingMode mode; + GdkNotifyType detail; + int focus; + uint state; + } + */ + + bool onEnterNotify(GdkEventCrossing * event, Widget widget) { + assert(widget is mDrawingArea); + writefln("Enter %d %d %d", cast(int)event.mode, event.focus, event.state); + return true; + } + + bool onLeaveNotify(GdkEventCrossing * event, Widget widget) { + assert(widget is mDrawingArea); + writefln("Leave %d %d %d", cast(int)event.mode, event.focus, event.state); + return true; + } + void onValueChanged(Adjustment adjustment) { GtkAdjustment * h_gtkAdjustment = mHAdjustment.getAdjustmentStruct; GtkAdjustment * v_gtkAdjustment = mVAdjustment.getAdjustmentStruct;