From 97d0b2edeb67b9aca63dec3fb9ed63d1ef43b450 Mon Sep 17 00:00:00 2001 From: Fingercomp Date: Thu, 8 Jun 2023 19:54:27 +0700 Subject: [PATCH] Fix insane window geometry --- .../scala/ocelot/desktop/ui/UiHandler.scala | 47 ++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index 1c284ac..fd26944 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -2,7 +2,7 @@ package ocelot.desktop.ui import buildinfo.BuildInfo import ocelot.desktop.audio.Audio -import ocelot.desktop.geometry.{Size2D, Vector2D} +import ocelot.desktop.geometry.{Rect2D, Size2D, Vector2D} import ocelot.desktop.graphics.Graphics import ocelot.desktop.ui.event.MouseEvent import ocelot.desktop.ui.event.handlers.HoverHandler @@ -133,6 +133,44 @@ object UiHandler extends Logging { Settings.get.windowFullscreen = value } + private def formatRect(rect: Rect2D): String = { + val Rect2D(x, y, w, h) = rect + + f"$w%.0f×$h%.0f$x%+.0f$y%+.0f" + } + + private def windowGeometry: Rect2D = new Rect2D(Display.getX, Display.getY, Display.getWidth, Display.getHeight) + + private def fixInsaneInitialWindowGeometry(): Unit = { + // what I mean by insane: ocelot.desktop.ui.UiHandler$ - Created window: 0×0 (at 960, -569) + + val currentGeometry = windowGeometry + var geometry = currentGeometry + + if (currentGeometry.x < 0) { + geometry = geometry.copy(x = 0) + } + + if (currentGeometry.y < 0) { + geometry = geometry.copy(y = 0) + } + + if (currentGeometry.w < 10) { + geometry = geometry.copy(w = 800) + } + + if (currentGeometry.h < 10) { + geometry = geometry.copy(h = 600) + } + + if (geometry != currentGeometry) { + logger.warn(s"Window geometry sanity check failed: ${formatRect(currentGeometry)} is officially insane") + logger.warn(s"Resetting to ${formatRect(geometry)}") + Display.setDisplayMode(new DisplayMode(geometry.w.toInt, geometry.h.toInt)) + Display.setLocation(geometry.x.toInt, geometry.y.toInt) + } + } + def init(root: RootWidget): Unit = { this.root = root root.relayout() @@ -153,10 +191,15 @@ object UiHandler extends Logging { } Display.create() + + if (Settings.get.windowValidatePosition) { + fixInsaneInitialWindowGeometry() + } + KeyEvents.init() MouseEvents.init() - logger.info(s"Created window: ${Display.getWidth}×${Display.getHeight} (at ${Display.getX}, ${Display.getY})") + logger.info(s"Created window: ${formatRect(windowGeometry)}") logger.info(s"OpenGL vendor: ${GL11.glGetString(GL11.GL_VENDOR)}") logger.info(s"OpenGL renderer: ${GL11.glGetString(GL11.GL_RENDERER)}") logger.info(s"OpenGL version: ${GL11.glGetString(GL11.GL_VERSION)}")