summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_canvas_events.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-06-12 15:58:05 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-06-12 15:58:05 -0400
commitea355bfe15c8490ebc81fd093eeae8359fed77fa (patch)
tree4145762cef368ab69b0f2ec7676fb201b740a156 /gtk2_ardour/editor_canvas_events.cc
parent590882f3c8e063528452d71daffb36d3151da05e (diff)
add canvas rulers event dispatch and reinstate scrolling behaviour
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r--gtk2_ardour/editor_canvas_events.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 34c81597be..f8fb2f3511 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -162,6 +162,10 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
bool
Editor::canvas_scroll_event (GdkEventScroll *event)
{
+ if (h_scroll_group->covers (Duple (event->x, event->y))) {
+ return canvas_ruler_event ((GdkEvent*) event, timecode_ruler, TimecodeRulerItem);
+ }
+
_track_canvas->grab_focus();
return track_canvas_scroll (event);
}
@@ -980,6 +984,59 @@ Editor::canvas_meter_marker_event (GdkEvent *event, ArdourCanvas::Item* item, Me
}
bool
+Editor::canvas_ruler_event (GdkEvent *event, ArdourCanvas::Item* item, ItemType type)
+{
+ framepos_t xdelta;
+ bool handled = false;
+
+ if (event->type == GDK_SCROLL) {
+
+ /* scroll events in the rulers are handled a little differently from
+ scrolling elsewhere in the canvas.
+ */
+
+ switch (event->scroll.direction) {
+ case GDK_SCROLL_UP:
+ temporal_zoom_step (false);
+ handled = true;
+ break;
+
+ case GDK_SCROLL_DOWN:
+ temporal_zoom_step (true);
+ handled = true;
+ break;
+
+ case GDK_SCROLL_LEFT:
+ xdelta = (current_page_samples() / 2);
+ if (leftmost_frame > xdelta) {
+ reset_x_origin (leftmost_frame - xdelta);
+ } else {
+ reset_x_origin (0);
+ }
+ handled = true;
+ break;
+
+ case GDK_SCROLL_RIGHT:
+ xdelta = (current_page_samples() / 2);
+ if (max_framepos - xdelta > leftmost_frame) {
+ reset_x_origin (leftmost_frame + xdelta);
+ } else {
+ reset_x_origin (max_framepos - current_page_samples());
+ }
+ handled = true;
+ break;
+
+ default:
+ /* what? */
+ break;
+ }
+ return handled;
+ }
+
+ return typed_event (item, event, type);
+}
+
+bool
Editor::canvas_tempo_bar_event (GdkEvent *event, ArdourCanvas::Item* item)
{
return typed_event (item, event, TempoBarItem);