From ca9e54100a338ef0a7ac65e7483bea9e7aac43c0 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 16 Apr 2020 21:39:38 -0600 Subject: more sane design for MidiRegionView::nudge_notes() Use nudge clock if snap/grid is disabled; use grid (and grid/4 if "fine" adjustment is chosen) --- gtk2_ardour/midi_region_view.cc | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index fc5e190859..75e9828993 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -3364,7 +3364,10 @@ MidiRegionView::change_note_lengths (bool fine, bool shorter, Temporal::Beats de void MidiRegionView::nudge_notes (bool forward, bool fine) { + cerr << "nudge fwd " << forward << " fine " << fine << endl; + if (_selection.empty()) { + cerr << "not selection is empty\n"; return; } @@ -3376,12 +3379,7 @@ MidiRegionView::nudge_notes (bool forward, bool fine) const samplepos_t ref_point = source_beats_to_absolute_samples ((*(_selection.begin()))->note()->time()); Temporal::Beats delta; - if (!fine) { - - /* non-fine, move by 1 bar regardless of snap */ - delta = Temporal::Beats(trackview.session()->tempo_map().meter_at_sample (ref_point).divisions_per_bar()); - - } else if (trackview.editor().snap_mode() == Editing::SnapOff) { + if (trackview.editor().snap_mode() == Editing::SnapOff) { /* grid is off - use nudge distance */ @@ -3389,31 +3387,29 @@ MidiRegionView::nudge_notes (bool forward, bool fine) const samplecnt_t distance = trackview.editor().get_nudge_distance (ref_point, unused); delta = region_samples_to_region_beats (fabs ((double)distance)); + cerr << "used nudge\n"; + } else { /* use grid */ - MusicSample next_pos (ref_point, 0); - if (forward) { - if (max_samplepos - 1 < next_pos.sample) { - next_pos.sample += 1; - } - } else { - if (next_pos.sample == 0) { - return; - } - next_pos.sample -= 1; - } + bool success; - trackview.editor().snap_to (next_pos, (forward ? RoundUpAlways : RoundDownAlways), SnapToGrid_Unscaled, false); - const samplecnt_t distance = ref_point - next_pos.sample; - delta = region_samples_to_region_beats (fabs ((double)distance)); + delta = trackview.editor().get_grid_type_as_beats (success, ref_point); + + if (!success) { + delta = Temporal::Beats (1, 0); + } } if (!delta) { return; } + if (fine) { + delta = delta / 4; + } + if (!forward) { delta = -delta; } -- cgit v1.2.3