# HG changeset patch # User daveb # Date 1282208298 -34200 # Node ID 42766e14534e3a02308a62ebbf7b7f4b55fac4cb # Parent 885914257e0ed131bd65a3ef01cbd37eed94bc16 Update screenViewBounds when the window is resized diff -r 885914257e0e -r 42766e14534e doodle/dia/grid_layer.d --- a/doodle/dia/grid_layer.d Thu Aug 19 00:28:57 2010 +0930 +++ b/doodle/dia/grid_layer.d Thu Aug 19 18:28:18 2010 +0930 @@ -37,16 +37,14 @@ assert(_zoomValid); auto z = screenModel.zoom; - // Is _zoom like screenModel.zoom ? modelRenderer.pushState; { modelRenderer.setColor(Color(0.0, 0.0, 0.0, 0.3)); - modelRenderer.setLineWidth(0.5); + modelRenderer.setLineWidth(1 / z); auto x = start(modelDamage.corner0.x, _spacing); for (;;) { - writefln("Doing something %s", x); modelRenderer.drawVLine(x, modelDamage.corner0.y, modelDamage.corner1.y); x += _spacing; if (x > modelDamage.corner1.x) break; @@ -55,62 +53,11 @@ auto y = start(modelDamage.corner0.y, _spacing); for (;;) { - writefln("Doing something %s", y); modelRenderer.drawHLine(y, modelDamage.corner0.x, modelDamage.corner1.x); y += _spacing; if (y > modelDamage.corner1.y) break; } } modelRenderer.popState; - -/+ - modelCr.save(); { - modelCr.setSourceRgba(0.0, 0.0, 0.0, 0.3); - modelCr.setLineWidth(0.5); - - { - // vertical grid lines - double x = start(modelDamage.corner0.x, _spacing); - - for (;;) { - vline(modelCr, x, modelDamage.corner0.y, modelDamage.corner1.y); - - // Ensure 1 pixel wide FIXME is this naughty? We are sneaking - // through cairo to mix model and pixel coordinates... - modelCr.save(); { - modelCr.scale(1.0 / z, 1.0 / z); - modelCr.stroke(); - } modelCr.restore(); - - if (x > modelDamage.corner1.x) { - break; - } - - x += _spacing; - } - } - - { - // horizontal grid lines - double y = start(modelDamage.corner0.y, _spacing); - - for (;;) { - hline(modelCr, y, modelDamage.corner0.x, modelDamage.corner1.x); - - // FIXME? - modelCr.save(); { - modelCr.scale(1.0 / xx, 1.0 / yy); - modelCr.stroke(); - } modelCr.restore(); - - if (y > modelDamage.corner1.y) { - break; - } - - y += _spacing; - } - } - } modelCr.restore(); - +/ } // IGrid overrides: diff -r 885914257e0e -r 42766e14534e doodle/dia/icanvas.d --- a/doodle/dia/icanvas.d Thu Aug 19 00:28:57 2010 +0930 +++ b/doodle/dia/icanvas.d Thu Aug 19 18:28:18 2010 +0930 @@ -52,7 +52,7 @@ void zoomChanged(double zoom); // TODO inout? - bool snap(in Point a, out Point b) const; + bool snap(in Point a, out Point b) const; // XXX remove this and add it to Layer } interface IPage { diff -r 885914257e0e -r 42766e14534e doodle/gtk/cairo_canvas.d --- a/doodle/gtk/cairo_canvas.d Thu Aug 19 00:28:57 2010 +0930 +++ b/doodle/gtk/cairo_canvas.d Thu Aug 19 18:28:18 2010 +0930 @@ -176,16 +176,6 @@ private { - void initialiseBounds(in Rectangle viewBoundsScreen) { - Rectangle layerBounds = _layerStack.bounds; - Rectangle paddedLayerBounds = growCentre(layerBounds, 2 * layerBounds.size); - _screenModel = new ScreenModel(0.25 * _pixelsPerMillimetre, paddedLayerBounds, viewBoundsScreen); - _grid.zoomChanged(_screenModel.zoom); - - updateAdjustments; - updateRulers; - } - void consolidateBounds() { Rectangle layerBounds = _layerStack.bounds; Rectangle paddedLayerBounds = growCentre(layerBounds, 2 * layerBounds.size); @@ -198,9 +188,21 @@ bool onConfigure(GdkEventConfigure * event, Widget widget) { assert(widget is _drawingArea); - Rectangle viewBoundsScreen = Rectangle(Point(0.0, 0.0), Vector(cast(double)event.width, cast(double)event.height)); - if (_screenModel is null) { initialiseBounds(viewBoundsScreen); } - else { consolidateBounds; } + auto viewBoundsScreen = Rectangle(Point(0.0, 0.0), Vector(cast(double)event.width, cast(double)event.height)); + + if (_screenModel is null) { + Rectangle layerBounds = _layerStack.bounds; + Rectangle paddedLayerBounds = growCentre(layerBounds, 2 * layerBounds.size); + _screenModel = new ScreenModel(0.25 * _pixelsPerMillimetre, paddedLayerBounds, viewBoundsScreen); + _grid.zoomChanged(_screenModel.zoom); + + updateAdjustments; + updateRulers; + } + else { + _screenModel.setViewBoundsScreen(viewBoundsScreen); + consolidateBounds; + } return true; } diff -r 885914257e0e -r 42766e14534e doodle/tk/screen_model.d --- a/doodle/tk/screen_model.d Thu Aug 19 00:28:57 2010 +0930 +++ b/doodle/tk/screen_model.d Thu Aug 19 18:28:18 2010 +0930 @@ -36,6 +36,7 @@ _viewCentreModel = _canvasBoundsModel.centre; } + void setViewBoundsScreen(in Rectangle viewBoundsScreen) { _viewBoundsScreen = viewBoundsScreen; } void consolidateCanvasBounds(in Rectangle requiredCanvasBounds) { _canvasBoundsModel = screenToModel(_viewBoundsScreen) | requiredCanvasBounds; } void canvasAccommodate(in Rectangle bounds) { _canvasBoundsModel = _canvasBoundsModel | bounds; }