diff --git a/libs/canvas/arc.cc b/libs/canvas/arc.cc index 6a27de58d1..07420245cc 100644 --- a/libs/canvas/arc.cc +++ b/libs/canvas/arc.cc @@ -146,3 +146,23 @@ Arc::covers (Duple const & point) const (angle_degs <= (_start_degrees + _arc_degrees)) && (radius < _radius); } + +void +Arc::size_allocate (Rect const & r) +{ + begin_change (); + + Item::size_allocate (r); + + /* This is an arc - some section of a circle, so any difference between + * height and width cannot change what is drawn. Pick width arbitrarily + * as the "key" dimension + */ + + _radius = min (r.width(),r.height()) / 2.0; + _center = Duple ((r.width()/2.), (r.height() /2.)); + + _bounding_box_dirty = true; + + end_change (); +} diff --git a/libs/canvas/canvas/arc.h b/libs/canvas/canvas/arc.h index b2588bf2f7..ca99870348 100644 --- a/libs/canvas/canvas/arc.h +++ b/libs/canvas/canvas/arc.h @@ -37,6 +37,8 @@ public: void render (Rect const & area, Cairo::RefPtr) const; void compute_bounding_box () const; + void size_allocate (Rect const & r); + void set_center (Duple const &); void set_radius (Coord); void set_arc (double degrees);