X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Fscroll_group.cc;h=3feb37f83a2ccd593ed74b2d0bbec9ef63b7dad3;hb=f694b867c1eaa8b959db2f17a894900d0a972738;hp=0ce612018ae532f0d3af4f4b9b4cadbae8a2d96c;hpb=792fe016e7bf260c84d974abcb41ab0c7dbc5cfe;p=ardour.git diff --git a/libs/canvas/scroll_group.cc b/libs/canvas/scroll_group.cc index 0ce612018a..3feb37f83a 100644 --- a/libs/canvas/scroll_group.cc +++ b/libs/canvas/scroll_group.cc @@ -27,15 +27,15 @@ using namespace std; using namespace ArdourCanvas; -ScrollGroup::ScrollGroup (Group* parent, ScrollSensitivity s) - : Group (parent) +ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s) + : Container (c) , _scroll_sensitivity (s) { } -ScrollGroup::ScrollGroup (Group* parent, Duple position, ScrollSensitivity s) - : Group (parent, position) - , _scroll_sensitivity (s) +ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s) + : Container (parent) + , _scroll_sensitivity (s) { } @@ -52,7 +52,10 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr context) c return; } - Rect self (_position.x, _position.y, _position.x + r.get().width(), _position.y + r.get().height()); + Rect self (_position.x + r.get().x0, + _position.y + r.get().y0, + _position.x + r.get().x1, + _position.y + r.get().y1); self.x1 = min (_position.x + _canvas->width(), self.x1); self.y1 = min (_position.y + _canvas->height(), self.y1); @@ -60,12 +63,10 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr context) c context->save (); context->rectangle (self.x0, self.y0, self.width(), self.height()); context->clip (); - - Group::render (area, context); + + Container::render (area, context); context->restore (); - - } void @@ -83,13 +84,18 @@ ScrollGroup::scroll_to (Duple const& d) bool ScrollGroup::covers_canvas (Duple const& d) const { - boost::optional r = bounding_box (); + boost::optional 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 @@ -101,7 +107,10 @@ ScrollGroup::covers_window (Duple const& d) const return false; } - Rect w = r->translate (-_scroll_offset); - - return w.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); }