X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Fscroll_group.cc;h=64b5bee1c9a9ba963437d4c45a9d6f773cd6bef5;hb=b726255007bfdafb29c547bafd71bbe32d11f58e;hp=df51df9ebb0d0b62fa2d224b4f3080d5df7e33cc;hpb=ad017365f7a73f8ba57f667cc1aa36478b48c50e;p=ardour.git diff --git a/libs/canvas/scroll_group.cc b/libs/canvas/scroll_group.cc index df51df9ebb..64b5bee1c9 100644 --- a/libs/canvas/scroll_group.cc +++ b/libs/canvas/scroll_group.cc @@ -29,13 +29,13 @@ using namespace ArdourCanvas; ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s) : Container (c) - , _scroll_sensitivity (s) + , _scroll_sensitivity (s) { } ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s) : Container (parent) - , _scroll_sensitivity (s) + , _scroll_sensitivity (s) { } @@ -46,13 +46,16 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr context) c * WITHOUT scroll offsets in effect */ - boost::optional r = bounding_box(); + Rect r = bounding_box(); if (!r) { return; } - Rect self (_position.x, _position.y, _position.x + r.get().width(), _position.y + r.get().height()); + Rect self (_position.x + r.x0, + _position.y + r.y0, + _position.x + r.x1, + _position.y + r.y1); self.x1 = min (_position.x + _canvas->width(), self.x1); self.y1 = min (_position.y + _canvas->height(), self.y1); @@ -60,7 +63,7 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr context) c context->save (); context->rectangle (self.x0, self.y0, self.width(), self.height()); context->clip (); - + Container::render (area, context); context->restore (); @@ -81,25 +84,33 @@ ScrollGroup::scroll_to (Duple const& d) bool ScrollGroup::covers_canvas (Duple const& d) const { - boost::optional r = bounding_box (); + Rect r = bounding_box (); if (!r) { return false; } - return r->contains (d); + /* Bounding box is in item coordinates, but we need + to consider the position of the bounding box + within the canvas. + */ + + return r.translate (position()).contains (d); } bool ScrollGroup::covers_window (Duple const& d) const { - boost::optional r = bounding_box (); + Rect r = bounding_box (); if (!r) { return false; } - Rect w = r->translate (-_scroll_offset); + /* Bounding box is in item coordinates, but we need + to consider the position of the bounding box + within the canvas. + */ - return w.contains (d); + return r.translate (position()).contains (d); }