mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2026-01-04 18:22:39 +01:00
Fix insane window geometry
This commit is contained in:
parent
09454d99ab
commit
97d0b2edeb
@ -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)}")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user