mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-16 03:36:32 +01:00
allow per-line configurability of the threshold used to determine if a PolyLine covers a given coordination
This commit is contained in:
parent
49d9397770
commit
e2f18ea658
2 changed files with 20 additions and 5 deletions
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue