summaryrefslogtreecommitdiff
path: root/libs/canvas/item.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/canvas/item.cc')
-rw-r--r--libs/canvas/item.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/libs/canvas/item.cc b/libs/canvas/item.cc
index 569d03f81f..dca3064bce 100644
--- a/libs/canvas/item.cc
+++ b/libs/canvas/item.cc
@@ -127,6 +127,20 @@ Item::canvas_to_item (ArdourCanvas::Duple const & d) const
return d.translate (offset);
}
+ArdourCanvas::Rect
+Item::canvas_to_item (ArdourCanvas::Rect const & d) const
+{
+ Item const * i = this;
+ Duple offset;
+
+ while (i) {
+ offset = offset.translate (-(i->position()));
+ i = i->parent();
+ }
+
+ return d.translate (offset);
+}
+
void
Item::item_to_canvas (Coord& x, Coord& y) const
{
@@ -145,6 +159,24 @@ Item::canvas_to_item (Coord& x, Coord& y) const
y = d.y;
}
+Duple
+Item::item_to_window (ArdourCanvas::Duple const & d) const
+{
+ return _canvas->canvas_to_window (item_to_canvas (d));
+}
+
+Duple
+Item::window_to_item (ArdourCanvas::Duple const & d) const
+{
+ return _canvas->window_to_canvas (canvas_to_item (d));
+}
+
+Rect
+Item::item_to_window (ArdourCanvas::Rect const & r) const
+{
+ return _canvas->canvas_to_window (item_to_canvas (r));
+}
+
/** Set the position of this item in the parent's coordinates */
void
Item::set_position (Duple p)