diff options
author | Carl Hetherington <carl@carlh.net> | 2012-06-17 16:57:21 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-06-17 16:57:21 +0000 |
commit | 95377c141c404c959797028b737ca747c1bccadb (patch) | |
tree | c3cd4d4e6f24071ba1edfd0ad0863814bd0f370e /gtk2_ardour | |
parent | add52f1c0ef787a580c44d719bc6e4c9c5ae09a4 (diff) |
Hacky fix for track height step losing 'grip' on the
track being resized (#4503).
git-svn-id: svn://localhost/ardour2/branches/3.0@12747 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 8 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 19 | ||||
-rw-r--r-- | gtk2_ardour/time_axis_view.cc | 15 |
3 files changed, 40 insertions, 2 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 939c05b1e8..e3e00cf340 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -282,6 +282,7 @@ Editor::Editor () , _region_selection_change_updates_region_list (true) , _following_mixer_selection (false) , _control_point_toggled_on_press (false) + , _stepping_axis_view (0) { constructed = false; @@ -696,6 +697,8 @@ Editor::Editor () signal_configure_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler)); signal_delete_event().connect (sigc::mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::exit_on_main_window_close)); + Gtkmm2ext::Keyboard::the_keyboard().ShiftReleased.connect (sigc::mem_fun (*this, &Editor::shift_key_released)); + /* allow external control surfaces/protocols to do various things */ ControlProtocol::ZoomToSession.connect (*this, invalidator (*this), boost::bind (&Editor::temporal_zoom_session, this), gui_context()); @@ -5473,3 +5476,8 @@ Editor::popup_control_point_context_menu (ArdourCanvas::Item* item, GdkEvent* ev _control_point_context_menu.popup (event->button.button, event->button.time); } +void +Editor::shift_key_released () +{ + _stepping_axis_view = 0; +} diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 5134b6a7a1..a2d7c93fd3 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -470,6 +470,14 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD void get_pointer_position (double &, double &) const; + TimeAxisView* stepping_axis_view () { + return _stepping_axis_view; + } + + void set_stepping_axis_view (TimeAxisView* v) { + _stepping_axis_view = v; + } + protected: void map_transport_state (); void map_position_change (framepos_t); @@ -2102,6 +2110,17 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD /** Flag for a bit of a hack wrt control point selection; see set_selected_control_point_from_click */ bool _control_point_toggled_on_press; + /** This is used by TimeAxisView to keep a track of the TimeAxisView that is currently being + stepped in height using Shift-Scrollwheel. When a scroll event occurs, we do the step on + this _stepping_axis_view if it is non-0 (and we set up this _stepping_axis_view with the + TimeAxisView underneath the mouse if it is 0). Then Editor resets _stepping_axis_view when + the shift key is released. In this (hacky) way, pushing shift and moving the scroll wheel + will operate on the same track until shift is released (rather than skipping about to whatever + happens to be underneath the mouse at the time). + */ + TimeAxisView* _stepping_axis_view; + void shift_key_released (); + friend class Drag; friend class RegionDrag; friend class RegionMoveDrag; diff --git a/gtk2_ardour/time_axis_view.cc b/gtk2_ardour/time_axis_view.cc index ddf03e968e..ee5c7c1c2a 100644 --- a/gtk2_ardour/time_axis_view.cc +++ b/gtk2_ardour/time_axis_view.cc @@ -48,6 +48,7 @@ #include "utils.h" #include "streamview.h" #include "editor_drag.h" +#include "editor.h" #include "i18n.h" @@ -317,7 +318,12 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev) switch (ev->direction) { case GDK_SCROLL_UP: if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { - step_height (false); + /* 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_tracks_up_line(); @@ -327,7 +333,12 @@ TimeAxisView::controls_ebox_scroll (GdkEventScroll* ev) case GDK_SCROLL_DOWN: if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { - step_height (true); + /* 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_tracks_down_line(); |