From 7eb4e5d22bf43fa1e6bc44dfa33d8732f744c2dd Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 30 Nov 2014 22:18:18 -0500 Subject: Replace thinning static state with parameter. --- libs/ardour/automatable.cc | 50 ++++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 24 deletions(-) (limited to 'libs/ardour/automatable.cc') diff --git a/libs/ardour/automatable.cc b/libs/ardour/automatable.cc index ef99fc70d3..906ff4ed3e 100644 --- a/libs/ardour/automatable.cc +++ b/libs/ardour/automatable.cc @@ -365,32 +365,34 @@ void Automatable::transport_stopped (framepos_t now) { for (Controls::iterator li = controls().begin(); li != controls().end(); ++li) { + boost::shared_ptr c = + boost::dynamic_pointer_cast(li->second); + if (!c) { + continue; + } - boost::shared_ptr c - = boost::dynamic_pointer_cast(li->second); - if (c) { - boost::shared_ptr l - = boost::dynamic_pointer_cast(c->list()); + boost::shared_ptr l = + boost::dynamic_pointer_cast(c->list()); + if (!l) { + continue; + } - if (l) { - /* Stop any active touch gesture just before we mark the write pass - as finished. If we don't do this, the transport can end up stopped with - an AutomationList thinking that a touch is still in progress and, - when the transport is re-started, a touch will magically - be happening without it ever have being started in the usual way. - */ - l->stop_touch (true, now); - l->write_pass_finished (now); - - if (l->automation_playback()) { - c->set_value(c->list()->eval(now)); - } - - if (l->automation_state() == Write) { - l->set_automation_state (Touch); - } - } - } + /* Stop any active touch gesture just before we mark the write pass + as finished. If we don't do this, the transport can end up stopped with + an AutomationList thinking that a touch is still in progress and, + when the transport is re-started, a touch will magically + be happening without it ever have being started in the usual way. + */ + l->stop_touch (true, now); + l->write_pass_finished (now, Config->get_automation_thinning_factor()); + + if (l->automation_playback()) { + c->set_value(c->list()->eval(now)); + } + + if (l->automation_state() == Write) { + l->set_automation_state (Touch); + } } } -- cgit v1.2.3