From 7076f0e88eae85bd5cfbccd9a0997a2647a3c781 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Mon, 31 Aug 2009 22:49:26 +0000 Subject: Make drag selection work properly with stacked region mode. git-svn-id: svn://localhost/ardour2/branches/3.0@5607 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/streamview.cc | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'gtk2_ardour/streamview.cc') diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index fbd48ddbf2..afa41d6f90 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -514,10 +514,27 @@ StreamView::set_selected_regionviews (RegionSelection& regions) } void -StreamView::get_selectables (nframes_t start, nframes_t end, list& results) +StreamView::get_selectables (nframes_t start, nframes_t end, double top, double bottom, list& results) { + layer_t min_layer = 0; + layer_t max_layer = 0; + + if (_layer_display == Stacked) { + double const c = child_height (); + min_layer = _layers - ((bottom - _trackview.y_position()) / c); + max_layer = _layers - ((top - _trackview.y_position()) / c); + } + for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { - if ((*i)->region()->coverage(start, end) != OverlapNone) { + + bool layer_ok = true; + + if (_layer_display == Stacked) { + layer_t const l = (*i)->region()->layer (); + layer_ok = (min_layer <= l && l <= max_layer); + } + + if ((*i)->region()->coverage (start, end) != OverlapNone && layer_ok) { results.push_back (*i); } } -- cgit v1.2.3