Krolyxon
Commit 727939b

Branches

Refs →

nsxiv727939b

Make zoomdiff compare impact on image dimensions

Before that zoomdiff was a merely heuristic.

Related to issue #303
Author
Bert Münnich
Date
2018-01-22 10:37 +0100
Committer
Bert Münnich · 2018-01-22 10:37 +0100
Parent
4c29401
Commit
727939b3e6380e623540b4dfae497ead2c3c6e04

+6 −6

1 file changed

  1. M image.c +6 −6
M image.c View
@@ -39,9 +39,9 @@ enum { DEF_GIF_DELAY = 75 };
3939 float zoom_min;
4040 float zoom_max;
4141
42−static int zoomdiff(float z1, float z2)
42+static int zoomdiff(img_t *img, float z)
4343 {
44− return (int) (z1 * 1000.0 - z2 * 1000.0);
44+ return (int) ((img->w * z - img->w * img->zoom) + (img->h * z - img->h * img->zoom));
4545 }
4646
4747 void img_init(img_t *img, win_t *win)
@@ -417,7 +417,7 @@ bool img_fit(img_t *img)
417417 z = MAX(z, zoom_min);
418418 z = MIN(z, zmax);
419419
420− if (zoomdiff(z, img->zoom) != 0) {
420+ if (zoomdiff(img, z) != 0) {
421421 img->zoom = z;
422422 img->dirty = true;
423423 return true;
@@ -539,7 +539,7 @@ bool img_zoom(img_t *img, float z)
539539
540540 img->scalemode = SCALE_ZOOM;
541541
542− if (zoomdiff(z, img->zoom) != 0) {
542+ if (zoomdiff(img, z) != 0) {
543543 int x, y;
544544
545545 win_cursor_pos(img->win, &x, &y);
@@ -565,7 +565,7 @@ bool img_zoom_in(img_t *img)
565565
566566 for (i = 1; i < ARRLEN(zoom_levels); i++) {
567567 z = zoom_levels[i] / 100.0;
568− if (zoomdiff(z, img->zoom) > 0)
568+ if (zoomdiff(img, z) > 0)
569569 return img_zoom(img, z);
570570 }
571571 return false;
@@ -578,7 +578,7 @@ bool img_zoom_out(img_t *img)
578578
579579 for (i = ARRLEN(zoom_levels) - 2; i >= 0; i--) {
580580 z = zoom_levels[i] / 100.0;
581− if (zoomdiff(z, img->zoom) < 0)
581+ if (zoomdiff(img, z) < 0)
582582 return img_zoom(img, z);
583583 }
584584 return false;