summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2012-06-17 16:57:21 +0000
committerCarl Hetherington <carl@carlh.net>2012-06-17 16:57:21 +0000
commit95377c141c404c959797028b737ca747c1bccadb (patch)
treec3cd4d4e6f24071ba1edfd0ad0863814bd0f370e /gtk2_ardour
parentadd52f1c0ef787a580c44d719bc6e4c9c5ae09a4 (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.cc8
-rw-r--r--gtk2_ardour/editor.h19
-rw-r--r--gtk2_ardour/time_axis_view.cc15
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();