Mercurial > projects > doodle
changeset 91:42766e14534e
Update screenViewBounds when the window is resized
author | daveb |
---|---|
date | Thu, 19 Aug 2010 18:28:18 +0930 |
parents | 885914257e0e |
children | a98116479793 |
files | doodle/dia/grid_layer.d doodle/dia/icanvas.d doodle/gtk/cairo_canvas.d doodle/tk/screen_model.d |
diffstat | 4 files changed, 18 insertions(+), 68 deletions(-) [+] |
line wrap: on
line diff
--- 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:
--- 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 {
--- 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; }
--- 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; }