1 #include "canvas-note.h"
2 #include "midi_region_view.h"
3 #include "public_editor.h"
4 #include "ardour/note.h"
6 using namespace ARDOUR;
12 CanvasNote::on_event(GdkEvent* ev)
15 static double middle_point, last_x;
17 static NoteEnd note_end;
18 Editing::MidiEditMode edit_mode = _region.get_trackview().editor.current_midi_edit_mode();
21 case GDK_BUTTON_PRESS:
22 if (ev->button.button == 2 ||
23 (ev->button.button == 1 &&
24 edit_mode == Editing::MidiEditResize)) {
25 double region_start = _region.get_position_pixels();
26 event_x = ev->button.x;
27 middle_point = region_start + x1() + (x2() - x1()) / 2.0L;
29 if(event_x <= middle_point) {
30 cursor = Gdk::Cursor(Gdk::LEFT_SIDE);
33 cursor = Gdk::Cursor(Gdk::RIGHT_SIDE);
37 _item->grab(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, cursor, ev->motion.time);
39 if (_region.mouse_state() == MidiRegionView::SelectTouchDragging) {
40 _note_state = AbsoluteResize;
42 _note_state = RelativeResize;
45 _region.note_selected(this, true);
46 _region.begin_resizing(note_end);
52 case GDK_MOTION_NOTIFY:
53 event_x = ev->motion.x;
55 if (_note_state == RelativeResize) {
56 _region.update_resizing(note_end, event_x - last_x, true);
61 if (_note_state == AbsoluteResize) {
62 _region.update_resizing(note_end, event_x, false);
66 case GDK_BUTTON_RELEASE:
67 event_x = ev->button.x;
69 switch (_note_state) {
70 case RelativeResize: // Clicked
71 _item->ungrab(ev->button.time);
72 _region.commit_resizing(note_end, event_x, true);
76 case AbsoluteResize: // Clicked
77 _item->ungrab(ev->button.time);
78 _region.commit_resizing(note_end, event_x, false);
83 return CanvasMidiEvent::on_event(ev);
87 return CanvasMidiEvent::on_event(ev);