diff options
author | nick_m <mainsbridge@gmail.com> | 2016-10-26 04:52:09 +1100 |
---|---|---|
committer | nick_m <mainsbridge@gmail.com> | 2016-10-26 04:52:09 +1100 |
commit | 24846f478bf6a44f3f0e117d12e08864f579ed23 (patch) | |
tree | a231775e14a6e76a7d286e198f41b4534226c3a5 /gtk2_ardour/midi_region_view.cc | |
parent | 927b16aa53ef63cbe2cffe3d8cc86eb4fb85376f (diff) |
clean up ghost note wrt create drag.
- hide ghost note when add dragging.
- new note length snaps as per ghost note start (shifted snap).
- prevent ghost note from appearing before region start.
Diffstat (limited to 'gtk2_ardour/midi_region_view.cc')
-rw-r--r-- | gtk2_ardour/midi_region_view.cc | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 698ce27320..f4373e2c0e 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -599,7 +599,12 @@ MidiRegionView::motion (GdkEventMotion* ev) if (!_note_entered) { - if (!_ghost_note && editor.current_mouse_mode() == MouseContent && + if (_mouse_state == AddDragging) { + if (_ghost_note) { + remove_ghost_note (); + } + + } else if (!_ghost_note && editor.current_mouse_mode() == MouseContent && Keyboard::modifier_state_contains (ev->state, Keyboard::insert_note_modifier()) && _mouse_state != AddDragging) { @@ -3747,9 +3752,17 @@ MidiRegionView::update_ghost_note (double x, double y, uint32_t state) framepos_t const unsnapped_frame = editor.pixel_to_sample (x); const int32_t divisions = editor.get_grid_music_divisions (state); - const double snapped_region_qn = snap_frame_to_grid_underneath (unsnapped_frame, divisions, true).to_double(); + const Evoral::Beats snapped_beats = snap_frame_to_grid_underneath (unsnapped_frame, divisions, true); + + /* ghost note may have been snapped before region */ + if (_ghost_note && snapped_beats.to_double() < 0.0) { + _ghost_note->hide(); + return; + + } else if (_ghost_note) { + _ghost_note->show(); + } - Evoral::Beats snapped_beats = Evoral::Beats (snapped_region_qn); /* calculate time in beats relative to start of source */ const Evoral::Beats length = get_grid_beats(unsnapped_frame + _region->position()); @@ -4132,7 +4145,7 @@ MidiRegionView::snap_frame_to_grid_underneath (framepos_t p, int32_t divisions, */ const Evoral::Beats grid_beats = get_grid_beats (p + _region->position()); const double rem = eqaf - qaf; - if (rem >= 0.0 && eqaf - grid_beats.to_double() > _region->pulse() * 4.0) { + if (rem >= 0.0) { eqaf -= grid_beats.to_double(); } } |