sdl2-compat: SDL_RenderSetIntegerScale() affects future calls to SDL_RenderSetLogicalSize()

From 6315974deeb6e3f8151632e6bef263a2ed653229 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Sat, 15 Feb 2025 09:39:37 -0800
Subject: [PATCH] SDL_RenderSetIntegerScale() affects future calls to
 SDL_RenderSetLogicalSize()

It's implemented in SDL2 as an override to the default presentation mode.
---
 src/sdl2_compat.c | 37 ++++++++-----------------------------
 1 file changed, 8 insertions(+), 29 deletions(-)

diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 1fabfbf..4629bc4 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -213,6 +213,7 @@ do { \
 #define PROP_WINDOW_EXPECTED_SCALE "sdl2-compat.window.expected_scale"
 #define PROP_RENDERER_BATCHING "sdl2-compat.renderer.batching"
 #define PROP_RENDERER_RELATIVE_SCALING "sdl2-compat.renderer.relative-scaling"
+#define PROP_RENDERER_INTEGER_SCALE "sdl2-compat.renderer.integer_scale"
 #define PROP_SURFACE2 "sdl2-compat.surface2"
 #define PROP_STREAM2 "sdl2-compat.stream2"
 
@@ -5000,6 +5001,8 @@ SDL_RenderSetLogicalSize(SDL_Renderer *renderer, int w, int h)
 
     if (w == 0 && h == 0) {
         mode = SDL_LOGICAL_PRESENTATION_DISABLED;
+    } else if (SDL3_GetBooleanProperty(SDL3_GetRendererProperties(renderer), PROP_RENDERER_INTEGER_SCALE, false)) {
+        mode = SDL_LOGICAL_PRESENTATION_INTEGER_SCALE;
     } else {
         const char *hint = SDL3_GetHint("SDL_RENDER_LOGICAL_SIZE_MODE");
         if (hint && (*hint == '1' || SDL3_strcasecmp(hint, "overscan") == 0)) {
@@ -5022,41 +5025,17 @@ SDL_RenderGetLogicalSize(SDL_Renderer *renderer, int *w, int *h)
 SDL_DECLSPEC int SDLCALL
 SDL_RenderSetIntegerScale(SDL_Renderer *renderer, SDL2_bool enable)
 {
-    SDL_RendererLogicalPresentation mode;
-    int w, h;
-    int retval;
+    int w = 0, h = 0;
 
-    retval = SDL3_GetRenderLogicalPresentation(renderer, &w, &h, &mode) ? 0 : -1;
-    if (retval < 0) {
-        return retval;
-    }
-
-    if (enable && mode == SDL_LOGICAL_PRESENTATION_INTEGER_SCALE) {
-        return 0;
-    }
-
-    if (!enable && mode != SDL_LOGICAL_PRESENTATION_INTEGER_SCALE) {
-        return 0;
-    }
-
-    if (enable) {
-        retval = SDL3_SetRenderLogicalPresentation(renderer, w, h, SDL_LOGICAL_PRESENTATION_INTEGER_SCALE) ? 0 : -1;
-    } else {
-        retval = SDL3_SetRenderLogicalPresentation(renderer, w, h, SDL_LOGICAL_PRESENTATION_DISABLED) ? 0 : -1;
-    }
-    return retval < 0 ? retval : FlushRendererIfNotBatching(renderer);
+    SDL3_SetBooleanProperty(SDL3_GetRendererProperties(renderer), PROP_RENDERER_INTEGER_SCALE, enable);
+    SDL_RenderGetLogicalSize(renderer, &w, &h);
+    return SDL_RenderSetLogicalSize(renderer, w, h);
 }
 
 SDL_DECLSPEC SDL2_bool SDLCALL
 SDL_RenderGetIntegerScale(SDL_Renderer *renderer)
 {
-    SDL_RendererLogicalPresentation mode;
-    if (SDL3_GetRenderLogicalPresentation(renderer, NULL, NULL, &mode)) {
-        if (mode == SDL_LOGICAL_PRESENTATION_INTEGER_SCALE) {
-            return SDL2_TRUE;
-        }
-    }
-    return SDL2_FALSE;
+    return SDL3_GetBooleanProperty(SDL3_GetRendererProperties(renderer), PROP_RENDERER_INTEGER_SCALE, false) ? SDL2_TRUE : SDL2_FALSE;
 }
 
 SDL_DECLSPEC int SDLCALL