allow per-line configurability of the threshold used to determine if a PolyLine covers a given coordination

This commit is contained in:
Paul Davis 2014-02-20 12:53:08 -05:00
parent 49d9397770
commit e2f18ea658
2 changed files with 20 additions and 5 deletions

View file

@ -28,12 +28,21 @@ namespace ArdourCanvas {
class LIBCANVAS_API PolyLine : public PolyItem class LIBCANVAS_API PolyLine : public PolyItem
{ {
public: public:
PolyLine (Group *); PolyLine (Group *);
void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const; void render (Rect const & area, Cairo::RefPtr<Cairo::Context>) const;
bool covers (Duple const &) const; bool covers (Duple const &) const;
/**
* Set the distance at which a point will be considered to be covered
* by the line. For the definition of "distance" see
* utils.cc:distance_to_segment_squared()
*/
void set_covers_threshold (double);
private:
double _threshold;
}; };
} }

View file

@ -28,6 +28,7 @@ using namespace ArdourCanvas;
PolyLine::PolyLine (Group* parent) PolyLine::PolyLine (Group* parent)
: Item (parent) : Item (parent)
, PolyItem (parent) , PolyItem (parent)
, _threshold (1.0)
{ {
} }
@ -59,7 +60,6 @@ PolyLine::covers (Duple const & point) const
/* repeat for each line segment */ /* repeat for each line segment */
const Rect visible (_canvas->visible_area()); const Rect visible (_canvas->visible_area());
static const double threshold = 2.0;
for (i = 1, j = 0; i < npoints; ++i, ++j) { for (i = 1, j = 0; i < npoints; ++i, ++j) {
@ -85,7 +85,7 @@ PolyLine::covers (Duple const & point) const
continue; continue;
} }
if (d < threshold) { if (d < _threshold + _outline_width) {
return true; return true;
} }
@ -93,3 +93,9 @@ PolyLine::covers (Duple const & point) const
return false; return false;
} }
void
PolyLine::set_covers_threshold (double t)
{
_threshold = t;
}