summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorMister Benjamin <mb@mbno.org>2020-04-22 10:50:43 +0200
committerPaul Davis <paul@linuxaudiosystems.com>2020-04-23 08:19:20 -0600
commit46fca9062d286820a24812797fb74afd742384aa (patch)
tree874d42e26b23beaa9dd19f308a59a1e686cba2e4 /gtk2_ardour
parent54bc1018d51eedab16da6b2148a145b445af0b03 (diff)
Honour forward/rewind option when already rolling #8031
The options ForwardSlow, Forward and ForwardFast and their respective Rewind options were not honoured in the execution of forward/rewind operations when the transport was already rolling at a slower speed than the forward or rewind option's speed with same direction as the requested direction.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc33
1 files changed, 17 insertions, 16 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc
index 341de85db7..fdc69c263c 100644
--- a/gtk2_ardour/ardour_ui.cc
+++ b/gtk2_ardour/ardour_ui.cc
@@ -1981,23 +1981,24 @@ ARDOUR_UI::transport_ffwd_rewind (int option, int dir)
* (-1, 0, 1) to get directional value
*/
- const float current_transport_speed = _session->engine_speed () * _session->transport_speed();
- float target_speed;
+ const float current_transport_speed = _session->engine_speed () * _session->transport_speed ();
+ float target_speed = current_transport_speed;
- if ((dir < 0 && current_transport_speed >= 0.0f) || (dir > 0 && current_transport_speed <= 0.0f)) {
- switch (option) {
- case 0:
- target_speed = dir * 1.0f;
- break;
- case 1:
- target_speed = dir * 4.0f;
- break;
- case -1:
- target_speed = dir * 0.5f;
- break;
- }
- } else {
- /* speed up */
+ switch (option) {
+ case 0:
+ target_speed = dir * 1.0f;
+ break;
+ case 1:
+ target_speed = dir * 4.0f;
+ break;
+ case -1:
+ target_speed = dir * 0.5f;
+ break;
+ }
+
+ bool speed_up = (dir > 0 && current_transport_speed >= target_speed);
+ speed_up = speed_up || (dir < 0 && current_transport_speed <= target_speed);
+ if (speed_up) {
target_speed = current_transport_speed * 1.5f;
}