From 8b597fbc5fe8baa021f23fd4cd89af03f1f8a5c8 Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Sat, 24 Jan 2026 22:41:33 +0100 Subject: [PATCH] render_output_size --- app/src/screen.c | 31 +++++++++++++++---------------- app/src/util/sdl.c | 19 +++++++++++++++++++ app/src/util/sdl.h | 3 +++ 3 files changed, 37 insertions(+), 16 deletions(-) diff --git a/app/src/screen.c b/app/src/screen.c index 9776063e..f10e8560 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -148,34 +148,33 @@ sc_screen_update_content_rect(struct sc_screen *screen) { assert(screen->video); struct sc_size content_size = screen->content_size; - // The drawable size is the window size * the HiDPI scale - struct sc_size drawable_size = - sc_sdl_get_window_size_in_pixels(screen->window); + struct sc_size render_size = + sc_sdl_get_render_output_size(screen->renderer); SDL_Rect *rect = &screen->rect; - if (is_optimal_size(drawable_size, content_size)) { + if (is_optimal_size(render_size, content_size)) { rect->x = 0; rect->y = 0; - rect->w = drawable_size.width; - rect->h = drawable_size.height; + rect->w = render_size.width; + rect->h = render_size.height; return; } - bool keep_width = content_size.width * drawable_size.height - > content_size.height * drawable_size.width; + bool keep_width = content_size.width * render_size.height + > content_size.height * render_size.width; if (keep_width) { rect->x = 0; - rect->w = drawable_size.width; - rect->h = drawable_size.width * content_size.height - / content_size.width; - rect->y = (drawable_size.height - rect->h) / 2; + rect->w = render_size.width; + rect->h = render_size.width * content_size.height + / content_size.width; + rect->y = (render_size.height - rect->h) / 2; } else { rect->y = 0; - rect->h = drawable_size.height; - rect->w = drawable_size.height * content_size.width - / content_size.height; - rect->x = (drawable_size.width - rect->w) / 2; + rect->h = render_size.height; + rect->w = render_size.height * content_size.width + / content_size.height; + rect->x = (render_size.width - rect->w) / 2; } } diff --git a/app/src/util/sdl.c b/app/src/util/sdl.c index 07921817..84ce357d 100644 --- a/app/src/util/sdl.c +++ b/app/src/util/sdl.c @@ -130,6 +130,25 @@ sc_sdl_hide_window(SDL_Window *window) { } } +struct sc_size +sc_sdl_get_render_output_size(SDL_Renderer *renderer) { + int width; + int height; + bool ok = SDL_GetRenderOutputSize(renderer, &width, &height); + if (!ok) { + LOGE("Could not get render output size: %s", SDL_GetError()); + LOGE("Please report the error"); + // fatal error + abort(); + } + + struct sc_size size = { + .width = width, + .height = height, + }; + return size; +} + bool sc_sdl_render_clear(SDL_Renderer *renderer) { bool ok = SDL_RenderClear(renderer); diff --git a/app/src/util/sdl.h b/app/src/util/sdl.h index 78b8319e..bdd748c2 100644 --- a/app/src/util/sdl.h +++ b/app/src/util/sdl.h @@ -34,6 +34,9 @@ sc_sdl_show_window(SDL_Window *window); void sc_sdl_hide_window(SDL_Window *window); +struct sc_size +sc_sdl_get_render_output_size(SDL_Renderer *renderer); + bool sc_sdl_render_clear(SDL_Renderer *renderer);