rcore_desktop_glfw.c : disable FLAG_WINDOW_HIGHDPI on Wayland

If Ubuntu is not mistaking me, on Wayland `FLAG_WINDOW_HIHDPI` could just be ignored because the window decorator (or whatever subsystem in charge) already rescale the window and its content according to the display scale.
This commit is contained in:
SuperUserNameMan 2024-07-22 17:09:42 +02:00 committed by GitHub
parent 1a7657ebd0
commit 19020153ca
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -636,6 +636,7 @@ void SetWindowMonitor(int monitor)
if ((monitor >= 0) && (monitor < monitorCount)) if ((monitor >= 0) && (monitor < monitorCount))
{ {
bool changingMonitor = (CORE.Window.lastAssociatedMonitorIndex != monitor); bool changingMonitor = (CORE.Window.lastAssociatedMonitorIndex != monitor);
CORE.Window.lastAssociatedMonitorIndex = monitor; CORE.Window.lastAssociatedMonitorIndex = monitor;
if ((CORE.Window.fullscreen) || IsWindowState(FLAG_BORDERLESS_WINDOWED_MODE)) if ((CORE.Window.fullscreen) || IsWindowState(FLAG_BORDERLESS_WINDOWED_MODE))
@ -656,8 +657,8 @@ void SetWindowMonitor(int monitor)
{ {
//!\ TODO FIXME This workaround might causes some unexpected issues and could be improved //!\ TODO FIXME This workaround might causes some unexpected issues and could be improved
ToggleBorderlessWindowed(); ToggleBorderlessWindowed(); // The fullscreen window is automatically moved to the monitor
ToggleBorderlessWindowed(); ToggleBorderlessWindowed(); // and is restored as windowed window on the same monitor.
} }
} }
else else
@ -1379,22 +1380,33 @@ int InitPlatform(void)
if ((CORE.Window.flags & FLAG_WINDOW_TRANSPARENT) > 0) glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); // Transparent framebuffer if ((CORE.Window.flags & FLAG_WINDOW_TRANSPARENT) > 0) glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_TRUE); // Transparent framebuffer
else glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_FALSE); // Opaque framebuffer else glfwWindowHint(GLFW_TRANSPARENT_FRAMEBUFFER, GLFW_FALSE); // Opaque framebuffer
if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0) if ((CORE.Window.flags & FLAG_WINDOW_HIGHDPI) > 0)
{ {
// When the DPI of the monitor on which the window is displayed is changed, // When the DPI of the monitor on which the window is displayed is changed,
// the hint bellow ask GLFW to resize the window accordingly to the DPI : // the hint bellow ask GLFW to resize the window accordingly to the DPI :
glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); // Only has effect on Windows and X11 glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_TRUE); // Only has effect on Windows and X11
// the hints bellow ask GLFW to resize the frameBuffer accordingly to the DPI : // TODO @SoloByte mission // The hints bellow ask GLFW to resize the frameBuffer accordingly to the DPI.
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_TRUE); // Only has effect on MacOS and Wayland // TODO Wayland test // It only has effet MacOS and Wayland.
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_FALSE); // Wayland needs it to be false
// TODO @SoloByte __APPLE__ test mission
if (glfwGetPlatform() == GLFW_PLATFORM_WAYLAND)
{
// On Wayland, `FLAG_WINDOW_HIGHDPI` must have no effect because the window and its framebuffer are
// automatically rescaled by the OS. So, instead of rewriting the pipeline to add a Wayland special case
// everywhere this flag is involved, we just disable it from here so it has no more effect afterward.
CORE.Window.flags &= ~FLAG_WINDOW_HIGHDPI;
}
} }
else else
{ {
glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_FALSE); glfwWindowHint(GLFW_SCALE_TO_MONITOR, GLFW_FALSE);
// TODO @SoloByte mission and Wayland test glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_FALSE); // Wayland needs it to be false
// TODO : GLFW default it to true, whould it be changed to false ? // TODO @SoloByte __APPLE__ test mission
// TODO : test difference MacOS and Wayland
glfwWindowHint(GLFW_SCALE_FRAMEBUFFER, GLFW_TRUE);
} }
// Mouse passthrough // Mouse passthrough