diff options
author | Birte Kristina Friesel <derf@finalrewind.org> | 2025-09-08 20:03:57 +0200 |
---|---|---|
committer | Birte Kristina Friesel <derf@finalrewind.org> | 2025-09-08 20:03:57 +0200 |
commit | 856cb97e527c2cde795f42960fab3a22612471cb (patch) | |
tree | 914e0fee509a433becbcffdd25a076b3d7b253d9 /src | |
parent | 47e7e1de3c94212847da42b23c2b9eabd99d5a21 (diff) |
winwidget_render_image: only set x/y :=0 if !scale_down or w/h != im_w/im_h
This is another fix for 2a90af6d3709dd01c447f18db5109cab86eb4735 that should
not have any adverse effects, as it specifically catches the case where
--scale-down has caused a window dimension to be equal to an image dimension.
Fixes #795
Fixes #796
Diffstat (limited to 'src')
-rw-r--r-- | src/winwidget.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/winwidget.c b/src/winwidget.c index 3b90158..cd117ac 100644 --- a/src/winwidget.c +++ b/src/winwidget.c @@ -500,8 +500,10 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) } else { winwid->im_x = - opt.offset_x * winwid->zoom; } - } else { + } else if (!opt.scale_down || (winwid->w != winwid->im_w)) { winwid->im_x = (int) (winwid->w - (winwid->im_w * winwid->zoom)) >> 1; + } else { + winwid->im_x = 0; } if (opt.offset_flags & YValue) { if (opt.offset_flags & YNegative) { @@ -509,8 +511,10 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) } else { winwid->im_y = - opt.offset_y * winwid->zoom; } - } else { + } else if (!opt.scale_down || (winwid->h != winwid->im_h)) { winwid->im_y = (int) (winwid->h - (winwid->im_h * winwid->zoom)) >> 1; + } else { + winwid->im_y = 0; } } @@ -549,17 +553,15 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) calc_h = lround(winwid->im_h * winwid->zoom); dw = (winwid->w - winwid->im_x); dh = (winwid->h - winwid->im_y); + + D(("sx: %4d sy: %4d sw: sh: dx: %4d dy: %4d dw: %4d dh: %4d zoom: %f\n", + sx, sy, sw, sh, dx, dy, dw, dh, winwid->zoom)); + if (calc_w < dw) { dw = calc_w; - if (!winwid->full_screen) { - dx = 0; - } } if (calc_h < dh) { dh = calc_h; - if (!winwid->full_screen) { - dy = 0; - } } if (dw > winwid->w) dw = winwid->w; @@ -569,7 +571,7 @@ void winwidget_render_image(winwidget winwid, int resize, int force_alias) sw = lround(dw / winwid->zoom); sh = lround(dh / winwid->zoom); - D(("sx: %d sy: %d sw: %d sh: %d dx: %d dy: %d dw: %d dh: %d zoom: %f\n", + D(("sx: %4d sy: %4d sw: %4d sh: %4d dx: %4d dy: %4d dw: %4d dh: %4d zoom: %f\n", sx, sy, sw, sh, dx, dy, dw, dh, winwid->zoom)); if ((winwid->zoom != 1.0 || winwid->has_rotated) && !force_alias && !winwid->force_aliasing) |