diff options
author | Ben Loftis <ben@glw.com> | 2010-04-15 20:28:07 +0000 |
---|---|---|
committer | Ben Loftis <ben@glw.com> | 2010-04-15 20:28:07 +0000 |
commit | 538f2d6afff839ad511defabab152c9cb2c43a67 (patch) | |
tree | 86982eb43b201ec6bdebbb5d747e47cf9b2d786a /gtk2_ardour | |
parent | 5565078136e72c6c098fc4b4b688f6c1af58d069 (diff) |
fix some strange behavior when dragging region(s) towards time zero
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@6913 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 363dbd3b03..a1a2296cb4 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -3745,20 +3745,35 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event) x_delta = ((double) (pending_region_position - drag_info.last_frame_position) / frames_per_unit); } else { x_delta = -((double) (drag_info.last_frame_position - pending_region_position) / frames_per_unit); - for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) { - - RegionView* rv2 = (*i); - - // If any regionview is at zero, we need to know so we can stop further leftward motion. - + + //test to make sure that we aren't dragging near 0 + if (selection->regions.by_layer().size() == 1) { // If a single regionview is being dragged to zero, make sure we go all the way to zero. + RegionView* rv2 = *(selection->regions.by_layer().begin()); double ix1, ix2, iy1, iy2; rv2->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2); rv2->get_canvas_group()->i2w (ix1, iy1); - - if (-x_delta > ix1 + horizontal_adjustment.get_value()) { - x_delta = 0; - pending_region_position = drag_info.last_frame_position; - break; + double pos = ix1 + horizontal_adjustment.get_value(); + if (-x_delta > pos) { + pending_region_position = 0; + } + } else { // If any regionview is at zero, we need to know so we can stop further leftward motion. + + //first find the earliest region in the selection + RegionView *earliest_rv = selection->regions.by_layer().front(); + for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) { + RegionView* rv = (*i); + if (rv->region()->position() < earliest_rv->region()->position()) + earliest_rv = rv; + } + + //if the earliest region is near 0, then limit the drag so it doesn't go any farther left + double ix1, ix2, iy1, iy2; + earliest_rv->get_canvas_frame()->get_bounds (ix1, iy1, ix2, iy2); + earliest_rv->get_canvas_group()->i2w (ix1, iy1); + double pos = ix1 + horizontal_adjustment.get_value(); + if (x_delta < -pos) { + x_delta = -pos; + pending_region_position = clicked_regionview->region()->position() - earliest_rv->region()->position(); } } |