diff options
author | Carl Hetherington <carl@carlh.net> | 2010-09-09 01:38:12 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2010-09-09 01:38:12 +0000 |
commit | 613fe6353ade9c0c6d8205b4b09dd48a0d9d617f (patch) | |
tree | ce0d86b5215ec00a6e7ed89da1261c4d9a369ede | |
parent | db680ab6d3d115e22eb8cf0a39340de9335aae7d (diff) |
Fix confusion with _pointer_frame_offset and snapping; makes e.g. playhead drag with grid snap to region bounds work.
git-svn-id: svn://localhost/ardour2/branches/3.0@7758 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 25 | ||||
-rw-r--r-- | gtk2_ardour/editor_drag.h | 5 |
2 files changed, 18 insertions, 12 deletions
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index 0524ccbeec..e75bfba576 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -167,6 +167,7 @@ Drag::Drag (Editor* e, ArdourCanvas::Item* i) , _item (i) , _pointer_frame_offset (0) , _move_threshold_passed (false) + , _raw_grab_frame (0) , _grab_frame (0) , _last_pointer_frame (0) { @@ -208,8 +209,8 @@ Drag::start_grab (GdkEvent* event, Gdk::Cursor *cursor) _y_constrained = false; } - _grab_frame = _editor->event_frame (event, &_grab_x, &_grab_y); - _grab_frame = adjusted_frame (_grab_frame, event); + _raw_grab_frame = _editor->event_frame (event, &_grab_x, &_grab_y); + _grab_frame = adjusted_frame (_raw_grab_frame, event); _last_pointer_frame = _grab_frame; _last_pointer_x = _grab_x; _last_pointer_y = _grab_y; @@ -1169,7 +1170,7 @@ RegionMoveDrag::start_grab (GdkEvent* event, Gdk::Cursor* c) { RegionMotionDrag::start_grab (event, c); - _pointer_frame_offset = grab_frame() - _last_frame_position; + _pointer_frame_offset = raw_grab_frame() - _last_frame_position; } RegionInsertDrag::RegionInsertDrag (Editor* e, boost::shared_ptr<Region> r, RouteTimeAxisView* v, nframes64_t pos) @@ -1715,7 +1716,7 @@ MeterMarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) Drag::start_grab (event, cursor); - _pointer_frame_offset = grab_frame() - _marker->meter().frame(); + _pointer_frame_offset = raw_grab_frame() - _marker->meter().frame(); _editor->show_verbose_time_cursor (adjusted_current_frame(event), 10); } @@ -1806,7 +1807,7 @@ TempoMarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) Drag::start_grab (event, cursor); - _pointer_frame_offset = grab_frame() - _marker->tempo().frame(); + _pointer_frame_offset = raw_grab_frame() - _marker->tempo().frame(); _editor->show_verbose_time_cursor (adjusted_current_frame (event), 10); } @@ -1905,7 +1906,7 @@ CursorDrag::start_grab (GdkEvent* event, Gdk::Cursor* c) } } - _pointer_frame_offset = grab_frame() - _cursor->current_frame; + _pointer_frame_offset = raw_grab_frame() - _cursor->current_frame; _editor->show_verbose_time_cursor (_cursor->current_frame, 10); } @@ -1983,7 +1984,7 @@ FadeInDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) AudioRegionView* arv = dynamic_cast<AudioRegionView*> (_primary); boost::shared_ptr<AudioRegion> const r = arv->audio_region (); - _pointer_frame_offset = grab_frame() - ((nframes64_t) r->fade_in()->back()->when + r->position()); + _pointer_frame_offset = raw_grab_frame() - ((nframes64_t) r->fade_in()->back()->when + r->position()); _editor->show_verbose_duration_cursor (r->position(), r->position() + r->fade_in()->back()->when, 10); arv->show_fade_line((nframes64_t) r->fade_in()->back()->when); @@ -2095,7 +2096,7 @@ FadeOutDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) AudioRegionView* arv = dynamic_cast<AudioRegionView*> (_primary); boost::shared_ptr<AudioRegion> r = arv->audio_region (); - _pointer_frame_offset = grab_frame() - (r->length() - (nframes64_t) r->fade_out()->back()->when + r->position()); + _pointer_frame_offset = raw_grab_frame() - (r->length() - (nframes64_t) r->fade_out()->back()->when + r->position()); _editor->show_verbose_duration_cursor (r->last_frame() - r->fade_out()->back()->when, r->last_frame(), 10); arv->show_fade_line(r->length() - r->fade_out()->back()->when); @@ -2231,7 +2232,7 @@ MarkerDrag::start_grab (GdkEvent* event, Gdk::Cursor* cursor) Location *location = _editor->find_location_from_marker (_marker, is_start); _editor->_dragging_edit_point = true; - _pointer_frame_offset = grab_frame() - (is_start ? location->start() : location->end()); + _pointer_frame_offset = raw_grab_frame() - (is_start ? location->start() : location->end()); update_item (location); @@ -3051,7 +3052,7 @@ SelectionDrag::start_grab (GdkEvent* event, Gdk::Cursor*) } Drag::start_grab (event, _editor->left_side_trim_cursor); start = _editor->selection->time[_editor->clicked_selection].start; - _pointer_frame_offset = grab_frame() - start; + _pointer_frame_offset = raw_grab_frame() - start; break; case SelectionEndTrim: @@ -3060,13 +3061,13 @@ SelectionDrag::start_grab (GdkEvent* event, Gdk::Cursor*) } Drag::start_grab (event, _editor->right_side_trim_cursor); end = _editor->selection->time[_editor->clicked_selection].end; - _pointer_frame_offset = grab_frame() - end; + _pointer_frame_offset = raw_grab_frame() - end; break; case SelectionMove: start = _editor->selection->time[_editor->clicked_selection].start; Drag::start_grab (event, cursor); - _pointer_frame_offset = grab_frame() - start; + _pointer_frame_offset = raw_grab_frame() - start; break; } diff --git a/gtk2_ardour/editor_drag.h b/gtk2_ardour/editor_drag.h index 49d131b52b..7f17a22838 100644 --- a/gtk2_ardour/editor_drag.h +++ b/gtk2_ardour/editor_drag.h @@ -185,6 +185,10 @@ protected: return _grab_y; } + ARDOUR::framepos_t raw_grab_frame () const { + return _raw_grab_frame; + } + ARDOUR::framepos_t grab_frame () const { return _grab_frame; } @@ -217,6 +221,7 @@ private: double _grab_y; ///< trackview y of the grab start position double _last_pointer_x; ///< trackview x of the pointer last time a motion occurred double _last_pointer_y; ///< trackview y of the pointer last time a motion occurred + ARDOUR::framepos_t _raw_grab_frame; ///< unsnapped frame that the mouse was at when start_grab was called, or 0 nframes64_t _grab_frame; ///< adjusted_frame that the mouse was at when start_grab was called, or 0 nframes64_t _last_pointer_frame; ///< adjusted_frame the last time a motion occurred }; |