diff options
author | David Robillard <d@drobilla.net> | 2007-08-04 17:02:24 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-08-04 17:02:24 +0000 |
commit | 7185f8e53fdc664e5af9e212bb3b219ae47ab268 (patch) | |
tree | 7d4438c8c6890e3dd32e66b5808ab13c74c832d2 | |
parent | 2f7bb0945307851430909630bb3632dc3ee2f694 (diff) |
Fix vertical note dragging 'double distance' bug.
Obey snap for note dragging.
git-svn-id: svn://localhost/ardour2/trunk@2242 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r-- | gtk2_ardour/canvas-midi-event.cc | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/gtk2_ardour/canvas-midi-event.cc b/gtk2_ardour/canvas-midi-event.cc index 07504f988a..63acd0fef9 100644 --- a/gtk2_ardour/canvas-midi-event.cc +++ b/gtk2_ardour/canvas-midi-event.cc @@ -47,6 +47,7 @@ CanvasMidiEvent::on_event(GdkEvent* ev) static double drag_delta_x = 0; static double last_x, last_y; double event_x, event_y, dx, dy; + nframes_t event_frame; if (_region.get_time_axis_view().editor.current_mouse_mode() != Editing::MouseNote) return false; @@ -106,6 +107,11 @@ CanvasMidiEvent::on_event(GdkEvent* ev) event_x = t_x; event_y = t_y; } + + // Snap + event_frame = _region.midi_view()->editor.pixel_to_frame(event_x); + _region.midi_view()->editor.snap_to(event_frame); + event_x = _region.midi_view()->editor.frame_to_pixel(event_frame); dx = event_x - last_x; dy = event_y - last_y; @@ -120,9 +126,9 @@ CanvasMidiEvent::on_event(GdkEvent* ev) } else { int8_t this_delta_note; if (dy > 0) - this_delta_note = (int8_t)ceil(dy / _region.midi_stream_view()->note_height()); + this_delta_note = (int8_t)ceil(dy / _region.midi_stream_view()->note_height() / 2.0); else - this_delta_note = (int8_t)floor(dy / _region.midi_stream_view()->note_height()); + this_delta_note = (int8_t)floor(dy / _region.midi_stream_view()->note_height() / 2.0); drag_delta_note -= this_delta_note; dy = _region.midi_stream_view()->note_height() * this_delta_note; last_y = last_y + dy; |