diff options
author | André Nusser <andre.nusser@googlemail.com> | 2015-09-20 22:22:39 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2015-09-20 22:22:39 +0200 |
commit | 6a248b61f07c7ff73faac21d8bb4934a22b5250e (patch) | |
tree | 363413bf374d23a073adfd416a2d8a671a724e36 /libs | |
parent | 7b4aa97145b12695fc2948d5d45938cf7fcd86b0 (diff) |
fix duplicating multiple selected regions - fixes #6202
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/playlist.h | 1 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 9 |
2 files changed, 9 insertions, 1 deletions
diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index bb211dbe58..eadd237143 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -140,6 +140,7 @@ public: void shift (framepos_t at, frameoffset_t distance, bool move_intersected, bool ignore_music_glue); void partition (framepos_t start, framepos_t end, bool cut = false); void duplicate (boost::shared_ptr<Region>, framepos_t position, float times); + void duplicate (boost::shared_ptr<Region>, framepos_t position, framecnt_t gap, float times); void nudge_after (framepos_t start, framecnt_t distance, bool forwards); boost::shared_ptr<Region> combine (const RegionList&); void uncombine (boost::shared_ptr<Region>); diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 8862c633ab..868be8da19 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -1245,6 +1245,13 @@ Playlist::flush_notifications (bool from_undo) void Playlist::duplicate (boost::shared_ptr<Region> region, framepos_t position, float times) { + duplicate(region, position, region->length(), times); + } + +/** @param gap from the beginning of the region to the next beginning */ + void + Playlist::duplicate (boost::shared_ptr<Region> region, framepos_t position, framecnt_t gap, float times) + { times = fabs (times); RegionWriteLock rl (this); @@ -1255,7 +1262,7 @@ Playlist::flush_notifications (bool from_undo) boost::shared_ptr<Region> copy = RegionFactory::create (region, true); add_region_internal (copy, pos); set_layer (copy, DBL_MAX); - pos += region->length(); + pos += gap; } if (floor (times) != times) { |