diff options
author | Bert <ber.t@gmx.com> | 2011-04-19 13:27:20 +0200 |
---|---|---|
committer | Bert <ber.t@gmx.com> | 2011-04-19 13:27:20 +0200 |
commit | ba293b09dfd6bea651bc40e711813302b87e6437 (patch) | |
tree | c93beec8f526addeb74f9ba2e22387ea5fd50421 /image.c | |
parent | 548b383f0be8a8a4248fd0858cd0922c47ef4275 (diff) | |
download | nsxiv-ba293b09dfd6bea651bc40e711813302b87e6437.tar.zst |
Center zoomed area
Diffstat (limited to 'image.c')
-rw-r--r-- | image.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -212,8 +212,8 @@ int img_center(img_t *img, win_t *win) { return ox != img->x || oy != img->y; } -int img_zoom(img_t *img, float z) { - if (!img || !img->im) +int img_zoom(img_t *img, win_t *win, float z) { + if (!img || !img->im || !win) return 0; z = MAX(z, zoom_min); @@ -222,8 +222,8 @@ int img_zoom(img_t *img, float z) { img->scalemode = SCALE_ZOOM; if (z != img->zoom) { - img->x -= (img->w * z - img->w * img->zoom) / 2; - img->y -= (img->h * z - img->h * img->zoom) / 2; + img->x = win->w / 2 - (win->w / 2 - img->x) * z / img->zoom; + img->y = win->h / 2 - (win->h / 2 - img->y) * z / img->zoom; img->zoom = z; img->checkpan = 1; return 1; @@ -232,28 +232,28 @@ int img_zoom(img_t *img, float z) { } } -int img_zoom_in(img_t *img) { +int img_zoom_in(img_t *img, win_t *win) { int i; - if (!img || !img->im) + if (!img || !img->im || !win) return 0; for (i = 1; i < zl_cnt; ++i) { if (zoom_levels[i] > img->zoom * 100.0) - return img_zoom(img, zoom_levels[i] / 100.0); + return img_zoom(img, win, zoom_levels[i] / 100.0); } return 0; } -int img_zoom_out(img_t *img) { +int img_zoom_out(img_t *img, win_t *win) { int i; - if (!img || !img->im) + if (!img || !img->im || !win) return 0; for (i = zl_cnt - 2; i >= 0; --i) { if (zoom_levels[i] < img->zoom * 100.0) - return img_zoom(img, zoom_levels[i] / 100.0); + return img_zoom(img, win, zoom_levels[i] / 100.0); } return 0; } |