summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2020-01-17 15:26:01 -0700
committerPaul Davis <paul@linuxaudiosystems.com>2020-01-18 08:49:18 -0700
commit3c00048b0c0dbf3efd17cf04fdc7daa91424e338 (patch)
tree7049bed10f750ba08a0e4769f975a90930dab5db /libs/ardour/ardour
parent3fe87b9fa1417cfcf6636ff9bf4c8c2abcb6f796 (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.h2
-rw-r--r--libs/ardour/ardour/session_event.h1
-rw-r--r--libs/ardour/ardour/transport_fsm.h9
-rw-r--r--libs/ardour/ardour/types.h6
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