summaryrefslogtreecommitdiff
path: root/gtk2_ardour/editor_canvas_events.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2007-12-11 17:21:00 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2007-12-11 17:21:00 +0000
commit24593ea7308346f54a8d51a367e20fc880432671 (patch)
tree63005dbce2dbfe4f3c5a7cb2b66fc1a7d3f207d8 /gtk2_ardour/editor_canvas_events.cc
parentd89d58947654991e3e371a325faa8daf6c5a82b9 (diff)
make SCROLL_{RIGHT,LEFT} work, and Alt-SCROLL_{UP,DOWN} do something sensible
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2778 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/editor_canvas_events.cc')
-rw-r--r--gtk2_ardour/editor_canvas_events.cc32
1 files changed, 30 insertions, 2 deletions
diff --git a/gtk2_ardour/editor_canvas_events.cc b/gtk2_ardour/editor_canvas_events.cc
index 0c84a633fa..2a24eb3d73 100644
--- a/gtk2_ardour/editor_canvas_events.cc
+++ b/gtk2_ardour/editor_canvas_events.cc
@@ -52,8 +52,11 @@ 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::PrimaryModifier)) {
//if (ev->state == GDK_CONTROL_MASK) {
@@ -75,6 +78,9 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
nframes_t where = event_frame (&event, 0, 0);
temporal_zoom_to_frame (false, where);
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);
@@ -90,6 +96,7 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
return true;
}
break;
+
case GDK_SCROLL_DOWN:
if (Keyboard::modifier_state_equals (ev->state, Keyboard::PrimaryModifier)) {
//if (ev->state == GDK_CONTROL_MASK) {
@@ -106,6 +113,9 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
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::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);
@@ -122,8 +132,26 @@ Editor::track_canvas_scroll (GdkEventScroll* ev)
}
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;
}