diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2014-06-03 15:57:56 -0400 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2014-06-03 16:13:12 -0400 |
commit | e0533e9dd7df504236892fe0d8693e7ad9a6a278 (patch) | |
tree | 43d6f88e7d8cec6acf9db9965ec6536f2349a1c0 /gtk2_ardour/editor.cc | |
parent | d4989ed9cedcfbff48f6131c595691005283a435 (diff) |
more profound changes to canvas scrolling, in particular find appropriate ScrollGroup for Canvas::{window,canvas}_to_{canvas,window}()
Diffstat (limited to 'gtk2_ardour/editor.cc')
-rw-r--r-- | gtk2_ardour/editor.cc | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 5d16b09c02..f38cbb217b 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -2421,21 +2421,31 @@ Editor::get_state () return *node; } - - -/** @param y y offset from the top of all trackviews. +/** @param y y is in canvas coordinate space, in pixel units + * * @return pair: TimeAxisView that y is over, layer index. + * * TimeAxisView may be 0. Layer index is the layer number if the TimeAxisView is valid and is * in stacked or expanded region display mode, otherwise 0. */ std::pair<TimeAxisView *, double> Editor::trackview_by_y_position (double y) { - for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + /* convert y into an offset within the trackview group */ + + ArdourCanvas::Duple top_of_trackviews_canvas = _trackview_group->item_to_canvas (ArdourCanvas::Duple (0, 0)); + + if (y >= top_of_trackviews_canvas.y) { + + y -= top_of_trackviews_canvas.y; - std::pair<TimeAxisView*, double> const r = (*iter)->covers_y_position (y); - if (r.first) { - return r; + for (TrackViewList::iterator iter = track_views.begin(); iter != track_views.end(); ++iter) { + + std::pair<TimeAxisView*, double> const r = (*iter)->covers_y_position (y); + + if (r.first) { + return r; + } } } |