changeset 26:06c30d250c0a

Cleanup
author "David Bryant <bagnose@gmail.com>"
date Thu, 16 Jul 2009 00:12:02 +0930
parents 8f58a8f88735
children f3d91579bb28
files build.sh cairo/routines.d dia/grid_layer.d dia/icanvas.d dia/page_layer.d dia/standard_tools.d dia/tool.d dia/tool_layer.d fig/fig.d fig/layer.d gtk/canvas.d tk/misc.d tk/types.d
diffstat 13 files changed, 124 insertions(+), 83 deletions(-) [+]
line wrap: on
line diff
--- a/build.sh	Wed Jul 15 23:49:02 2009 +0930
+++ b/build.sh	Thu Jul 16 00:12:02 2009 +0930
@@ -6,6 +6,7 @@
         doodle.d \
         cairo/routines.d \
         dia/grid_layer.d dia/icanvas.d dia/page_layer.d dia/standard_tools.d dia/tool.d dia/tool_layer.d \
+        fig/layer.d \
         gtk/canvas.d gtk/conversions.d \
         tk/events.d tk/geometry.d tk/misc.d tk/types.d \
         -I"${DMD_BASE}/include/d" \
--- a/cairo/routines.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/cairo/routines.d	Thu Jul 16 00:12:02 2009 +0930
@@ -5,7 +5,7 @@
     import cairo.Context;
 }
 
-void rectangle(Context cr, Rectangle rectangle) {
+void rectangle(scope Context cr, in Rectangle rectangle) {
     cr.rectangle(rectangle.position.x, rectangle.position.y,
                  rectangle.size.x, rectangle.size.y);
 }
--- a/dia/grid_layer.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/dia/grid_layer.d	Thu Jul 16 00:12:02 2009 +0930
@@ -22,7 +22,7 @@
         return Rectangle();
     }
 
