summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_mouse.cc
diff options
context:
space:
mode:
authorBen Loftis <ben@glw.com>2010-04-15 20:28:07 +0000
committerBen Loftis <ben@glw.com>2010-04-15 20:28:07 +0000
commit538f2d6afff839ad511defabab152c9cb2c43a67 (patch)
tree86982eb43b201ec6bdebbb5d747e47cf9b2d786a /gtk2_ardour/editor_mouse.cc
parent5565078136e72c6c098fc4b4b688f6c1af58d069 (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/editor_mouse.cc')
-rw-r--r--gtk2_ardour/editor_mouse.cc37
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();
}
}