X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Farc.cc;h=49b3f63f0acfef6419d7eb6f2e3f8ecc20da641c;hb=c8c6bca6587450ff64303dbc994a4cd28d6ce7aa;hp=e95fbe0ad599f82b402e5ed1f5cadd15454a12e0;hpb=6acdfc69b785841ac10a324484ddd0208612a213;p=ardour.git diff --git a/libs/canvas/arc.cc b/libs/canvas/arc.cc index e95fbe0ad5..49b3f63f0a 100644 --- a/libs/canvas/arc.cc +++ b/libs/canvas/arc.cc @@ -31,15 +31,20 @@ using namespace std; using namespace ArdourCanvas; -Arc::Arc (Group* parent) - : Item (parent) - , Outline (parent) - , Fill (parent) +Arc::Arc (Canvas* c) + : Item (c) , _radius (0.0) , _arc_degrees (0.0) , _start_degrees (0.0) { +} +Arc::Arc (Item* parent) + : Item (parent) + , _radius (0.0) + , _arc_degrees (0.0) + , _start_degrees (0.0) +{ } void @@ -50,7 +55,7 @@ Arc::compute_bounding_box () const /* this could be smaller in the case of small _arc values but I can't be bothered to optimize it. */ - + bbox.x0 = _center.x - _radius; bbox.y0 = _center.y - _radius; bbox.x1 = _center.x + _radius; @@ -68,7 +73,7 @@ Arc::render (Rect const & /*area*/, Cairo::RefPtr context) const if (_radius <= 0.0 || _arc_degrees <= 0.0) { return; } - + Duple c = item_to_window (Duple (_center.x, _center.y)); context->arc (c.x, c.y, _radius, _start_degrees * (M_PI/180.0), _arc_degrees * (M_PI/180.0)); @@ -93,45 +98,45 @@ void Arc::set_radius (Coord r) { begin_change (); - + _radius = r; _bounding_box_dirty = true; end_change (); -} +} void Arc::set_arc (double deg) { begin_change (); - + _arc_degrees = deg; _bounding_box_dirty = true; end_change (); -} +} void Arc::set_start (double deg) { begin_change (); - + _start_degrees = deg; - + _bounding_box_dirty = true; end_change (); -} +} bool Arc::covers (Duple const & point) const { - Duple p = canvas_to_item (point); + Duple p = window_to_item (point); double angle_degs = atan (p.y/p.x) * 2.0 * M_PI; double radius = sqrt (p.x * p.x + p.y * p.y); - - return (angle_degs >= _start_degrees) && - (angle_degs <= (_start_degrees + _arc_degrees)) && + + return (angle_degs >= _start_degrees) && + (angle_degs <= (_start_degrees + _arc_degrees)) && (radius < _radius); }