Mercurial > projects > doodle
changeset 15:2f79aab4d385
Checkpoint
author | "David Bryant <bagnose@gmail.com>" |
---|---|
date | Sun, 12 Jul 2009 13:23:06 +0930 |
parents | 0b7e7d43a79d |
children | 9e63308b749c |
files | canvas.d tk/geometry.d |
diffstat | 2 files changed, 40 insertions(+), 30 deletions(-) [+] |
line wrap: on
line diff
--- a/canvas.d Sun Jul 12 01:23:32 2009 +0930 +++ b/canvas.d Sun Jul 12 13:23:06 2009 +0930 @@ -46,17 +46,16 @@ // Take the union of the bounds of each layer to // determine the canvas size - Rectangle total_layer_bounds; + Rectangle layer_bounds = Rectangle.DEFAULT; foreach (ref layer; mLayers) { - total_layer_bounds = total_layer_bounds | layer.bounds; + layer_bounds = layer_bounds | layer.bounds; } - assert(total_layer_bounds.valid); + assert(layer_bounds.valid); - mCanvasLeftBottom = total_layer_bounds.min_corner - total_layer_bounds.size; - mCanvasRightTop = total_layer_bounds.max_corner + total_layer_bounds.size; - mViewCentre = mCanvasLeftBottom + (mCanvasRightTop - mCanvasLeftBottom) / 2.0; + mCanvasBounds = layer_bounds.moved(-layer_bounds.size).expanded(2.0 * layer_bounds.size); + mViewCentre = mCanvasBounds.centre; // Create our child widgets and register callbacks @@ -220,8 +219,8 @@ GtkAdjustment * h_gtkAdjustment = mHAdjustment.getAdjustmentStruct(); GtkAdjustment * v_gtkAdjustment = mVAdjustment.getAdjustmentStruct(); - model_cr.translate(mCanvasLeftBottom.x - gtk_adjustment_get_value(h_gtkAdjustment), - mCanvasLeftBottom.y - gtk_adjustment_get_value(v_gtkAdjustment)); + model_cr.translate(mCanvasBounds.min_corner.x - gtk_adjustment_get_value(h_gtkAdjustment), + mCanvasBounds.min_corner.y - gtk_adjustment_get_value(v_gtkAdjustment)); model_cr.scale(mZoom, -mZoom); // Setup screen context @@ -376,28 +375,26 @@ Point view_right_top = mViewCentre + model_size / 2.0; // Adjust the canvas size if necessary - mCanvasLeftBottom = min_extents(mCanvasLeftBottom, view_left_bottom); - mCanvasRightTop = max_extents(mCanvasRightTop, view_right_top); - - Vector canvas_size = mCanvasRightTop - mCanvasLeftBottom; + mCanvasBounds = Rectangle(min_extents(mCanvasBounds.min_corner, view_left_bottom), + max_extents(mCanvasBounds.max_corner, view_right_top)); // Update the adjustments GtkAdjustment * h_gtkAdjustment = mHAdjustment.getAdjustmentStruct(); GtkAdjustment * v_gtkAdjustment = mVAdjustment.getAdjustmentStruct(); - gtk_adjustment_set_lower(h_gtkAdjustment, mCanvasLeftBottom.x); - gtk_adjustment_set_upper(h_gtkAdjustment, mCanvasRightTop.x); + gtk_adjustment_set_lower(h_gtkAdjustment, mCanvasBounds.min_corner.x); + gtk_adjustment_set_upper(h_gtkAdjustment, mCanvasBounds.max_corner.y); gtk_adjustment_set_value(h_gtkAdjustment, view_left_bottom.x); - gtk_adjustment_set_step_increment(h_gtkAdjustment, canvas_size.x / 16.0); - gtk_adjustment_set_page_increment(h_gtkAdjustment, canvas_size.x / 4.0); + gtk_adjustment_set_step_increment(h_gtkAdjustment, mCanvasBounds.size.x / 16.0); + gtk_adjustment_set_page_increment(h_gtkAdjustment, mCanvasBounds.size.x / 4.0); gtk_adjustment_set_page_size(h_gtkAdjustment, model_size.x); - gtk_adjustment_set_lower(v_gtkAdjustment, mCanvasLeftBottom.y); - gtk_adjustment_set_upper(v_gtkAdjustment, mCanvasRightTop.y); + gtk_adjustment_set_lower(v_gtkAdjustment, mCanvasBounds.min_corner.y); + gtk_adjustment_set_upper(v_gtkAdjustment, mCanvasBounds.max_corner.y); gtk_adjustment_set_value(v_gtkAdjustment, view_left_bottom.y); - gtk_adjustment_set_step_increment(v_gtkAdjustment, canvas_size.y / 16.0); - gtk_adjustment_set_page_increment(v_gtkAdjustment, canvas_size.y / 4.0); + gtk_adjustment_set_step_increment(v_gtkAdjustment, mCanvasBounds.size.y / 16.0); + gtk_adjustment_set_page_increment(v_gtkAdjustment, mCanvasBounds.size.y / 4.0); gtk_adjustment_set_page_size(v_gtkAdjustment, model_size.y); mHAdjustment.changed; @@ -413,10 +410,7 @@ double mZoom; // pixels-per-model-unit (mm) Point mViewCentre; // model: where in the model is the centre of our view - - Point mCanvasLeftBottom; // model: bottom left corner of canvas - Point mCanvasRightTop; // model: top right corner of canvas - + Rectangle mCanvasBounds; // model: Vector mViewSize; // screen: size of view window in pixels // Child widgets:
--- a/tk/geometry.d Sun Jul 12 01:23:32 2009 +0930 +++ b/tk/geometry.d Sun Jul 12 13:23:06 2009 +0930 @@ -174,15 +174,31 @@ } } - /* - Rectangle moved(in Vector displacement) { - return Rectangle( + // TODO make these free functions + + Rectangle moved(in Vector displacement) const { + return Rectangle(_position + displacement, _size); + } + + Rectangle expanded(in Vector expand_amount) const { + return Rectangle(_position, _size + expand_amount); + } + + Rectangle shrunk(in Vector shrink_amount) const { + return Rectangle(_position, _size - shrink_amount); } - Rectangle resized(in Vector new_size) { + + Rectangle resized(in Vector new_size) const { + return Rectangle(_position, new_size); } - Rectangle repositioned(in Point new_position) { + + Rectangle repositioned(in Point new_position) const { + return Rectangle(new_position, _size); } - */ + + Point centre() const { + return _position + _size / 2.0; + } string toString() const { return std.string.format("{%s, %s}", _position, _size);