add Session::request_transport_roll()

Start separation of API for controlling rolling state from that used for speed
This commit is contained in:
Paul Davis 2021-04-12 18:57:25 -06:00
parent 7cbecaedff
commit ec367f49e1
2 changed files with 18 additions and 0 deletions

View File

@ -465,6 +465,7 @@ public:
void request_roll_at_and_return (samplepos_t start, samplepos_t return_to);
void request_bounded_roll (samplepos_t start, samplepos_t end);
void request_roll (TransportRequestSource origin = TRS_UI);
void request_stop (bool abort = false, bool clear_state = false, TransportRequestSource origin = TRS_UI);
void request_locate (samplepos_t sample, LocateTransportDisposition ltd = RollIfAppropriate, TransportRequestSource origin = TRS_UI);

View File

@ -898,6 +898,23 @@ Session::request_transport_speed_nonzero (double speed, bool as_default, Transpo
request_transport_speed (speed, as_default);
}
void
Session::request_roll (TransportRequestSource origin)
{
if (synced_to_engine()) {
_engine.transport_stop ();
return;
}
if (should_ignore_transport_request (origin, TR_StartStop)) {
return;
}
SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, audible_sample(), _default_engine_speed * _default_transport_speed);
DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport roll, requested %1 from %2 * %3 transport @ %4\n", _default_engine_speed * _default_transport_speed, _default_engine_speed, _default_transport_speed, _transport_sample));
queue_event (ev);
}
void
Session::request_stop (bool abort, bool clear_state, TransportRequestSource origin)
{