diff options
author | Carl Hetherington <carl@carlh.net> | 2010-11-09 01:58:42 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-11-09 01:58:42 +0000 |
commit | d29f14bf33bc807be7b95015e4f011f4ad741cc6 (patch) | |
tree | 45e3dfea78a108a9ab06a3c4c3dbb5c47cc72e01 | |
parent | c246926e4148e9996060bd6865ff03a962ddab2e (diff) |
Fix trim of multiple regions. Fixes #3528.
git-svn-id: svn://localhost/ardour2/branches/3.0@7982 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 29 | ||||
-rw-r--r-- | gtk2_ardour/editor_drag.h | 2 |
2 files changed, 15 insertions, 16 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index f9a9283d1b..45d67605b4 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1568,11 +1568,6 @@ TrimDrag::motion (GdkEvent* event, bool first_move) { RegionView* rv = _primary; - /* snap modifier works differently here.. - its current state has to be passed to the - various trim functions in order to work properly - */ - double speed = 1.0; TimeAxisView* tvp = &_primary->get_time_axis_view (); RouteTimeAxisView* tv = dynamic_cast<RouteTimeAxisView*>(tvp); @@ -1582,7 +1577,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move) speed = tv->track()->speed(); } - framepos_t const pf = adjusted_current_frame (event); + framecnt_t const dt = adjusted_current_frame (event) - grab_frame (); if (first_move) { @@ -1605,13 +1600,13 @@ TrimDrag::motion (GdkEvent* event, bool first_move) for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) { RegionView* rv = i->view; - rv->fake_set_opaque(false); + rv->fake_set_opaque (false); rv->enable_display (false); rv->region()->clear_changes (); AudioRegionView* const arv = dynamic_cast<AudioRegionView*> (rv); - if (arv){ + if (arv) { arv->temporarily_hide_envelope (); } @@ -1633,13 +1628,13 @@ TrimDrag::motion (GdkEvent* event, bool first_move) switch (_operation) { case StartTrim: for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) { - i->view->trim_start (pf, non_overlap_trim); + i->view->trim_start (i->initial_position + dt, non_overlap_trim); } break; case EndTrim: for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) { - i->view->trim_end (pf, non_overlap_trim); + i->view->trim_end (i->initial_end + dt, non_overlap_trim); } break; @@ -1654,14 +1649,14 @@ TrimDrag::motion (GdkEvent* event, bool first_move) framecnt_t frame_delta = 0; bool left_direction = false; - if (last_pointer_frame() > pf) { + if (last_pointer_frame() > adjusted_current_frame(event)) { left_direction = true; } if (left_direction) { - frame_delta = (last_pointer_frame() - pf); + frame_delta = (last_pointer_frame() - adjusted_current_frame(event)); } else { - frame_delta = (pf - last_pointer_frame()); + frame_delta = (adjusted_current_frame(event) - last_pointer_frame()); } for (list<DraggingView>::const_iterator i = _views.begin(); i != _views.end(); ++i) { @@ -1673,13 +1668,13 @@ TrimDrag::motion (GdkEvent* event, bool first_move) switch (_operation) { case StartTrim: - _editor->show_verbose_time_cursor((framepos_t) (rv->region()->position()/speed), 10); + _editor->show_verbose_time_cursor ((framepos_t) (rv->region()->position() / speed), 10); break; case EndTrim: - _editor->show_verbose_time_cursor((framepos_t) (rv->region()->last_frame()/speed), 10); + _editor->show_verbose_time_cursor ((framepos_t) (rv->region()->last_frame() / speed), 10); break; case ContentsTrim: - _editor->show_verbose_time_cursor (pf, 10); + _editor->show_verbose_time_cursor (adjusted_current_frame (event), 10); break; } } @@ -4013,4 +4008,6 @@ DraggingView::DraggingView (RegionView* v, RegionDrag* parent) layer = v->region()->layer (); initial_y = v->get_canvas_group()->property_y (); initial_playlist = v->region()->playlist (); + initial_position = v->region()->position (); + initial_end = v->region()->position () + v->region()->length (); } diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 67bd43e2b5..e0d3d91ee8 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -239,6 +239,8 @@ struct DraggingView /** layer that this region is currently being displayed on */ ARDOUR::layer_t layer; double initial_y; ///< the initial y position of the view before any reparenting + framepos_t initial_position; ///< initial position of the region + framepos_t initial_end; ///< initial end position of the region boost::shared_ptr<ARDOUR::Playlist> initial_playlist; }; |