forward scroll events from track control headers to the canvas, to get consistent...
authorPaul Davis <paul@linuxaudiosystems.com>
Mon, 9 Jun 2014 14:02:38 +0000 (10:02 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 9 Jun 2014 14:02:38 +0000 (10:02 -0400)
gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/editor_canvas.cc
gtk2_ardour/editor_canvas_events.cc
gtk2_ardour/public_editor.h
gtk2_ardour/time_axis_view.cc

index d63484c8996e08da661b101d76e82ef99052bc5a..13f851a8c7009f61dea314305572470d77652818 100644 (file)
@@ -495,11 +495,9 @@ Editor::Editor ()
        controls_layout.add (*h);
 
        controls_layout.set_name ("EditControlsBase");
-       controls_layout.add_events (Gdk::SCROLL_MASK);
-       controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
-
-       controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK);
+       controls_layout.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::ENTER_NOTIFY_MASK|Gdk::LEAVE_NOTIFY_MASK|Gdk::SCROLL_MASK);
        controls_layout.signal_button_release_event().connect (sigc::mem_fun(*this, &Editor::edit_controls_button_release));
+       controls_layout.signal_scroll_event().connect (sigc::mem_fun(*this, &Editor::control_layout_scroll), false);
 
        _cursors = new MouseCursors;
 
@@ -3878,26 +3876,14 @@ Editor::transport_punch_location()
 bool
 Editor::control_layout_scroll (GdkEventScroll* ev)
 {
-       if (Keyboard::some_magic_widget_has_focus()) {
-               return false;
-       }
-
-       switch (ev->direction) {
-       case GDK_SCROLL_UP:
-               scroll_tracks_up_line ();
-               return true;
-               break;
+       /* Just forward to the normal canvas scroll method. The coordinate
+          systems are different but since the canvas is always larger than the
+          track headers, and aligned with the trackview area, this will work.
 
-       case GDK_SCROLL_DOWN:
-               scroll_tracks_down_line ();
-               return true;
-
-       default:
-               /* no left/right handling yet */
-               break;
-       }
-
-       return false;
+          In the not too distant future this layout is going away anyway and
+          headers will be on the canvas.
+       */
+       return canvas_scroll_event (ev);
 }
 
 void
index b664ac0b84a3b3e8e172cc92e43b163a303742ac..df01fccc4400ba6d602ac625e8f2af1c90fed5f4 100644 (file)
@@ -1402,6 +1402,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
 
        /* Canvas event handlers */
 
+       bool canvas_scroll_event (GdkEventScroll* event);
        bool canvas_control_point_event (GdkEvent* event,ArdourCanvas::Item*, ControlPoint*);
        bool canvas_line_event (GdkEvent* event,ArdourCanvas::Item*, AutomationLine*);
        bool canvas_selection_rect_event (GdkEvent* event,ArdourCanvas::Item*, SelectionRect*);
@@ -1458,7 +1459,6 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
        bool canvas_playhead_cursor_event (GdkEvent* event, ArdourCanvas::Item*);
        bool track_canvas_scroll (GdkEventScroll* event);
 
-       bool track_canvas_scroll_event (GdkEventScroll* event);
        bool track_canvas_button_press_event (GdkEventButton* event);
        bool track_canvas_button_release_event (GdkEventButton* event);
        bool track_canvas_motion_notify_event (GdkEventMotion* event);
index 68c7662ec43b637546c569c5867a9ad9f5367211..a53158cbdefb18a6b22aa46b0d1bc1cd2b6ab0d2 100644 (file)
@@ -236,7 +236,7 @@ Editor::initialize_canvas ()
           handlers.
        */
 
-       _track_canvas->signal_scroll_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_scroll_event));
+       _track_canvas->signal_scroll_event().connect (sigc::mem_fun (*this, &Editor::canvas_scroll_event));
        _track_canvas->signal_motion_notify_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_motion_notify_event));
        _track_canvas->signal_button_press_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_press_event));
        _track_canvas->signal_button_release_event().connect (sigc::mem_fun (*this, &Editor::track_canvas_button_release_event));
