From a9ad58fa780b860f89cda2cb5270628171bc9b2b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 22 Oct 2025 11:53:43 +0530 Subject: [PATCH] Draw OS window contents at top left instead of bottom left during live resize Also, since I was here, have the size display be translucent. Fixes #9141 --- kitty/shaders.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/kitty/shaders.c b/kitty/shaders.c index ba6fc4664..046674350 100644 --- a/kitty/shaders.c +++ b/kitty/shaders.c @@ -1338,7 +1338,7 @@ draw_resizing_text(OSWindow *w) { snprintf(text, sizeof(text), "%u x %u cells", width / w->fonts_data->fcm.cell_width, height / w->fonts_data->fcm.cell_height); StringCanvas rendered = render_simple_text(w->fonts_data, text); if (rendered.canvas) { - draw_centered_alpha_mask(width, height, rendered.width, rendered.height, rendered.canvas, OPT(background_opacity)); + draw_centered_alpha_mask(width, height, rendered.width, rendered.height, rendered.canvas, 0.8f); free(rendered.canvas); } } @@ -1362,10 +1362,8 @@ blank_os_window(OSWindow *osw) { static void start_os_window_rendering(OSWindow *os_window, Tab *tab) { - if (os_window->live_resize.in_progress) { - blank_os_window(os_window); - save_viewport_using_bottom_left_origin(0, 0, os_window->viewport_width, os_window->viewport_height); - } + // note that during live resize rendering is done in layers + if (os_window->live_resize.in_progress) blank_os_window(os_window); if (os_window->needs_layers) { if (os_window->indirect_output.width != os_window->viewport_width || os_window->indirect_output.height != os_window->viewport_height) { if (os_window->indirect_output.texture_id) free_texture(&os_window->indirect_output.texture_id); @@ -1378,6 +1376,7 @@ start_os_window_rendering(OSWindow *os_window, Tab *tab) { } set_framebuffer_to_use_for_output(os_window->indirect_output.framebuffer_id); bind_framebuffer_for_output(0); + save_viewport_using_bottom_left_origin(0, 0, os_window->indirect_output.width, os_window->indirect_output.height); clear_current_framebuffer(); draw_bg_image(os_window, tab); } @@ -1394,11 +1393,14 @@ stop_os_window_rendering(OSWindow *os_window, Tab *tab, Window *active_window) { glBindTexture(GL_TEXTURE_2D, os_window->indirect_output.texture_id); glUniform4f(blit_program_layout.uniforms.src_rect, 0, 1, 1, 0); glUniform4f(blit_program_layout.uniforms.dest_rect, -1, 1, 1, -1); - draw_quad(false, 0); - } - if (os_window->live_resize.in_progress) { restore_viewport(); - draw_resizing_text(os_window); + if (os_window->live_resize.in_progress) save_viewport_using_top_left_origin( + 0, 0, os_window->viewport_width, os_window->viewport_height, os_window->live_resize.height); + draw_quad(false, 0); + if (os_window->live_resize.in_progress) { + restore_viewport(); + draw_resizing_text(os_window); + } } }