From 0da6b6d254be180d921d07996289389bea13fc4b Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Thu, 22 Apr 2010 14:55:45 +0200 Subject: Fix zoom mode once and for all[tm] --- src/events.c | 21 ++++++--------------- src/winwidget.h | 6 ++---- 2 files changed, 8 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/events.c b/src/events.c index a642ca4..54321be 100644 --- a/src/events.c +++ b/src/events.c @@ -132,8 +132,10 @@ static void feh_event_handle_ButtonPress(XEvent * ev) winwid->zoom = 1.0; /* required to adjust the image position in zoom mode */ - winwid->orig_im_x = winwid->im_x; - winwid->orig_im_y = winwid->im_y; + winwid->im_click_offset_x = (winwid->click_offset_x + - winwid->im_x) / winwid->old_zoom; + winwid->im_click_offset_y = (winwid->click_offset_y + - winwid->im_y) / winwid->old_zoom; /* center the image */ if (winwid->full_screen) { @@ -152,15 +154,6 @@ static void feh_event_handle_ButtonPress(XEvent * ev) } } - if (winwid->click_offset_x < 0) - winwid->click_offset_x = 0; - if (winwid->click_offset_y < 0) - winwid->click_offset_y = 0; - if (winwid->click_offset_x > winwid->w) - winwid->click_offset_x = winwid->w; - if (winwid->click_offset_y > winwid->h) - winwid->click_offset_y = winwid->h; - winwidget_render_image(winwid, 0, 0); } } else if (ev->xbutton.button == opt.reload_button) { @@ -438,11 +431,9 @@ static void feh_event_handle_MotionNotify(XEvent * ev) /* center around click_offset */ winwid->im_x = winwid->click_offset_x - - (winwid->click_offset_x * winwid->zoom); - /*+ (winwid->orig_im_x * winwid->zoom);*/ + - (winwid->im_click_offset_x * winwid->zoom); winwid->im_y = winwid->click_offset_y - - (winwid->click_offset_y * winwid->zoom); - /*+ (winwid->orig_im_y * winwid->zoom);*/ + - (winwid->im_click_offset_y * winwid->zoom); winwidget_render_image(winwid, 0, 0); } diff --git a/src/winwidget.h b/src/winwidget.h index 8f03323..137ceda 100644 --- a/src/winwidget.h +++ b/src/winwidget.h @@ -101,10 +101,6 @@ struct __winwidget { int im_x; int im_y; - /* same, as cache for zoom mode */ - int orig_im_x; - int orig_im_y; - /* From 0 (not visible) to 1.00 (actual size) * all the way up to INT_MAX (eww) */ @@ -113,6 +109,8 @@ struct __winwidget { int click_offset_x; int click_offset_y; + int im_click_offset_x; + int im_click_offset_y; unsigned char has_rotated; }; -- cgit v1.2.3