diff options
author | David Robillard <d@drobilla.net> | 2014-11-30 22:18:18 -0500 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2014-11-30 23:56:20 -0500 |
commit | 7eb4e5d22bf43fa1e6bc44dfa33d8732f744c2dd (patch) | |
tree | 8769e57a1e7382fc29e96ad461a419af3b4c9663 /libs/ardour/automatable.cc | |
parent | b68fd1cc259eed8d6f67ce38458d95710063f24b (diff) |
Replace thinning static state with parameter.
Diffstat (limited to 'libs/ardour/automatable.cc')
-rw-r--r-- | libs/ardour/automatable.cc | 50 |
1 files changed, 26 insertions, 24 deletions
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<AutomationControl> c = + boost::dynamic_pointer_cast<AutomationControl>(li->second); + if (!c) { + continue; + } - boost::shared_ptr<AutomationControl> c - = boost::dynamic_pointer_cast<AutomationControl>(li->second); - if (c) { - boost::shared_ptr<AutomationList> l - = boost::dynamic_pointer_cast<AutomationList>(c->list()); + boost::shared_ptr<AutomationList> l = + boost::dynamic_pointer_cast<AutomationList>(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); + } } } |