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;