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