From aa6adacc7505005305d922847ef0e33378314ecd Mon Sep 17 00:00:00 2001 From: Ben Loftis Date: Tue, 17 May 2011 15:20:18 +0000 Subject: fix thinko in playlist constructor for cut and copy git-svn-id: svn://localhost/ardour2/branches/3.0@9541 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/audio_playlist.cc | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) (limited to 'libs/ardour/audio_playlist.cc') diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index 4e15aa70c2..07a6d099ea 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -205,31 +205,30 @@ AudioPlaylist::AudioPlaylist (boost::shared_ptr other, fram break; } - case OverlapStart: - { - if (region->fade_in()->back()->when > 0) { - fade_in = region->fade_in()->back()->when; - } - if (start > region->last_frame() - region->fade_out()->back()->when) { - fade_out = region->last_frame() - start; - } + case OverlapStart: { + position = region->position() - start; + len = end - region->position(); + + if (end > region->position() + region->fade_in().back()->when) + fade_in_len = region->fade_in().back()->when; //end is after fade-in, preserve the fade-in + if (end > region->last_frame() - region->fade_out().back()->when) + fade_out_len = region->fade_out().back()->when - ( region->last_frame() - end ); //end is inside the fadeout, preserve the fades endpoint break; } - - case OverlapEnd: - { - framecnt_t const offset = start - region->position(); - if (region->fade_in()->back()->when > offset) { - fade_in = region->fade_in()->back()->when - offset; - } - if (start > region->last_frame() - region->fade_out()->back()->when) { - fade_out = region->last_frame() - start; - } else { - fade_out = region->fade_out()->back()->when; - } + + case OverlapEnd: { + position = 0; + offset = start - region->position(); + len = region->length() - offset; + + if (start < region->last_frame() - region->fade_out().back()->when) //start is before fade-out, preserve the fadeout + fade_out_len = region->fade_out().back()->when; + + if (start < region->position() + region->fade_in().back()->when) + fade_in_len = region->fade_in().back()->when - (start - region->position()); //end is inside the fade-in, preserve the fade-in endpoint break; } - + case OverlapExternal: fade_in = region->fade_in()->back()->when; fade_out = region->fade_out()->back()->when; -- cgit v1.2.3