-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<CrossfadeView*> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView*> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView*> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView*> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView*> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView *>(data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView *> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioRegionView *> (data);
- Editor* editor = dynamic_cast<Editor*>(&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<Editor*>(&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<Editor*>(&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<ControlPoint *>(data);
- Editor* editor = dynamic_cast<Editor*>(&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<AudioTimeAxisView*>(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;
+
+ 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 = 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;
+ }