fix MTDM test
[ardour.git] / gtk2_ardour / editor_summary.cc
index 10a05943186b3fecab321ccc947f68b114b929ab..cc9f1a6783b683bd121f8fc60a0eac61a22b7e0c 100644 (file)
@@ -21,6 +21,7 @@
 
 #include "canvas/debug.h"
 
+#include "ardour_ui.h"
 #include "time_axis_view.h"
 #include "streamview.h"
 #include "editor_summary.h"
@@ -55,10 +56,27 @@ EditorSummary::EditorSummary (Editor* e)
          _view_rectangle_y (0, 0),
          _zoom_dragging (false),
          _old_follow_playhead (false),
+         _image (0),
          _background_dirty (true)
 {
        add_events (Gdk::POINTER_MOTION_MASK|Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
        set_flags (get_flags() | Gtk::CAN_FOCUS);
+
+       ARDOUR_UI::config()->ParameterChanged.connect (sigc::mem_fun (*this, &EditorSummary::parameter_changed));
+}
+
+EditorSummary::~EditorSummary ()
+{
+       cairo_surface_destroy (_image);
+}
+
+void
+EditorSummary::parameter_changed (string p)
+{
+
+       if (p == "color-regions-using-track-color") {
+               set_background_dirty ();
+       }
 }
 
 /** Handle a size allocation.
@@ -67,9 +85,8 @@ EditorSummary::EditorSummary (Editor* e)
 void
 EditorSummary::on_size_allocate (Gtk::Allocation& alloc)
 {
-       Gtk::EventBox::on_size_allocate (alloc);
-       _background_dirty = true;
-       set_dirty ();
+       CairoWidget::on_size_allocate (alloc);
+       set_background_dirty ();
 }
 
 
@@ -101,11 +118,8 @@ EditorSummary::set_session (Session* s)
 void
 EditorSummary::render_background_image ()
 {
-       int stride;
-       unsigned char *data;
-       stride = cairo_format_stride_for_width (CAIRO_FORMAT_RGB24, get_width ());
-       data = (unsigned char*) malloc (stride * get_height ());
-       _image = cairo_image_surface_create_for_data (data, CAIRO_FORMAT_RGB24, get_width (), get_height (), stride);
+       cairo_surface_destroy (_image); // passing NULL is safe
+       _image = cairo_image_surface_create (CAIRO_FORMAT_RGB24, get_width (), get_height ());
 
        cairo_t* cr = cairo_create (_image);
 
@@ -487,7 +501,7 @@ EditorSummary::get_editor (pair<double, double>* x, pair<double, double>* y) con
                x->second = x->first + _editor->current_page_samples() * _x_scale;
                
                y->first = editor_y_to_summary (_editor->vertical_adjustment.get_value ());
-               y->second = editor_y_to_summary (_editor->vertical_adjustment.get_value () + _editor->visible_canvas_height());
+               y->second = editor_y_to_summary (_editor->vertical_adjustment.get_value () + _editor->visible_canvas_height() - _editor->get_trackview_group()->canvas_origin().y);
        }
 }
 
@@ -852,7 +866,7 @@ void
 EditorSummary::set_editor_y (double const y)
 {
        double y1 = summary_y_to_editor (y);
-       double const eh = _editor->visible_canvas_height();
+       double const eh = _editor->visible_canvas_height() - _editor->get_trackview_group()->canvas_origin().y;
        double y2 = y1 + eh;
 
        double const full_editor_height = _editor->_full_canvas_height;
@@ -1032,16 +1046,14 @@ EditorSummary::routes_added (list<RouteTimeAxisView*> const & r)
                }
        }
 
-       _background_dirty = true;
-       set_dirty ();
+       set_background_dirty ();
 }
 
 void
 EditorSummary::route_gui_changed (string c)
 {
        if (c == "color") {
-               _background_dirty = true;
-               set_dirty ();
+               set_background_dirty ();
        }
 }