1
0
mirror of https://github.com/mpv-player/mpv synced 2024-12-28 18:12:22 +00:00

wayland: fix keepaspect-window during resize

So the resizing mechanism is actually supposed to match the video size
to the window size while preserving the aspect ratio. In wayland, the
current logic behaves as if --no-keepaspect-window was set. Fix this by
simply multiplying the height by the same scale factor the width is
multiplied by. Also get rid of the pointless (width > height) test (it
makes no difference in any case) as well as some unneccesary checks for
the keepaspect-window option. The use of ceil here is to make sure the
window coordinates can never possibly have be 0 due to truncation
(weston can still give you a 1x1 window which is fun). Fixes #9098.
This commit is contained in:
Dudemanguy 2021-08-08 20:55:26 -05:00
parent 8300830951
commit 8d4f10fcc0

View File

@ -859,14 +859,11 @@ static void handle_toplevel_config(void *data, struct xdg_toplevel *toplevel,
return;
if (!is_fullscreen && !is_maximized) {
if (vo_opts->keepaspect && vo_opts->keepaspect_window) {
if (width > height) {
double scale_factor = (double)width / wl->reduced_width;
width = wl->reduced_width * scale_factor;
} else {
double scale_factor = (double)height / wl->reduced_height;
height = wl->reduced_height * scale_factor;
}
if (vo_opts->keepaspect) {
double scale_factor = (double)width / wl->reduced_width;
width = ceil(wl->reduced_width * scale_factor);
if (vo_opts->keepaspect_window)
height = ceil(wl->reduced_height * scale_factor);
}
wl->window_size.x0 = 0;
wl->window_size.y0 = 0;
@ -1761,7 +1758,7 @@ int vo_wayland_reconfig(struct vo *vo)
set_geometry(wl);
if (wl->vo_opts->keepaspect && wl->vo_opts->keepaspect_window)
if (wl->vo_opts->keepaspect)
wl->window_size = wl->vdparams;
if (!wl->vo_opts->fullscreen && !wl->vo_opts->window_maximized)