Fix insane window geometry

This commit is contained in:
Fingercomp 2023-06-08 19:54:27 +07:00
parent 09454d99ab
commit 97d0b2edeb
No known key found for this signature in database
GPG Key ID: BBC71CEE45D86E37

View File

@ -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)}")