X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fcanvas-note.cc;h=e130791f0850a1cbae1ac5cb9573b76c22d92d37;hb=86244875a40206694c142af8fe1128f28293c467;hp=30b1e3807b292ab59087fb3fb77092f18b9c09bd;hpb=6d319e2132270b89efc47820e707840eb49a2cfe;p=ardour.git diff --git a/gtk2_ardour/canvas-note.cc b/gtk2_ardour/canvas-note.cc index 30b1e3807b..e130791f08 100644 --- a/gtk2_ardour/canvas-note.cc +++ b/gtk2_ardour/canvas-note.cc @@ -1,92 +1,50 @@ #include "canvas-note.h" #include "midi_region_view.h" #include "public_editor.h" -#include "ardour/note.h" +#include "evoral/Note.hpp" using namespace ARDOUR; namespace Gnome { namespace Canvas { +CanvasNote::CanvasNote (MidiRegionView& region, + Group& group, + const boost::shared_ptr 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) { - double event_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) { - case GDK_BUTTON_PRESS: - 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 = 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; + if (!CanvasNoteEvent::on_event (ev)) { + return _region.get_time_axis_view().editor().canvas_note_event (ev, this); + } - 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