diff gtk/canvas.d @ 27:f3d91579bb28

Checkpoint
author David Bryant <daveb@acres.com.au>
date Wed, 29 Jul 2009 14:11:35 +0930
parents 06c30d250c0a
children
line wrap: on
line diff
--- a/gtk/canvas.d	Thu Jul 16 00:12:02 2009 +0930
+++ b/gtk/canvas.d	Wed Jul 29 14:11:35 2009 +0930
@@ -68,17 +68,17 @@
         mVRuler.setMetric(MetricType.PIXELS);
 
         mDrawingArea = new DrawingArea;
-        mDrawingArea.addOnRealize(&onRealize);
-        mDrawingArea.addOnConfigure(&onConfigure);
-        mDrawingArea.addOnExpose(&onExpose);
-        mDrawingArea.addOnButtonPress(&onButtonPress);
-        mDrawingArea.addOnButtonRelease(&onButtonRelease);
-        mDrawingArea.addOnKeyPress(&onKeyEvent);
-        mDrawingArea.addOnKeyRelease(&onKeyEvent);
-        mDrawingArea.addOnMotionNotify(&onMotionNotify);
-        mDrawingArea.addOnScroll(&onScroll);
-        mDrawingArea.addOnEnterNotify(&onEnterNotify);
-        mDrawingArea.addOnLeaveNotify(&onLeaveNotify);
+        mDrawingArea.addOnRealize(&on_realize);
+        mDrawingArea.addOnConfigure(&on_configure);
+        mDrawingArea.addOnExpose(&on_expose);
+        mDrawingArea.addOnButtonPress(&on_button_press);
+        mDrawingArea.addOnButtonRelease(&on_button_release);
+        mDrawingArea.addOnKeyPress(&on_key_event);
+        mDrawingArea.addOnKeyRelease(&on_key_event);
+        mDrawingArea.addOnMotionNotify(&on_motion_notify);
+        mDrawingArea.addOnScroll(&on_scroll);
+        mDrawingArea.addOnEnterNotify(&on_enter_notify);
+        mDrawingArea.addOnLeaveNotify(&on_leave_notify);
         mDrawingArea.setEvents(EventMask.EXPOSURE_MASK |
                                EventMask.POINTER_MOTION_MASK |
                                EventMask.POINTER_MOTION_HINT_MASK |
@@ -145,6 +145,24 @@
         queueDraw;
     }
 
+    override void set_cursor(in Cursor cursor) {
+        CursorType cursor_type;
+
+        switch (cursor) {
+        case Cursor.DEFAULT:
+            cursor_type = CursorType.ARROW;
+            break;
+        case Cursor.HAND:
+            cursor_type = CursorType.HAND1;
+            break;
+        case Cursor.CROSSHAIR:
+            cursor_type = CursorType.CROSSHAIR;
+            break;
+        }
+
+        mDrawingArea.setCursor(new gdk.Cursor.Cursor(cursor_type));
+    }
+
     override void damage_model(in Rectangle area) {
         mDamage = mDamage | model_to_pixel(area);
     }
@@ -153,50 +171,9 @@
         mDamage = mDamage | area;
     }
 
