remove all MIDI-specific editing modes by making standard work either at object level...
[ardour.git] / gtk2_ardour / editor_canvas.cc
index 6698c5ee9b75511495c9b281c0d2d6891800f9fa..b99189218a0fcd362a3e7b8ed0abc6b48f97b709 100644 (file)
@@ -41,6 +41,8 @@
 #include "audio_time_axis.h"
 #include "editor_drag.h"
 #include "region_view.h"
+#include "editor_group_tabs.h"
+#include "editor_routes.h"
 
 #include "i18n.h"
 
@@ -321,10 +323,10 @@ Editor::track_canvas_allocate (Gtk::Allocation alloc)
 bool
 Editor::track_canvas_size_allocated ()
 {
-       bool height_changed = canvas_height != canvas_allocation.get_height();
+       bool height_changed = _canvas_height != canvas_allocation.get_height();
 
-       canvas_width = canvas_allocation.get_width();
-       canvas_height = canvas_allocation.get_height();
+       _canvas_width = canvas_allocation.get_width();
+       _canvas_height = canvas_allocation.get_height();
 
        if (session) {
                TrackViewList::iterator i;
@@ -340,21 +342,21 @@ Editor::track_canvas_size_allocated ()
 
        if (height_changed) {
                if (playhead_cursor) {
-                       playhead_cursor->set_length (canvas_height);
+                       playhead_cursor->set_length (_canvas_height);
                }
        
                for (MarkerSelection::iterator x = selection->markers.begin(); x != selection->markers.end(); ++x) {
-                       (*x)->set_line_vpos (0, canvas_height);
+                       (*x)->set_line_vpos (0, _canvas_height);
                }
 
-               vertical_adjustment.set_page_size (canvas_height);
+               vertical_adjustment.set_page_size (_canvas_height);
                last_trackview_group_vertical_offset = get_trackview_group_vertical_offset ();
-               if ((vertical_adjustment.get_value() + canvas_height) >= vertical_adjustment.get_upper()) {
+               if ((vertical_adjustment.get_value() + _canvas_height) >= vertical_adjustment.get_upper()) {
                        /* 
                           We're increasing the size of the canvas while the bottom is visible.
                           We scroll down to keep in step with the controls layout.
                        */
-                       vertical_adjustment.set_value (full_canvas_height - canvas_height);
+                       vertical_adjustment.set_value (full_canvas_height - _canvas_height);
                }
        }
 
@@ -362,7 +364,7 @@ Editor::track_canvas_size_allocated ()
        reset_hscrollbar_stepping ();
        update_fixed_rulers();
        redisplay_tempo (false);
-       _summary->set_bounds_dirty ();
+       _summary->set_overlays_dirty ();
 
        Resized (); /* EMIT_SIGNAL */
 
@@ -372,21 +374,22 @@ Editor::track_canvas_size_allocated ()
 void
 Editor::controls_layout_size_request (Requisition* req)
 {
-       TreeModel::Children rows = route_display_model->children();
-       TreeModel::Children::iterator i;
-       double pos;
-       bool changed = false;
-
-       for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
-               TimeAxisView *tv = (*i)[route_display_columns.tv];
-               if (tv != 0) {
-                       pos += tv->effective_height ();
-                       tv->clip_to_viewport ();
-               }
+       double pos = 0;
+       for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
+               pos += (*i)->effective_height ();
+               (*i)->clip_to_viewport ();
        }
 
        gint height = min ((gint) pos, (gint) (physical_screen_height - 600));
-       gint width = max (edit_controls_vbox.get_width(),  controls_layout.get_width());
+       
+       bool changed = false;
+
+       gint w = edit_controls_vbox.get_width();
+       if (_group_tabs->is_mapped()) {
+               w += _group_tabs->get_width ();
+       }
+               
+       gint width = max (w, controls_layout.get_width());
 
        /* don't get too big. the fudge factors here are just guesses */
 
@@ -399,6 +402,9 @@ Editor::controls_layout_size_request (Requisition* req)
 
        if (req->width != width) {
                gint vbox_width = edit_controls_vbox.get_width();
+               if (_group_tabs->is_mapped()) {
+                       vbox_width += _group_tabs->get_width();
+               }
                req->width = width;
 
                /* this one is important: it determines how big the layout thinks it really is, as 
@@ -407,8 +413,8 @@ Editor::controls_layout_size_request (Requisition* req)
                controls_layout.property_width () = vbox_width;
                controls_layout.property_width_request () = vbox_width;
 
-               time_button_event_box.property_width_request () = vbox_width;
-               zoom_box.property_width_request () = vbox_width;
+               // time_button_event_box.property_width_request () = vbox_width;
+               // zoom_box.property_width_request () = vbox_width;
        }
 
        if (req->height != height) {
@@ -424,9 +430,11 @@ Editor::controls_layout_size_request (Requisition* req)
 }
 
 bool
-Editor::track_canvas_map_handler (GdkEventAny* ev)
+Editor::track_canvas_map_handler (GdkEventAny* /*ev*/)
 {
-       track_canvas->get_window()->set_cursor (*current_canvas_cursor);
+       if (current_canvas_cursor) {
+               track_canvas->get_window()->set_cursor (*current_canvas_cursor);
+       }
        return false;
 }
 
@@ -528,10 +536,10 @@ Editor::drop_paths (const RefPtr<Gdk::DragContext>& context,
 }
 
 void
-Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
-                     int x, int y
-                     const SelectionData& data,
-                     guint info, guint time)
+Editor::drop_regions (const RefPtr<Gdk::DragContext>& /*context*/,
+                     int /*x*/, int /*y*/
+                     const SelectionData& /*data*/,
+                     guint /*info*/, guint /*time*/)
 {
        assert (_drag);
        _drag->end_grab (0);
@@ -540,7 +548,7 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
 }
 
 void
-Editor::maybe_autoscroll (GdkEventMotion* event)
+Editor::maybe_autoscroll (GdkEventMotion* event, bool allow_vert)
 {
        nframes64_t rightmost_frame = leftmost_frame + current_page_frames();
        nframes64_t frame = _drag->current_pointer_frame();
@@ -548,10 +556,10 @@ Editor::maybe_autoscroll (GdkEventMotion* event)
 
        autoscroll_y = 0;
        autoscroll_x = 0;
-       if (event->y < canvas_timebars_vsize) {
+       if (event->y < canvas_timebars_vsize && allow_vert) {
                autoscroll_y = -1;
                startit = true;
-       } else if (event->y > canvas_height) {
+       } else if (event->y > _canvas_height) {
                autoscroll_y = 1;
                startit = true;
        }
@@ -602,6 +610,8 @@ Editor::autoscroll_canvas ()
        double new_pixel;
        double target_pixel;
 
+       assert (_drag);
+
        if (autoscroll_x_distance != 0) {
                if (autoscroll_x > 0) {
                        autoscroll_x_distance = (unit_to_frame (_drag->current_pointer_x()) - (leftmost_frame + current_page_frames())) / 3;
@@ -613,7 +623,7 @@ Editor::autoscroll_canvas ()
 
        if (autoscroll_y_distance != 0) {
                if (autoscroll_y > 0) {
-                       autoscroll_y_distance = (_drag->current_pointer_y() - (get_trackview_group_vertical_offset() + canvas_height)) / 3;
+                       autoscroll_y_distance = (_drag->current_pointer_y() - (get_trackview_group_vertical_offset() + _canvas_height)) / 3;
                } else if (autoscroll_y < 0) {
 
                        autoscroll_y_distance = (vertical_adjustment.get_value () - _drag->current_pointer_y()) / 3;
@@ -651,7 +661,7 @@ Editor::autoscroll_canvas ()
 
        } else if (autoscroll_y > 0) {
 
-               double top_of_bottom_of_canvas = full_canvas_height - canvas_height;
+               double top_of_bottom_of_canvas = full_canvas_height - _canvas_height;
 
                if (vertical_pos > full_canvas_height - autoscroll_y_distance) {
                        new_pixel = full_canvas_height;
@@ -746,7 +756,7 @@ Editor::stop_canvas_autoscroll ()
 }
 
 bool
-Editor::left_track_canvas (GdkEventCrossing *ev)
+Editor::left_track_canvas (GdkEventCrossing */*ev*/)
 {
        set_entered_track (0);
        set_entered_regionview (0);
@@ -755,7 +765,7 @@ Editor::left_track_canvas (GdkEventCrossing *ev)
 }
 
 bool
-Editor::entered_track_canvas (GdkEventCrossing *ev)
+Editor::entered_track_canvas (GdkEventCrossing */*ev*/)
 {
        reset_canvas_action_sensitivity (true);
        return FALSE;
@@ -769,6 +779,10 @@ Editor::tie_vertical_scrolling ()
        /* this will do an immediate redraw */
 
        controls_layout.get_vadjustment()->set_value (vertical_adjustment.get_value());
+
+       if (pending_visual_change.idle_handler_id < 0) {
+               _summary->set_overlays_dirty ();
+       }
 }
 
 void
@@ -790,7 +804,9 @@ Editor::scroll_canvas_horizontally ()
        update_fixed_rulers ();
        redisplay_tempo (true);
 
-       _summary->set_bounds_dirty ();
+       if (pending_visual_change.idle_handler_id < 0) {
+               _summary->set_overlays_dirty ();
+       }
 
 #ifndef GTKOSX
        if (!autoscroll_active) {