remove debug output and get logic correct to cause first render to always use the...
[ardour.git] / libs / canvas / scroll_group.cc
index d78caf4ed0e35995379ea5fb5b134438efa5d606..3feb37f83a2ccd593ed74b2d0bbec9ef63b7dad3 100644 (file)
@@ -28,13 +28,13 @@ using namespace std;
 using namespace ArdourCanvas;
 
 ScrollGroup::ScrollGroup (Canvas* c, ScrollSensitivity s)
-       : Group (c)
+       : Container (c)
        , _scroll_sensitivity (s)       
 {
 }
 
-ScrollGroup::ScrollGroup (Group* g, ScrollSensitivity s)
-       : Group (g)
+ScrollGroup::ScrollGroup (Item* parent, ScrollSensitivity s)
+       : Container (parent)
        , _scroll_sensitivity (s)       
 {
 }
@@ -52,7 +52,10 @@ ScrollGroup::render (Rect const & area, Cairo::RefPtr<Cairo::Context> 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<Cairo::Context> 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<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
@@ -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);
 }