From 79b8fefcc45d6279c28505ab3d07f539fb9726ff Mon Sep 17 00:00:00 2001 From: N-R-K <79544946+N-R-K@users.noreply.github.com> Date: Wed, 1 Dec 2021 18:27:17 +0600 Subject: bring back zoom_levels (#156) this still keeps the shorter zoom logic, but adds back the zoom_levels array so that stay close to sxiv. for users who would like to have the zoom step behavior see: https://github.com/nsxiv/nsxiv/pull/156#issuecomment-975182631 --- image.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'image.c') diff --git a/image.c b/image.c index 268163b..aab8f41 100644 --- a/image.c +++ b/image.c @@ -43,6 +43,9 @@ enum { DEF_GIF_DELAY = 75 }; enum { DEF_WEBP_DELAY = 75 }; #endif +static const float ZOOM_MIN = zoom_levels[0] / 100; +static const float ZOOM_MAX = zoom_levels[ARRLEN(zoom_levels)-1] / 100; + void img_init(img_t *img, win_t *win) { imlib_context_set_display(win->env.dpy); @@ -699,8 +702,14 @@ bool img_zoom_to(img_t *img, float z) bool img_zoom(img_t *img, int d) { - const float z = img->zoom * (d > 0 ? ZOOM_STEP : 1/ZOOM_STEP); - return img_zoom_to(img, z); + int i = d > 0 ? 0 : ARRLEN(zoom_levels)-1; + while (i >= 0 && i < ARRLEN(zoom_levels) && (d > 0 ? + zoom_levels[i]/100 <= img->zoom : zoom_levels[i]/100 >= img->zoom)) + { + i += d; + } + i = MIN(MAX(i, 0), ARRLEN(zoom_levels)-1); + return img_zoom_to(img, zoom_levels[i]/100); } bool img_pos(img_t *img, float x, float y) -- cgit v1.2.3-54-g00ecf