midi editing: when transposing, expand MIDI streamview note range when/as necessary so that notes do not vanish

This commit is contained in:
Paul Davis 2022-04-17 12:03:36 -06:00
parent bde3f3a277
commit 95b1943978
1 changed files with 13 additions and 1 deletions

View File

@ -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()) {