Chris's work on the region list
[ardour.git] / gtk2_ardour / canvas-note.cc
index 5e8eb6904f0f654836e5b592f237cecad23295c9..973ab4db6dfef12e5c8f8808701c5f6707e8c2ad 100644 (file)
@@ -1,7 +1,7 @@
 #include "canvas-note.h"
 #include "midi_region_view.h"
 #include "public_editor.h"
-#include "ardour/note.h"
+#include "evoral/Note.hpp"
 
 using namespace ARDOUR;
 
@@ -12,52 +12,53 @@ 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) {
+       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) {
+                       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;
-               }
-
+               } 
+               
        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,25 +66,25 @@ 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:
-                       return CanvasMidiEvent::on_event(ev);
+                       return CanvasNoteEvent::on_event(ev);
                }
 
        default:
-               return CanvasMidiEvent::on_event(ev);
+               return CanvasNoteEvent::on_event(ev);
        }
 }