mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-08 06:35:46 +01:00
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
This commit is contained in:
parent
ef79d1c4d4
commit
736038556f
2 changed files with 9 additions and 7 deletions
|
|
@ -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 ();
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue