diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2007-12-27 16:42:58 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2007-12-27 16:42:58 +0000 |
commit | a29a7b7bef6713931f130a295cefd20fb0f21d3b (patch) | |
tree | 6f123a5de0c9cae7b86f6e89ac3cfa6eebfc3274 /gtk2_ardour/editor_rulers.cc | |
parent | 95f823b02a0e770eff49e6a63535cf72ef08acfe (diff) |
scroll events on rulers/time canvas now control zoom/scrolling
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2814 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_rulers.cc')
-rw-r--r-- | gtk2_ardour/editor_rulers.cc | 80 |
1 files changed, 55 insertions, 25 deletions
diff --git a/gtk2_ardour/editor_rulers.cc b/gtk2_ardour/editor_rulers.cc index 149116193a..9b8bf5beeb 100644 --- a/gtk2_ardour/editor_rulers.cc +++ b/gtk2_ardour/editor_rulers.cc @@ -99,30 +99,56 @@ Editor::initialize_rulers () ruler_shown[ruler_metric_frames] = false; ruler_shown[ruler_metric_minsec] = false; - smpte_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - bbt_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - frames_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - minsec_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - - smpte_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - bbt_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - frames_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - minsec_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); - - smpte_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - bbt_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - frames_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - minsec_ruler->signal_button_press_event().connect (mem_fun(*this, &Editor::ruler_button_press)); - - smpte_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - bbt_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - frames_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - minsec_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); - visible_timebars = 7; /* 4 here, 3 in time_canvas */ ruler_pressed_button = 0; } +bool +Editor::ruler_scroll (GdkEventScroll* event) +{ + nframes_t xdelta; + int direction = event->direction; + bool handled = false; + + switch (direction) { + case GDK_SCROLL_UP: + temporal_zoom_step (true); + handled = true; + break; + + case GDK_SCROLL_DOWN: + temporal_zoom_step (false); + handled = 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); + } + handled = true; + 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()); + } + handled = true; + break; + + default: + /* what? */ + break; + } + + return handled; +} + gint Editor::ruler_button_press (GdkEventButton* ev) @@ -621,11 +647,10 @@ Editor::update_ruler_visibility () minsec_ruler->set_size_request (-1, (int)timebar_height); gtk_custom_ruler_set_metric (GTK_CUSTOM_RULER(_minsec_ruler), &ruler_metrics[ruler_metric_minsec]); - - smpte_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - bbt_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - frames_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - minsec_ruler->set_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); + smpte_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); + bbt_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); + frames_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); + minsec_ruler->add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::SCROLL_MASK); smpte_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); bbt_ruler->signal_button_release_event().connect (mem_fun(*this, &Editor::ruler_button_release)); @@ -642,6 +667,11 @@ Editor::update_ruler_visibility () frames_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); minsec_ruler->signal_motion_notify_event().connect (mem_fun(*this, &Editor::ruler_mouse_motion)); + smpte_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); + bbt_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); + frames_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); + minsec_ruler->signal_scroll_event().connect (mem_fun(*this, &Editor::ruler_scroll)); + ruler_children.insert (canvaspos, Element(*_ruler_separator, PACK_SHRINK, PACK_START)); if (ruler_shown[ruler_metric_minsec]) { |