summaryrefslogtreecommitdiff
path: root/libs/ardour/session_transport.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-22 14:45:44 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-22 14:45:44 +0000
commitc0f7f044f3e117660641d0b8b026c7bc4f53163c (patch)
treea88e13608005c1905726c9ac7c5313279e6be32a /libs/ardour/session_transport.cc
parent8c10320497f09f85a90eb831f3e6d30d084eb7ab (diff)
introduce the idea of a "default transport speed", used whenever Session::start_transport() is called. Only the shuttle controller alters it, and even that only alters it in wheel mode, which means that stopping the transport does not rever the default speed back to zero. To get back to zero either switch the shuttle controller back to sprung mode, or change the speed back to zero (fixes #451 ... yes, really, a 3 digit bug fixed!)
git-svn-id: svn://localhost/ardour2/branches/3.0@12819 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/session_transport.cc')
-rw-r--r--libs/ardour/session_transport.cc21
1 files changed, 13 insertions, 8 deletions
diff --git a/libs/ardour/session_transport.cc b/libs/ardour/session_transport.cc
index 20ac737575..27896f6e67 100644
--- a/libs/ardour/session_transport.cc
+++ b/libs/ardour/session_transport.cc
@@ -103,10 +103,11 @@ Session::request_sync_source (Slave* new_slave)
}
void
-Session::request_transport_speed (double speed)
+Session::request_transport_speed (double speed, bool as_default)
{
SessionEvent* ev = new SessionEvent (SessionEvent::SetTransportSpeed, SessionEvent::Add, SessionEvent::Immediate, 0, speed);
- DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport speed = %1\n", speed));
+ ev->third_yes_or_no = true;
+ DEBUG_TRACE (DEBUG::Transport, string_compose ("Request transport speed = %1 as default = %2\n", speed, as_default));
queue_event (ev);
}
@@ -115,13 +116,13 @@ Session::request_transport_speed (double speed)
* be used by callers who are varying transport speed but don't ever want to stop it.
*/
void
-Session::request_transport_speed_nonzero (double speed)
+Session::request_transport_speed_nonzero (double speed, bool as_default)
{
if (speed == 0) {
speed = DBL_EPSILON;
}
- request_transport_speed (speed);
+ request_transport_speed (speed, as_default);
}
void
@@ -995,10 +996,10 @@ Session::locate (framepos_t target_frame, bool with_roll, bool with_flush, bool
* @param speed New speed
*/
void
-Session::set_transport_speed (double speed, bool abort, bool clear_state)
+Session::set_transport_speed (double speed, bool abort, bool clear_state, bool as_default)
{
- DEBUG_TRACE (DEBUG::Transport, string_compose ("@ %5 Set transport speed to %1, abort = %2 clear_state = %3, current = %4\n",
- speed, abort, clear_state, _transport_speed, _transport_frame));
+ DEBUG_TRACE (DEBUG::Transport, string_compose ("@ %5 Set transport speed to %1, abort = %2 clear_state = %3, current = %4 as_default %5\n",
+ speed, abort, clear_state, _transport_speed, _transport_frame, as_default));
if (_transport_speed == speed) {
return;
@@ -1098,6 +1099,10 @@ Session::set_transport_speed (double speed, bool abort, bool clear_state)
_last_transport_speed = _transport_speed;
_transport_speed = speed;
+ if (as_default) {
+ _default_transport_speed = speed;
+ }
+
boost::shared_ptr<RouteList> rl = routes.reader();
for (RouteList::iterator i = rl->begin(); i != rl->end(); ++i) {
boost::shared_ptr<Track> tr = boost::dynamic_pointer_cast<Track> (*i);
@@ -1213,7 +1218,7 @@ Session::start_transport ()
transport_sub_state |= PendingDeclickIn;
- _transport_speed = 1.0;
+ _transport_speed = _default_transport_speed;
_target_transport_speed = _transport_speed;
boost::shared_ptr<RouteList> rl = routes.reader();