diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2015-02-09 16:40:10 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2015-02-09 16:40:10 -0500 |
commit | 736038556fa41607d54a57fd3339d4fd1782bddf (patch) | |
tree | f9bfe7a8ea40bba7de3d53cbacf8974955954f7d /libs | |
parent | ef79d1c4d4ce45c0ad14b3dcaaff723b5f521aa2 (diff) |
canvas items must be able to use fractional positions when rendering.
This is required to be able to draw precise single pixel lines, as described
in the Cairo FAQ
Diffstat (limited to 'libs')
-rw-r--r-- | libs/canvas/canvas/item.h | 2 | ||||
-rw-r--r-- | libs/canvas/item.cc | 14 |
2 files changed, 9 insertions, 7 deletions
diff --git a/libs/canvas/canvas/item.h b/libs/canvas/canvas/item.h index 308b2437c3..60fadabfbd 100644 --- a/libs/canvas/canvas/item.h +++ b/libs/canvas/canvas/item.h @@ -154,7 +154,7 @@ public: Duple item_to_window (Duple const&, bool rounded = true) const; Duple window_to_item (Duple const&) const; - Rect item_to_window (Rect const&) const; + Rect item_to_window (Rect const&, bool rounded = true) const; Rect window_to_item (Rect const&) const; void raise_to_top (); diff --git a/libs/canvas/item.cc b/libs/canvas/item.cc index 9a851891d9..ab8764a97a 100644 --- a/libs/canvas/item.cc +++ b/libs/canvas/item.cc @@ -231,14 +231,16 @@ Item::window_to_item (ArdourCanvas::Duple const & d) const } ArdourCanvas::Rect -Item::item_to_window (ArdourCanvas::Rect const & r) const +Item::item_to_window (ArdourCanvas::Rect const & r, bool rounded) const { Rect ret = item_to_canvas (r).translate (-scroll_offset()); - ret.x0 = round (ret.x0); - ret.x1 = round (ret.x1); - ret.y0 = round (ret.y0); - ret.y1 = round (ret.y1); + if (rounded) { + ret.x0 = round (ret.x0); + ret.x1 = round (ret.x1); + ret.y0 = round (ret.y0); + ret.y1 = round (ret.y1); + } return ret; } @@ -766,7 +768,7 @@ Item::render_children (Rect const & area, Cairo::RefPtr<Cairo::Context> context) continue; } - Rect item = (*i)->item_to_window (item_bbox.get()); + Rect item = (*i)->item_to_window (item_bbox.get(), false); boost::optional<Rect> d = item.intersection (area); if (d) { |