13
0

Properly remove-time automation

Previously "remove time" was able to produce overlapping, not
ordered automation.
This commit is contained in:
Robin Gareus 2018-12-22 01:09:24 +01:00
parent 4b9d96ff8e
commit 616f7f40b6
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04

View File

@ -990,6 +990,14 @@ ControlList::shift (double pos, double frames)
{
{
Glib::Threads::RWLock::WriterLock lm (_lock);
if (frames < 0) {
/* Route::shift () with negative shift is used
* for "remove time". The time [pos.. pos-frames] is removed.
* and everyhing after, moved backwards.
* TODO: consider adding guard-points (need special-casing)
*/
erase_range_internal (pos, pos - frames, _events);
}
for (iterator i = _events.begin(); i != _events.end(); ++i) {
if ((*i)->when >= pos) {