summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_mouse.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-07-02 16:23:46 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-07-02 16:23:46 -0400
commit3c2c048f406703a4baae3f2b660dddaeee39faeb (patch)
treebe74d1340f0dcb3b89b96ae9f80b7e1078753db5 /gtk2_ardour/editor_mouse.cc
parent3dbf37eab7f307e562edce947162317bc4463249 (diff)
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
Diffstat (limited to 'gtk2_ardour/editor_mouse.cc')
-rw-r--r--gtk2_ardour/editor_mouse.cc30
1 files 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<RouteTimeAxisView*> (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 ());
}
}
}