Fix both note length setting and display in EditNoteDialog
Length clock uses region relative time converter with offset to display correct value over tempo changes. Fix note length setting by using source time converter on a sample duration based on a session-relative offset.
This commit is contained in:
parent
c54978bd5c
commit
964100e911
@ -104,7 +104,10 @@ EditNoteDialog::EditNoteDialog (MidiRegionView* rv, set<NoteBase*> n)
|
||||
|
||||
_length_clock.set_session (_region_view->get_time_axis_view().session ());
|
||||
_length_clock.set_mode (AudioClock::BBT);
|
||||
_length_clock.set (_region_view->region_relative_time_converter().to ((*_events.begin())->note()->length ()), true);
|
||||
_length_clock.set (
|
||||
_region_view->region_relative_time_converter().to ((*_events.begin())->note()->end_time ()) + _region_view->region()->position(),
|
||||
true,
|
||||
_region_view->region_relative_time_converter().to ((*_events.begin())->note()->time ()) + _region_view->region()->position());
|
||||
|
||||
/* Set up `set all notes...' buttons' sensitivity */
|
||||
|
||||
@ -194,8 +197,8 @@ EditNoteDialog::done (int r)
|
||||
}
|
||||
}
|
||||
|
||||
Evoral::Beats const t = _region_view->source_relative_time_converter().from
|
||||
(_time_clock.current_time() - (_region_view->region()->position() - _region_view->region()->start()));
|
||||
framecnt_t const region_samples = _time_clock.current_time() - (_region_view->region()->position() - _region_view->region()->start());
|
||||
Evoral::Beats const t = _region_view->source_relative_time_converter().from (region_samples);
|
||||
|
||||
if (!_time_all.get_sensitive() || _time_all.get_active ()) {
|
||||
for (set<NoteBase*>::iterator i = _events.begin(); i != _events.end(); ++i) {
|
||||
@ -206,10 +209,10 @@ EditNoteDialog::done (int r)
|
||||
}
|
||||
}
|
||||
|
||||
Evoral::Beats const d = _region_view->region_relative_time_converter().from (_length_clock.current_duration ());
|
||||
|
||||
if (!_length_all.get_sensitive() || _length_all.get_active ()) {
|
||||
for (set<NoteBase*>::iterator i = _events.begin(); i != _events.end(); ++i) {
|
||||
framepos_t const note_end_sample = region_samples + _length_clock.current_duration (_time_clock.current_time());
|
||||
Evoral::Beats const d = _region_view->source_relative_time_converter().from (note_end_sample) - (*i)->note()->time();
|
||||
if (d != (*i)->note()->length()) {
|
||||
_region_view->change_note_length (*i, d);
|
||||
had_change = true;
|
||||
|
Loading…
Reference in New Issue
Block a user