add support for reverb & chorus in a-fluidsynth
[ardour.git] / gtk2_ardour / editor_summary.cc
index 1ed9af974e57c6ad898be9cb9e0592a9150336ac..a2882a201a25a1fbc9aea895fc0b52b39abd7f02 100644 (file)
@@ -21,7 +21,6 @@
 
 #include "canvas/debug.h"
 
-#include "ardour_ui.h"
 #include "time_axis_view.h"
 #include "streamview.h"
 #include "editor_summary.h"
@@ -34,6 +33,7 @@
 #include "editor_cursors.h"
 #include "mouse_cursors.h"
 #include "route_time_axis.h"
+#include "ui_config.h"
 
 using namespace std;
 using namespace ARDOUR;
@@ -62,7 +62,7 @@ EditorSummary::EditorSummary (Editor* e)
        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));
+       UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &EditorSummary::parameter_changed));
 }
 
 EditorSummary::~EditorSummary ()
@@ -107,7 +107,7 @@ EditorSummary::set_session (Session* s)
 
        if (_session) {
                Region::RegionPropertyChanged.connect (region_property_connection, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
-               Route::RemoteControlIDChange.connect (route_ctrl_id_connection, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
+               PresentationInfo::Change.connect (route_ctrl_id_connection, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
                _editor->playhead_cursor->PositionChanged.connect (position_connection, invalidator (*this), boost::bind (&EditorSummary::playhead_position_changed, this, _1), gui_context());
                _session->StartTimeChanged.connect (_session_connections, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
                _session->EndTimeChanged.connect (_session_connections, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context());
@@ -223,7 +223,7 @@ EditorSummary::render (cairo_t* cr, cairo_rectangle_t*)
        }
 
        cairo_push_group (cr);
-       
+
        /* Fill with the background image */
 
        cairo_rectangle (cr, 0, 0, get_width(), get_height());
@@ -241,7 +241,7 @@ EditorSummary::render (cairo_t* cr, cairo_rectangle_t*)
 
        int32_t width = _view_rectangle_x.second - _view_rectangle_x.first;
        int32_t height = _view_rectangle_y.second - _view_rectangle_y.first;
-       cairo_rectangle (cr, _view_rectangle_x.first, _view_rectangle_y.first, width, height); 
+       cairo_rectangle (cr, _view_rectangle_x.first, _view_rectangle_y.first, width, height);
        cairo_set_source_rgba (cr, 1, 1, 1, 0.1);
        cairo_fill_preserve (cr);
        cairo_set_line_width (cr, 1);
@@ -293,8 +293,10 @@ EditorSummary::render_region (RegionView* r, cairo_t* cr, double y) const
 void
 EditorSummary::set_background_dirty ()
 {
-       _background_dirty = true;
-       set_dirty ();
+       if (!_background_dirty) {
+               _background_dirty = true;
+               set_dirty ();
+       }
 }
 
 /** Set the summary so that just the overlays (viewbox, playhead etc.) will be re-rendered */
@@ -352,7 +354,7 @@ EditorSummary::centre_on_click (GdkEventButton* ev)
        set_editor (ex, ey);
 }
 
-bool 
+bool
 EditorSummary::on_enter_notify_event (GdkEventCrossing*)
 {
        grab_focus ();
@@ -360,7 +362,7 @@ EditorSummary::on_enter_notify_event (GdkEventCrossing*)
        return false;
 }
 
-bool 
+bool
 EditorSummary::on_leave_notify_event (GdkEventCrossing*)
 {
        /* there are no inferior/child windows, so any leave event means that
@@ -408,7 +410,7 @@ bool
 EditorSummary::on_button_press_event (GdkEventButton* ev)
 {
        _old_follow_playhead = _editor->follow_playhead ();
-       
+
        if (ev->button == 1) {
 
                pair<double, double> xr;
@@ -436,7 +438,7 @@ EditorSummary::on_button_press_event (GdkEventButton* ev)
                                get_editor (&_pending_editor_x, &_pending_editor_y);
                                _pending_editor_changed = false;
                        }
-                       
+
                } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) {
 
                        /* secondary-modifier-click: locate playhead */
@@ -474,7 +476,7 @@ EditorSummary::on_button_press_event (GdkEventButton* ev)
 bool
 EditorSummary::suspending_editor_updates () const
 {
-       return (!ARDOUR_UI::config()->get_update_editor_during_summary_drag () && (_zoom_dragging || _move_dragging));
+       return (!UIConfiguration::instance().get_update_editor_during_summary_drag () && (_zoom_dragging || _move_dragging));
 }
 
 /** Fill in x and y with the editor's current viewable area in summary coordinates */
@@ -489,7 +491,7 @@ EditorSummary::get_editor (pair<double, double>* x, pair<double, double>* y) con
                /* We are dragging, and configured not to update the editor window during drags,
                   so just return where the editor will be when the drag finishes.
                */
-                  
+
                *x = _pending_editor_x;
                *y = _pending_editor_y;
 
@@ -499,7 +501,7 @@ EditorSummary::get_editor (pair<double, double>* x, pair<double, double>* y) con
 
                x->first = (_editor->leftmost_sample () - _start) * _x_scale;
                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() - _editor->get_trackview_group()->canvas_origin().y);
        }
@@ -668,7 +670,7 @@ bool
 EditorSummary::on_button_release_event (GdkEventButton*)
 {
        bool const was_suspended = suspending_editor_updates ();
-       
+
        _move_dragging = false;
        _zoom_dragging = false;
        _editor->_dragging_playhead = false;
@@ -677,7 +679,7 @@ EditorSummary::on_button_release_event (GdkEventButton*)
        if (was_suspended && _pending_editor_changed) {
                set_editor (_pending_editor_x, _pending_editor_y);
        }
-               
+
        return true;
 }
 
@@ -695,7 +697,8 @@ EditorSummary::on_scroll_event (GdkEventScroll* ev)
        switch (ev->direction) {
                case GDK_SCROLL_UP:
                        if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollHorizontalModifier)) {
-                               x -= 64;
+                               _editor->scroll_left_half_page ();
+                               return true;
                        } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomHorizontalModifier)) {
                                _editor->temporal_zoom_step (false);
                        } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
