X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=gtk2_ardour%2Feditor_canvas_events.cc;h=014c925f7de42728f1044895b0044b7772f69fdb;hb=74330533b887821495cb5e1bb48e7439c656ba0c;hp=9b688adc45a4cb0573f387abb001cdc51b56cc03;hpb=98d994f29c968796c5e9822e7c3b1713e53b274d;p=ardour.git diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc index 9b688adc45..014c925f7d 100644 --- a/gtk2_ardour/editor_canvas_events.cc +++ b/gtk2_ardour/editor_canvas_events.cc @@ -47,6 +47,7 @@ #include "editor_drag.h" #include "midi_time_axis.h" #include "editor_regions.h" +#include "verbose_cursor.h" #include "i18n.h" @@ -61,7 +62,7 @@ using Gtkmm2ext::Keyboard; bool Editor::track_canvas_scroll (GdkEventScroll* ev) { - nframes64_t xdelta; + framepos_t xdelta; int direction = ev->direction; retry: @@ -83,7 +84,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } } last_track_height_step_timestamp = get_microseconds(); - current_stepping_trackview->step_height (true); + current_stepping_trackview->step_height (false); return true; } else { scroll_tracks_up_line (); @@ -108,7 +109,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) } } last_track_height_step_timestamp = get_microseconds(); - current_stepping_trackview->step_height (false); + current_stepping_trackview->step_height (true); return true; } else { scroll_tracks_down_line (); @@ -127,10 +128,10 @@ Editor::track_canvas_scroll (GdkEventScroll* ev) case GDK_SCROLL_RIGHT: xdelta = (current_page_frames() / 8); - if (max_frames - xdelta > leftmost_frame) { + if (max_framepos - xdelta > leftmost_frame) { reset_x_origin (leftmost_frame + xdelta); } else { - reset_x_origin (max_frames - current_page_frames()); + reset_x_origin (max_framepos - current_page_frames()); } break; @@ -178,9 +179,8 @@ Editor::track_canvas_motion_notify_event (GdkEventMotion */*event*/) bool Editor::track_canvas_motion (GdkEvent *ev) { - if (verbose_cursor_visible) { - verbose_canvas_cursor->property_x() = clamp_verbose_cursor_x (ev->motion.x + 10); - verbose_canvas_cursor->property_y() = clamp_verbose_cursor_y (ev->motion.y + 10); + if (_verbose_cursor->visible ()) { + _verbose_cursor->set_position (ev->motion.x + 10, ev->motion.y + 10); } return false; @@ -212,6 +212,14 @@ Editor::typed_event (ArdourCanvas::Item* item, GdkEvent *event, ItemType type) ret = leave_handler (item, event, type); break; + case GDK_KEY_PRESS: + ret = key_press_handler (item, event, type); + break; + + case GDK_KEY_RELEASE: + ret = key_release_handler (item, event, type); + break; + default: break; } @@ -773,13 +781,13 @@ Editor::canvas_frame_handle_event (GdkEvent* event, ArdourCanvas::Item* item, Re perspective. XXX change this ?? */ - ItemType type; + ItemType type; - if (item->get_data ("isleft")) { - type = LeftFrameHandle; - } else { - type = RightFrameHandle; - } + if (item->get_data ("isleft")) { + type = LeftFrameHandle; + } else { + type = RightFrameHandle; + } switch (event->type) { case GDK_BUTTON_PRESS: @@ -839,7 +847,7 @@ Editor::canvas_region_view_name_highlight_event (GdkEvent* event, ArdourCanvas:: break; case GDK_MOTION_NOTIFY: motion_handler (item, event); - ret = true; // force this to avoid progagating the event into the regionview + ret = true; // force this to avoid progagating the event into the regionview break; case GDK_ENTER_NOTIFY: set_entered_regionview (rv); @@ -1033,7 +1041,7 @@ Editor::track_canvas_drag_motion (Glib::RefPtr const & /*c*/, double px; double py; - nframes64_t const pos = event_frame (&event, &px, &py); + framepos_t const pos = event_frame (&event, &px, &py); std::pair const tv = trackview_by_y_position (py); if (tv.first == 0) { @@ -1074,3 +1082,45 @@ Editor::track_canvas_drag_motion (Glib::RefPtr const & /*c*/, return true; } + +bool +Editor::key_press_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType type) +{ + return false; +} + +bool +Editor::key_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemType type) +{ + + bool handled = false; + + switch (type) { + case TempoMarkerItem: + switch (event->key.keyval) { + case GDK_Delete: + remove_tempo_marker (item); + handled = true; + break; + default: + break; + } + break; + + case MeterMarkerItem: + switch (event->key.keyval) { + case GDK_Delete: + remove_meter_marker (item); + handled = true; + break; + default: + break; + } + break; + + default: + break; + } + + return handled; +}