summaryrefslogtreecommitdiffstats
path: root/image.c
diff options
context:
space:
mode:
authorBert Münnich <ber.t@gmx.com>2011-10-16 17:39:22 +0200
committerBert Münnich <ber.t@gmx.com>2011-10-16 17:39:22 +0200
commit867940ea85495ac4e8e23efbb574fd9d86bccf42 (patch)
tree6dc435cef2386dc37265d6dde787c1cf35f47e4f /image.c
parentdc727b8dce89811d755ed03d11688b13a42e794a (diff)
downloadnsxiv-867940ea85495ac4e8e23efbb574fd9d86bccf42.tar.zst
Pan by pixel count, if number prefix given
Diffstat (limited to 'image.c')
-rw-r--r--image.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/image.c b/image.c
index 5510f09..ffed8f4 100644
--- a/image.c
+++ b/image.c
@@ -576,19 +576,32 @@ bool img_move(img_t *img, int dx, int dy) {
}
}
-bool img_pan(img_t *img, direction_t dir, bool screen) {
+bool img_pan(img_t *img, direction_t dir, int d) {
+ /* d < 0: screen-wise
+ * d = 0: 1/5 of screen
+ * d > 0: num of pixels
+ */
+ int x, y;
+
if (img == NULL || img->im == NULL || img->win == NULL)
return false;
+ if (d > 0) {
+ x = y = MAX(1, d * img->zoom);
+ } else {
+ x = img->win->w / (d < 0 ? 1 : 5);
+ y = img->win->h / (d < 0 ? 1 : 5);
+ }
+
switch (dir) {
case DIR_LEFT:
- return img_move(img, img->win->w / (screen ? 1 : 5), 0);
+ return img_move(img, x, 0);
case DIR_RIGHT:
- return img_move(img, img->win->w / (screen ? 1 : 5) * -1, 0);
+ return img_move(img, -x, 0);
case DIR_UP:
- return img_move(img, 0, img->win->h / (screen ? 1 : 5));
+ return img_move(img, 0, y);
case DIR_DOWN:
- return img_move(img, 0, img->win->h / (screen ? 1 : 5) * -1);
+ return img_move(img, 0, -y);
}
return false;
}