| @@ -99,7 +99,7 @@ int img_load(img_t *img, const char *filename) { |
| 99 | 99 | | } |
| 100 | 100 | | |
| 101 | 101 | | void img_check_pan(img_t *img, win_t *win) { |
| 102 | | − | if (!img) |
| 102 | + | if (!img || !win) |
| 103 | 103 | | return; |
| 104 | 104 | | |
| 105 | 105 | | if (img->w * img->zoom > win->w) { |
| @@ -120,6 +120,23 @@ void img_check_pan(img_t *img, win_t *win) { |
| 120 | 120 | | } |
| 121 | 121 | | } |
| 122 | 122 | | |
| 123 | + | int img_fit(img_t *img, win_t *win) { |
| 124 | + | float oz, zw, zh; |
| 125 | + | |
| 126 | + | if (!img || !win) |
| 127 | + | return 0; |
| 128 | + | |
| 129 | + | oz = img->zoom; |
| 130 | + | zw = (float) win->w / (float) img->w; |
| 131 | + | zh = (float) win->h / (float) img->h; |
| 132 | + | |
| 133 | + | img->zoom = MIN(zw, zh); |
| 134 | + | img->zoom = MAX(img->zoom, zoom_min); |
| 135 | + | img->zoom = MIN(img->zoom, zoom_max); |
| 136 | + | |
| 137 | + | return oz != img->zoom; |
| 138 | + | } |
| 139 | + | |
| 123 | 140 | | void img_render(img_t *img, win_t *win) { |
| 124 | 141 | | int sx, sy, sw, sh; |
| 125 | 142 | | int dx, dy, dw, dh; |
| @@ -128,7 +145,7 @@ void img_render(img_t *img, win_t *win) { |
| 128 | 145 | | return; |
| 129 | 146 | | |
| 130 | 147 | | if (img->scalemode != SCALE_ZOOM) { |
| 131 | | − | img_fit(img, win, 0); |
| 148 | + | img_fit(img, win); |
| 132 | 149 | | if (img->scalemode == SCALE_DOWN && img->zoom > 1.0) |
| 133 | 150 | | img->zoom = 1.0; |
| 134 | 151 | | } |
| @@ -176,24 +193,12 @@ void img_render(img_t *img, win_t *win) { |
| 176 | 193 | | win_draw(win); |
| 177 | 194 | | } |
| 178 | 195 | | |
| 179 | | − | int img_fit(img_t *img, win_t *win, unsigned char set) { |
| 180 | | − | float oz, zw, zh; |
| 181 | | − | |
| 196 | + | int img_fit_win(img_t *img, win_t *win) { |
| 182 | 197 | | if (!img || !win) |
| 183 | 198 | | return 0; |
| 184 | 199 | | |
| 185 | | − | oz = img->zoom; |
| 186 | | − | zw = (float) win->w / (float) img->w; |
| 187 | | − | zh = (float) win->h / (float) img->h; |
| 188 | | − | |
| 189 | | − | img->zoom = MIN(zw, zh); |
| 190 | | − | img->zoom = MAX(img->zoom, zoom_min); |
| 191 | | − | img->zoom = MIN(img->zoom, zoom_max); |
| 192 | | − | |
| 193 | | − | if (set) |
| 194 | | − | img->scalemode = SCALE_FIT; |
| 195 | | − | |
| 196 | | − | return oz != img->zoom; |
| 200 | + | img->scalemode = SCALE_FIT; |
| 201 | + | return img_fit(img, win); |
| 197 | 202 | | } |
| 198 | 203 | | |
| 199 | 204 | | int img_center(img_t *img, win_t *win) { |
| @@ -217,6 +222,7 @@ int img_zoom(img_t *img, float z) { |
| 217 | 222 | | |
| 218 | 223 | | z = MAX(z, zoom_min); |
| 219 | 224 | | z = MIN(z, zoom_max); |
| 225 | + | |
| 220 | 226 | | img->scalemode = SCALE_ZOOM; |
| 221 | 227 | | |
| 222 | 228 | | if (z != img->zoom) { |