diff --git a/libs/evoral/evoral/ControlList.hpp b/libs/evoral/evoral/ControlList.hpp index e69a756b08..16d0400145 100644 --- a/libs/evoral/evoral/ControlList.hpp +++ b/libs/evoral/evoral/ControlList.hpp @@ -113,6 +113,7 @@ public: void x_scale (double factor); bool extend_to (double); void slide (iterator before, double distance); + void shift (double before, double distance); void rt_add (double when, double value); void add (double when, double value); diff --git a/libs/evoral/src/ControlList.cpp b/libs/evoral/src/ControlList.cpp index b41141a61e..b717190768 100644 --- a/libs/evoral/src/ControlList.cpp +++ b/libs/evoral/src/ControlList.cpp @@ -534,6 +534,26 @@ ControlList::slide (iterator before, double distance) (*before)->when += distance; ++before; } + + mark_dirty (); + } + + maybe_signal_changed (); +} + +void +ControlList::shift (double pos, double frames) +{ + { + Glib::Mutex::Lock lm (_lock); + + for (iterator i = _events.begin(); i != _events.end(); ++i) { + if ((*i)->when >= pos) { + (*i)->when += frames; + } + } + + mark_dirty (); } maybe_signal_changed ();