diff canvas.d @ 18:df8d81d9f499

Lasso fiddling
author David Bryant <daveb@acres.com.au>
date Mon, 13 Jul 2009 17:08:32 +0930
parents c643c04e3f5e
children 22abbf4cde96
line wrap: on
line diff
--- a/canvas.d	Mon Jul 13 16:46:21 2009 +0930
+++ b/canvas.d	Mon Jul 13 17:08:32 2009 +0930
@@ -135,6 +135,10 @@
         mDamage = mDamage | model_to_pixel(area);
     }
 
+    override void damage_pixel(Rectangle area) {
+        mDamage = mDamage | area;
+    }
+
     override double zoom() const {
         return mZoom;
     }
@@ -231,10 +235,12 @@
                           Vector(cast(double)event.area.width, cast(double)event.area.height));
 
             model_cr.save; pixel_cr.save; {
+                // FIXME restore clipping
+
                 // Setup model context
 
-                rectangle(model_cr, damage);
-                model_cr.clip;
+                //rectangle(model_cr, damage);
+                //model_cr.clip;
 
                 GtkAdjustment * h_gtkAdjustment = mHAdjustment.getAdjustmentStruct;
                 GtkAdjustment * v_gtkAdjustment = mVAdjustment.getAdjustmentStruct;
@@ -247,14 +253,14 @@
 
                 pixel_cr.translate(0.0, mViewSize.y);
                 pixel_cr.scale(1.0, -1.0);
-                rectangle(pixel_cr, damage);
-                pixel_cr.clip;
+                //rectangle(pixel_cr, damage);
+                //pixel_cr.clip;
 
                 // Fill the background
 
                 pixel_cr.save; {
                     // Make the window light grey
-                    pixel_cr.setSourceRgba(1.0, 1.0, 1.0, 0.7);
+                    pixel_cr.setSourceRgba(0.6, 0.6, 0.6, 1.0);
                     rectangle(pixel_cr, damage);
                     pixel_cr.fill;
                 } pixel_cr.restore;
@@ -442,14 +448,19 @@
 
         void process_damage() {
             if (mDamage.valid) {
-                writefln("Damage: %s", mDamage);
+                //writefln("Damage: %s", mDamage);
                 int x, y, w, h;
                 mDamage.get_quantised(x, y, w, h);
-                mDrawingArea.queueDrawArea(x, cast(int)mViewSize.y - y, w, h);
+                //writefln("Quantised damage: %d %d %d %d", x, y, w, h);
+                y = cast(int)mViewSize.y - (y + h);
+                //writefln("Flipped Quantised damage: %d %d %d %d", x, y, w, h);
+                // FIXME only redraw the damaged area
+                //mDrawingArea.queueDrawArea(x, y, w, h);
+                mDrawingArea.queueDraw();
                 mDamage = Rectangle.DEFAULT;
             }
             else {
-                writefln("No damage");
+                //writefln("No damage");
             }
         }