diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2020-01-17 15:26:01 -0700 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2020-01-18 08:49:18 -0700 |
commit | 3c00048b0c0dbf3efd17cf04fdc7daa91424e338 (patch) | |
tree | 7049bed10f750ba08a0e4769f975a90930dab5db /libs/ardour/ardour | |
parent | 3fe87b9fa1417cfcf6636ff9bf4c8c2abcb6f796 (diff) |
Session::request_locate() takes a tri-valued second argument for "roll-after-locate"
This allows callers to defer logic about auto-play/current rolling state and more to TransportFSM where it
can be cnentralized and is less ambiguous
Diffstat (limited to 'libs/ardour/ardour')
-rw-r--r-- | libs/ardour/ardour/session.h | 2 | ||||
-rw-r--r-- | libs/ardour/ardour/session_event.h | 1 | ||||
-rw-r--r-- | libs/ardour/ardour/transport_fsm.h | 9 | ||||
-rw-r--r-- | libs/ardour/ardour/types.h | 6 |
4 files changed, 13 insertions, 5 deletions
diff --git a/libs/ardour/ardour/session.h b/libs/ardour/ardour/session.h index 2b42c59973..402c55bf59 100644 --- a/libs/ardour/ardour/session.h +++ b/libs/ardour/ardour/session.h @@ -444,7 +444,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_stop (bool abort = false, bool clear_state = false, TransportRequestSource origin = TRS_UI); - void request_locate (samplepos_t sample, bool with_roll = false, TransportRequestSource origin = TRS_UI); + void request_locate (samplepos_t sample, LocateTransportDisposition ltd = DoTheRightThing, TransportRequestSource origin = TRS_UI); void request_play_loop (bool yn, bool leave_rolling = false); bool get_play_loop () const { return play_loop; } diff --git a/libs/ardour/ardour/session_event.h b/libs/ardour/ardour/session_event.h index ddf7210617..b0af5596f6 100644 --- a/libs/ardour/ardour/session_event.h +++ b/libs/ardour/ardour/session_event.h @@ -91,6 +91,7 @@ public: union { bool second_yes_or_no; double control_value; + LocateTransportDisposition locate_transport_disposition; }; union { diff --git a/libs/ardour/ardour/transport_fsm.h b/libs/ardour/ardour/transport_fsm.h index 12550d92a7..54ceac2304 100644 --- a/libs/ardour/ardour/transport_fsm.h +++ b/libs/ardour/ardour/transport_fsm.h @@ -46,7 +46,7 @@ struct TransportFSM EventType type; union { bool abort; /* for stop */ - bool with_roll; /* for locate */ + LocateTransportDisposition ltd; /* for locate */ }; union { bool clear_state; /* for stop */ @@ -59,7 +59,7 @@ struct TransportFSM Event (EventType t) : type (t) - , with_roll (false) + , ltd (MustStop) , with_flush (false) , target (0) , for_loop_end (false) @@ -72,9 +72,9 @@ struct TransportFSM { assert (t == StopTransport); } - Event (EventType t, samplepos_t pos, bool r, bool fl, bool lp, bool f4c) + Event (EventType t, samplepos_t pos, LocateTransportDisposition l, bool fl, bool lp, bool f4c) : type (t) - , with_roll (r) + , ltd (l) , with_flush (fl) , target (pos) , for_loop_end (lp) @@ -175,6 +175,7 @@ struct TransportFSM void defer (Event& ev); void bad_transition (Event const &); void set_roll_after (bool) const; + bool compute_should_roll (LocateTransportDisposition) const; }; } /* end namespace ARDOUR */ diff --git a/libs/ardour/ardour/types.h b/libs/ardour/ardour/types.h index c7453fcf1b..1504698896 100644 --- a/libs/ardour/ardour/types.h +++ b/libs/ardour/ardour/types.h @@ -799,6 +799,12 @@ enum OverwriteReason { LoopChanged = 0x8, }; +enum LocateTransportDisposition { + MustRoll, + MustStop, + DoTheRightThing +}; + typedef std::vector<CaptureInfo*> CaptureInfos; } // namespace ARDOUR |