make per-region note-tracking in MidiPlaylist work correctly, or something very close...
[ardour.git] / gtk2_ardour / canvas-note.cc
index 5e8eb6904f0f654836e5b592f237cecad23295c9..a3aa6ed8acbf028732137e4d49fcebd1d550eeb1 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;
 
@@ -11,81 +11,29 @@ namespace Canvas {
 bool
 CanvasNote::on_event(GdkEvent* ev)
 {
-       double          event_x;
-       static double   middle_point, pressed_x, last_x;
-       Gdk::Cursor     cursor;
-       static NoteEnd  note_end;
-
-       switch(ev->type) {
-       case GDK_BUTTON_PRESS:
-               if (ev->button.button == 2) {
-                       event_x = ev->button.x;
-                       middle_point = 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;
-                       } else {
-                               _mouse2_state = RelativeResize;
-                       }
-
-                       pressed_x = event_x;
-
-                       _region.note_selected(this, true);
-                       _region.begin_resizing(note_end);
-
-                       return true;
-               }
-
-       case GDK_MOTION_NOTIFY:
-               event_x = ev->motion.x;
-
-               if (_mouse2_state == RelativeResize) {
-                       _region.update_resizing(note_end, event_x - last_x, true);
-                       last_x = event_x;
-                       return true;
-               }
-
-               if (_mouse2_state == AbsoluteResize) {
-                       _region.update_resizing(note_end, event_x, false);
-                       return true;
-               }
-
-       case GDK_BUTTON_RELEASE:
-               event_x = ev->button.x;
-
-               switch (_mouse2_state) {
-               case RelativeResize: // Clicked
-                       _item->ungrab(ev->button.time);
-                       _region.commit_resizing(note_end, event_x, true);
-                       _mouse2_state = None;
-                       return true;
-
-               case AbsoluteResize: // Clicked
-                       _item->ungrab(ev->button.time);
-                       _region.commit_resizing(note_end, event_x, false);
-                       _mouse2_state = None;
-                       return true;
-
-               default:
-                       return CanvasMidiEvent::on_event(ev);
-               }
+       if (!_region.get_trackview().editor().canvas_note_event (ev, this)) {
+               return CanvasNoteEvent::on_event (ev);
+       } else {
+               return true;
+       }
+}
 
-       default:
-               return CanvasMidiEvent::on_event(ev);
+void
+CanvasNote::move_event(double dx, double dy)
+{
+       property_x1() = property_x1() + dx;
+       property_y1() = property_y1() + dy;
+       property_x2() = property_x2() + dx;
+       property_y2() = property_y2() + dy;
+
+       if (_text) {
+               _text->hide();
+               _text->property_x() = _text->property_x() + dx;
+               _text->property_y() = _text->property_y() + dy;
+               _text->show();
        }
 }
 
+
 } // namespace Gnome
 } // namespace Canvas