From a581cd6344717551c9bacae58809d83ae6979220 Mon Sep 17 00:00:00 2001 From: e5150 Date: Tue, 23 Apr 2024 06:47:09 +0000 Subject: [PATCH] fix: image placement when rotating (#493) When rotating a partially shown image (i.e. image size * zoom > window size) the image is panned to top or left (if `win->w` or `win->h` is greatest, respectively). Seems to be due to unsignedness of `win->[wh]`, when taking the difference between them in `img_rotate` either `img->[xy]` ends up being close to `UINT_MAX` and the image is panned to top or left edge. Reviewed-on: https://codeberg.org/nsxiv/nsxiv/pulls/493 Reviewed-by: NRK Co-authored-by: e5150 Co-committed-by: e5150 --- image.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/image.c b/image.c index a138f95..dd91994 100644 --- a/image.c +++ b/image.c @@ -676,8 +676,8 @@ void img_rotate(img_t *img, degree_t d) ox = d == DEGREE_90 ? img->x : img->win->w - img->x - img->w * img->zoom; oy = d == DEGREE_270 ? img->y : img->win->h - img->y - img->h * img->zoom; - img->x = oy + (img->win->w - img->win->h) / 2; - img->y = ox + (img->win->h - img->win->w) / 2; + img->x = oy + (int)(img->win->w - img->win->h) / 2; + img->y = ox + (int)(img->win->h - img->win->w) / 2; tmp = img->w; img->w = img->h;