summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2017-06-17 03:38:18 +1000
committernick_m <mainsbridge@gmail.com>2017-07-22 02:15:20 +1000
commit964100e9114e154be4ad818fa919e4684acd7ca8 (patch)
treef2e13d49771995eefd37bbc54d731f548d645127 /gtk2_ardour
parentc54978bd5cc9cc8c05baf6e5799b900f041f9e8d (diff)
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.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/edit_note_dialog.cc13
1 files changed, 8 insertions, 5 deletions
diff --git a/gtk2_ardour/edit_note_dialog.cc b/gtk2_ardour/edit_note_dialog.cc
index 08829d093e..997713ae2d 100644
--- a/gtk2_ardour/edit_note_dialog.cc
+++ b/gtk2_ardour/edit_note_dialog.cc
@@ -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;