fix loop/crash when dragging an audio-locked tempo over a music-locked one while snapped to grid.
This commit is contained in:
parent
0d7b298fbe
commit
9598f2a811
@ -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
|
* 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,
|
* 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).
|
* 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
|
* This alters the snap behaviour slightly in that we snap to beat divisions
|
||||||
* in the future map rather than the existing one.
|
* in the future map rather than the existing one.
|
||||||
*/
|
*/
|
||||||
const double beat = exact_beat_at_frame_locked (future_map, frame, sub_num);
|
const double qn = exact_qn_at_frame_locked (future_map, frame, sub_num);
|
||||||
const double pulse = pulse_at_beat_locked (future_map, beat);
|
const framepos_t snapped_frame = frame_at_minute (minute_at_quarter_note_locked (future_map, qn));
|
||||||
|
|
||||||
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);
|
|
||||||
|
|
||||||
|
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);
|
recompute_meters (_metrics);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user