summaryrefslogtreecommitdiff
path: root/gtk2_ardour/canvas-note.cc
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-03-15 00:47:30 +0000
committerDavid Robillard <d@drobilla.net>2008-03-15 00:47:30 +0000
commit8bd2ee92fa907675ddb18b8e2d1d7865e2c8fe5e (patch)
tree64eeb435bd0ae8a7db53576b7ba26eb9464d10e7 /gtk2_ardour/canvas-note.cc
parent2aad1914404ba51a00930fd7f385f319027b1ece (diff)
Add canvas-note.cc that probably shouldn't exist anyway :)
git-svn-id: svn://localhost/ardour2/branches/3.0@3146 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/canvas-note.cc')
-rw-r--r--gtk2_ardour/canvas-note.cc91
1 files changed, 91 insertions, 0 deletions
diff --git a/gtk2_ardour/canvas-note.cc b/gtk2_ardour/canvas-note.cc
new file mode 100644
index 0000000000..5e8eb6904f
--- /dev/null
+++ b/gtk2_ardour/canvas-note.cc
@@ -0,0 +1,91 @@
+#include "canvas-note.h"
+#include "midi_region_view.h"
+#include "public_editor.h"
+#include "ardour/note.h"
+
+using namespace ARDOUR;
+
+namespace Gnome {
+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);
+ }
+
+ default:
+ return CanvasMidiEvent::on_event(ev);
+ }
+}
+
+} // namespace Gnome
+} // namespace Canvas