From 884e147a9cdc130d41b59877738783c15c928d46 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 25 May 2011 22:44:30 +0000 Subject: restore compound region fade, where possible, to constituent regions, after uncombine git-svn-id: svn://localhost/ardour2/branches/3.0@9593 d708f5d6-7413-0410-9779-e7cbd77b26cf --- libs/ardour/audio_playlist.cc | 46 ++++++++++++++++++++++++++++++++++++++++++- libs/ardour/playlist.cc | 3 ++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/libs/ardour/audio_playlist.cc b/libs/ardour/audio_playlist.cc index f73bbf17e5..06eca9fb92 100644 --- a/libs/ardour/audio_playlist.cc +++ b/libs/ardour/audio_playlist.cc @@ -1109,7 +1109,7 @@ AudioPlaylist::pre_combine (vector >& originals, boost ar->set_fade_in_active (false); } - ar = boost::dynamic_pointer_cast (originals.front()); + ar = boost::dynamic_pointer_cast (originals.back()); if (ar) { /* copy the fade out of the last into the compound region */ @@ -1122,4 +1122,48 @@ AudioPlaylist::pre_combine (vector >& originals, boost void AudioPlaylist::pre_uncombine (vector >& originals, boost::shared_ptr compound_region) { + boost::shared_ptr ar; + boost::shared_ptr cr = boost::dynamic_pointer_cast(compound_region); + + if (!cr) { + return; + } + + /* no need to call clear_changes() on the originals because that is + * done within Playlist::uncombine () + */ + + if ((ar = boost::dynamic_pointer_cast (originals.front())) != 0) { + + /* copy the compound region's fade in back into the first + original region. + */ + + if (cr->fade_in()->back()->when <= ar->length()) { + /* don't do this if the fade is longer than the + * region + */ + ar->set_fade_in (cr->fade_in()); + } + + ar->set_fade_in_active (true); + _session.add_command (new StatefulDiffCommand (originals.front())); + } + + if ((ar = boost::dynamic_pointer_cast (originals.back())) != 0) { + + /* copy the compound region's fade out back into the last + original region. + */ + + if (cr->fade_out()->back()->when <= ar->length()) { + /* don't do this if the fade is longer than the + * region + */ + ar->set_fade_out (cr->fade_out()); + } + + ar->set_fade_out_active (true); + _session.add_command (new StatefulDiffCommand (originals.back())); + } } diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index 3ca4fddfb1..3c241cf846 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -3281,7 +3281,6 @@ Playlist::uncombine (boost::shared_ptr target) boost::shared_ptr current (*i); - RegionFactory::CompoundAssociations::iterator ca = cassocs.find (*i); if (ca == cassocs.end()) { @@ -3384,6 +3383,8 @@ Playlist::uncombine (boost::shared_ptr target) originals.push_back (original); } + pre_uncombine (originals, target); + in_partition = true; freeze (); -- cgit v1.2.3