summaryrefslogtreecommitdiff
path: root/gtk2_ardour/edit_note_dialog.cc
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/edit_note_dialog.cc
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/edit_note_dialog.cc')
-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;