Added SDL_HINT_VIDEO_X11_VISUALID

This commit is contained in:
Sam Lantinga
2024-08-03 09:42:51 -07:00
parent 05f870f20d
commit 8cde570ad9
3 changed files with 14 additions and 4 deletions

View File

@@ -3311,6 +3311,15 @@ extern "C" {
*/ */
#define SDL_HINT_VIDEO_X11_SCALING_FACTOR "SDL_VIDEO_X11_SCALING_FACTOR" #define SDL_HINT_VIDEO_X11_SCALING_FACTOR "SDL_VIDEO_X11_SCALING_FACTOR"
/**
* A variable forcing the visual ID used for X11 display modes.
*
* This hint should be set before initializing the video subsystem.
*
* \since This hint is available since SDL 3.0.0.
*/
#define SDL_HINT_VIDEO_X11_VISUALID "SDL_VIDEO_X11_VISUALID"
/** /**
* A variable forcing the visual ID chosen for new X11 windows. * A variable forcing the visual ID chosen for new X11 windows.
* *

View File

@@ -265,11 +265,11 @@ static float GetGlobalContentScale(SDL_VideoDevice *_this)
static int get_visualinfo(Display *display, int screen, XVisualInfo *vinfo) static int get_visualinfo(Display *display, int screen, XVisualInfo *vinfo)
{ {
const char *visual_id = SDL_getenv("SDL_VIDEO_X11_VISUALID"); const char *visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_VISUALID);
int depth; int depth;
/* Look for an exact visual, if requested */ /* Look for an exact visual, if requested */
if (visual_id) { if (visual_id && *visual_id) {
XVisualInfo *vi, template; XVisualInfo *vi, template;
int nvis; int nvis;

View File

@@ -531,8 +531,9 @@ int X11_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_PropertiesI
#if defined(SDL_VIDEO_OPENGL_GLX) || defined(SDL_VIDEO_OPENGL_EGL) #if defined(SDL_VIDEO_OPENGL_GLX) || defined(SDL_VIDEO_OPENGL_EGL)
const int transparent = (window->flags & SDL_WINDOW_TRANSPARENT) ? SDL_TRUE : SDL_FALSE; const int transparent = (window->flags & SDL_WINDOW_TRANSPARENT) ? SDL_TRUE : SDL_FALSE;
const char *forced_visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_WINDOW_VISUALID); const char *forced_visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_WINDOW_VISUALID);
const char *display_visual_id = SDL_GetHint(SDL_HINT_VIDEO_X11_VISUALID);
if (forced_visual_id && forced_visual_id[0] != '\0') { if (forced_visual_id && *forced_visual_id) {
XVisualInfo *vi, template; XVisualInfo *vi, template;
int nvis; int nvis;
@@ -547,7 +548,7 @@ int X11_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_PropertiesI
return -1; return -1;
} }
} else if ((window->flags & SDL_WINDOW_OPENGL) && } else if ((window->flags & SDL_WINDOW_OPENGL) &&
!SDL_getenv("SDL_VIDEO_X11_VISUALID")) { (!display_visual_id || !*display_visual_id)) {
XVisualInfo *vinfo = NULL; XVisualInfo *vinfo = NULL;
#ifdef SDL_VIDEO_OPENGL_EGL #ifdef SDL_VIDEO_OPENGL_EGL