X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Farc.cc;h=baec2fafb14f46e3758e2039cfb992975ce2c72f;hb=542d1ce01c6629362edd8b14eee9523941a3c128;hp=c8eaf030e77e50ff8a68cd898ea2c075106537b6;hpb=ce8731b32d5e91f56396cb5f6ca0798bc7fed48a;p=ardour.git diff --git a/libs/canvas/arc.cc b/libs/canvas/arc.cc index c8eaf030e7..baec2fafb1 100644 --- a/libs/canvas/arc.cc +++ b/libs/canvas/arc.cc @@ -16,8 +16,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#include #include + #include + #include "pbd/compose.h" #include "canvas/circle.h" #include "canvas/types.h" @@ -28,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 @@ -65,7 +73,10 @@ Arc::render (Rect const & /*area*/, Cairo::RefPtr context) const if (_radius <= 0.0 || _arc_degrees <= 0.0) { return; } - context->arc (_center.x, _center.y, _radius, _start_degrees * (M_PI/180.0), _arc_degrees * (M_PI/180.0)); + + 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)); setup_fill_context (context); context->fill_preserve (); setup_outline_context (context); @@ -94,7 +105,6 @@ Arc::set_radius (Coord r) end_change (); } - void Arc::set_arc (double deg) { @@ -118,3 +128,15 @@ Arc::set_start (double deg) end_change (); } +bool +Arc::covers (Duple const & point) const +{ + 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)) && + (radius < _radius); +}