sdl2-compat: updated SDL_CreateWindow and SDL_CreateShapedWindow after SDL3 changes.

From e75176524b8a945852e65c814837a64367c8909b Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Mon, 6 Mar 2023 21:56:20 +0300
Subject: [PATCH] updated SDL_CreateWindow and SDL_CreateShapedWindow after
 SDL3 changes.

---
 src/sdl2_compat.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
 src/sdl3_syms.h   |  4 ++--
 2 files changed, 45 insertions(+), 3 deletions(-)

diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 2a296aa..3d4fcc9 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -4408,12 +4408,54 @@ SDL_GetWindowFlags(SDL_Window *window)
 DECLSPEC SDL_Window * SDLCALL
 SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
 {
+    SDL_Window *window;
+    int setpos = (x != SDL_WINDOWPOS_UNDEFINED || y != SDL_WINDOWPOS_UNDEFINED);
+    int hidden = flags & SDL_WINDOW_HIDDEN;
+
     flags &= ~SDL2_WINDOW_SHOWN;
+    if (setpos) {
+        flags |= SDL_WINDOW_HIDDEN;
+    }
     if (flags & SDL2_WINDOW_FULLSCREEN_DESKTOP) {
         flags &= ~SDL2_WINDOW_FULLSCREEN_DESKTOP;
         flags |= SDL_WINDOW_FULLSCREEN; /* FIXME  force fullscreen desktop ? */
     }
-    return SDL3_CreateWindow(title, x, y, w, h, flags);
+
+    window = SDL3_CreateWindow(title, w, h, flags);
+    if (window) {
+        if (setpos) {
+            SDL3_SetWindowPosition(window, x, y);
+        }
+        if (!hidden) {
+            SDL3_ShowWindow(window);
+        }
+    }
+
+    return window;
+}
+
+DECLSPEC SDL_Window * SDLCALL
+SDL_CreateShapedWindow(const char *title, unsigned int x, unsigned int y, unsigned int w, unsigned int h, Uint32 flags)
+{
+    SDL_Window *window;
+    int setpos = (x != SDL_WINDOWPOS_UNDEFINED || y != SDL_WINDOWPOS_UNDEFINED);
+    int hidden = flags & SDL_WINDOW_HIDDEN;
+
+    if (setpos) {
+        flags |= SDL_WINDOW_HIDDEN;
+    }
+
+    window = SDL3_CreateShapedWindow(title, (int)w, (int)h, flags);
+    if (window) {
+        if (setpos) {
+            SDL3_SetWindowPosition(window, (int)x, (int)y);
+        }
+        if (!hidden) {
+            SDL3_ShowWindow(window);
+        }
+    }
+
+    return window;
 }
 
 DECLSPEC int SDLCALL
diff --git a/src/sdl3_syms.h b/src/sdl3_syms.h
index 06f69ba..a866edd 100644
--- a/src/sdl3_syms.h
+++ b/src/sdl3_syms.h
@@ -351,7 +351,7 @@ SDL3_SYM(size_t,WriteLE32,(SDL_RWops *a, Uint32 b),(a,b),return)
 SDL3_SYM(size_t,WriteBE32,(SDL_RWops *a, Uint32 b),(a,b),return)
 SDL3_SYM(size_t,WriteLE64,(SDL_RWops *a, Uint64 b),(a,b),return)
 SDL3_SYM(size_t,WriteBE64,(SDL_RWops *a, Uint64 b),(a,b),return)
-SDL3_SYM_PASSTHROUGH(SDL_Window*,CreateShapedWindow,(const char *a, unsigned int b, unsigned int c, unsigned int d, unsigned int e, Uint32 f),(a,b,c,d,e,f),return)
+SDL3_SYM(SDL_Window*,CreateShapedWindow,(const char *a, int b, int c, Uint32 d),(a,b,c,d),return)
 SDL3_SYM_PASSTHROUGH(SDL_bool,IsShapedWindow,(const SDL_Window *a),(a),return)
 SDL3_SYM_PASSTHROUGH(int,SetWindowShape,(SDL_Window *a, SDL_Surface *b, SDL_WindowShapeMode *c),(a,b,c),return)
 SDL3_SYM_PASSTHROUGH(int,GetShapedWindowMode,(SDL_Window *a, SDL_WindowShapeMode *b),(a,b),return)
@@ -483,7 +483,7 @@ SDL3_SYM(const SDL_DisplayMode*,GetDesktopDisplayMode,(SDL_DisplayID a),(a),retu
 SDL3_SYM(const SDL_DisplayMode*,GetCurrentDisplayMode,(SDL_DisplayID a),(a),return)
 SDL3_SYM(int,SetWindowFullscreenMode,(SDL_Window *a, const SDL_DisplayMode *b),(a,b),return)
 SDL3_SYM_PASSTHROUGH(Uint32,GetWindowPixelFormat,(SDL_Window *a),(a),return)
-SDL3_SYM(SDL_Window*,CreateWindow,(const char *a, int b, int c, int d, int e, Uint32 f),(a,b,c,d,e,f),return)
+SDL3_SYM(SDL_Window*,CreateWindow,(const char *a, int b, int c, Uint32 d),(a,b,c,d),return)
 SDL3_SYM_PASSTHROUGH(SDL_Window*,CreateWindowFrom,(const void *a),(a),return)
 SDL3_SYM_PASSTHROUGH(Uint32,GetWindowID,(SDL_Window *a),(a),return)
 SDL3_SYM_PASSTHROUGH(SDL_Window*,GetWindowFromID,(Uint32 a),(a),return)