瀏覽代碼

Make zoomdiff compare impact on image dimensions

Before that zoomdiff was a merely heuristic.

Related to issue #303
master
Bert Münnich 7 年之前
父節點
當前提交
727939b3e6
共有 1 個檔案被更改,包括 6 行新增6 行删除
  1. +6
    -6
      image.c

+ 6
- 6
image.c 查看文件

@@ -39,9 +39,9 @@ enum { DEF_GIF_DELAY = 75 };
float zoom_min; float zoom_min;
float zoom_max; float zoom_max;


static int zoomdiff(float z1, float z2) static int zoomdiff(img_t *img, float z)
{ {
return (int) (z1 * 1000.0 - z2 * 1000.0); return (int) ((img->w * z - img->w * img->zoom) + (img->h * z - img->h * img->zoom));
} }


void img_init(img_t *img, win_t *win) void img_init(img_t *img, win_t *win)
@@ -417,7 +417,7 @@ bool img_fit(img_t *img)
z = MAX(z, zoom_min); z = MAX(z, zoom_min);
z = MIN(z, zmax); z = MIN(z, zmax);


if (zoomdiff(z, img->zoom) != 0) { if (zoomdiff(img, z) != 0) {
img->zoom = z; img->zoom = z;
img->dirty = true; img->dirty = true;
return true; return true;
@@ -539,7 +539,7 @@ bool img_zoom(img_t *img, float z)


img->scalemode = SCALE_ZOOM; img->scalemode = SCALE_ZOOM;


if (zoomdiff(z, img->zoom) != 0) { if (zoomdiff(img, z) != 0) {
int x, y; int x, y;


win_cursor_pos(img->win, &x, &y); win_cursor_pos(img->win, &x, &y);
@@ -565,7 +565,7 @@ bool img_zoom_in(img_t *img)


for (i = 1; i < ARRLEN(zoom_levels); i++) { for (i = 1; i < ARRLEN(zoom_levels); i++) {
z = zoom_levels[i] / 100.0; z = zoom_levels[i] / 100.0;
if (zoomdiff(z, img->zoom) > 0) if (zoomdiff(img, z) > 0)
return img_zoom(img, z); return img_zoom(img, z);
} }
return false; return false;
@@ -578,7 +578,7 @@ bool img_zoom_out(img_t *img)


for (i = ARRLEN(zoom_levels) - 2; i >= 0; i--) { for (i = ARRLEN(zoom_levels) - 2; i >= 0; i--) {
z = zoom_levels[i] / 100.0; z = zoom_levels[i] / 100.0;
if (zoomdiff(z, img->zoom) < 0) if (zoomdiff(img, z) < 0)
return img_zoom(img, z); return img_zoom(img, z);
} }
return false; return false;


||||||
x
 
000:0
Loading…
取消
儲存