From 1ba7dd39c4414e8a0e9004f501b86c91d96587f0 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 22 Aug 2010 16:56:34 +0200 Subject: Panning with CTRL + arrow keys --- ChangeLog | 1 + man/feh.pre | 18 +++++++-------- src/keyevents.c | 70 ++++++++++++++++++++++++++++++++++++--------------------- 3 files changed, 55 insertions(+), 34 deletions(-) diff --git a/ChangeLog b/ChangeLog index b704427..7931568 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,7 @@ git HEAD * Set correct window title when starting feh in paused mode * Add Up/Down keys for zooming * When zooming via keyboard: Always zoom around the center of the window + * The image can now be panned with Ctrl + arrow keys Fri, 25 Jun 2010 16:07:20 +0200 Daniel Friesel diff --git a/man/feh.pre b/man/feh.pre index 8bfac52..37e240a 100644 --- a/man/feh.pre +++ b/man/feh.pre @@ -667,11 +667,11 @@ change slides based on Show menu. Use the arrow keys and return to select items, .Aq escape to close the menu. -.It n , Ao space Ac , Aq right arrow +.It n , Ao Space Ac , Aq Right Show next image .It o Toggle pointer visibility -.It p , Ao backspace Ac , Aq left arrow +.It p , Ao Backspace Ac , Aq Left Show previous image .It q Quit feh @@ -697,7 +697,7 @@ for more about lossless JPEG rotation. .It 0 .. 9 Execute the corresponding action .Pq 0 = Cm --action , No 1 = Cm --action1 No etc. -.It Aq return +.It Aq Return Run the command defined by .Cm --action .It Aq home @@ -718,19 +718,19 @@ Decrease reload delay Remove current file from filelist .It Aq CTRL+delete Remove current file from filelist and delete it -.It Aq keypad left +.It Ao keypad left Ac , Ao Ctrl+Left Ac Move the image to the lift -.It Aq keypad right +.It Ao keypad right Ac , Ao Ctrl+Right Ac Move the image to the right -.It Aq keypad up +.It Ao keypad up Ac , Ao Ctrl+Up Ac Move the image up -.It Aq keypad down +.It Ao keypad down Ac , Ao Ctrl+Down Ac Move the image down .It Aq keypad begin Antialias the image -.It Ao keypad + Ac , Ao up arrow Ac +.It Ao keypad + Ac , Ao Up Ac Zoom in -.It Ao keypad - Ac , Ao down arrow Ac +.It Ao keypad - Ac , Ao Down Ac Zoom out .It Aq keypad * Zoom to 100% diff --git a/src/keyevents.c b/src/keyevents.c index 5ca57bd..08d444a 100644 --- a/src/keyevents.c +++ b/src/keyevents.c @@ -156,11 +156,19 @@ void feh_event_handle_keypress(XEvent * ev) switch (keysym) { case XK_Left: - if (opt.slideshow) + if (kev->state & ControlMask) { + winwid->im_x -= 10; + winwidget_render_image(winwid, 0, 0); + } + else if (opt.slideshow) slideshow_change_image(winwid, SLIDE_PREV); break; case XK_Right: - if (opt.slideshow) + if (kev->state & ControlMask) { + winwid->im_x += 10; + winwidget_render_image(winwid, 0, 0); + } + else if (opt.slideshow) slideshow_change_image(winwid, SLIDE_NEXT); break; case XK_Page_Up: @@ -242,45 +250,57 @@ void feh_event_handle_keypress(XEvent * ev) feh_event_invoke_action(winwid, opt.actions[9]); break; case XK_KP_Left: - winwid->im_x = winwid->im_x - 10; + winwid->im_x -= 10; winwidget_render_image(winwid, 0, 0); break; case XK_KP_Right: - winwid->im_x = winwid->im_x + 10; + winwid->im_x += 10; winwidget_render_image(winwid, 0, 0); break; case XK_KP_Up: - winwid->im_y = winwid->im_y - 10; + winwid->im_y -= 10; winwidget_render_image(winwid, 0, 0); break; case XK_KP_Down: - winwid->im_y = winwid->im_y + 10; + winwid->im_y += 10; winwidget_render_image(winwid, 0, 0); break; case XK_KP_Add: case XK_Up: - /* erroneously recognized as '+' in the *kbuf switch. Work around this. */ - len = 0; - winwid->old_zoom = winwid->zoom; - winwid->zoom = winwid->zoom * 1.25; - winwid->im_x = (winwid->w / 2) - (((winwid->w / 2) - winwid->im_x) / - winwid->old_zoom * winwid->zoom); - winwid->im_y = (winwid->h / 2) - (((winwid->h / 2) - winwid->im_y) / - winwid->old_zoom * winwid->zoom); - winwidget_sanitise_offsets(winwid); - winwidget_render_image(winwid, 0, 1); + if (kev->state & ControlMask) { + winwid->im_y -= 10; + winwidget_render_image(winwid, 0, 0); + } + else { + /* erroneously recognized as '+' in the *kbuf switch. Work around this. */ + len = 0; + winwid->old_zoom = winwid->zoom; + winwid->zoom = winwid->zoom * 1.25; + winwid->im_x = (winwid->w / 2) - (((winwid->w / 2) - winwid->im_x) / + winwid->old_zoom * winwid->zoom); + winwid->im_y = (winwid->h / 2) - (((winwid->h / 2) - winwid->im_y) / + winwid->old_zoom * winwid->zoom); + winwidget_sanitise_offsets(winwid); + winwidget_render_image(winwid, 0, 1); + } break; case XK_KP_Subtract: case XK_Down: - len = 0; - winwid->old_zoom = winwid->zoom; - winwid->zoom = winwid->zoom * 0.75; - winwid->im_x = (winwid->w / 2) - (((winwid->w / 2) - winwid->im_x) / - winwid->old_zoom * winwid->zoom); - winwid->im_y = (winwid->h / 2) - (((winwid->h / 2) - winwid->im_y) / - winwid->old_zoom * winwid->zoom); - winwidget_sanitise_offsets(winwid); - winwidget_render_image(winwid, 0, 1); + if (kev->state & ControlMask) { + winwid->im_y += 10; + winwidget_render_image(winwid, 0, 0); + } + else { + len = 0; + winwid->old_zoom = winwid->zoom; + winwid->zoom = winwid->zoom * 0.75; + winwid->im_x = (winwid->w / 2) - (((winwid->w / 2) - winwid->im_x) / + winwid->old_zoom * winwid->zoom); + winwid->im_y = (winwid->h / 2) - (((winwid->h / 2) - winwid->im_y) / + winwid->old_zoom * winwid->zoom); + winwidget_sanitise_offsets(winwid); + winwidget_render_image(winwid, 0, 1); + } break; case XK_KP_Multiply: len = 0; -- cgit v1.2.3