diff doodle/gtk/canvas.d @ 67:31d10176415d

Checkpoint
author daveb
date Fri, 13 Aug 2010 15:28:04 +0930
parents eb5436b47d13
children 64bd864db30d
line wrap: on
line diff
--- a/doodle/gtk/canvas.d	Thu Aug 12 22:43:42 2010 +0930
+++ b/doodle/gtk/canvas.d	Fri Aug 13 15:28:04 2010 +0930
@@ -6,10 +6,10 @@
 }
 
 private {
+    import doodle.core.misc;
     import doodle.core.logging;
+    import doodle.cairo.routines;
     import doodle.gtk.conversions;
-    import doodle.tk.misc;
-    import doodle.cairo.routines;
 
     import cairo.Surface;
 
@@ -131,7 +131,7 @@
         // value, lower, upper, step-inc, page-inc, page-size
         // Give the adjustments dummy values until we receive a configure
         _hAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5);
-        _hAdjustment.addOnValueChanged(&onValueChanged);
+        _hAdjustment.addOnValueChanged(&onAdjustmentValueChanged);
         _hScrollbar = new HScrollbar(_hAdjustment);
         _hScrollbar.setInverted(false);
         attach(_hScrollbar,
@@ -142,7 +142,7 @@
                0, 0);
 
         _vAdjustment = new Adjustment(0.0, 0.0, 1.0, 0.2, 0.5, 0.5);
-        _vAdjustment.addOnValueChanged(&onValueChanged);
+        _vAdjustment.addOnValueChanged(&onAdjustmentValueChanged);
         _vScrollbar = new VScrollbar(_vAdjustment);
         _vScrollbar.setInverted(true);
         attach(_vScrollbar,
@@ -219,7 +219,7 @@
         void initialiseBounds() {
             Rectangle layerBounds = Rectangle.DEFAULT;
 
-            foreach (ref layer; _layers) {
+            foreach (layer; _layers) {
                 layerBounds = layerBounds | layer.bounds;
             }
 
@@ -245,7 +245,7 @@
         void consolidateBounds() {
             Rectangle layerBounds = Rectangle.DEFAULT;
 
-            foreach (ref layer; _layers) {
+            foreach (layer; _layers) {
                 layerBounds = layerBounds | layer.bounds;
             }
 
@@ -300,41 +300,38 @@
             //trace("Pixel damage: %s, model damage: %s", pixelDamage, modelDamage);
 
             modelCr.save; pixelCr.save; {
-                // Setup model context and clip
+                {
+                    // Setup model context and clip
+                    modelCr.translate(0.0, _viewSize.y);
+                    modelCr.scale(_zoom, -_zoom);
 
-                GtkAdjustment * hGtkAdjustment = _hAdjustment.getAdjustmentStruct;
-                GtkAdjustment * vGtkAdjustment = _vAdjustment.getAdjustmentStruct;
-
-                modelCr.scale(_zoom, -_zoom);
-                modelCr.translate(-gtk_adjustment_get_value(hGtkAdjustment),
-                                  -gtk_adjustment_get_value(vGtkAdjustment) - gtk_adjustment_get_page_size(vGtkAdjustment));
+                    immutable Vector modelSize = pixelToModel(_viewSize);
+                    immutable Point viewLeftBottom = _viewCentre - modelSize / 2.0;
+                    modelCr.translate(-viewLeftBottom.x, -viewLeftBottom.y);
 
-                rectangle(modelCr, modelDamage);
-                modelCr.clip;
-
-                // Setup pixel context and clip
+                    rectangle(modelCr, modelDamage);
+                    modelCr.clip;
+                }
 
-                pixelCr.translate(0.0, _viewSize.y);
-                pixelCr.scale(1.0, -1.0);
+                {
+                    // Setup pixel context and clip
+                    pixelCr.translate(0.0, _viewSize.y);
+                    pixelCr.scale(1.0, -1.0);
 
-                rectangle(pixelCr, pixelDamage);
-                pixelCr.clip;
-
-                // Fill the background
+                    rectangle(pixelCr, pixelDamage);
+                    pixelCr.clip;
+                }
 
                 pixelCr.save; {
-                    // Make the window light grey
+                    // Fill the background with light grey
                     pixelCr.setSourceRgba(0.9, 0.9, 0.9, 1.0);
                     rectangle(pixelCr, pixelDamage);
                     pixelCr.fill;
                 } pixelCr.restore;
 
                 // Draw each layer
-
-                foreach(ref layer; _layers) {
-                    modelCr.save; pixelCr.save; {
-                        layer.draw(this, pixelDamage, pixelCr, modelDamage, modelCr);
-                    } pixelCr.restore; modelCr.restore;
+                foreach(layer; _layers) {
+                    layer.draw(this, pixelDamage, pixelCr, modelDamage, modelCr);
                 }
             } pixelCr.restore; modelCr.restore;
 
@@ -393,7 +390,7 @@
            ushort hardwareKeycode;
            ubyte group;
            uint bitfield0;
-        //uint isModifier : 1;
+           uint isModifier : 1;
         }
          */
         bool onKeyPressEvent(GdkEventKey * event, Widget widget) {
@@ -565,27 +562,23 @@
             trace("onGrabNotify");
         }
 
-        void onValueChanged(Adjustment adjustment) {
+        void onAdjustmentValueChanged(Adjustment adjustment) {
             GtkAdjustment * hGtkAdjustment = _hAdjustment.getAdjustmentStruct;
             GtkAdjustment * vGtkAdjustment = _vAdjustment.getAdjustmentStruct;
 
-            Point viewLeftTop = Point(gtk_adjustment_get_value(hGtkAdjustment),
-                                      gtk_adjustment_get_value(vGtkAdjustment));
+            Point viewLeftBottom = Point(gtk_adjustment_get_value(hGtkAdjustment),
+                                         gtk_adjustment_get_value(vGtkAdjustment));
 
             Vector modelSize = pixelToModel(_viewSize);
 
-            //writefln("%s", viewLeftBottom);
-            _viewCentre = viewLeftTop + modelSize / 2.0;
-            //writefln("onValueChanged _viewCentre: %s", _viewCentre);
+            _viewCentre = viewLeftBottom + modelSize / 2.0;
 
             updateRulers;
-
             queueDraw;
         }
 
         void updateRulers() {
             immutable Vector modelSize = pixelToModel(_viewSize);
-
             immutable Point viewLeftBottom = _viewCentre - modelSize / 2.0;
             immutable Point viewRightTop = _viewCentre + modelSize / 2.0;
 
@@ -608,7 +601,6 @@
 
         void updateAdjustments() {
             immutable Vector modelSize = pixelToModel(_viewSize);
-
             immutable Point viewLeftBottom = _viewCentre - modelSize / 2.0;
             immutable Point viewRightTop = _viewCentre + modelSize / 2.0;
 
@@ -685,8 +677,8 @@
         bool _boundsValid;
         Rectangle _damage;          // pixels
 
-        // Model units are in millimetres
-        // Screen units are in pixels
+        // Model units are millimetres
+        // Screen units are pixels
         double _zoom;               // pixels-per-model-unit
         Vector _viewSize;           // pixel: size of view window in pixels
         Point _viewCentre;          // model: where in the model is the centre of our view