diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt index be894d950..5c026244f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/RenderWindow.kt @@ -282,6 +282,16 @@ class RenderWindow( sendDebugMessage("Pausing outgoing packets: ${it.format()}") connection.network.pauseSending(it) } + + inputHandler.registerKeyCallback("minosoft:toggle_fullscreen".toResourceLocation(), + KeyBinding( + mapOf( + KeyAction.PRESS to setOf(KeyCodes.KEY_F11), + ), + ignoreConsumer = true, + )) { + window.fullscreen = !window.fullscreen + } } fun startLoop() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/BaseWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/BaseWindow.kt index 4ad388835..df9f9d27f 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/BaseWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/BaseWindow.kt @@ -34,6 +34,7 @@ interface BaseWindow { var visible: Boolean var resizable: Boolean + var fullscreen: Boolean var swapInterval: Int diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/GLFWWindow.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/GLFWWindow.kt index cb9808009..e424dc2a3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/GLFWWindow.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/system/window/GLFWWindow.kt @@ -104,6 +104,22 @@ class GLFWWindow( field = value } + override var fullscreen: Boolean = false + set(value) { + if (field == value) { + return + } + val monitor = glfwGetPrimaryMonitor() + val mode = glfwGetVideoMode(monitor) ?: return + if (value) { + glfwSetWindowMonitor(window, monitor, 15, 15, mode.width(), mode.height(), mode.refreshRate()) + } else { + glfwSetWindowMonitor(window, 0, (mode.width() - DEFAULT_WINDOW_SIZE.x) / 2, (mode.height() - DEFAULT_WINDOW_SIZE.y) / 2, DEFAULT_WINDOW_SIZE.x, DEFAULT_WINDOW_SIZE.y, GLFW_DONT_CARE) + } + + field = value + } + override var swapInterval: Int = -1 set(value) { if (field == value) {