diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2020-04-20 17:18:27 -0600 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2020-04-20 17:18:37 -0600 |
commit | 826bdc413c0a3ef9cc3e10fefb8e6dae1745b969 (patch) | |
tree | c47bdb11a0bafb542a85d0ba597dbdd19038bbb7 /gtk2_ardour | |
parent | 5d3554408d24e21bad54559582768eff54163990 (diff) |
fix behavior of ARDOUR_UI::transport_rewind/forward actions
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 60 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 1 |
2 files changed, 27 insertions, 34 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 9475e86d73..341de85db7 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1971,57 +1971,49 @@ ARDOUR_UI::transport_rec_count_in () } void -ARDOUR_UI::transport_rewind (int option) -{ - float current_transport_speed; - - if (_session) { - current_transport_speed = _session->transport_speed(); - - if (current_transport_speed >= 0.0f) { - switch (option) { - case 0: - _session->request_transport_speed (-1.0f); - break; - case 1: - _session->request_transport_speed (-4.0f); - break; - case -1: - _session->request_transport_speed (-0.5f); - break; - } - } else { - /* speed up */ - _session->request_transport_speed (current_transport_speed * 1.5f); - } - } -} - -void -ARDOUR_UI::transport_forward (int option) +ARDOUR_UI::transport_ffwd_rewind (int option, int dir) { if (!_session) { return; } - float current_transport_speed = _session->transport_speed(); + /* engine speed is always positive, so multiply by transport + * (-1, 0, 1) to get directional value + */ + + const float current_transport_speed = _session->engine_speed () * _session->transport_speed(); + float target_speed; - if (current_transport_speed <= 0.0f) { + if ((dir < 0 && current_transport_speed >= 0.0f) || (dir > 0 && current_transport_speed <= 0.0f)) { switch (option) { case 0: - _session->request_transport_speed (1.0f); + target_speed = dir * 1.0f; break; case 1: - _session->request_transport_speed (4.0f); + target_speed = dir * 4.0f; break; case -1: - _session->request_transport_speed (0.5f); + target_speed = dir * 0.5f; break; } } else { /* speed up */ - _session->request_transport_speed (current_transport_speed * 1.5f); + target_speed = current_transport_speed * 1.5f; } + + _session->request_transport_speed (target_speed); +} + +void +ARDOUR_UI::transport_rewind (int option) +{ + transport_ffwd_rewind (option, -1); +} + +void +ARDOUR_UI::transport_forward (int option) +{ + transport_ffwd_rewind (option, 1); } void diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 974b482ecb..54cdb2a6eb 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -666,6 +666,7 @@ private: void transport_rec_count_in(); void transport_forward (int option); void transport_rewind (int option); + void transport_ffwd_rewind (int option, int dir); void transport_loop (); void toggle_roll (bool with_abort, bool roll_out_of_bounded_mode); bool trx_record_enable_all_tracks (); |