From 7c031ab92eb26641e0b14fa8b7f8e20183c7cb25 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 15 Aug 2010 15:06:04 +0200 Subject: Improve keyboard zoom mode --- ChangeLog | 2 ++ src/keyevents.c | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 318290f..b704427 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,8 @@ git HEAD and -J for --thumb-redraw * Patch by Noel Cragg: Improve support for tiling window managers * 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 Fri, 25 Jun 2010 16:07:20 +0200 Daniel Friesel diff --git a/src/keyevents.c b/src/keyevents.c index 6a5a2d0..5ca57bd 100644 --- a/src/keyevents.c +++ b/src/keyevents.c @@ -261,16 +261,25 @@ void feh_event_handle_keypress(XEvent * ev) 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; - /* TODO: Center only around current view */ - winwidget_center_image(winwid); + 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; - winwidget_center_image(winwid); + 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: -- cgit v1.2.3