diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-09 08:14:33 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2016-05-09 08:17:23 -0400 |
commit | ae7cc64377e60ec4d93de4c7199341e9fa942c5d (patch) | |
tree | 4237eb26ded0afaa911874788f3084b2e013c82a /libs/surfaces/control_protocol | |
parent | ec8a840b1ae564d9401cac165063f20b48145300 (diff) |
copy-n-paste the ARDOUR_UI toggle-roll code into BasicUI (for Faderport and others)
Diffstat (limited to 'libs/surfaces/control_protocol')
-rw-r--r-- | libs/surfaces/control_protocol/basic_ui.cc | 58 |
1 files changed, 46 insertions, 12 deletions
diff --git a/libs/surfaces/control_protocol/basic_ui.cc b/libs/surfaces/control_protocol/basic_ui.cc index 161135390f..8227c55ca5 100644 --- a/libs/surfaces/control_protocol/basic_ui.cc +++ b/libs/surfaces/control_protocol/basic_ui.cc @@ -199,22 +199,56 @@ BasicUI::transport_stop () void BasicUI::transport_play (bool from_last_start) { - bool rolling = session->transport_rolling (); + if (!session) { + return; + } - if (session->get_play_loop()) { - session->request_play_loop (false); + if (session->is_auditioning()) { + return; } - if (session->get_play_range ()) { - session->request_play_range (0); +#if 0 + if (session->config.get_external_sync()) { + switch (Config->get_sync_source()) { + case Engine: + break; + default: + /* transport controlled by the master */ + return; + } } +#endif + + bool rolling = session->transport_rolling(); - if (from_last_start && rolling) { - session->request_locate (session->last_transport_start(), true); + if (session->get_play_loop()) { + + /* If loop playback is not a mode, then we should cancel + it when this action is requested. If it is a mode + we just leave it in place. + */ + + if (!Config->get_loop_is_mode()) { + /* XXX it is not possible to just leave seamless loop and keep + playing at present (nov 4th 2009) + */ + if (!Config->get_seamless_loop()) { + /* stop loop playback and stop rolling */ + session->request_play_loop (false, true); + } else if (rolling) { + /* stop loop playback but keep rolling */ + session->request_play_loop (false, false); + } + } + } else if (session->get_play_range () ) { + /* stop playing a range if we currently are */ + session->request_play_range (0, true); } - session->request_transport_speed (1.0f); + if (!rolling) { + session->request_transport_speed (1.0f); + } } void @@ -357,11 +391,11 @@ BasicUI::jump_by_seconds (double secs) { framepos_t current = session->transport_frame(); double s = (double) current / (double) session->nominal_frame_rate(); - + s+= secs; if (s < 0) current = 0; s = s * session->nominal_frame_rate(); - + session->request_locate ( floor(s) ); } @@ -374,11 +408,11 @@ BasicUI::jump_by_bars (double bars) bars += bbt.bars; if (bars < 0) bars = 0; - + AnyTime any; any.type = AnyTime::BBT; any.bbt.bars = bars; - + session->request_locate ( session->convert_to_frames (any) ); } |