summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-04-20 17:18:27 -0600
committerPaul Davis <paul@linuxaudiosystems.com>2020-04-20 17:18:37 -0600
commit826bdc413c0a3ef9cc3e10fefb8e6dae1745b969 (patch)
treec47bdb11a0bafb542a85d0ba597dbdd19038bbb7 /gtk2_ardour
parent5d3554408d24e21bad54559582768eff54163990 (diff)
fix behavior of ARDOUR_UI::transport_rewind/forward actions
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour_ui.cc60
-rw-r--r--gtk2_ardour/ardour_ui.h1
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 ();