index 04609330ff9a6862c8f6de4639103e8b7a229646..34c81597be3a97d8eaa8c6d8b32803c20919099f 100644 (file)
@@ -60,6 +60,10 @@ using Gtkmm2ext::Keyboard;
 bool
 Editor::track_canvas_scroll (GdkEventScroll* ev)
 {
+       if (Keyboard::some_magic_widget_has_focus()) {
+               return false;
+       }
+       
        framepos_t xdelta;
        int direction = ev->direction;
 
@@ -156,7 +160,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
 }
 
 bool
-Editor::track_canvas_scroll_event (GdkEventScroll *event)
+Editor::canvas_scroll_event (GdkEventScroll *event)
 {
        _track_canvas->grab_focus();
        return track_canvas_scroll (event);
@@ -1010,7 +1014,7 @@ Editor::canvas_note_event (GdkEvent *event, ArdourCanvas::Item* item)
 }
 
 bool
-Editor::canvas_drop_zone_event (GdkEvent* event)
+Editor::canvas_drop_zone_event (GdkEvent* /*event*/)
 {
        return true;
 }
index a1643fb188c6177de2456ee49c6cfca05334bea4..d37b4d774446c4740380cfdf857ade4d9fcb399a 100644 (file)
@@ -318,6 +318,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
 
        virtual void reset_focus () = 0;
 
+       virtual bool canvas_scroll_event (GdkEventScroll* event) = 0;
        virtual bool canvas_control_point_event (GdkEvent* event, ArdourCanvas::Item*, ControlPoint*) = 0;
        virtual bool canvas_line_event (GdkEvent* event, ArdourCanvas::Item*, AutomationLine*) = 0;
        virtual bool canvas_selection_rect_event (GdkEvent* event, ArdourCanvas::Item*, SelectionRect*) = 0;
index e36b78daaff45de3b893120eedb298aaf7f4be66..059776bd92606326561f855021d0f67c6661fee8 100644 (file)
@@ -287,43 +287,14 @@ TimeAxisView::show_at (double y, int& nth, VBox *parent)
 bool
 TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev)
 {
-       switch (ev->direction) {
-       case GDK_SCROLL_UP:
-               if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
-                       /* See Editor::_stepping_axis_view for notes on this hack */
-                       Editor& e = dynamic_cast<Editor&> (_editor);
-                       if (!e.stepping_axis_view ()) {
-                               e.set_stepping_axis_view (this);
-                       }
-                       e.stepping_axis_view()->step_height (false);
-                       return true;
-               } else if (Keyboard::no_modifiers_active (ev->state)) {
-                       _editor.scroll_up_one_track();
-                       return true;
-               }
-               break;
+       /* Just forward to the normal canvas scroll method. The coordinate
+          systems are different but since the canvas is always larger than the
+          track headers, and aligned with the trackview area, this will work.
 
-       case GDK_SCROLL_DOWN:
-               if (Keyboard::modifier_state_equals (ev->state, Keyboard::ScrollZoomVerticalModifier)) {
-                       /* See Editor::_stepping_axis_view for notes on this hack */
-                       Editor& e = dynamic_cast<Editor&> (_editor);
-                       if (!e.stepping_axis_view ()) {
-                               e.set_stepping_axis_view (this);
-                       }
-                       e.stepping_axis_view()->step_height (true);
-                       return true;
-               } else if (Keyboard::no_modifiers_active (ev->state)) {
-                       _editor.scroll_down_one_track();
-                       return true;
-               }
-               break;
-
-       default:
-               /* no handling for left/right, yet */
-               break;
-       }
-
-       return false;
+          In the not too distant future this layout is going away anyway and
+          headers will be on the canvas.
+       */
+       return _editor.canvas_scroll_event (ev);
 }
 
 bool