nsxiv727939b
Make zoomdiff compare impact on image dimensions
Before that zoomdiff was a merely heuristic. Related to issue #303
+6 −6
1 file changed
- M image.c +6 −6
| @@ -39,9 +39,9 @@ enum { DEF_GIF_DELAY = 75 }; | |||
| 39 | 39 | float zoom_min; | |
| 40 | 40 | float zoom_max; | |
| 41 | 41 | ||
| 42 | − | static int zoomdiff(float z1, float z2) | |
| 42 | + | static int zoomdiff(img_t *img, float z) | |
| 43 | 43 | { | |
| 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)); | |
| 45 | 45 | } | |
| 46 | 46 | ||
| 47 | 47 | void img_init(img_t *img, win_t *win) | |
| @@ -417,7 +417,7 @@ bool img_fit(img_t *img) | |||
| 417 | 417 | z = MAX(z, zoom_min); | |
| 418 | 418 | z = MIN(z, zmax); | |
| 419 | 419 | ||
| 420 | − | if (zoomdiff(z, img->zoom) != 0) { | |
| 420 | + | if (zoomdiff(img, z) != 0) { | |
| 421 | 421 | img->zoom = z; | |
| 422 | 422 | img->dirty = true; | |
| 423 | 423 | return true; | |
| @@ -539,7 +539,7 @@ bool img_zoom(img_t *img, float z) | |||
| 539 | 539 | ||
| 540 | 540 | img->scalemode = SCALE_ZOOM; | |
| 541 | 541 | ||
| 542 | − | if (zoomdiff(z, img->zoom) != 0) { | |
| 542 | + | if (zoomdiff(img, z) != 0) { | |
| 543 | 543 | int x, y; | |
| 544 | 544 | ||
| 545 | 545 | win_cursor_pos(img->win, &x, &y); | |
| @@ -565,7 +565,7 @@ bool img_zoom_in(img_t *img) | |||
| 565 | 565 | ||
| 566 | 566 | for (i = 1; i < ARRLEN(zoom_levels); i++) { | |
| 567 | 567 | z = zoom_levels[i] / 100.0; | |
| 568 | − | if (zoomdiff(z, img->zoom) > 0) | |
| 568 | + | if (zoomdiff(img, z) > 0) | |
| 569 | 569 | return img_zoom(img, z); | |
| 570 | 570 | } | |
| 571 | 571 | return false; | |
| @@ -578,7 +578,7 @@ bool img_zoom_out(img_t *img) | |||
| 578 | 578 | ||
| 579 | 579 | for (i = ARRLEN(zoom_levels) - 2; i >= 0; i--) { | |
| 580 | 580 | z = zoom_levels[i] / 100.0; | |
| 581 | − | if (zoomdiff(z, img->zoom) < 0) | |
| 581 | + | if (zoomdiff(img, z) < 0) | |
| 582 | 582 | return img_zoom(img, z); | |
| 583 | 583 | } | |
| 584 | 584 | return false; | |