summaryrefslogtreecommitdiff
path: root/libs/ardour/automation_control.cc
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-13 18:09:22 +0200
committerRobin Gareus <robin@gareus.org>2017-06-13 18:09:59 +0200
commitc1912b6d516b69db67757687de38a115b3b6ab69 (patch)
treecf1e91a94e56d6973a4acffe2c930bf8db60ab64 /libs/ardour/automation_control.cc
parentb34d891b23e0268f50e171a2149f425987598902 (diff)
Write inverse master automation.
* The UI and ctrl-surface controls use and display the combined value, including control-masters. * The Automation lane of a control is the raw value of the control without masters. When touching (or writing) automation, the control-master needs to be factored out (or subtracted). e.g press+hold a control -> write inverse master automation.
Diffstat (limited to 'libs/ardour/automation_control.cc')
-rw-r--r--libs/ardour/automation_control.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/libs/ardour/automation_control.cc b/libs/ardour/automation_control.cc
index 055c000bc9..e22379f75c 100644
--- a/libs/ardour/automation_control.cc
+++ b/libs/ardour/automation_control.cc
@@ -257,10 +257,14 @@ AutomationControl::start_touch(double when)
}
if (!touching()) {
-
if (alist()->automation_state() == Touch) {
- /* subtle. aligns the user value with the playback */
- set_value (get_value (), Controllable::NoGroup);
+ /* subtle. aligns the user value with the playback and
+ * use take actual value (incl masters).
+ *
+ * Touch + hold writes inverse curve of master-automation
+ * using AutomationWatch::timer ()
+ */
+ AutomationControl::actually_set_value (get_value (), Controllable::NoGroup);
alist()->start_touch (when);
if (!_desc.toggled) {
AutomationWatch::instance().add_automation_watch (shared_from_this());