From 0b509454840aaf27cfa7fb37bfb039c082cebaa1 Mon Sep 17 00:00:00 2001 From: nick_m Date: Sun, 16 Oct 2016 03:47:10 +1100 Subject: [PATCH] Fix various snap issues when dragging control points (AutomationRegionView). --- gtk2_ardour/automation_line.h | 1 + gtk2_ardour/editor_drag.cc | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index d51e437bdd..a6df048354 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -154,6 +154,7 @@ public: } void set_offset (ARDOUR::framecnt_t); + ARDOUR::framecnt_t offset () { return _offset; } void set_width (ARDOUR::framecnt_t); framepos_t session_position (ARDOUR::AutomationList::const_iterator) const; diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index bbe0aca428..99481f38a2 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -4327,7 +4327,7 @@ ControlPointDrag::start_grab (GdkEvent* event, Gdk::Cursor* /*cursor*/) // start the grab at the center of the control point so // the point doesn't 'jump' to the mouse after the first drag - _fixed_grab_x = _point->get_x(); + _fixed_grab_x = _point->get_x() + _editor->sample_to_pixel_unrounded (_point->line().offset()); _fixed_grab_y = _point->get_y(); framepos_t pos = _editor->pixel_to_sample (_fixed_grab_x); @@ -4385,13 +4385,12 @@ ControlPointDrag::motion (GdkEvent* event, bool first_motion) } framepos_t cx_frames = _editor->pixel_to_sample (cx) + snap_delta (event->button.state); - if (!_x_constrained && need_snap) { _editor->snap_to_with_modifier (cx_frames, event); } cx_frames -= snap_delta (event->button.state); - cx_frames = min (cx_frames, _point->line().maximum_time()); + cx_frames = min (cx_frames, _point->line().maximum_time() + _point->line().offset()); float const fraction = 1.0 - (cy / _point->line().height()); -- 2.30.2