X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_canvas_events.cc;h=f7e7a590dd39596ad8887304c6bc061dd0ab8e37;hb=5119d48267be90aa4af3daa91f8bb72e6ab57c2c;hp=73e890e8a085cb47615f2d89c31cb32c9e1c6139;hpb=9967a7a6d979f6ffbb3c34f0bb06f24c2973f438;p=ardour.git diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 73e890e8a0..f7e7a590dd 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -52,10 +52,13 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) { int x, y; double wx, wy; + nframes_t xdelta; + int direction = ev->direction; - switch (ev->direction) { + retry: + switch (direction) { case GDK_SCROLL_UP: - if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { //if (ev->state == GDK_CONTROL_MASK) { /* XXX the ev->x will be out of step with the canvas @@ -74,8 +77,11 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) nframes_t where = event_frame (&event, 0, 0); temporal_zoom_to_frame (false, where); - ret = true; - } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { + return true; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) { + direction = GDK_SCROLL_LEFT; + goto retry; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { 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))) { @@ -84,14 +90,15 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } gettimeofday (&last_track_height_step_timestamp, 0); current_stepping_trackview->step_height (true); - ret = true; + return true; } else { scroll_tracks_up_line (); - ret = true; + return true; } break; + case GDK_SCROLL_DOWN: - if (Keyboard::modifier_state_equals (ev->state, Keyboard::Control)) { + if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) { //if (ev->state == GDK_CONTROL_MASK) { track_canvas.get_pointer (x, y); track_canvas.window_to_world (x, y, wx, wy); @@ -105,8 +112,11 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) nframes_t where = event_frame (&event, 0, 0); temporal_zoom_to_frame (true, where); - ret = true; - } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::Shift)) { + return true; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::SecondaryModifier)) { + direction = GDK_SCROLL_RIGHT; + goto retry; + } else if (Keyboard::modifier_state_equals (ev->state, Keyboard::TertiaryModifier)) { 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))) { @@ -115,19 +125,37 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } gettimeofday (&last_track_height_step_timestamp, 0); current_stepping_trackview->step_height (false); - ret = true; + return true; } else { scroll_tracks_down_line (); - ret = true; + return true; } break; + case GDK_SCROLL_LEFT: + xdelta = (current_page_frames() / 2); + if (leftmost_frame > xdelta) { + reset_x_origin (leftmost_frame - xdelta); + } else { + reset_x_origin (0); + } + break; + + case GDK_SCROLL_RIGHT: + xdelta = (current_page_frames() / 2); + if (max_frames - xdelta > leftmost_frame) { + reset_x_origin (leftmost_frame + xdelta); + } else { + reset_x_origin (max_frames - current_page_frames()); + } + break; + default: - /* no left/right handling yet */ + /* what? */ break; } - return ret; + return false; } bool Editor::track_canvas_scroll_event (GdkEventScroll *event) @@ -140,6 +168,7 @@ Editor::track_canvas_scroll_event (GdkEventScroll *event) bool Editor::track_canvas_button_press_event (GdkEventButton *event) { + selection->clear (); track_canvas.grab_focus(); return false; } @@ -169,6 +198,11 @@ Editor::track_canvas_motion (GdkEvent *ev) verbose_canvas_cursor->property_x() = ev->motion.x + 20; verbose_canvas_cursor->property_y() = ev->motion.y + 20; } + +#ifdef GTKOSX + flush_canvas (); +#endif + return false; } @@ -201,7 +235,6 @@ Editor::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type) default: break; } - return ret; } @@ -235,10 +268,12 @@ Editor::canvas_region_view_event (GdkEvent *event, ArdourCanvas::Item* item, Reg break; case GDK_ENTER_NOTIFY: + set_entered_track (&rv->get_time_axis_view ()); set_entered_regionview (rv); break; case GDK_LEAVE_NOTIFY: + set_entered_track (0); set_entered_regionview (0); break; @@ -274,6 +309,11 @@ Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, Rou break; case GDK_ENTER_NOTIFY: + set_entered_track (tv); + break; + + case GDK_LEAVE_NOTIFY: + set_entered_track (0); break; default: @@ -283,8 +323,6 @@ Editor::canvas_stream_view_event (GdkEvent *event, ArdourCanvas::Item* item, Rou return ret; } - - bool Editor::canvas_automation_track_event (GdkEvent *event, ArdourCanvas::Item* item, AutomationTimeAxisView *atv) { @@ -551,6 +589,8 @@ Editor::canvas_crossfade_view_event (GdkEvent* event, ArdourCanvas::Item* item, return canvas_region_view_event (event, rv->get_canvas_group(), rv); } + + delete rl; } } } @@ -823,6 +863,12 @@ Editor::canvas_transport_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* return typed_event (item, event, TransportMarkerBarItem); } +bool +Editor::canvas_cd_marker_bar_event (GdkEvent *event, ArdourCanvas::Item* item) +{ + return typed_event (item, event, CdMarkerBarItem); +} + bool Editor::canvas_tempo_marker_event (GdkEvent *event, ArdourCanvas::Item* item, TempoMarker* marker) { @@ -853,12 +899,6 @@ Editor::canvas_playhead_cursor_event (GdkEvent *event, ArdourCanvas::Item* item) return typed_event (item, event, PlayheadCursorItem); } -bool -Editor::canvas_edit_cursor_event (GdkEvent *event, ArdourCanvas::Item* item) -{ - return typed_event (item, event, EditCursorItem); -} - bool Editor::canvas_zoom_rect_event (GdkEvent *event, ArdourCanvas::Item* item) {