diff options
author | David Robillard <d@drobilla.net> | 2008-12-23 21:05:50 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-12-23 21:05:50 +0000 |
commit | 2a2067388314ae1695f3be4d6ea9e3c3628f91ba (patch) | |
tree | 93b83d5f618e6161c7b8ede87f26565720789e44 /gtk2_ardour/editor_canvas_events.cc | |
parent | 270f1abe8d2a3e3da369a8e64bc0e6806309304d (diff) |
Fix note velocity editing.
Don't abuse/leak selection when editing velocity (fix editing velocity of a single note actually editing velocity of every note who's velocity had previously been edited).
Properly preserve selection for MIDI operations in general.
Less crap method of delineating scroll events to canvas items (no exhaustive type cases needed in editor_canvas_events.cc).
Fix silly comment style in midi_region_view.h (hans: please note this and follow in the future).
git-svn-id: svn://localhost/ardour2/branches/3.0@4343 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r-- | gtk2_ardour/editor_canvas_events.cc | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index f821220cf3..7767eeeb8b 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -20,6 +20,7 @@ #include <cstdlib> #include <cmath> #include <algorithm> +#include <typeinfo> #include <pbd/stacktrace.h> @@ -40,8 +41,7 @@ #include "control_point.h" #include "canvas_impl.h" #include "simplerect.h" -#include "canvas-note-event.h" -#include "canvas-program-change.h" +#include "interactive-item.h" #include "i18n.h" @@ -59,9 +59,12 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) double wx, wy; nframes64_t xdelta; int direction = ev->direction; - CanvasNoteEvent *midi_event = dynamic_cast<CanvasNoteEvent *>(track_canvas->get_item_at(ev->x, ev->y)); - CanvasFlagRect *flag_rect = dynamic_cast<CanvasFlagRect *>(track_canvas->get_item_at(ev->x, ev->y)); - CanvasFlagText *flag_text = dynamic_cast<CanvasFlagText *>(track_canvas->get_item_at(ev->x, ev->y)); + + Gnome::Canvas::Item* item = track_canvas->get_item_at(ev->x, ev->y); + InteractiveItem* interactive_item = dynamic_cast<InteractiveItem*>(item); + if (interactive_item && interactive_item->on_event(reinterpret_cast<GdkEvent*>(ev))) { + return true; + } retry: switch (direction) { @@ -98,13 +101,6 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) current_stepping_trackview->step_height (true); return true; } else { - if(midi_event) { - return midi_event->on_event(reinterpret_cast<GdkEvent *>(ev)); - } else if (flag_rect) { - return flag_rect->on_event(reinterpret_cast<GdkEvent *>(ev)); - } else if (flag_text) { - return flag_text->on_event(reinterpret_cast<GdkEvent *>(ev)); - } scroll_tracks_up_line (); return true; } @@ -138,13 +134,6 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) current_stepping_trackview->step_height (false); return true; } else { - if(midi_event) { - return midi_event->on_event(reinterpret_cast<GdkEvent *>(ev)); - } else if (flag_rect) { - return flag_rect->on_event(reinterpret_cast<GdkEvent *>(ev)); - } else if (flag_text) { - return flag_text->on_event(reinterpret_cast<GdkEvent *>(ev)); - } scroll_tracks_down_line (); return true; } |