summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorAndré Nusser <andre.nusser@googlemail.com>2015-09-20 22:22:39 +0200
committerRobin Gareus <robin@gareus.org>2015-09-20 22:22:39 +0200
commit6a248b61f07c7ff73faac21d8bb4934a22b5250e (patch)
tree363413bf374d23a073adfd416a2d8a671a724e36 /libs
parent7b4aa97145b12695fc2948d5d45938cf7fcd86b0 (diff)
fix duplicating multiple selected regions - fixes #6202
Diffstat (limited to 'libs')
-rw-r--r--libs/ardour/ardour/playlist.h1
-rw-r--r--libs/ardour/playlist.cc9
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) {