13
0

Fix for #1179. Crossfades are not lost anymore when regions are split.

git-svn-id: svn://localhost/trunk/ardour2@410 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Sampo Savolainen 2006-03-20 22:14:12 +00:00
parent 9ae5dfa1cb
commit a873bbb14e
5 changed files with 33 additions and 0 deletions

View File

@ -93,6 +93,8 @@ class AudioPlaylist : public ARDOUR::Playlist
/* playlist "callbacks" */
void notify_crossfade_added (Crossfade *);
void flush_notifications ();
void finalize_split_region (Region *orig, Region *left, Region *right);
void refresh_dependents (Region& region);
void check_dependents (Region& region, bool norefresh);

View File

@ -151,6 +151,7 @@ class Crossfade : public Stateful, public StateManager
private:
friend struct CrossfadeComparePtr;
friend class AudioPlaylist;
static jack_nframes_t _short_xfade_length;

View File

@ -233,6 +233,9 @@ class Playlist : public Stateful, public StateManager {
void splice_locked ();
void splice_unlocked ();
virtual void finalize_split_region (Region *original, Region *left, Region *right) {}
virtual void check_dependents (Region& region, bool norefresh) {}
virtual void refresh_dependents (Region& region) {}
virtual void remove_dependents (Region& region) {}

View File

@ -344,6 +344,27 @@ AudioPlaylist::refresh_dependents (Region& r)
}
}
void
AudioPlaylist::finalize_split_region (Region *o, Region *l, Region *r)
{
AudioRegion *orig = dynamic_cast<AudioRegion*>(o);
AudioRegion *left = dynamic_cast<AudioRegion*>(l);
AudioRegion *right = dynamic_cast<AudioRegion*>(r);
for (Crossfades::iterator x = _crossfades.begin(); x != _crossfades.end(); ++x) {
Crossfades::iterator tmp;
if ((*x)->_in == orig) {
(*x)->_in = left;
}
if ((*x)->_out == orig) {
(*x)->_out = right;
}
}
}
void
AudioPlaylist::check_dependents (Region& r, bool norefresh)
{

View File

@ -996,6 +996,8 @@ Playlist::split_region (Region& region, jack_nframes_t playlist_position)
before = playlist_position - region.position();
after = region.length() - before;
in_set_state = true;
_session.region_name (before_name, region.name(), false);
left = createRegion (region, 0, before, before_name, region.layer(), Region::Flag (region.flags()|Region::LeftOfSplit));
@ -1005,6 +1007,10 @@ Playlist::split_region (Region& region, jack_nframes_t playlist_position)
add_region_internal (left, region.position(), true);
add_region_internal (right, region.position() + before);
finalize_split_region (&region, left, right);
in_set_state = false;
maybe_save_state (_("split"));
}