diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-06-18 08:23:06 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-06-18 08:23:06 -0400 |
commit | 77f5f4c4bf9074d953a1653658c8f96f38ae258c (patch) | |
tree | 08790670f6435eed917ab3f2629a0373652cbc1e /libs/canvas/item.cc | |
parent | a0c5de281a2ba029a9af53a6ffe3a717280998b3 (diff) |
basically operational switch to canvas drawing coordinates, although text and waves don't work, and redraw areas are too small
Diffstat (limited to 'libs/canvas/item.cc')
-rw-r--r-- | libs/canvas/item.cc | 32 |
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) |