From 95b1943978703e26322488b2ce19547d9bb96e5d Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Sun, 17 Apr 2022 12:03:36 -0600 Subject: [PATCH] midi editing: when transposing, expand MIDI streamview note range when/as necessary so that notes do not vanish --- gtk2_ardour/midi_region_view.cc | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 653b92a32f..c61c4805cf 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -3445,14 +3445,25 @@ MidiRegionView::transpose (bool up, bool fine, bool allow_smush) start_note_diff_command (_("transpose")); + uint8_t lowest = midi_stream_view()->lowest_note(); + uint8_t highest = midi_stream_view()->highest_note(); + for (Selection::iterator i = _selection.begin(); i != _selection.end(); ) { Selection::iterator next = i; ++next; - change_note_note (*i, delta, true); + uint8_t new_note = change_note_note (*i, delta, true); + lowest = min (lowest, new_note); + highest = max (highest, new_note); i = next; } apply_diff (); + + if (lowest < midi_stream_view()->lowest_note() || highest > midi_stream_view()->highest_note()) { + midi_stream_view()->update_note_range (lowest); + midi_stream_view()->update_note_range (highest); + midi_stream_view()->apply_note_range (lowest, highest, true); + } } void @@ -3767,6 +3778,7 @@ MidiRegionView::paste (timepos_t const & pos, const ::Selection& selection, Past bool commit = false; // Paste notes, if available MidiNoteSelection::const_iterator m = selection.midi_notes.get_nth(ctx.counts.n_notes()); + if (m != selection.midi_notes.end()) { ctx.counts.increase_n_notes(); if (!(*m)->empty()) {