-    override double zoom() const {
-        return mZoom;
-    }
-
-    override Point model_to_pixel(in Point model) const {
-        return Point.DEFAULT + mViewSize / 2.0 + mZoom * (model - mViewCentre);
-    }
-
-    override Point pixel_to_model(in Point pixel) const {
-        return mViewCentre + (pixel - mViewSize / 2.0 - Point.DEFAULT) / mZoom;
-    }
-
-    override Vector model_to_pixel(in Vector model) const {
-        return mZoom * model;
-    }
-
-    override Vector pixel_to_model(in Vector pixel) const {
-        return pixel / mZoom;
-    }
-
-    override double model_to_pixel(in double model) const {
-        return mZoom * model;
-    }
-
-    override double pixel_to_model(in double pixel) const {
-        return pixel / mZoom;
-    }
-
-    override Rectangle model_to_pixel(in Rectangle model) const {
-        return Rectangle(model_to_pixel(model.position), model_to_pixel(model.size));
-    }
-
-    override Rectangle pixel_to_model(in Rectangle model) const {
-        return Rectangle(pixel_to_model(model.position), pixel_to_model(model.size));
-    }
-
     private {
 
-        void onRealize(Widget widget) {
-            assert(widget is mDrawingArea);
-            //writefln("Got realize\n");
-        }
-
-        bool onConfigure(GdkEventConfigure * event, Widget widget) {
+        bool on_configure(GdkEventConfigure * event, Widget widget) {
             assert(widget is mDrawingArea);
 
             if (!mHadConfigure) {
@@ -230,7 +207,7 @@
             return true;
         }
 
-        bool onExpose(GdkEventExpose * event, Widget widget) {
+        bool on_expose(GdkEventExpose * event, Widget widget) {
             assert(widget is mDrawingArea);
 
             Drawable dr = mDrawingArea.getWindow;
@@ -294,7 +271,7 @@
             return true;
         }
 
-        bool onButtonPress(GdkEventButton * event, Widget widget) {
+        bool on_button_press(GdkEventButton * event, Widget widget) {
             assert(widget is mDrawingArea);
             //writefln("Got button event\n");
 
@@ -314,7 +291,7 @@
             return true;
         }
 
-        bool onButtonRelease(GdkEventButton * event, Widget widget) {
+        bool on_button_release(GdkEventButton * event, Widget widget) {
             assert(widget is mDrawingArea);
             //writefln("Got button event\n");
 
@@ -334,7 +311,7 @@
             return true;
         }
 
-        bool onKeyEvent(GdkEventKey * event, Widget widget) {
+        bool on_key_event(GdkEventKey * event, Widget widget) {
             assert(widget is mDrawingArea);
             //writefln("Got key event\n");
 
@@ -346,7 +323,7 @@
             return true;
         }
 
-        bool onMotionNotify(GdkEventMotion * event, Widget widget) {
+        bool on_motion_notify(GdkEventMotion * event, Widget widget) {
             assert(widget is mDrawingArea);
             //writefln("Got motion notify\n");
             gtk_widget_event(mHRuler.getWidgetStruct(), cast(GdkEvent *)event);
@@ -366,7 +343,7 @@
             return true;
         }
 
-        bool onScroll(GdkEventScroll * event, Widget widget) {
+        bool on_scroll(GdkEventScroll * event, Widget widget) {
             assert(widget is mDrawingArea);
             //writefln("Got scroll\n");
 
@@ -412,15 +389,17 @@
         }
         */
 
-        bool onEnterNotify(GdkEventCrossing * event, Widget widget) {
+        bool on_enter_notify(GdkEventCrossing * event, Widget widget) {
             assert(widget is mDrawingArea);
-            writefln("Enter %d %d %d", cast(int)event.mode, event.focus, event.state);
+            //writefln("Enter %d %d %d", cast(int)event.mode, event.focus, event.state);
+            // TODO
             return true;
         }
 
-        bool onLeaveNotify(GdkEventCrossing * event, Widget widget) {
+        bool on_leave_notify(GdkEventCrossing * event, Widget widget) {
             assert(widget is mDrawingArea);
-            writefln("Leave %d %d %d", cast(int)event.mode, event.focus, event.state);
+            //writefln("Leave %d %d %d", cast(int)event.mode, event.focus, event.state);
+            // TODO
             return true;
         }
 
@@ -505,11 +484,7 @@
                 //writefln("Damage: %s", mDamage);
                 int x, y, w, h;
                 mDamage.get_quantised(x, y, w, h);
-                //writefln("Quantised damage: %d %d %d %d", x, y, w, h);
-                y = cast(int)mViewSize.y - (y + h);         // Flip vertical axis
-                //writefln("Flipped Quantised damage: %d %d %d %d", x, y, w, h);
-                mDrawingArea.queueDrawArea(x, y, w, h);
-                //mDrawingArea.queueDraw();
+                mDrawingArea.queueDrawArea(x, cast(int)mViewSize.y - (y + h), w, h);
                 mDamage = Rectangle.DEFAULT;
             }
             else {
@@ -519,6 +494,35 @@
 
         double clamp_zoom(in double zoom) { return clamp(zoom, 0.2, 10.0); }
 
+        Point model_to_pixel(in Point model) const {
+            return Point.DEFAULT + mViewSize / 2.0 + mZoom * (model - mViewCentre);
+        }
+
+        Point pixel_to_model(in Point pixel) const {
+            return mViewCentre + (pixel - mViewSize / 2.0 - Point.DEFAULT) / mZoom;
+        }
+
+        Vector model_to_pixel(in Vector model) const {
+            return mZoom * model;
+        }
+
+        Vector pixel_to_model(in Vector pixel) const {
+            return pixel / mZoom;
+        }
+
+        Rectangle model_to_pixel(in Rectangle model) const {
+            return Rectangle(model_to_pixel(model.position), model_to_pixel(model.size));
+        }
+
+        Rectangle pixel_to_model(in Rectangle model) const {
+            return Rectangle(pixel_to_model(model.position), pixel_to_model(model.size));
+        }
+
+        void on_realize(Widget widget) {
+            assert(widget is mDrawingArea);
+            //writefln("Got realize\n");
+        }
+
         bool mHadConfigure;
         Rectangle mDamage;          // pixels