summaryrefslogtreecommitdiff
path: root/libs/evoral
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2017-06-13 20:57:01 +0200
committerRobin Gareus <robin@gareus.org>2017-06-13 20:57:37 +0200
commit8e6f71b8c190d2311e5547e349c4cc1fc37f131f (patch)
treea5b33e4f6db799c5eddc839295a81905af616fa3 /libs/evoral
parentc1912b6d516b69db67757687de38a115b3b6ab69 (diff)
Apply master-value to automation on disconnect.
Diffstat (limited to 'libs/evoral')
-rw-r--r--libs/evoral/evoral/ControlList.hpp2
-rw-r--r--libs/evoral/src/ControlList.cpp13
2 files changed, 15 insertions, 0 deletions
diff --git a/libs/evoral/evoral/ControlList.hpp b/libs/evoral/evoral/ControlList.hpp
index 2a80ad5bd4..515067de04 100644
--- a/libs/evoral/evoral/ControlList.hpp
+++ b/libs/evoral/evoral/ControlList.hpp
@@ -123,6 +123,8 @@ public:
void slide (iterator before, double distance);
void shift (double before, double distance);
+ void y_transform (boost::function<double(double)> callback);
+
/** add automation events
* @param when absolute time in samples
* @param value parameter value
diff --git a/libs/evoral/src/ControlList.cpp b/libs/evoral/src/ControlList.cpp
index ce8ea89fc9..92234a6ea7 100644
--- a/libs/evoral/src/ControlList.cpp
+++ b/libs/evoral/src/ControlList.cpp
@@ -251,6 +251,19 @@ ControlList::extend_to (double when)
}
void
+ControlList::y_transform (boost::function<double(double)> callback)
+{
+ {
+ Glib::Threads::RWLock::WriterLock lm (_lock);
+ for (iterator i = _events.begin(); i != _events.end(); ++i) {
+ (*i)->value = callback ((*i)->value);
+ }
+ mark_dirty ();
+ }
+ maybe_signal_changed ();
+}
+
+void
ControlList::_x_scale (double factor)
{
for (iterator i = _events.begin(); i != _events.end(); ++i) {