mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-05-30 21:37:43 +08:00
Added SDL_HINT_VIDEO_X11_SCALING_FACTOR to allow overriding the content scale on X11 (thanks Andres!)
This commit is contained in:
@@ -1938,6 +1938,13 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
|
#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief A variable forcing the scaling factor for X11 windows
|
||||||
|
*
|
||||||
|
* This variable can be set to a floating point value in the range 1.0-10.0f
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_VIDEO_X11_SCALING_FACTOR "SDL_VIDEO_X11_SCALING_FACTOR"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief A variable controlling whether the X11 XRandR extension should be used.
|
* \brief A variable controlling whether the X11 XRandR extension should be used.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -164,8 +164,20 @@ static float GetGlobalContentScale(SDL_VideoDevice *_this)
|
|||||||
static double scale_factor = 0.0;
|
static double scale_factor = 0.0;
|
||||||
|
|
||||||
if (scale_factor <= 0.0) {
|
if (scale_factor <= 0.0) {
|
||||||
/* First try the settings portal via D-Bus for the text scaling factor (aka 'Global Scale' on KDE) */
|
|
||||||
|
/* First use the forced scaling factor specified by the app/user */
|
||||||
|
const char *hint = SDL_GetHint(SDL_HINT_VIDEO_X11_SCALING_FACTOR);
|
||||||
|
if (hint && *hint) {
|
||||||
|
double value = SDL_atof(hint);
|
||||||
|
if (value >= 1.0f && value <= 10.0f) {
|
||||||
|
scale_factor = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Next try the settings portal via D-Bus for the text scaling factor (aka 'Global Scale' on KDE) */
|
||||||
#ifdef SDL_USE_LIBDBUS
|
#ifdef SDL_USE_LIBDBUS
|
||||||
|
if (scale_factor <= 0.0)
|
||||||
|
{
|
||||||
DBusMessage *reply;
|
DBusMessage *reply;
|
||||||
SDL_DBusContext *dbus = SDL_DBus_GetContext();
|
SDL_DBusContext *dbus = SDL_DBus_GetContext();
|
||||||
|
|
||||||
@@ -183,10 +195,11 @@ static float GetGlobalContentScale(SDL_VideoDevice *_this)
|
|||||||
dbus->message_unref(reply);
|
dbus->message_unref(reply);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* If that failed, try "Xft.dpi" from the XResourcesDatabase... */
|
/* If that failed, try "Xft.dpi" from the XResourcesDatabase... */
|
||||||
if (scale_factor <= 0.0)
|
if (scale_factor <= 0.0)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
SDL_VideoData *data = _this->driverdata;
|
SDL_VideoData *data = _this->driverdata;
|
||||||
Display *display = data->display;
|
Display *display = data->display;
|
||||||
|
|||||||
Reference in New Issue
Block a user