summaryrefslogtreecommitdiff
path: root/libs/ardour/automatable.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2014-11-30 22:18:18 -0500
committerDavid Robillard <d@drobilla.net>2014-11-30 23:56:20 -0500
commit7eb4e5d22bf43fa1e6bc44dfa33d8732f744c2dd (patch)
tree8769e57a1e7382fc29e96ad461a419af3b4c9663 /libs/ardour/automatable.cc
parentb68fd1cc259eed8d6f67ce38458d95710063f24b (diff)
Replace thinning static state with parameter.
Diffstat (limited to 'libs/ardour/automatable.cc')
-rw-r--r--libs/ardour/automatable.cc50
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);
+ }
}
}