amend ab3889ff: portaudio backend uses a vector for connections
[ardour.git] / libs / canvas / widget.cc
index 7293badb7ce5a7fb15f4b232c27f9395c690e391..0f49554a42448738e1db828e350eb77e71b40182 100644 (file)
@@ -24,7 +24,6 @@
 #include "canvas/canvas.h"
 #include "canvas/widget.h"
 #include "canvas/debug.h"
-#include "canvas/utils.h"
 
 using namespace std;
 using namespace ArdourCanvas;
@@ -75,39 +74,52 @@ Widget::queue_resize ()
 void
 Widget::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) const
 {
-       // std::cerr << "Render widget\n";
+       //std::cerr << "Render widget " << name << " @ " << position() << endl;
 
        if (!_bounding_box) {
                std::cerr << "no bbox\n";
                return;
        }
 
-       Rect self = item_to_window (_bounding_box.get());
-       boost::optional<Rect> r = self.intersection (area);
+       Rect self = item_to_window (_bounding_box);
+       Rect r = self.intersection (area);
 
        if (!r) {
                std::cerr << "no intersection\n";
                return;
        }
 
-       Rect draw = r.get ();
+       Rect draw = r;
        cairo_rectangle_t crect;
        crect.x = draw.x0;
        crect.y = draw.y0;
        crect.height = draw.height();
        crect.width = draw.width();
 
-       // std::cerr << "will draw " << draw << "\n";
+       Duple p = position_offset();
+
        context->save ();
-       context->translate (-draw.x0, -draw.y0);
+       context->translate (p.x, p.y);
        //context->rectangle (draw.x0, draw.y0, draw.width(), draw.height());
-       // context->clip ();
+       //context->clip ();
 
-       _widget.render (context->cobj(), &crect);
+       _widget.render (context, &crect);
 
        context->restore ();
 }
 
+void
+Widget::size_allocate (Rect const & r)
+{
+       Item::size_allocate (r);
+       Gtk::Allocation alloc;
+       alloc.set_x (0);
+       alloc.set_y (0);
+       alloc.set_width (r.width());
+       alloc.set_height (r.height());
+       _widget.size_allocate (alloc);
+}
+
 void
 Widget::compute_bounding_box () const
 {
@@ -132,4 +144,3 @@ Widget::compute_bounding_box () const
 
        _bounding_box_dirty = false;
 }
-