summaryrefslogtreecommitdiffstats
path: root/image.c
diff options
context:
space:
mode:
authorBert <ber.t@gmx.com>2011-04-19 13:27:20 +0200
committerBert <ber.t@gmx.com>2011-04-19 13:27:20 +0200
commitba293b09dfd6bea651bc40e711813302b87e6437 (patch)
treec93beec8f526addeb74f9ba2e22387ea5fd50421 /image.c
parent548b383f0be8a8a4248fd0858cd0922c47ef4275 (diff)
downloadnsxiv-ba293b09dfd6bea651bc40e711813302b87e6437.tar.zst
Center zoomed area
Diffstat (limited to 'image.c')
-rw-r--r--image.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/image.c b/image.c
index e3e9dc2..7368854 100644
--- a/image.c
+++ b/image.c
@@ -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;
}