@@ -709,7 +712,8 @@ EditorSummary::on_scroll_event (GdkEventScroll* ev)
                        break;
                case GDK_SCROLL_DOWN:
                        if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollHorizontalModifier)) {
-                               x += 64;
+                               _editor->scroll_right_half_page ();
+                               return true;
                        } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomHorizontalModifier)) {
                                _editor->temporal_zoom_step (true);
                        } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
@@ -727,7 +731,8 @@ EditorSummary::on_scroll_event (GdkEventScroll* ev)
                        } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier)) {
                                x -= 1;
                        } else {
-                               x -= 8;
+                               _editor->scroll_left_half_page ();
+                               return true;
                        }
                        break;
                case GDK_SCROLL_RIGHT:
@@ -736,7 +741,8 @@ EditorSummary::on_scroll_event (GdkEventScroll* ev)
                        } else if (Keyboard::modifier_state_contains (ev->state, Keyboard::TertiaryModifier)) {
                                x += 1;
                        } else {
-                               x += 8;
+                               _editor->scroll_right_half_page ();
+                               return true;
                        }
                        break;
                default:
@@ -767,7 +773,7 @@ EditorSummary::set_editor (double const x, double const y)
                   as it also means that we won't change these variables if an idle handler
                   is merely pending but not executing.  But c'est la vie.
                */
-               
+
                return;
        }
 
@@ -854,12 +860,12 @@ EditorSummary::set_editor_x (pair<double, double> x)
                set_dirty ();
        } else {
                _editor->reset_x_origin (x.first / _x_scale + _start);
-               
+
                double const nx = (
                        ((x.second - x.first) / _x_scale) /
                        _editor->sample_to_pixel (_editor->current_page_samples())
                        );
-               
+
                if (nx != _editor->get_current_zoom ()) {
                        _editor->reset_zoom (nx);
                }
@@ -972,7 +978,7 @@ EditorSummary::set_editor_y (pair<double, double> const y)
                }
 
                if (yc.first <= 0 && yc.second >= _track_height) {
-                       (*i)->set_height (max (TimeAxisView::preset_height (HeightSmall), (uint32_t) ((*i)->effective_height() * scale)));
+                       (*i)->set_height (max (TimeAxisView::preset_height (HeightSmall), (uint32_t) ((*i)->effective_height() * scale)), TimeAxisView::TotalHeight);
                }
 
                yc.first -= _track_height;
@@ -1046,8 +1052,8 @@ void
 EditorSummary::routes_added (list<RouteTimeAxisView*> const & r)
 {
        for (list<RouteTimeAxisView*>::const_iterator i = r.begin(); i != r.end(); ++i) {
-               /* Connect to gui_changed() on the route so that we know when their colour has changed */
-               (*i)->route()->gui_changed.connect (*this, invalidator (*this), boost::bind (&EditorSummary::route_gui_changed, this, _1), gui_context ());
+               /* Connect to the relevant signal for the route so that we know when its colour has changed */
+               (*i)->route()->presentation_info().PropertyChanged.connect (*this, invalidator (*this), boost::bind (&EditorSummary::route_gui_changed, this, _1), gui_context ());
                boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> ((*i)->route ());
                if (tr) {
                        tr->PlaylistChanged.connect (*this, invalidator (*this), boost::bind (&EditorSummary::set_background_dirty, this), gui_context ());
@@ -1058,9 +1064,9 @@ EditorSummary::routes_added (list<RouteTimeAxisView*> const & r)
 }
 
 void
-EditorSummary::route_gui_changed (string c)
+EditorSummary::route_gui_changed (PBD::PropertyChange const& what_changed)
 {
-       if (c == "color") {
+       if (what_changed.contains (Properties::color)) {
                set_background_dirty ();
        }
 }