mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Allow toggling fullscreen without restart and add keybind (#14714)
This commit is contained in:
parent
981d67324b
commit
833bb542fc
14 changed files with 120 additions and 15 deletions
|
@ -463,13 +463,7 @@ bool CIrrDeviceSDL::createWindowWithContext()
|
|||
{
|
||||
u32 SDL_Flags = 0;
|
||||
|
||||
if (CreationParams.Fullscreen) {
|
||||
#ifdef _IRR_EMSCRIPTEN_PLATFORM_
|
||||
SDL_Flags |= SDL_WINDOW_FULLSCREEN;
|
||||
#else
|
||||
SDL_Flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
#endif
|
||||
}
|
||||
SDL_Flags |= getFullscreenFlag(CreationParams.Fullscreen);
|
||||
if (Resizable)
|
||||
SDL_Flags |= SDL_WINDOW_RESIZABLE;
|
||||
if (CreationParams.WindowMaximized)
|
||||
|
@ -889,6 +883,14 @@ bool CIrrDeviceSDL::run()
|
|||
IsInBackground = false;
|
||||
break;
|
||||
|
||||
case SDL_RENDER_TARGETS_RESET:
|
||||
os::Printer::log("Received SDL_RENDER_TARGETS_RESET. Rendering is probably broken.", ELL_ERROR);
|
||||
break;
|
||||
|
||||
case SDL_RENDER_DEVICE_RESET:
|
||||
os::Printer::log("Received SDL_RENDER_DEVICE_RESET. Rendering is probably broken.", ELL_ERROR);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // end switch
|
||||
|
@ -1157,14 +1159,37 @@ bool CIrrDeviceSDL::isWindowMaximized() const
|
|||
|
||||
bool CIrrDeviceSDL::isFullscreen() const
|
||||
{
|
||||
#ifdef _IRR_EMSCRIPTEN_PLATFORM_
|
||||
return SDL_GetWindowFlags(0) == SDL_WINDOW_FULLSCREEN;
|
||||
#else
|
||||
if (!Window)
|
||||
return false;
|
||||
u32 flags = SDL_GetWindowFlags(Window);
|
||||
return (flags & SDL_WINDOW_FULLSCREEN) != 0 ||
|
||||
(flags & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0;
|
||||
}
|
||||
|
||||
return CIrrDeviceStub::isFullscreen();
|
||||
u32 CIrrDeviceSDL::getFullscreenFlag(bool fullscreen)
|
||||
{
|
||||
if (!fullscreen)
|
||||
return 0;
|
||||
#ifdef _IRR_EMSCRIPTEN_PLATFORM_
|
||||
return SDL_WINDOW_FULLSCREEN;
|
||||
#else
|
||||
return SDL_WINDOW_FULLSCREEN_DESKTOP;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CIrrDeviceSDL::setFullscreen(bool fullscreen)
|
||||
{
|
||||
if (!Window)
|
||||
return false;
|
||||
// The SDL wiki says that this may trigger SDL_RENDER_TARGETS_RESET, but
|
||||
// looking at the SDL source, this only happens with D3D, so it's not
|
||||
// relevant to us.
|
||||
bool success = SDL_SetWindowFullscreen(Window, getFullscreenFlag(fullscreen)) == 0;
|
||||
if (!success)
|
||||
os::Printer::log("SDL_SetWindowFullscreen failed", SDL_GetError(), ELL_ERROR);
|
||||
return success;
|
||||
}
|
||||
|
||||
bool CIrrDeviceSDL::isWindowVisible() const
|
||||
{
|
||||
return !IsInBackground;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue