diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2008-03-26 11:11:47 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2008-03-26 11:11:47 +0000 |
commit | 6554200e66cc243e92818e6e74d4647d1c34ae9c (patch) | |
tree | 6caec38b29a11056007795f509951bb283407d9d /gtk2_ardour/canvas-note.cc | |
parent | 022c45361e77d5848f4a10abbe6a2cd3577db42c (diff) |
hans' patches for MIDI note resizing++
git-svn-id: svn://localhost/ardour2/branches/3.0@3184 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/canvas-note.cc')
-rw-r--r-- | gtk2_ardour/canvas-note.cc | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/gtk2_ardour/canvas-note.cc b/gtk2_ardour/canvas-note.cc index 5e8eb6904f..b39deb0fed 100644 --- a/gtk2_ardour/canvas-note.cc +++ b/gtk2_ardour/canvas-note.cc @@ -12,38 +12,39 @@ bool CanvasNote::on_event(GdkEvent* ev) { double event_x; - static double middle_point, pressed_x, last_x; + static double middle_point, last_x; Gdk::Cursor cursor; static NoteEnd note_end; + Editing::MidiEditMode edit_mode = _region.get_trackview().editor.current_midi_edit_mode(); switch(ev->type) { case GDK_BUTTON_PRESS: - if (ev->button.button == 2) { + if (ev->button.button == 2 || + (ev->button.button == 1 && + edit_mode == Editing::MidiEditResize)) { + double region_start = _region.get_position_pixels(); event_x = ev->button.x; - middle_point = x1() + (x2() - x1()) / 2.0L; + middle_point = region_start + x1() + (x2() - x1()) / 2.0L; if(event_x <= middle_point) { cursor = Gdk::Cursor(Gdk::LEFT_SIDE); - last_x = x1(); note_end = NOTE_ON; } else { cursor = Gdk::Cursor(Gdk::RIGHT_SIDE); - last_x = x2(); note_end = NOTE_OFF; } _item->grab(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, cursor, ev->motion.time); if (_region.mouse_state() == MidiRegionView::SelectTouchDragging) { - _mouse2_state = AbsoluteResize; + _note_state = AbsoluteResize; } else { - _mouse2_state = RelativeResize; + _note_state = RelativeResize; } - pressed_x = event_x; - _region.note_selected(this, true); _region.begin_resizing(note_end); + last_x = event_x; return true; } @@ -51,13 +52,13 @@ CanvasNote::on_event(GdkEvent* ev) case GDK_MOTION_NOTIFY: event_x = ev->motion.x; - if (_mouse2_state == RelativeResize) { + if (_note_state == RelativeResize) { _region.update_resizing(note_end, event_x - last_x, true); last_x = event_x; return true; } - if (_mouse2_state == AbsoluteResize) { + if (_note_state == AbsoluteResize) { _region.update_resizing(note_end, event_x, false); return true; } @@ -65,17 +66,17 @@ CanvasNote::on_event(GdkEvent* ev) case GDK_BUTTON_RELEASE: event_x = ev->button.x; - switch (_mouse2_state) { + switch (_note_state) { case RelativeResize: // Clicked _item->ungrab(ev->button.time); _region.commit_resizing(note_end, event_x, true); - _mouse2_state = None; + _note_state = None; return true; case AbsoluteResize: // Clicked _item->ungrab(ev->button.time); _region.commit_resizing(note_end, event_x, false); - _mouse2_state = None; + _note_state = None; return true; default: |