changeset 75:3cac0ee8ca35

Ok, things are seem on-track again
author "David Bryant <bagnose@gmail.com>"
date Sun, 15 Aug 2010 01:14:26 +0930
parents c03ed75c0f8e
children 78bc2046256e
files doodle/gtk/canvas.d
diffstat 1 files changed, 7 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/doodle/gtk/canvas.d	Sun Aug 15 01:11:58 2010 +0930
+++ b/doodle/gtk/canvas.d	Sun Aug 15 01:14:26 2010 +0930
@@ -8,9 +8,10 @@
 private {
     import doodle.core.misc;
     import doodle.core.logging;
+    import doodle.tk.pixel_model;
     import doodle.tk.cairo;
+    import doodle.dia.layer_stack;
     import doodle.gtk.conversions;
-    import doodle.tk.pixel_model;
 
     import cairo.Surface;
 
@@ -47,7 +48,7 @@
 
         _damageScreen = Rectangle.DEFAULT;
 
-        _layers = layers.dup;
+        _layerStack = new LayerStack(layers);
         _eventHandler = eventHandler;
         _grid = grid;
         _pixelsPerMillimetre = pixelsPerMillimetre;
@@ -197,15 +198,8 @@
 
     private {
 
-        Rectangle layerBounds() const {
-            Rectangle bounds = Rectangle.DEFAULT;
-            foreach (layer; _layers) { bounds = bounds | layer.bounds; }
-            assert(bounds.valid);
-            return bounds;
-        }
-
         void initialiseBounds(in Rectangle viewBounds) {
-            Rectangle lb = layerBounds;
+            Rectangle lb = _layerStack.bounds;
 
             // FIXME use a function that grows a rectangle about its centre
             // and change 2.0 to a class-level constant
@@ -220,7 +214,7 @@
         }
 
         void consolidateBounds() {
-            Rectangle lb = layerBounds;
+            Rectangle lb = _layerStack.bounds;
 
             // FIXME likewise as above
             Rectangle paddedLayerBounds = expand(move(lb, - lb.size), 2.0 * lb.size);
@@ -297,10 +291,7 @@
                     pixelCr.fill;
                 } pixelCr.restore;
 
-                // Draw each layer
-                foreach(layer; _layers) {
-                    layer.draw(pixelDamage, pixelCr, modelDamage, modelCr);
-                }
+                _layerStack.draw(pixelDamage, pixelCr, modelDamage, modelCr);
             } pixelCr.restore; modelCr.restore;
 
             return true;
@@ -496,7 +487,7 @@
             _drawingArea.grabFocus();
         }
 
-        Layer[]       _layers;
+        LayerStack    _layerStack;
         IEventHandler _eventHandler;
         IGrid         _grid;
         double        _pixelsPerMillimetre;