Fix astate setting for combo parameters when setting all astate
[ardour.git] / libs / canvas / scroll_group.cc
index ad3731116a01c6e9dcd62b547435a58fe92f3390..9e7732b8d232b19a6954cfb0f7b04eb005d7f0a9 100644 (file)
 using namespace std;
 using namespace ArdourCanvas;
 
-ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s, bool clip)
+ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s)
        : Container (c)
-       , _scroll_sensitivity (s)       
-       , _clip(clip)
+       , _scroll_sensitivity (s)
 {
 }
 
-ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s, bool clip)
+ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s)
        : Container (parent)
-       , _scroll_sensitivity (s)       
-       , _clip(clip)
+       , _scroll_sensitivity (s)
 {
 }
 
@@ -54,14 +52,6 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) c
                return;
        }
 
-       if (!_clip) {
-               /* kludge: clip disabled, because for some reason the cursor scroll
-                  group requires scroll offsets here to clip correctly yet everything
-                  else does not.  I can't figure this out, so since not clipping a
-                  single arrow isn't the end of the world, just don't clip. */
-               Container::render (area, context);
-       }
-
        Rect self (_position.x + r.get().x0,
                   _position.y + r.get().y0,
                   _position.x + r.get().x1,
@@ -73,7 +63,7 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) c
        context->save ();
        context->rectangle (self.x0, self.y0, self.width(), self.height());
        context->clip ();
-       
+
        Container::render (area, context);
 
        context->restore ();
@@ -94,13 +84,18 @@ ScrollGroup::scroll_to (Duple const& d)
 bool
 ScrollGroup::covers_canvas (Duple const& d) const
 {
-       boost::optional<Rect> r = bounding_box ();
+        boost::optional<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
@@ -112,7 +107,10 @@ ScrollGroup::covers_window (Duple const& d) const
                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);
 }