diff options
author | Carl Hetherington <carl@carlh.net> | 2009-08-26 02:19:36 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-08-26 02:19:36 +0000 |
commit | c6be9b688802198e04a07dc902c49d1d6b66340e (patch) | |
tree | c912543110517ddcbda171d8922a61f3e87d6aa7 /libs | |
parent | 8934ff78678cafeb03c398e7add299f2bc1a730d (diff) |
Make stacked region coverage frames correctly respect regions being muted.
git-svn-id: svn://localhost/ardour2/branches/3.0@5595 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/playlist.h | 1 | ||||
-rw-r--r-- | libs/ardour/playlist.cc | 33 |
2 files changed, 33 insertions, 1 deletions
diff --git a/libs/ardour/ardour/playlist.h b/libs/ardour/ardour/playlist.h index 1018419c26..6778a70f53 100644 --- a/libs/ardour/ardour/playlist.h +++ b/libs/ardour/ardour/playlist.h @@ -114,6 +114,7 @@ class Playlist : public SessionObject, RegionList* regions_to_read (nframes_t start, nframes_t end); boost::shared_ptr<Region> find_region (const PBD::ID&) const; boost::shared_ptr<Region> top_region_at (nframes_t frame); + boost::shared_ptr<Region> top_unmuted_region_at (nframes_t frame); boost::shared_ptr<Region> find_next_region (nframes_t frame, RegionPoint point, int dir); nframes64_t find_next_region_boundary (nframes64_t frame, int dir); bool region_is_shuffle_constrained (boost::shared_ptr<Region>); diff --git a/libs/ardour/playlist.cc b/libs/ardour/playlist.cc index f74eb1001f..94e6e421bd 100644 --- a/libs/ardour/playlist.cc +++ b/libs/ardour/playlist.cc @@ -1418,7 +1418,38 @@ Playlist::top_region_at (nframes_t frame) delete rlist; return region; -} +} + +boost::shared_ptr<Region> +Playlist::top_unmuted_region_at (nframes_t frame) + +{ + RegionLock rlock (this); + RegionList *rlist = find_regions_at (frame); + + for (RegionList::iterator i = rlist->begin(); i != rlist->end(); ) { + + RegionList::iterator tmp = i; + ++tmp; + + if ((*i)->muted()) { + rlist->erase (i); + } + + i = tmp; + } + + boost::shared_ptr<Region> region; + + if (rlist->size()) { + RegionSortByLayer cmp; + rlist->sort (cmp); + region = rlist->back(); + } + + delete rlist; + return region; +} Playlist::RegionList* Playlist::regions_to_read (nframes_t start, nframes_t end) |