From 7356ff6ab50084d6a4b57137e70f9bd74290a129 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sat, 24 Jan 2015 14:07:36 -0500 Subject: [PATCH] ScrollGroups are kept in their own list, so ::window_to_canvas() does not need to inspect root group children to find them --- libs/canvas/canvas.cc | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/libs/canvas/canvas.cc b/libs/canvas/canvas.cc index 8b926ef4bc..4a99e73a35 100644 --- a/libs/canvas/canvas.cc +++ b/libs/canvas/canvas.cc @@ -228,12 +228,6 @@ Canvas::item_changed (Item* item, boost::optional pre_change_bounding_box) Duple Canvas::window_to_canvas (Duple const & d) const { - /* Find the scroll group that covers d (a window coordinate). Scroll groups are only allowed - * as children of the root group, so we just scan its first level - * children and see what we can find. - */ - - std::list const& root_children (_root.items()); ScrollGroup* sg = 0; /* if the coordinates are negative, clamp to zero and find the item @@ -249,10 +243,11 @@ Canvas::window_to_canvas (Duple const & d) const in_window.y = 0; } - for (std::list::const_iterator i = root_children.begin(); i != root_children.end(); ++i) { - if (((sg = dynamic_cast(*i)) != 0) && sg->covers_window (in_window)) { + for (list::const_iterator s = scrollers.begin(); s != scrollers.end(); ++s) { + if ((*s)->covers_window (in_window)) { + sg = *s; break; - } + } } if (sg) { @@ -279,7 +274,6 @@ Canvas::canvas_to_window (Duple const & d, bool rounded) const break; } } - if (sg) { wd = d.translate (-sg->scroll_offset());