1 #include "canvas-note.h"
2 #include "midi_region_view.h"
3 #include "public_editor.h"
4 #include "evoral/Note.hpp"
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 && edit_mode == Editing::MidiEditResize)) {
24 double region_start = _region.get_position_pixels();
25 event_x = ev->button.x;
26 middle_point = region_start + x1() + (x2() - x1()) / 2.0L;
28 if (event_x <= middle_point) {
29 cursor = Gdk::Cursor(Gdk::LEFT_SIDE);
32 cursor = Gdk::Cursor(Gdk::RIGHT_SIDE);
36 _item->grab(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, cursor, ev->motion.time);
38 if (_region.mouse_state() == MidiRegionView::SelectTouchDragging) {
39 _note_state = AbsoluteResize;
41 _note_state = RelativeResize;
44 _region.note_selected(this, true);
45 _region.begin_resizing(note_end);
51 case GDK_MOTION_NOTIFY:
52 event_x = ev->motion.x;
54 if (_note_state == RelativeResize) {
55 _region.update_resizing(note_end, event_x - last_x, true);
60 if (_note_state == AbsoluteResize) {
61 _region.update_resizing(note_end, event_x, false);
65 case GDK_BUTTON_RELEASE:
66 event_x = ev->button.x;
68 switch (_note_state) {
69 case RelativeResize: // Clicked
70 _item->ungrab(ev->button.time);
71 _region.commit_resizing(note_end, event_x, true);
75 case AbsoluteResize: // Clicked
76 _item->ungrab(ev->button.time);
77 _region.commit_resizing(note_end, event_x, false);
82 return CanvasNoteEvent::on_event(ev);
86 return CanvasNoteEvent::on_event(ev);