From eb5cc6ea5f10360f6bcfa38bc4cd63350a3c3f36 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Thu, 2 Feb 2023 10:48:18 +0100
Subject: [PATCH] Fix running. but few FIXME's with full screen display mode
---
src/sdl2_compat.c | 74 ++++++++++++++++++++++++++++++++++++++---------
src/sdl3_syms.h | 7 ++---
2 files changed, 63 insertions(+), 18 deletions(-)
diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index 42c14b0..b605b80 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -3347,7 +3347,11 @@ DECLSPEC int SDLCALL
SDL_GetNumDisplayModes(int displayIndex)
{
SDL_DisplayID displayID = Display_IndexToID(displayIndex);
- return SDL3_GetNumDisplayModes(displayID);
+ int count = 0;
+ SDL_DisplayMode **list;
+ list = SDL3_GetFullscreenDisplayModes(displayID, &count);
+ SDL_free(list);
+ return count;
}
DECLSPEC int SDLCALL
@@ -3374,9 +3378,18 @@ SDL_GetDisplayOrientation(int displayIndex)
DECLSPEC int SDLCALL
SDL_GetDisplayMode(int displayIndex, int modeIndex, SDL2_DisplayMode *mode)
{
- SDL_DisplayMode dp;
- int ret = SDL3_GetDisplayMode(Display_IndexToID(displayIndex), modeIndex, mode ? &dp : NULL);
- DisplayMode_3to2(&dp, mode);
+ SDL_DisplayID displayID = Display_IndexToID(displayIndex);
+ SDL_DisplayMode **list;
+ int count = 0;
+ int ret = -1;
+ list = SDL3_GetFullscreenDisplayModes(displayID, &count);
+ if (modeIndex >= 0 && modeIndex < count) {
+ if (mode) {
+ DisplayMode_3to2(list[modeIndex], mode);
+ }
+ ret = 1;
+ }
+ SDL_free(list);
return ret;
}
@@ -3401,15 +3414,24 @@ SDL_GetDesktopDisplayMode(int displayIndex, SDL2_DisplayMode *mode)
DECLSPEC int SDLCALL
SDL_GetWindowDisplayMode(SDL_Window *window, SDL2_DisplayMode *mode)
{
- SDL_DisplayMode dp;
- int ret = SDL3_GetWindowDisplayMode(window, mode ? &dp : NULL);
- DisplayMode_3to2(&dp, mode);
+ int ret;
+ SDL_DisplayMode *dp;
+ dp = SDL3_GetWindowFullscreenMode(window);
+ if (dp) {
+ if (mode) {
+ DisplayMode_3to2(dp, mode);
+ }
+ ret = 0;
+ } else {
+ ret = -1;
+ }
return ret;
}
DECLSPEC SDL2_DisplayMode * SDLCALL
SDL_GetClosestDisplayMode(int displayIndex, const SDL2_DisplayMode *mode, SDL2_DisplayMode *closest)
{
+#if 0
SDL_DisplayMode dp;
SDL_DisplayMode closest3;
SDL_DisplayMode *ret;
@@ -3418,14 +3440,35 @@ SDL_GetClosestDisplayMode(int displayIndex, const SDL2_DisplayMode *mode, SDL2_D
ret = SDL3_GetClosestDisplayMode(Display_IndexToID(displayIndex), mode ? &dp : NULL, closest ? &closest3 : NULL);
DisplayMode_3to2(ret, &ret2);
return &ret2;
+#endif
+ // FIXME
+ SDL_Log("FIXME missing SDL_GetClosestDisplayMode");
+ return NULL;
}
DECLSPEC int SDLCALL
SDL_SetWindowDisplayMode(SDL_Window *window, const SDL2_DisplayMode *mode)
{
+#if 0
SDL_DisplayMode dp;
DisplayMode_2to3(mode, &dp);
- return SDL3_SetWindowDisplayMode(window, mode ? &dp : NULL);
+ return SDL3_SetWindowFullscreenMode(window, mode ? &dp : NULL);
+#else
+ int count = 0;
+ SDL_DisplayMode **list;
+ int ret = -1;
+ list = SDL3_GetFullscreenDisplayModes(SDL3_GetWindowID(window), &count);
+ if (list && count) {
+ ret = SDL3_SetWindowFullscreenMode(window, list[0]);
+ ret = 0;
+
+ } else {
+ SDL_Log("FIXME no FullscreenDisplayModes ?");
+ SDL_Log("list = %p count = %d window:%p %d", list, count, window, SDL3_GetWindowID(window));
+ }
+ SDL_free(list);
+ return 0; // FIXME
+#endif
}
DECLSPEC int SDLCALL
@@ -3746,9 +3789,9 @@ SDL_GetWindowFlags(SDL_Window *window)
DECLSPEC SDL_Window * SDLCALL
SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
{
- flags &= SDL2_WINDOW_SHOWN;
+ flags &= ~SDL2_WINDOW_SHOWN;
if (flags & SDL2_WINDOW_FULLSCREEN_DESKTOP) {
- 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);
@@ -3757,11 +3800,16 @@ SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
DECLSPEC int SDLCALL
SDL_SetWindowFullscreen(SDL_Window *window, Uint32 flags)
{
+ int flags3 = SDL_FALSE;
+
if (flags & SDL2_WINDOW_FULLSCREEN_DESKTOP) {
- flags &= SDL2_WINDOW_FULLSCREEN_DESKTOP;
- flags |= SDL_WINDOW_FULLSCREEN; /* FIXME force fullscreen desktop ? */
+ flags3 = SDL_TRUE;
+ }
+ if (flags & SDL_WINDOW_FULLSCREEN) {
+ flags3 = SDL_TRUE;
}
- return SDL3_SetWindowFullscreen(window, flags);
+
+ return SDL3_SetWindowFullscreen(window, flags3);
}
/* SDL3 added a return value. We just throw it away for SDL2. */
diff --git a/src/sdl3_syms.h b/src/sdl3_syms.h
index adacdd4..6a562b1 100644
--- a/src/sdl3_syms.h
+++ b/src/sdl3_syms.h
@@ -482,13 +482,9 @@ SDL3_SYM_PASSTHROUGH(const char*,GetVideoDriver,(int a),(a),return)
SDL3_SYM_PASSTHROUGH(const char*,GetCurrentVideoDriver,(void),(),return)
SDL3_SYM(const char*,GetDisplayName,(SDL_DisplayID a),(a),return)
SDL3_SYM(int,GetDisplayBounds,(SDL_DisplayID a, SDL_Rect *b),(a,b),return)
-SDL3_SYM(int,GetNumDisplayModes,(SDL_DisplayID a),(a),return)
-SDL3_SYM(int,GetDisplayMode,(SDL_DisplayID a, int b, SDL_DisplayMode *c),(a,b,c),return)
SDL3_SYM(int,GetDesktopDisplayMode,(SDL_DisplayID a, SDL_DisplayMode *b),(a,b),return)
SDL3_SYM(int,GetCurrentDisplayMode,(SDL_DisplayID a, SDL_DisplayMode *b),(a,b),return)
-SDL3_SYM(SDL_DisplayMode*,GetClosestDisplayMode,(SDL_DisplayID a, const SDL_DisplayMode *b, SDL_DisplayMode *c),(a,b,c),return)
-SDL3_SYM(int,SetWindowDisplayMode,(SDL_Window *a, const SDL_DisplayMode *b),(a,b),return)
-SDL3_SYM(int,GetWindowDisplayMode,(SDL_Window *a, SDL_DisplayMode *b),(a,b),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_PASSTHROUGH(SDL_Window*,CreateWindowFrom,(const void *a),(a),return)
@@ -916,6 +912,7 @@ SDL3_SYM(SDL_DisplayID,GetDisplayForRect,(const SDL_Rect *a),(a),return)
SDL3_SYM(SDL_DisplayID,GetPrimaryDisplay,(),(),return)
SDL3_SYM(int,RunApp,(int a, char *b, SDL_main_func c, void *d),(a,b,c,d),return)
SDL3_SYM(SDL_DisplayMode *,GetWindowFullscreenMode,(SDL_Window *a),(a),return)
+SDL3_SYM(SDL_DisplayMode **,GetFullscreenDisplayModes,(SDL_DisplayID a, int *b),(a,b),return)
#undef SDL3_SYM
#undef SDL3_SYM_PASSTHROUGH