From e2f18ea658e82171697392b7bd8cfdd8cbbdedaa Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 20 Feb 2014 12:53:08 -0500 Subject: [PATCH] allow per-line configurability of the threshold used to determine if a PolyLine covers a given coordination --- libs/canvas/canvas/poly_line.h | 15 ++++++++++++--- libs/canvas/poly_line.cc | 10 ++++++++-- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/libs/canvas/canvas/poly_line.h b/libs/canvas/canvas/poly_line.h index 72c20e0674..4f1b2b0157 100644 --- a/libs/canvas/canvas/poly_line.h +++ b/libs/canvas/canvas/poly_line.h @@ -28,12 +28,21 @@ namespace ArdourCanvas { class LIBCANVAS_API PolyLine : public PolyItem { -public: + public: PolyLine (Group *); - + void render (Rect const & area, Cairo::RefPtr) 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; }; } diff --git a/libs/canvas/poly_line.cc b/libs/canvas/poly_line.cc index 8e0498593e..ae6d15a8fd 100644 --- a/libs/canvas/poly_line.cc +++ b/libs/canvas/poly_line.cc @@ -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; +}