From 3c2c048f406703a4baae3f2b660dddaeee39faeb Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Wed, 2 Jul 2014 16:23:46 -0400 Subject: [PATCH] reinstate same logic, slightly differently implementedm, for choosing range/object mode when pointer is in smart mode and in a track but not in a region --- gtk2_ardour/editor_mouse.cc | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index fffb67c46d..75c4fb57cf 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -2579,7 +2579,6 @@ Editor::update_join_object_range_location (double y) _join_object_range_state = JOIN_OBJECT_RANGE_RANGE; } - if (entered_regionview) { ArdourCanvas::Duple const item_space = entered_regionview->get_canvas_group()->canvas_to_item (ArdourCanvas::Duple (0, y)); @@ -2596,17 +2595,32 @@ Editor::update_join_object_range_location (double y) RouteTimeAxisView* entered_route_view = dynamic_cast (entered_track); if (entered_route_view) { - /* track/bus ... but not in a region ... use range mode */ - _join_object_range_state = JOIN_OBJECT_RANGE_RANGE; - if (_join_object_range_state != old) { - set_canvas_cursor (which_track_cursor ()); + + double cx = 0; + double cy = y; + + entered_route_view->canvas_display()->canvas_to_item (cx, cy); + + double track_height = entered_route_view->view()->child_height(); + if (Config->get_show_name_highlight()) { + track_height -= TimeAxisViewItem::NAME_HIGHLIGHT_SIZE; } + double const c = cy / track_height; + + + if (c <= 0.5) { + _join_object_range_state = JOIN_OBJECT_RANGE_RANGE; + } else { + _join_object_range_state = JOIN_OBJECT_RANGE_OBJECT; + } + } else { /* Other kinds of tracks use object mode */ _join_object_range_state = JOIN_OBJECT_RANGE_OBJECT; - if (_join_object_range_state != old) { - set_canvas_cursor (which_track_cursor ()); - } + } + + if (_join_object_range_state != old) { + set_canvas_cursor (which_track_cursor ()); } } }