X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_canvas_events.cc;h=8e635bbe13a20bfc7ac49673b017bf00b965dd3e;hb=79986643c0c904f6574bb5323e2233a43a9e622e;hp=09c03547b332ecfc3ac9ed45a0aaaf1747ca4f1e;hpb=14d43ca9fe28a8309b4a52fa85e2b0c64a92248b;p=ardour.git diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 09c03547b3..8e635bbe13 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -21,15 +21,13 @@ #include #include -#include - -#include +#include #include #include "editor.h" #include "public_editor.h" -#include "regionview.h" -#include "streamview.h" +#include "audio_region_view.h" +#include "audio_streamview.h" #include "crossfade_view.h" #include "audio_time_axis.h" #include "region_gain_line.h" @@ -37,265 +35,117 @@ #include "automation_pan_line.h" #include "automation_time_axis.h" #include "redirect_automation_line.h" +#include "canvas_impl.h" +#include "simplerect.h" #include "i18n.h" using namespace sigc; using namespace ARDOUR; +using namespace PBD; using namespace Gtk; -gint -Editor::_canvas_copy_region_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = (Editor*)data; - return editor->canvas_copy_region_event (item, event); -} - -gint -Editor::_canvas_crossfade_view_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - CrossfadeView* xfv = static_cast (data); - Editor* editor = dynamic_cast(&xfv->get_time_axis_view().editor); - return editor->canvas_crossfade_view_event (item, event, xfv); -} - -gint -Editor::_canvas_fade_in_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView* rv = static_cast (data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - return editor->canvas_fade_in_event (item, event, rv); -} - -gint -Editor::_canvas_fade_in_handle_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView* rv = static_cast (data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - return editor->canvas_fade_in_handle_event (item, event, rv); -} - -gint -Editor::_canvas_fade_out_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView* rv = static_cast (data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - return editor->canvas_fade_out_event (item, event, rv); -} - -gint -Editor::_canvas_fade_out_handle_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView* rv = static_cast (data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - return editor->canvas_fade_out_handle_event (item, event, rv); -} - -gint -Editor::_canvas_region_view_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView *rv = reinterpret_cast(data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - - return editor->canvas_region_view_event (item, event, rv); -} - -gint -Editor::_canvas_region_view_name_highlight_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView *rv = reinterpret_cast (data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - - return editor->canvas_region_view_name_highlight_event (item, event); -} - -gint -Editor::_canvas_region_view_name_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AudioRegionView *rv = reinterpret_cast (data); - Editor* editor = dynamic_cast(&rv->get_time_axis_view().editor); - - return editor->canvas_region_view_name_event (item, event); -} - -gint -Editor::_canvas_stream_view_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* note that stream views are by definition audio track views */ - - AudioTimeAxisView *tv = (AudioTimeAxisView *) data; - Editor* editor = dynamic_cast(&tv->editor); - - return editor->canvas_stream_view_event (item, event, tv); -} - -gint -Editor::_canvas_automation_track_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AutomationTimeAxisView* atv = (AutomationTimeAxisView*) data; - Editor* editor = dynamic_cast(&atv->editor); - - return editor->canvas_automation_track_event (item, event, atv); -} - -gint -Editor::_canvas_control_point_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - ControlPoint *cp = reinterpret_cast(data); - Editor* editor = dynamic_cast(&cp->line.trackview.editor); - - switch (event->type) { - case GDK_BUTTON_PRESS: - case GDK_2BUTTON_PRESS: - case GDK_3BUTTON_PRESS: - clicked_control_point = cp; - clicked_trackview = &cp->line.trackview; - clicked_audio_trackview = dynamic_cast(clicked_trackview); - clicked_regionview = 0; +bool +Editor::track_canvas_scroll (GdkEventScroll* ev) +{ + int x, y; + double wx, wy; + + switch (ev->direction) { + case GDK_SCROLL_UP: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + //if (ev->state == GDK_CONTROL_MASK) { + /* XXX + the ev->x will be out of step with the canvas + if we're in mid zoom, so we have to get the damn mouse + pointer again + */ + track_canvas.get_pointer (x, y); + track_canvas.window_to_world (x, y, wx, wy); + wx += horizontal_adjustment.get_value(); + wy += vertical_adjustment.get_value(); + + GdkEvent event; + event.type = GDK_BUTTON_RELEASE; + event.button.x = wx; + event.button.y = wy; + + jack_nframes_t where = event_frame (&event, 0, 0); + temporal_zoom_to_frame (true, where); + return true; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { + if (!current_stepping_trackview) { + step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500); + if (!(current_stepping_trackview = dynamic_cast (trackview_by_y_position (ev->y)))) { + return false; + } + } + gettimeofday (&last_track_height_step_timestamp, 0); + current_stepping_trackview->step_height (true); + return true; + } else { + scroll_tracks_up_line (); + return true; + } break; + case GDK_SCROLL_DOWN: + if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + //if (ev->state == GDK_CONTROL_MASK) { + track_canvas.get_pointer (x, y); + track_canvas.window_to_world (x, y, wx, wy); + wx += horizontal_adjustment.get_value(); + wy += vertical_adjustment.get_value(); + + GdkEvent event; + event.type = GDK_BUTTON_RELEASE; + event.button.x = wx; + event.button.y = wy; + + jack_nframes_t where = event_frame (&event, 0, 0); + temporal_zoom_to_frame (false, where); + return true; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { + if (!current_stepping_trackview) { + step_timeout = Glib::signal_timeout().connect (mem_fun(*this, &Editor::track_height_step_timeout), 500); + if (!(current_stepping_trackview = dynamic_cast (trackview_by_y_position (ev->y)))) { + return false; + } + } + gettimeofday (&last_track_height_step_timestamp, 0); + current_stepping_trackview->step_height (false); + return true; + } else { + scroll_tracks_down_line (); + return true; + } + break; default: + /* no left/right handling yet */ break; } - - return editor->canvas_control_point_event (item, event); -} - -gint -Editor::_canvas_line_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - AutomationLine *line = reinterpret_cast (data); - Editor* editor = dynamic_cast(&line->trackview.editor); - - return editor->canvas_line_event (item, event); -} - -gint -Editor::_canvas_tempo_marker_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor*) data); - return editor->canvas_tempo_marker_event (item, event); -} - -gint -Editor::_canvas_meter_marker_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor *) data); - return editor->canvas_meter_marker_event (item, event); -} - -gint -Editor::_canvas_tempo_bar_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* XXX NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_tempo_bar_event (item, event); -} - -gint -Editor::_canvas_meter_bar_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* XXX NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_meter_bar_event (item, event); -} - -gint -Editor::_canvas_marker_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor*) data); - return editor->canvas_marker_event (item, event); -} - -gint -Editor::_canvas_marker_bar_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_marker_bar_event (item, event); -} - -gint -Editor::_canvas_range_marker_bar_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_range_marker_bar_event (item, event); -} - -gint -Editor::_canvas_transport_marker_bar_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_transport_marker_bar_event (item, event); -} - -gint -Editor::_canvas_playhead_cursor_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_playhead_cursor_event (item, event); -} - -gint -Editor::_canvas_edit_cursor_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* NO CAST */ - Editor* editor = (Editor*) data; - return editor->canvas_edit_cursor_event (item, event); -} - -gint -Editor::_canvas_zoom_rect_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor*) data); - return editor->canvas_zoom_rect_event (item, event); -} - -gint -Editor::_canvas_selection_rect_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor*) data); - return editor->canvas_selection_rect_event (item, event); -} - -gint -Editor::_canvas_selection_start_trim_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor*) data); - return editor->canvas_selection_start_trim_event (item, event); -} - -gint -Editor::_canvas_selection_end_trim_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - Editor* editor = dynamic_cast((PublicEditor*) data); - return editor->canvas_selection_end_trim_event (item, event); -} - -gint -Editor::_track_canvas_event (GnomeCanvasItem *item, GdkEvent *event, gpointer data) -{ - /* NO CAST */ - - Editor* editor = (Editor*) data; - return editor->track_canvas_event (item, event); + + return false; } -/********** END OF.TATIC EVENT HANDLERS */ - -gint -Editor::track_canvas_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::track_canvas_event (GdkEvent *event, ArdourCanvas::Item* item) { gint x, y; + /* this is the handler for events that are not handled by + items. + */ + switch (event->type) { case GDK_MOTION_NOTIFY: /* keep those motion events coming */ - track_canvas->get_pointer (x, y); - return track_canvas_motion (item, event); + track_canvas.get_pointer (x, y); + return track_canvas_motion (event); + + case GDK_BUTTON_PRESS: + track_canvas.grab_focus(); + break; case GDK_BUTTON_RELEASE: switch (event->button.button) { @@ -306,6 +156,11 @@ Editor::track_canvas_event (GnomeCanvasItem *item, GdkEvent *event) } break; + case GDK_SCROLL: + track_canvas.grab_focus(); + track_canvas_scroll (&event->scroll); + break; + default: break; } @@ -313,20 +168,18 @@ Editor::track_canvas_event (GnomeCanvasItem *item, GdkEvent *event) return FALSE; } -gint -Editor::track_canvas_motion (GnomeCanvasItem *item, GdkEvent *ev) +bool +Editor::track_canvas_motion (GdkEvent *ev) { if (verbose_cursor_visible) { - gnome_canvas_item_set (verbose_canvas_cursor, - "x", ev->motion.x + 20, - "y", ev->motion.y + 20, - NULL); + verbose_canvas_cursor->property_x() = ev->motion.x + 20; + verbose_canvas_cursor->property_y() = ev->motion.y + 20; } - return FALSE; + return false; } -gint -Editor::typed_event (GnomeCanvasItem *item, GdkEvent *event, ItemType type) +bool +Editor::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type) { gint ret = FALSE; @@ -358,11 +211,11 @@ Editor::typed_event (GnomeCanvasItem *item, GdkEvent *event, ItemType type) return ret; } -gint -Editor::canvas_region_view_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegionView *rv) +bool +Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, RegionView *rv) { gint ret = FALSE; - + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: @@ -397,10 +250,10 @@ Editor::canvas_region_view_event (GnomeCanvasItem *item, GdkEvent *event, AudioR return ret; } -gint -Editor::canvas_stream_view_event (GnomeCanvasItem *item, GdkEvent *event, AudioTimeAxisView *tv) +bool +Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, RouteTimeAxisView *tv) { - gint ret = FALSE; + bool ret = FALSE; switch (event->type) { case GDK_BUTTON_PRESS: @@ -409,7 +262,7 @@ Editor::canvas_stream_view_event (GnomeCanvasItem *item, GdkEvent *event, AudioT clicked_regionview = 0; clicked_control_point = 0; clicked_trackview = tv; - clicked_audio_trackview = tv; + clicked_audio_trackview = dynamic_cast(tv); ret = button_press_handler (item, event, StreamItem); break; @@ -433,10 +286,10 @@ Editor::canvas_stream_view_event (GnomeCanvasItem *item, GdkEvent *event, AudioT -gint -Editor::canvas_automation_track_event (GnomeCanvasItem *item, GdkEvent *event, AutomationTimeAxisView *atv) +bool +Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item, AutomationTimeAxisView *atv) { - gint ret = FALSE; + bool ret = false; switch (event->type) { case GDK_BUTTON_PRESS: @@ -472,8 +325,8 @@ Editor::canvas_automation_track_event (GnomeCanvasItem *item, GdkEvent *event, A return ret; } -gint -Editor::canvas_fade_in_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegionView *rv) +bool +Editor::canvas_fade_in_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv) { /* we handle only button 3 press/release events */ @@ -501,13 +354,13 @@ Editor::canvas_fade_in_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegio /* proxy for the regionview */ - return canvas_region_view_event (rv->get_canvas_group(), event, rv); + return canvas_region_view_event (event, rv->get_canvas_group(), rv); } -gint -Editor::canvas_fade_in_handle_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegionView *rv) +bool +Editor::canvas_fade_in_handle_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv) { - gint ret = FALSE; + bool ret = false; switch (event->type) { case GDK_BUTTON_PRESS: @@ -543,8 +396,8 @@ Editor::canvas_fade_in_handle_event (GnomeCanvasItem *item, GdkEvent *event, Aud return ret; } -gint -Editor::canvas_fade_out_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegionView *rv) +bool +Editor::canvas_fade_out_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv) { /* we handle only button 3 press/release events */ @@ -572,13 +425,13 @@ Editor::canvas_fade_out_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegi /* proxy for the regionview */ - return canvas_region_view_event (rv->get_canvas_group(), event, rv); + return canvas_region_view_event (event, rv->get_canvas_group(), rv); } -gint -Editor::canvas_fade_out_handle_event (GnomeCanvasItem *item, GdkEvent *event, AudioRegionView *rv) +bool +Editor::canvas_fade_out_handle_event (GdkEvent *event, ArdourCanvas::Item* item, AudioRegionView *rv) { - gint ret = FALSE; + bool ret = false; switch (event->type) { case GDK_BUTTON_PRESS: @@ -620,8 +473,8 @@ struct DescendingRegionLayerSorter { } }; -gint -Editor::canvas_crossfade_view_event (GnomeCanvasItem* item, GdkEvent* event, CrossfadeView* xfv) +bool +Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item, CrossfadeView* xfv) { /* we handle only button 3 press/release events */ @@ -636,7 +489,7 @@ Editor::canvas_crossfade_view_event (GnomeCanvasItem* item, GdkEvent* event, Cro case GDK_BUTTON_RELEASE: if (event->button.button == 3) { - gint ret = button_release_handler (item, event, CrossfadeViewItem); + bool ret = button_release_handler (item, event, CrossfadeViewItem); return ret; } break; @@ -660,20 +513,23 @@ Editor::canvas_crossfade_view_event (GnomeCanvasItem* item, GdkEvent* event, Cro if (atv->is_audio_track()) { - AudioPlaylist* pl = atv->get_diskstream()->playlist(); - Playlist::RegionList* rl = pl->regions_at (event_frame (event)); + AudioPlaylist* pl; + if ((pl = dynamic_cast (atv->get_diskstream()->playlist())) != 0) { + + Playlist::RegionList* rl = pl->regions_at (event_frame (event)); - if (!rl->empty()) { - DescendingRegionLayerSorter cmp; - rl->sort (cmp); + if (!rl->empty()) { + DescendingRegionLayerSorter cmp; + rl->sort (cmp); - AudioRegionView* arv = atv->view->find_view (*(dynamic_cast (rl->front()))); + RegionView* rv = atv->view()->find_view (*rl->front()); - /* proxy */ - - delete rl; + /* proxy */ - return canvas_region_view_event (arv->get_canvas_group(), event, arv); + delete rl; + + return canvas_region_view_event (event, rv->get_canvas_group(), rv); + } } } } @@ -681,15 +537,29 @@ Editor::canvas_crossfade_view_event (GnomeCanvasItem* item, GdkEvent* event, Cro return TRUE; } -gint -Editor::canvas_control_point_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_control_point_event (GdkEvent *event, ArdourCanvas::Item* item, ControlPoint* cp) { ItemType type; - ControlPoint *cp; - - if ((cp = static_cast (gtk_object_get_data (GTK_OBJECT(item), "control_point"))) == 0) { - fatal << _("programming error: control point canvas item has no control point object pointer!") << endmsg; - /*NOTREACHED*/ + + switch (event->type) { + case GDK_BUTTON_PRESS: + case GDK_2BUTTON_PRESS: + case GDK_3BUTTON_PRESS: + clicked_control_point = cp; + clicked_trackview = &cp->line.trackview; + clicked_audio_trackview = dynamic_cast(clicked_trackview); + clicked_regionview = 0; + break; + + case GDK_SCROLL_UP: + break; + + case GDK_SCROLL_DOWN: + break; + + default: + break; } if (dynamic_cast (&cp->line) != 0) { @@ -701,22 +571,16 @@ Editor::canvas_control_point_event (GnomeCanvasItem *item, GdkEvent *event) } else if (dynamic_cast (&cp->line) != 0) { type = RedirectAutomationControlPointItem; } else { - return FALSE; + return false; } return typed_event (item, event, type); } -gint -Editor::canvas_line_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_line_event (GdkEvent *event, ArdourCanvas::Item* item, AutomationLine* al) { ItemType type; - AutomationLine *al; - - if ((al = static_cast (gtk_object_get_data (GTK_OBJECT(item), "line"))) == 0) { - fatal << _("programming error: line canvas item has no line object pointer!") << endmsg; - /*NOTREACHED*/ - } if (dynamic_cast (al) != 0) { type = GainLineItem; @@ -727,24 +591,17 @@ Editor::canvas_line_event (GnomeCanvasItem *item, GdkEvent *event) } else if (dynamic_cast (al) != 0) { type = RedirectAutomationLineItem; } else { - return FALSE; + return false; } return typed_event (item, event, type); } - -gint -Editor::canvas_selection_rect_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_selection_rect_event (GdkEvent *event, ArdourCanvas::Item* item, SelectionRect* rect) { - gint ret = FALSE; - SelectionRect *rect = 0; - - if ((rect = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "rect"))) == 0) { - fatal << _("programming error: no \"rect\" pointer associated with selection item") << endmsg; - /*NOTREACHED*/ - } - + bool ret = false; + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: @@ -774,16 +631,10 @@ Editor::canvas_selection_rect_event (GnomeCanvasItem *item, GdkEvent *event) return ret; } -gint -Editor::canvas_selection_start_trim_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_selection_start_trim_event (GdkEvent *event, ArdourCanvas::Item* item, SelectionRect* rect) { - gint ret = FALSE; - SelectionRect *rect = 0; - - if ((rect = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "rect"))) == 0) { - fatal << _("programming error: no \"rect\" pointer associated with selection item") << endmsg; - /*NOTREACHED*/ - } + bool ret = false; switch (event->type) { case GDK_BUTTON_PRESS: @@ -813,16 +664,10 @@ Editor::canvas_selection_start_trim_event (GnomeCanvasItem *item, GdkEvent *even return ret; } -gint -Editor::canvas_selection_end_trim_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_selection_end_trim_event (GdkEvent *event, ArdourCanvas::Item* item, SelectionRect* rect) { - gint ret = FALSE; - SelectionRect *rect = 0; - - if ((rect = reinterpret_cast (gtk_object_get_data (GTK_OBJECT(item), "rect"))) == 0) { - fatal << _("programming error: no \"rect\" pointer associated with selection item") << endmsg; - /*NOTREACHED*/ - } + bool ret = false; switch (event->type) { case GDK_BUTTON_PRESS: @@ -853,33 +698,33 @@ Editor::canvas_selection_end_trim_event (GnomeCanvasItem *item, GdkEvent *event) } -gint -Editor::canvas_region_view_name_highlight_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas::Item* item, RegionView* rv) { - gint ret = FALSE; - + bool ret = false; + switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_regionview = reinterpret_cast (gtk_object_get_data(GTK_OBJECT(item), "regionview")); + clicked_regionview = rv; clicked_control_point = 0; clicked_trackview = &clicked_regionview->get_time_axis_view(); clicked_audio_trackview = dynamic_cast(clicked_trackview); - ret = button_press_handler (item, event, AudioRegionViewNameHighlight); + ret = button_press_handler (item, event, RegionViewNameHighlight); break; case GDK_BUTTON_RELEASE: - ret = button_release_handler (item, event, AudioRegionViewNameHighlight); + ret = button_release_handler (item, event, RegionViewNameHighlight); break; case GDK_MOTION_NOTIFY: - ret = motion_handler (item, event, AudioRegionViewNameHighlight); + ret = motion_handler (item, event, RegionViewNameHighlight); break; case GDK_ENTER_NOTIFY: - ret = enter_handler (item, event, AudioRegionViewNameHighlight); + ret = enter_handler (item, event, RegionViewNameHighlight); break; case GDK_LEAVE_NOTIFY: - ret = leave_handler (item, event, AudioRegionViewNameHighlight); + ret = leave_handler (item, event, RegionViewNameHighlight); break; default: @@ -889,33 +734,33 @@ Editor::canvas_region_view_name_highlight_event (GnomeCanvasItem *item, GdkEvent return ret; } -gint -Editor::canvas_region_view_name_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_region_view_name_event (GdkEvent *event, ArdourCanvas::Item* item, RegionView* rv) { - gint ret = FALSE; + bool ret = false; switch (event->type) { case GDK_BUTTON_PRESS: case GDK_2BUTTON_PRESS: case GDK_3BUTTON_PRESS: - clicked_regionview = reinterpret_cast (gtk_object_get_data(GTK_OBJECT(item), "regionview")); + clicked_regionview = rv; clicked_control_point = 0; clicked_trackview = &clicked_regionview->get_time_axis_view(); clicked_audio_trackview = dynamic_cast(clicked_trackview); - ret = button_press_handler (item, event, AudioRegionViewName); + ret = button_press_handler (item, event, RegionViewName); break; case GDK_BUTTON_RELEASE: - ret = button_release_handler (item, event, AudioRegionViewName); + ret = button_release_handler (item, event, RegionViewName); break; case GDK_MOTION_NOTIFY: - ret = motion_handler (item, event, AudioRegionViewName); + ret = motion_handler (item, event, RegionViewName); break; case GDK_ENTER_NOTIFY: - ret = enter_handler (item, event, AudioRegionViewName); + ret = enter_handler (item, event, RegionViewName); break; case GDK_LEAVE_NOTIFY: - ret = leave_handler (item, event, AudioRegionViewName); + ret = leave_handler (item, event, RegionViewName); break; default: @@ -925,75 +770,69 @@ Editor::canvas_region_view_name_event (GnomeCanvasItem *item, GdkEvent *event) return ret; } -gint -Editor::canvas_marker_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_marker_event (GdkEvent *event, ArdourCanvas::Item* item, Marker* marker) { return typed_event (item, event, MarkerItem); } -gint -Editor::canvas_marker_bar_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, MarkerBarItem); } -gint -Editor::canvas_range_marker_bar_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_range_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, RangeMarkerBarItem); } -gint -Editor::canvas_transport_marker_bar_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_transport_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, TransportMarkerBarItem); } -gint -Editor::canvas_tempo_marker_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_tempo_marker_event (GdkEvent *event, ArdourCanvas::Item* item, TempoMarker* marker) { return typed_event (item, event, TempoMarkerItem); } -gint -Editor::canvas_meter_marker_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_meter_marker_event (GdkEvent *event, ArdourCanvas::Item* item, MeterMarker* marker) { return typed_event (item, event, MeterMarkerItem); } -gint -Editor::canvas_tempo_bar_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, TempoBarItem); } -gint -Editor::canvas_meter_bar_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_meter_bar_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, MeterBarItem); } -gint -Editor::canvas_playhead_cursor_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_playhead_cursor_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, PlayheadCursorItem); } -gint -Editor::canvas_edit_cursor_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_edit_cursor_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, EditCursorItem); } -gint -Editor::canvas_zoom_rect_event (GnomeCanvasItem *item, GdkEvent *event) +bool +Editor::canvas_zoom_rect_event (GdkEvent *event, ArdourCanvas::Item* item) { return typed_event (item, event, NoItem); } -gint -Editor::canvas_copy_region_event (GnomeCanvasItem *item, GdkEvent *event) -{ - return typed_event (item, event, RegionItem); -} -