diff options
author | David Robillard <d@drobilla.net> | 2007-08-02 02:05:00 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-08-02 02:05:00 +0000 |
commit | c96b5583204263e07440ff394e1d3a7f0e54f1b2 (patch) | |
tree | bfbb9b88185c73183f9d730ebd1218ceff26aaa3 /gtk2_ardour/canvas-midi-event.cc | |
parent | 874f3bbf8b4b8bb3e92f31c96623b1bcb4dd5c8a (diff) |
Snap note dragging vertically to note values (rows).
git-svn-id: svn://localhost/ardour2/trunk@2217 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/canvas-midi-event.cc')
-rw-r--r-- | gtk2_ardour/canvas-midi-event.cc | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/gtk2_ardour/canvas-midi-event.cc b/gtk2_ardour/canvas-midi-event.cc index 90b7ff09df..2895be1eba 100644 --- a/gtk2_ardour/canvas-midi-event.cc +++ b/gtk2_ardour/canvas-midi-event.cc @@ -44,7 +44,7 @@ bool CanvasMidiEvent::on_event(GdkEvent* ev) { static double last_x, last_y; - double event_x, event_y; + double event_x, event_y, dx, dy; if (_region.get_time_axis_view().editor.current_mouse_mode() != Editing::MouseNote) return false; @@ -64,22 +64,13 @@ CanvasMidiEvent::on_event(GdkEvent* ev) break; case GDK_ENTER_NOTIFY: - cerr << "ENTERED: " << ev->crossing.state << endl; Keyboard::magic_widget_grab_focus(); _item->grab_focus(); _region.note_entered(this); - //if (delete_down) - // cerr << "DELETE ENTER\n" << endl; - - /*if ( (ev->crossing.state & GDK_BUTTON2_MASK) ) { - - }*/ break; case GDK_LEAVE_NOTIFY: - cerr << "LEAVE: " << ev->crossing.state << endl; Keyboard::magic_widget_drop_focus(); - //_region.get_time_axis_view().editor.reset_focus(); _region.get_canvas_group()->grab_focus(); break; @@ -111,10 +102,20 @@ CanvasMidiEvent::on_event(GdkEvent* ev) event_y = t_y; } - _item->move(event_x - last_x, event_y - last_y); - + dx = event_x - last_x; + dy = event_y - last_y; + last_x = event_x; - last_y = event_y; + + // Snap to note rows + if (abs(dy) < _region.note_height()) { + dy = 0.0; + } else { + dy = _region.note_height() * ((dy > 0) ? 1 : -1); + last_y = event_y; + } + + _item->move(dx, dy); return true; default: @@ -130,6 +131,17 @@ CanvasMidiEvent::on_event(GdkEvent* ev) case Dragging: // Dropped _item->ungrab(ev->button.time); _state = None; + if (_note) { + cerr << "Move and stuff." << endl; + // This would be nicer with a MoveCommand that doesn't need to copy... + /*_region.start_delta_command(); + _region.command_remove_note(this); + Note copy_of_me(*this); + copy_of_me.time = trackview.editor.pixel_to_frame(property_x1()); + copy_of_me.note = stuff; + _region.apply_command(); + */ + } return true; default: break; |