Krolyxon
Commit 8a652a7

Branches

Refs →

nsxiv8a652a7

Corrected zoom level handling

Author
Bert Münnich
Date
2012-08-16 13:09 +0200
Parent
4ce3232
Commit
8a652a786c2edc5f630d6f032d8ef775cdea9142

+21 −9

3 files changed

  1. M Makefile +1 −1
  2. M image.c +17 −8
  3. M util.h +3 −0
M Makefile View
@@ -1,4 +1,4 @@
1−VERSION = git-20120807
1+VERSION = git-20120816
22
33 PREFIX = /usr/local
44 MANPREFIX = $(PREFIX)/share/man
M image.c View
@@ -36,9 +36,14 @@ enum { MIN_GIF_DELAY = 50 };
3636 float zoom_min;
3737 float zoom_max;
3838
39−bool zoomdiff(float z1, float z2) {
39+int zoomdiff(float z1, float z2) {
40+ float d = z1 - z2;
4041 const float mindelta = 0.001;
41− return (z1 - z2 > mindelta) || (z1 - z2 < mindelta);
42+
43+ if (ABS(d) < mindelta)
44+ return 0;
45+ else
46+ return d < 0 ? -1 : 1;
4247 }
4348
4449 void img_init(img_t *img, win_t *win) {
@@ -380,7 +385,7 @@ bool img_fit(img_t *img) {
380385 z = MAX(z, zoom_min);
381386 z = MIN(z, zmax);
382387
383− if (zoomdiff(z, img->zoom)) {
388+ if (zoomdiff(z, img->zoom) != 0) {
384389 img->zoom = z;
385390 img->dirty = true;
386391 return true;
@@ -496,7 +501,7 @@ bool img_zoom(img_t *img, float z) {
496501
497502 img->scalemode = SCALE_ZOOM;
498503
499− if (zoomdiff(z, img->zoom)) {
504+ if (zoomdiff(z, img->zoom) != 0) {
500505 img->x = img->win->w / 2 - (img->win->w / 2 - img->x) * z / img->zoom;
501506 img->y = img->win->h / 2 - (img->win->h / 2 - img->y) * z / img->zoom;
502507 img->zoom = z;
@@ -510,26 +515,30 @@ bool img_zoom(img_t *img, float z) {
510515
511516 bool img_zoom_in(img_t *img) {
512517 int i;
518+ float z;
513519
514520 if (img == NULL || img->im == NULL)
515521 return false;
516522
517523 for (i = 1; i < ARRLEN(zoom_levels); i++) {
518− if (zoom_levels[i] > img->zoom * 100.0)
519− return img_zoom(img, zoom_levels[i] / 100.0);
524+ z = zoom_levels[i] / 100.0;
525+ if (zoomdiff(z, img->zoom) > 0)
526+ return img_zoom(img, z);
520527 }
521528 return false;
522529 }
523530
524531 bool img_zoom_out(img_t *img) {
525532 int i;
533+ float z;
526534
527535 if (img == NULL || img->im == NULL)
528536 return false;
529537
530538 for (i = ARRLEN(zoom_levels) - 2; i >= 0; i--) {
531− if (zoom_levels[i] < img->zoom * 100.0)
532− return img_zoom(img, zoom_levels[i] / 100.0);
539+ z = zoom_levels[i] / 100.0;
540+ if (zoomdiff(z, img->zoom) < 0)
541+ return img_zoom(img, z);
533542 }
534543 return false;
535544 }
M util.h View
@@ -27,6 +27,9 @@
2727
2828 #include "types.h"
2929
30+#ifndef ABS
31+#define ABS(a) ((a) < 0 ? -(a) : (a))
32+#endif
3033 #ifndef MIN
3134 #define MIN(a,b) ((a) < (b) ? (a) : (b))
3235 #endif