From 9598f2a8115c5e259094f07493825c23fcb40833 Mon Sep 17 00:00:00 2001 From: nick_m Date: Mon, 12 Dec 2016 02:01:12 +1100 Subject: [PATCH] fix loop/crash when dragging an audio-locked tempo over a music-locked one while snapped to grid. --- libs/ardour/tempo.cc | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/libs/ardour/tempo.cc b/libs/ardour/tempo.cc index b2e2dbe1be..f901607338 100644 --- a/libs/ardour/tempo.cc +++ b/libs/ardour/tempo.cc @@ -3145,20 +3145,16 @@ TempoMap::gui_move_tempo (TempoSection* ts, const framepos_t& frame, const int& * Placing the ts at the beat corresponding to the requested frame may shift the * grid in such a way that the mouse is left hovering over a completerly different division, * causing jittering when the mouse next moves (esp. large tempo deltas). - * To avoid this, place the ts at the requested frame in a dummy map - * then find the closest beat subdivision to that frame in the dummy. + * * This alters the snap behaviour slightly in that we snap to beat divisions * in the future map rather than the existing one. */ - const double beat = exact_beat_at_frame_locked (future_map, frame, sub_num); - const double pulse = pulse_at_beat_locked (future_map, beat); - - if (solve_map_pulse (future_map, tempo_copy, pulse)) { - /* snapping to a grid. force MusicTime temporarily. */ - ts->set_position_lock_style (MusicTime); - solve_map_pulse (_metrics, ts, pulse); - ts->set_position_lock_style (AudioTime); + const double qn = exact_qn_at_frame_locked (future_map, frame, sub_num); + const framepos_t snapped_frame = frame_at_minute (minute_at_quarter_note_locked (future_map, qn)); + if (solve_map_minute (future_map, tempo_copy, minute_at_frame (snapped_frame))) { + solve_map_minute (_metrics, ts, minute_at_frame (snapped_frame)); + ts->set_pulse (qn / 4.0); recompute_meters (_metrics); } } else {