diff options
Diffstat (limited to 'input.c')
-rw-r--r-- | input.c | 70 |
1 files changed, 65 insertions, 5 deletions
@@ -5,6 +5,7 @@ #include <gtk-3.0/gtk/gtk.h> #define TIMEOUT 20 +#define SCROLLAMMOUNT 30 int grabbed = 0; gdouble start_x, start_y; @@ -37,9 +38,12 @@ void last() load_image(name); } -void handle_key_press(GdkEventKey key) +void handle_key_press(GdkEvent *event) { - switch (key.keyval) { + GdkModifierType state; + gdk_event_get_state(event, &state); + + switch (event->key.keyval) { case GDK_KEY_q: quit(); case GDK_KEY_w: @@ -57,13 +61,69 @@ void handle_key_press(GdkEventKey key) zoom(0); break; case GDK_KEY_n: - case GDK_KEY_j: - case GDK_KEY_Right: next(); break; case GDK_KEY_p: - case GDK_KEY_k: + prev(); + break; + case GDK_KEY_Up: + if (curr_scale_mod == fit || state & GDK_SHIFT_MASK) + prev(); + else + scroll_window(0, -SCROLLAMMOUNT); + break; + case GDK_KEY_Down: + if (curr_scale_mod == fit || state & GDK_SHIFT_MASK) + next(); + else + scroll_window(0, SCROLLAMMOUNT); + break; + case GDK_KEY_Right: + if (curr_scale_mod == fit || state & GDK_SHIFT_MASK) + next(); + else + scroll_window(SCROLLAMMOUNT, 0); + break; case GDK_KEY_Left: + if (curr_scale_mod == fit || state & GDK_SHIFT_MASK) + prev(); + else + scroll_window(-SCROLLAMMOUNT, 0); + break; + case GDK_KEY_j: + if (curr_scale_mod == fit) + next(); + else + scroll_window(0, SCROLLAMMOUNT); + break; + case GDK_KEY_J: + next(); + break; + case GDK_KEY_k: + if (curr_scale_mod == fit) + prev(); + else + scroll_window(0, -SCROLLAMMOUNT); + break; + case GDK_KEY_K: + prev(); + break; + case GDK_KEY_l: + if (curr_scale_mod == fit) + next(); + else + scroll_window(SCROLLAMMOUNT, 0); + break; + case GDK_KEY_L: + next(); + break; + case GDK_KEY_h: + if (curr_scale_mod == fit) + prev(); + else + scroll_window(-SCROLLAMMOUNT, 0); + break; + case GDK_KEY_H: prev(); break; case GDK_KEY_g: |