hopefully fix issue with Editor::set_canvas_cursor_for_region_view() which was incorr...
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 15 Apr 2014 16:44:11 +0000 (12:44 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 15 Apr 2014 16:44:49 +0000 (12:44 -0400)
This started happening more frequently after this function started to be called more often (which was the right thing to do, but
had this side effect (now fixed).

gtk2_ardour/editor_mouse.cc

index b0ae055aa86d02fdce2d5c249451046283359951..5ce8fcd3862a3fe01567e1707588cde5b0628e99 100644 (file)
@@ -2927,21 +2927,28 @@ Editor::set_canvas_cursor_for_region_view (double x, RegionView* rv)
        assert (item_bbox);
        ArdourCanvas::Rect parent_bbox = g->item_to_parent (item_bbox.get ());
 
-       /* Halfway across the region */
-       double const h = (parent_bbox.x0 + parent_bbox.x1) / 2;
+       /* First or last 10% of region is used for trimming, if the whole
+          region is wider than 20 pixels at the current zoom level.
+       */
 
-       Trimmable::CanTrim ct = rv->region()->can_trim ();
-       if (x <= h) {
-               if (ct & Trimmable::FrontTrimEarlier) {
-                       set_canvas_cursor (_cursors->left_side_trim, true);
-               } else {
-                       set_canvas_cursor (_cursors->left_side_trim_right_only, true);
-               }
-       } else {
-               if (ct & Trimmable::EndTrimLater) {
-                       set_canvas_cursor (_cursors->right_side_trim, true);
-               } else {
-                       set_canvas_cursor (_cursors->right_side_trim_left_only, true);
+       double const w = parent_bbox.width();
+
+       if (w > 20.0 && x >= parent_bbox.x0 && x < parent_bbox.x1) {
+               
+               Trimmable::CanTrim ct = rv->region()->can_trim ();
+
+               if (((x - parent_bbox.x0) / w) < 0.10) {
+                       if (ct & Trimmable::FrontTrimEarlier) {
+                               set_canvas_cursor (_cursors->left_side_trim, true);
+                       } else {
+                               set_canvas_cursor (_cursors->left_side_trim_right_only, true);
+                       }
+               } else if (((parent_bbox.x1 - x) / w) < 0.10) {
+                       if (ct & Trimmable::EndTrimLater) {
+                               set_canvas_cursor (_cursors->right_side_trim, true);
+                       } else {
+                               set_canvas_cursor (_cursors->right_side_trim_left_only, true);
+                       }
                }
        }
 }