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:
parent
9ae5dfa1cb
commit
a873bbb14e
|
@ -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);
|
||||
|
|
|
@ -151,6 +151,7 @@ class Crossfade : public Stateful, public StateManager
|
|||
|
||||
private:
|
||||
friend struct CrossfadeComparePtr;
|
||||
friend class AudioPlaylist;
|
||||
|
||||
static jack_nframes_t _short_xfade_length;
|
||||
|
||||
|
|
|
@ -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) {}
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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 (®ion, left, right);
|
||||
|
||||
in_set_state = false;
|
||||
|
||||
maybe_save_state (_("split"));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user