Set entered_regionview on entry into region view canvas item children. Should fix...
[ardour.git] / gtk2_ardour / canvas-note.cc
index f51a58ff5fffc292f044be5d8520b5f1bd538ed6..35f7ace581f09e357aae3455acf654bb503e2244 100644 (file)
@@ -8,89 +8,43 @@ using namespace ARDOUR;
 namespace Gnome {
 namespace Canvas {
 
+CanvasNote::CanvasNote (MidiRegionView&                   region,
+                        Group&                            group,
+                        const boost::shared_ptr<NoteType> note,
+                        bool with_events)
+        : SimpleRect(group), CanvasNoteEvent(region, this, note)
+{
+        if (with_events) {
+                signal_event().connect (sigc::mem_fun (*this, &CanvasNote::on_event));
+        }
+}
+
 bool
 CanvasNote::on_event(GdkEvent* ev)
 {
-       PublicEditor& editor (_region.get_trackview().editor());
-
-       if (!editor.internal_editing()) {
-               return false;
+        if (!CanvasNoteEvent::on_event (ev)) {
+                return _region.get_trackview().editor().canvas_note_event (ev, this);
        }
 
-       double          event_x;
-       static double   middle_point, last_x;
-       Gdk::Cursor     cursor;
-       static NoteEnd  note_end;
-
-       switch (ev->type) {
-       case GDK_BUTTON_PRESS:
-               if (ev->button.button == 2 ||
-                   (ev->button.button == 1 && editor.current_mouse_mode() == Editing::MouseTimeFX)) {
-                       double region_start = _region.get_position_pixels();
-                       event_x = ev->button.x;
-                       middle_point = region_start + x1() + (x2() - x1()) / 2.0L;
-
-                       if (event_x <= middle_point) {
-                               cursor = Gdk::Cursor(Gdk::LEFT_SIDE);
-                               note_end = NOTE_ON;
-                       } else {
-                               cursor = Gdk::Cursor(Gdk::RIGHT_SIDE);
-                               note_end = NOTE_OFF;
-                       }
-
-                       _item->grab(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, cursor, ev->motion.time);
-
-                       if (_region.mouse_state() == MidiRegionView::SelectTouchDragging) {
-                               _note_state = AbsoluteResize;
-                       } else {
-                               _note_state = RelativeResize;
-                       }
-
-                       _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 (_note_state == RelativeResize) {
-                       _region.update_resizing(note_end, event_x - last_x, true);
-                       last_x = event_x;
-                       return true;
-               }
-
-               if (_note_state == AbsoluteResize) {
-                       _region.update_resizing(note_end, event_x, false);
-                       return true;
-               }
-
-       case GDK_BUTTON_RELEASE:
-               event_x = ev->button.x;
-
-               switch (_note_state) {
-               case RelativeResize: // Clicked
-                       _item->ungrab(ev->button.time);
-                       _region.commit_resizing(note_end, event_x, true);
-                       _note_state = None;
-                       return true;
-
-               case AbsoluteResize: // Clicked
-                       _item->ungrab(ev->button.time);
-                       _region.commit_resizing(note_end, event_x, false);
-                       _note_state = None;
-                       return true;
-
-               default:
-                       return CanvasNoteEvent::on_event(ev);
-               }
+        return true;
+}
 
-       default:
-               return CanvasNoteEvent::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