diff options
Diffstat (limited to 'libs')
-rw-r--r-- | libs/canvas/canvas/poly_line.h | 2 | ||||
-rw-r--r-- | libs/canvas/poly_line.cc | 24 |
2 files changed, 26 insertions, 0 deletions
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<Cairo::Context>) 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<Cairo::Context> 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 { |