From bc8c2e01124eea4911df9750583bac11160d4d2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Ekl=C3=B6f?= Date: Wed, 7 Feb 2024 16:22:33 +0100 Subject: [PATCH] wayland: regression: use correct scaling factor when calling render_resize() When an output property (such as scaling factor) has changed, we need to call render_resize() to ensure the window surface is correct (for example, we may have to change its scale). The width/height parameters are in *logical* pixels (i.e. already scaled). For render_resize() to work correctly when the scale is being changed, it needs to be called with *current* logical size. This means we need to scale our current width/height using the *old* scaling factor. --- wayland.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/wayland.c b/wayland.c index d3d892df..c5feb6a1 100644 --- a/wayland.c +++ b/wayland.c @@ -392,6 +392,8 @@ static void update_term_for_output_change(struct terminal *term) { const float old_scale = term->scale; + const float logical_width = term->width / old_scale; + const float logical_height = term->height / old_scale; /* Note: order matters! term_update_scale() must come first */ bool scale_updated = term_update_scale(term); @@ -400,7 +402,7 @@ update_term_for_output_change(struct terminal *term) csd_reload_font(term->window, old_scale); - uint8_t resize_opts = RESIZE_KEEP_GRID; + enum resize_options resize_opts = RESIZE_KEEP_GRID; if (fonts_updated) { /* @@ -428,8 +430,8 @@ update_term_for_output_change(struct terminal *term) render_resize( term, - (int)roundf(term->width / term->scale), - (int)roundf(term->height / term->scale), + (int)roundf(logical_width), + (int)roundf(logical_height), resize_opts); }