diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-06-05 17:06:36 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-06-05 17:06:36 -0400 |
commit | eec24b6287004f977146eb831108029745fb313f (patch) | |
tree | 6d7685d87b834ae4a179ae3b3f3d2eaf154c56e4 /gtk2_ardour | |
parent | 24e357ae19d8fa0b0b9e8729b1a91c7bf80d7708 (diff) |
fix up drawing and selection process for range selections (caused by subtle change in semantics of TimeAxisView::covered_by_y_range())
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 228812a2dc..d4a6c8e00f 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3948,25 +3948,34 @@ SelectionDrag::motion (GdkEvent* event, bool first_move) TrackViewList to_be_removed_from_selection; TrackViewList& all_tracks (_editor->track_views); - for (TrackViewList::const_iterator i = all_tracks.begin(); i != all_tracks.end(); ++i) { + // /* convert grab_y and current_pointer_y into offsets within the trackview group */ + + ArdourCanvas::Duple const top_of_trackviews_canvas = _editor->get_trackview_group()->item_to_canvas (ArdourCanvas::Duple (0, 0)); + ArdourCanvas::Coord const top = grab_y() - top_of_trackviews_canvas.y; + ArdourCanvas::Coord const bottom = _drags->current_pointer_y() - top_of_trackviews_canvas.y; + + if (top >= 0 && bottom >= 0) { + + for (TrackViewList::const_iterator i = all_tracks.begin(); i != all_tracks.end(); ++i) { - if ((*i)->covered_by_y_range (grab_y(), _drags->current_pointer_y())) { - if (!(*i)->get_selected()) { - to_be_added_to_selection.push_back (*i); - } - } else { - if ((*i)->get_selected()) { - to_be_removed_from_selection.push_back (*i); + if ((*i)->covered_by_y_range (top, bottom)) { + if (!(*i)->get_selected()) { + to_be_added_to_selection.push_back (*i); + } + } else { + if ((*i)->get_selected()) { + to_be_removed_from_selection.push_back (*i); + } } } - } - - if (!to_be_added_to_selection.empty()) { - _editor->selection->add (to_be_added_to_selection); - } - if (!to_be_removed_from_selection.empty()) { - _editor->selection->remove (to_be_removed_from_selection); + if (!to_be_added_to_selection.empty()) { + _editor->selection->add (to_be_added_to_selection); + } + + if (!to_be_removed_from_selection.empty()) { + _editor->selection->remove (to_be_removed_from_selection); + } } } break; |