From f190e630ab2b3d2ff1f7c8640a7d4a072ea3437e Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 28 Nov 2014 19:17:39 -0500 Subject: Show discrete/toggled automation as stepped line. --- libs/canvas/canvas/poly_line.h | 2 ++ libs/canvas/poly_line.cc | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) (limited to 'libs') diff --git a/libs/canvas/canvas/poly_line.h b/libs/canvas/canvas/poly_line.h index 16db9a69e2..04b05f5df1 100644 --- a/libs/canvas/canvas/poly_line.h +++ b/libs/canvas/canvas/poly_line.h @@ -33,6 +33,8 @@ class LIBCANVAS_API PolyLine : public PolyItem PolyLine (Item*); void render (Rect const & area, Cairo::RefPtr) const; + + virtual void set_steps (Points const &, bool stepped); bool covers (Duple const &) const; /** diff --git a/libs/canvas/poly_line.cc b/libs/canvas/poly_line.cc index 60bca6bccf..3150907db6 100644 --- a/libs/canvas/poly_line.cc +++ b/libs/canvas/poly_line.cc @@ -47,6 +47,30 @@ PolyLine::render (Rect const & area, Cairo::RefPtr context) cons } } +void +PolyLine::set_steps (Points const & points, bool stepped) +{ + if (!stepped) { + PolyItem::set(points); + return; + } + + Points copy; + for (Points::const_iterator p = points.begin(); p != points.end();) { + Points::const_iterator next = p; + ++next; + + copy.push_back(*p); + if (next != points.end() && next->x != p->x) { + copy.push_back(Duple(next->x, p->y)); + } + + p = next; + } + + PolyItem::set(copy); +} + bool PolyLine::covers (Duple const & point) const { -- cgit v1.2.3