summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorCarl Hetherington <carl@carlh.net>2011-02-07 01:12:47 +0000
committerCarl Hetherington <carl@carlh.net>2011-02-07 01:12:47 +0000
commit49869c98f359c68baa4ef6e26f7d5b36c348341c (patch)
treea957b1349c2aa7acb9a4a26e83f4d039b6550449 /gtk2_ardour
parent6be56d78b199452e5dba726f2d7aaab2777d2b49 (diff)
Prevent various things from stopping the transport by requesting a transport speed of exactly 0 when they are really just continuously varying it. Fixes strange playhead behaviour during varispeed when the user varispeeds to exactly 0 and auto-return is triggered.
git-svn-id: svn://localhost/ardour2/branches/3.0@8733 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui2.cc11
-rw-r--r--gtk2_ardour/editor_mouse.cc4
2 files changed, 8 insertions, 7 deletions
diff --git a/gtk2_ardour/ardour_ui2.cc b/gtk2_ardour/ardour_ui2.cc
index 4cd9b71307..1a9b7e53dd 100644
--- a/gtk2_ardour/ardour_ui2.cc
+++ b/gtk2_ardour/ardour_ui2.cc
@@ -816,17 +816,16 @@ ARDOUR_UI::use_shuttle_fract (bool force)
last_shuttle_request = now;
+ double speed = 0;
+
if (Config->get_shuttle_units() == Semitones) {
const double step = 1.0 / 24.0; // range is 24 semitones up & down
double semitones;
- double speed;
semitones = round (shuttle_fract / step);
speed = pow (2.0, (semitones / 12.0));
- _session->request_transport_speed (speed);
-
} else {
bool neg;
@@ -840,9 +839,11 @@ ARDOUR_UI::use_shuttle_fract (bool force)
fract = -fract;
}
- _session->request_transport_speed (shuttle_max_speed * fract);
+ speed = shuttle_max_speed * fract;
}
-
+
+ _session->request_transport_speed_nonzero (speed);
+
shuttle_box.queue_draw ();
}
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index d1d9afc985..e73975ba85 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -1920,7 +1920,7 @@ Editor::scrub (framepos_t frame, double current_x)
scrub_reverse_distance = 0;
delta = 0.01 * (last_scrub_x - current_x);
- _session->request_transport_speed (_session->transport_speed() - delta);
+ _session->request_transport_speed_nonzero (_session->transport_speed() - delta);
}
} else {
@@ -1939,7 +1939,7 @@ Editor::scrub (framepos_t frame, double current_x)
scrub_reverse_distance = 0;
delta = 0.01 * (current_x - last_scrub_x);
- _session->request_transport_speed (_session->transport_speed() + delta);
+ _session->request_transport_speed_nonzero (_session->transport_speed() + delta);
}
}