-    override void draw(const Viewport viewport,
+    override void draw(in Viewport viewport,
                        in Rectangle pixel_damage, scope Context pixel_cr,
                        in Rectangle model_damage, scope Context model_cr) const {
         double zoom = viewport.zoom;
--- a/dia/icanvas.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/dia/icanvas.d	Thu Jul 16 00:12:02 2009 +0930
@@ -1,38 +1,40 @@
 module dia.icanvas;
 
-import tk.geometry;
-import tk.events;
-import cairo.Context;
+public {
+    import tk.geometry;
+    import tk.events;
+    import cairo.Context;
+}
 
 interface Viewport {
-    void zoom_relative(Point pixel_datum, double factor);
-    void pan_relative(Vector pixel_displacement);
-    void damage_model(Rectangle area);      // FIXME could be an inout parameter of the event handling, or a special scope Damage object that supports growth only
-    void damage_pixel(Rectangle area);      // FIXME as above
+    void zoom_relative(in Point pixel_datum, in double factor);
+    void pan_relative(in Vector pixel_displacement);
+    void damage_model(in Rectangle area);      // FIXME could be an inout parameter of the event handling, or a special scope Damage object that supports growth only
+    void damage_pixel(in Rectangle area);      // FIXME as above
 
     // FIXME not sure about these:
     double zoom() const;
-    Point model_to_pixel(Point model) const;
-    Point pixel_to_model(Point pixel) const;
-    Vector model_to_pixel(Vector model) const;
-    Vector pixel_to_model(Vector pixel) const;
-    Rectangle model_to_pixel(Rectangle model) const;
-    Rectangle pixel_to_model(Rectangle model) const;
-    double model_to_pixel(double model) const;
-    double pixel_to_model(double pixel) const;
+    Point model_to_pixel(in Point model) const;
+    Point pixel_to_model(in Point pixel) const;
+    Vector model_to_pixel(in Vector model) const;
+    Vector pixel_to_model(in Vector pixel) const;
+    Rectangle model_to_pixel(in Rectangle model) const;
+    Rectangle pixel_to_model(in Rectangle model) const;
+    double model_to_pixel(in double model) const;
+    double pixel_to_model(in double pixel) const;
 }
 
 interface EventHandler {
-    bool handle_button_press(Viewport viewport, in ButtonEvent event);
-    bool handle_button_release(Viewport viewport, in ButtonEvent event);
-    bool handle_motion(Viewport viewport, in MotionEvent event);
-    bool handle_scroll(Viewport viewport, in ScrollEvent event);
-    //bool handle_enter(Viewport viewport, CrossingEvent event);
-    //bool handle_leave(Viewport viewport, CrossingEvent event);
-    //bool handle_focus_in(Viewport viewport, FocusEvent event);
-    //bool handle_focus_out(Viewport viewport, FocusEvent event);
-    bool handle_key_press(Viewport viewport, in KeyEvent event);
-    bool handle_key_release(Viewport viewport, in KeyEvent event);
+    bool handle_button_press(scope Viewport viewport, in ButtonEvent event);
+    bool handle_button_release(scope Viewport viewport, in ButtonEvent event);
+    bool handle_motion(scope Viewport viewport, in MotionEvent event);
+    bool handle_scroll(scope Viewport viewport, in ScrollEvent event);
+    //bool handle_enter(scope Viewport viewport, CrossingEvent event);
+    //bool handle_leave(scope Viewport viewport, CrossingEvent event);
+    //bool handle_focus_in(scope Viewport viewport, FocusEvent event);
+    //bool handle_focus_out(scope Viewport viewport, FocusEvent event);
+    bool handle_key_press(scope Viewport viewport, in KeyEvent event);
+    bool handle_key_release(scope Viewport viewport, in KeyEvent event);
 }
 
 abstract class Layer {
@@ -44,7 +46,7 @@
 
     Rectangle bounds() const;
     //void zoom_changed
-    void draw(const Viewport viewport,
+    void draw(in Viewport viewport,
               in Rectangle pixel_damage, scope Context pixel_cr,
               in Rectangle model_damage, scope Context model_cr) const;
 
--- a/dia/page_layer.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/dia/page_layer.d	Thu Jul 16 00:12:02 2009 +0930
@@ -22,7 +22,7 @@
         return mPageGeometry;
     }
 
-    override void draw(const Viewport viewport,
+    override void draw(in Viewport viewport,
                        in Rectangle pixel_damage, scope Context pixel_cr,
                        in Rectangle model_damage, scope Context model_cr) const {
         // Make the paper white, with a border
--- a/dia/standard_tools.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/dia/standard_tools.d	Thu Jul 16 00:12:02 2009 +0930
@@ -11,7 +11,7 @@
 }
 
 final class PanTool : Tool {
-    override bool handle_button_press(Viewport viewport, in ButtonEvent event) {
+    override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) {
         if (event.button_name == ButtonName.MIDDLE) {
             mLastPosition = event.pixel_point;
             return true;
@@ -21,7 +21,7 @@
         }
     }
 
-    override bool handle_motion(Viewport viewport, in MotionEvent event) {
+    override bool handle_motion(scope Viewport viewport, in MotionEvent event) {
         if (event.mask.is_set(Modifier.MIDDLE_BUTTON)) {
             viewport.pan_relative(mLastPosition - event.pixel_point);
             mLastPosition = event.pixel_point;
@@ -33,7 +33,7 @@
         }
     }
 
-    override bool handle_scroll(Viewport viewport, in ScrollEvent event) {
+    override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) {
         if (event.mask.is_unset(Modifier.MIDDLE_BUTTON)) {
             Vector delta;
 
@@ -65,7 +65,7 @@
 }
 
 final class ZoomTool : Tool {
-    override bool handle_scroll(Viewport viewport, in ScrollEvent event) {
+    override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) {
         if (event.mask.is_set(Modifier.CONTROL)) {
             if (event.scroll_direction == ScrollDirection.DOWN) {
                 viewport.zoom_relative(event.pixel_point, 1.0 / ZOOM);
@@ -90,7 +90,7 @@
 }
 
 final class LassoTool : Tool {
-    override bool handle_button_press(Viewport viewport, in ButtonEvent event) {
+    override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) {
         if (event.button_name == ButtonName.LEFT) {
             mActive = true;
             mAnchorPoint = mCurrentPoint = event.pixel_point;
@@ -101,7 +101,7 @@
         }
     }
 
-    override bool handle_button_release(Viewport viewport, in ButtonEvent event) {
+    override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) {
         if (event.button_name == ButtonName.LEFT && mActive) {
             mActive = false;
             viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0));
@@ -112,7 +112,7 @@
         }
     }
 
-    override bool handle_motion(Viewport viewport, in MotionEvent event) {
+    override bool handle_motion(scope Viewport viewport, in MotionEvent event) {
         if (mActive) {
             viewport.damage_pixel(Rectangle(mAnchorPoint, mCurrentPoint).feathered(LINE_WIDTH / 2.0));
             mCurrentPoint = event.pixel_point;
@@ -122,13 +122,19 @@
         return false;
     }
 
-    override void draw(const Viewport viewport,
+    override void draw(in Viewport viewport,
                        in Rectangle pixel_damage, scope Context pixel_cr,
                        in Rectangle model_damage, scope Context model_cr) const {
         if (mActive) {
             pixel_cr.save; {
-                double[] dashes = [ 4.0, 4.0 ];
-                pixel_cr.setDash(dashes, 0.0);
+                pixel_cr.setSourceRgba(0.0, 0.0, 0.8, 0.3);
+                rectangle(pixel_cr, Rectangle(mCurrentPoint, mAnchorPoint));
+                pixel_cr.fill();
+            } pixel_cr.restore();
+
+            pixel_cr.save(); {
+                //double[] dashes = [ 4.0, 4.0 ];
+                //pixel_cr.setDash(dashes, 0.0);
                 pixel_cr.setSourceRgba(0.0, 0.0, 0.5, 1.0);
                 pixel_cr.setLineWidth(LINE_WIDTH);
                 //writefln("Drawing rectangle: %s", Rectangle(mCurrentPoint, mAnchorPoint));
--- a/dia/tool.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/dia/tool.d	Thu Jul 16 00:12:02 2009 +0930
@@ -32,18 +32,18 @@
     abstract void stop(IToolStack tool_stack);
     */
 
-    bool handle_button_press(Viewport viewport, in ButtonEvent event) { return false; }
-    bool handle_button_release(Viewport viewport, in ButtonEvent event) { return false; }
-    bool handle_motion(Viewport viewport, in MotionEvent event) { return false; }
-    bool handle_scroll(Viewport viewport, in ScrollEvent event) { return false; }
-    //bool handle_enter(Viewport viewport, CrossingEvent event) { return false; }
-    //bool handle_leave(Viewport viewport, CrossingEvent event) { return false; }
-    //bool handle_focus_in(Viewport viewport, FocusEvent event) { return false; }
-    //bool handle_focus_out(Viewport viewport, FocusEvent event) { return false; }
-    bool handle_key_press(Viewport viewport, in KeyEvent event) { return false; }
-    bool handle_key_release(Viewport viewport, in KeyEvent event) { return false; }
+    bool handle_button_press(scope Viewport viewport, in ButtonEvent event) { return false; }
+    bool handle_button_release(scope Viewport viewport, in ButtonEvent event) { return false; }
+    bool handle_motion(scope Viewport viewport, in MotionEvent event) { return false; }
+    bool handle_scroll(scope Viewport viewport, in ScrollEvent event) { return false; }
+    //bool handle_enter(scope viewport, CrossingEvent event) { return false; }
+    //bool handle_leave(scope viewport, CrossingEvent event) { return false; }
+    //bool handle_focus_in(scope viewport, FocusEvent event) { return false; }
+    //bool handle_focus_out(scope viewport, FocusEvent event) { return false; }
+    bool handle_key_press(scope Viewport viewport, in KeyEvent event) { return false; }
+    bool handle_key_release(scope Viewport viewport, in KeyEvent event) { return false; }
 
-    void draw(const Viewport viewport,
+    void draw(in Viewport viewport,
               in Rectangle pixel_damage, scope Context pixel_cr,
               in Rectangle model_damage, scope Context model_cr) const { }
 }
--- a/dia/tool_layer.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/dia/tool_layer.d	Thu Jul 16 00:12:02 2009 +0930
@@ -15,7 +15,7 @@
         mTools = tools.dup;
     }
 
-    override bool handle_button_press(Viewport viewport, in ButtonEvent event) {
+    override bool handle_button_press(scope Viewport viewport, in ButtonEvent event) {
         // writefln("%s", event);
 
         if (mGrabbedTool is null) {
@@ -34,7 +34,7 @@
         return true;
     }
 
-    override bool handle_button_release(Viewport viewport, in ButtonEvent event) {
+    override bool handle_button_release(scope Viewport viewport, in ButtonEvent event) {
         // writefln("%s", event);
 
         if (mGrabbedTool !is null) {
@@ -48,19 +48,19 @@
         return true;
     }
 
-    override bool handle_key_press(Viewport viewport, in KeyEvent event) {
+    override bool handle_key_press(scope Viewport viewport, in KeyEvent event) {
         // writefln("%s", event);
 
         return true;
     }
 
-    override bool handle_key_release(Viewport viewport, in KeyEvent event) {
+    override bool handle_key_release(scope Viewport viewport, in KeyEvent event) {
         // writefln("%s", event);
 
         return true;
     }
 
-    override bool handle_motion(Viewport viewport, in MotionEvent event) {
+    override bool handle_motion(scope Viewport viewport, in MotionEvent event) {
         //writefln("%s", event);
 
         if (mGrabbedTool is null) {
@@ -77,7 +77,7 @@
         return true;
     }
 
-    override bool handle_scroll(Viewport viewport, in ScrollEvent event) {
+    override bool handle_scroll(scope Viewport viewport, in ScrollEvent event) {
         // writefln("%s", event);
 
         if (mGrabbedTool is null) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fig/fig.d	Thu Jul 16 00:12:02 2009 +0930
@@ -0,0 +1,5 @@
+module fig.fig;
+
+abstract class Fig {
+    abstract void draw();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/fig/layer.d	Thu Jul 16 00:12:02 2009 +0930
@@ -0,0 +1,23 @@
+module fig.layer;
+
+public {
+    import dia.icanvas;
+}
+
+class Layer : dia.icanvas.Layer {
+    this(in string name) {
+        super(name);
+    }
+
+    override Rectangle bounds() const {
+        return Rectangle.DEFAULT;
+    }
+
+    void draw(in Viewport viewport,
+              in Rectangle pixel_damage, scope Context pixel_cr,
+              in Rectangle model_damage, scope Context model_cr) const {
+    }
+
+    private {
+    }
+}
--- a/gtk/canvas.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/gtk/canvas.d	Thu Jul 16 00:12:02 2009 +0930
@@ -122,7 +122,7 @@
                0, 0);
     }
 
-    override void zoom_relative(Point pixel_datum, double factor) {
+    override void zoom_relative(in Point pixel_datum, in 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
@@ -137,7 +137,7 @@
         queueDraw;
     }
 
-    override void pan_relative(Vector pixel_displacement) {
+    override void pan_relative(in Vector pixel_displacement) {
         mViewCentre = mViewCentre + pixel_to_model(pixel_displacement);
 
         update_adjustments;
@@ -145,11 +145,11 @@
         queueDraw;
     }
 
-    override void damage_model(Rectangle area) {
+    override void damage_model(in Rectangle area) {
         mDamage = mDamage | model_to_pixel(area);
     }
 
-    override void damage_pixel(Rectangle area) {
+    override void damage_pixel(in Rectangle area) {
         mDamage = mDamage | area;
     }
 
@@ -157,35 +157,35 @@
         return mZoom;
     }
 
-    override Point model_to_pixel(Point model) const {
+    override Point model_to_pixel(in Point model) const {
         return Point.DEFAULT + mViewSize / 2.0 + mZoom * (model - mViewCentre);
     }
 
-    override Point pixel_to_model(Point pixel) const {
+    override Point pixel_to_model(in Point pixel) const {
         return mViewCentre + (pixel - mViewSize / 2.0 - Point.DEFAULT) / mZoom;
     }
 
-    override Vector model_to_pixel(Vector model) const {
+    override Vector model_to_pixel(in Vector model) const {
         return mZoom * model;
     }
 
-    override Vector pixel_to_model(Vector pixel) const {
+    override Vector pixel_to_model(in Vector pixel) const {
         return pixel / mZoom;
     }
 
-    override double model_to_pixel(double model) const {
+    override double model_to_pixel(in double model) const {
         return mZoom * model;
     }
 
-    override double pixel_to_model(double pixel) const {
+    override double pixel_to_model(in double pixel) const {
         return pixel / mZoom;
     }
 
-    override Rectangle model_to_pixel(Rectangle model) const {
+    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(Rectangle model) const {
+    override Rectangle pixel_to_model(in Rectangle model) const {
         return Rectangle(pixel_to_model(model.position), pixel_to_model(model.size));
     }
 
@@ -443,16 +443,15 @@
         }
 
         void update_rulers() {
-            Vector model_size = pixel_to_model(mViewSize);
+            invariant Vector model_size = pixel_to_model(mViewSize);
 
-            Point view_left_bottom = mViewCentre - model_size / 2.0;
-            Point view_right_top = mViewCentre + model_size / 2.0;
+            invariant Point view_left_bottom = mViewCentre - model_size / 2.0;
+            invariant Point view_right_top = mViewCentre + model_size / 2.0;
 
             // Define these just to obtain the position
             // below and we can preserve it
             double lower, upper, position, max_size;
 
-
             mHRuler.getRange(lower, upper, position, max_size);
             mHRuler.setRange(view_left_bottom.x,
                              view_right_top.x,
@@ -467,10 +466,10 @@
         }
 
         void update_adjustments() {
-            Vector model_size = pixel_to_model(mViewSize);
+            invariant Vector model_size = pixel_to_model(mViewSize);
 
-            Point view_left_bottom = mViewCentre - model_size / 2.0;
-            Point view_right_top = mViewCentre + model_size / 2.0;
+            invariant Point view_left_bottom = mViewCentre - model_size / 2.0;
+            invariant Point view_right_top = mViewCentre + model_size / 2.0;
 
             // Adjust the canvas size if necessary
             mCanvasBounds = Rectangle(min_extents(mCanvasBounds.min_corner, view_left_bottom),
@@ -507,7 +506,7 @@
                 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);
+                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();
@@ -518,7 +517,7 @@
             }
         }
 
-        double clamp_zoom(double zoom) { return clamp(zoom, 0.2, 10.0); }
+        double clamp_zoom(in double zoom) { return clamp(zoom, 0.2, 10.0); }
 
         bool mHadConfigure;
         Rectangle mDamage;          // pixels
--- a/tk/misc.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/tk/misc.d	Thu Jul 16 00:12:02 2009 +0930
@@ -1,14 +1,14 @@
 module tk.misc;
 
-double min(double a, double b) {
+double min(in double a, in double b) {
     return a < b ? a : b;
 }
 
-double max(double a, double b) {
+double max(in double a, in double b) {
     return a > b ? a : b;
 }
 
-double clamp(double v, double min, double max) {
+double clamp(in double v, in double min, in double max) {
     assert(min < max);
 
     if (v < min) { return min; }
--- a/tk/types.d	Wed Jul 15 23:49:02 2009 +0930
+++ b/tk/types.d	Thu Jul 16 00:12:02 2009 +0930
@@ -11,13 +11,17 @@
 
 mixin(defineEnum!("ButtonAction",
                   "SINGLE_PRESS", "DOUBLE_PRESS", "TRIPLE_PRESS", "RELEASE"));
+
 mixin(defineEnum!("ButtonName",
                   "LEFT", "MIDDLE", "RIGHT", "FOUR", "FIVE"));
+
 mixin(defineEnum!("ScrollDirection",
                   "UP", "DOWN", "LEFT", "RIGHT"));
+
 mixin(defineEnum!("Modifier",
                   "SHIFT", "CAPS_LOCK", "CONTROL", "ALT", "NUM_LOCK", "META",
-                  "SCROLL_LOCK", "LEFT_BUTTON", "MIDDLE_BUTTON", "RIGHT_BUTTON", "UNUSED_BUTTON_1", "UNUSED_BUTTON_2"));
+                  "SCROLL_LOCK", "LEFT_BUTTON", "MIDDLE_BUTTON", "RIGHT_BUTTON",
+                  "UNUSED_BUTTON_1", "UNUSED_BUTTON_2"));
 
 struct Mask {
     this(in Modifier[] modifiers) {
@@ -29,6 +33,7 @@
     string toString() {
         string s;
 
+        // FIXME this is terrible
         for (int i = 0; i < uint.sizeof * 8; ++i) {
             if (_bits & (1 << i)) {
                 if (s != "") s ~= "|";
@@ -39,11 +44,11 @@
         return s;
     }
 
-    bool is_set(Modifier m) const {
+    bool is_set(in Modifier m) const {
         return _bits & (1 << m);
     }
 
-    bool is_unset(Modifier m) const {
+    bool is_unset(in Modifier m) const {
         return !is_set(m);
     }