diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-04-11 14:06:50 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-04-11 14:06:50 +0000 |
commit | cb413146428ce5db5e281d70f2b3b7df27c1aaab (patch) | |
tree | 4961e9dcb107f2ca1f0a4298faf5135ba8611d92 /libs/ardour/region.cc | |
parent | 9aa8af5a28abbb86c9ae86c6991838eb6828d0a9 (diff) |
merge 3.0 from 2.0-ongoing@3243
git-svn-id: svn://localhost/ardour2/branches/3.0@3248 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/region.cc')
-rw-r--r-- | libs/ardour/region.cc | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/libs/ardour/region.cc b/libs/ardour/region.cc index 508f09a480..456fc15235 100644 --- a/libs/ardour/region.cc +++ b/libs/ardour/region.cc @@ -316,6 +316,9 @@ Region::~Region () for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { (*i)->remove_playlist (pl); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->remove_playlist (pl); + } } notify_callbacks (); @@ -341,16 +344,26 @@ Region::set_playlist (boost::weak_ptr<Playlist> wpl) (*i)->remove_playlist (_playlist); (*i)->add_playlist (pl); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->remove_playlist (_playlist); + (*i)->add_playlist (pl); + } } else { for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { (*i)->add_playlist (pl); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->add_playlist (pl); + } } } else { if (old_playlist) { for (SourceList::const_iterator i = _sources.begin(); i != _sources.end(); ++i) { (*i)->remove_playlist (old_playlist); } + for (SourceList::const_iterator i = _master_sources.begin(); i != _master_sources.end(); ++i) { + (*i)->remove_playlist (old_playlist); + } } } } @@ -532,11 +545,8 @@ Region::set_position_internal (nframes_t pos, bool allow_bbt_recompute) _length = max_frames - _position; } - if (allow_bbt_recompute && _positional_lock_style == MusicTime) { - boost::shared_ptr<Playlist> pl (playlist()); - if (pl) { - pl->session().tempo_map().bbt_time (_position, _bbt_time); - } + if (allow_bbt_recompute) { + recompute_position_from_lock_style (); } invalidate_transients (); @@ -575,6 +585,17 @@ Region::set_position_on_top (nframes_t pos, void *src) } void +Region::recompute_position_from_lock_style () +{ + if (_positional_lock_style == MusicTime) { + boost::shared_ptr<Playlist> pl (playlist()); + if (pl) { + pl->session().tempo_map().bbt_time (_position, _bbt_time); + } + } +} + +void Region::nudge_position (nframes64_t n, void *src) { if (_flags & Locked) { |