From 1330911287451bcec4de7425bd4b2d3b9c3877ce Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 15 Oct 2021 23:04:34 +0200 Subject: [PATCH] hud: fix some text component crashes --- .../gui/rendering/font/renderer/TextRenderInfo.kt | 15 ++++++++++++++- .../gui/rendering/gui/elements/Element.kt | 5 +++-- .../rendering/gui/elements/layout/RowLayout.kt | 2 +- .../gui/elements/layout/grid/GridLayout.kt | 1 - .../rendering/gui/elements/text/TextElement.kt | 2 +- .../gui/elements/text/TextFlowElement.kt | 2 +- 6 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextRenderInfo.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextRenderInfo.kt index c0e1b8499..c6c1949ac 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextRenderInfo.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextRenderInfo.kt @@ -13,10 +13,23 @@ package de.bixilon.minosoft.gui.rendering.font.renderer +import de.bixilon.minosoft.config.StaticConfiguration +import de.bixilon.minosoft.util.logging.Log +import de.bixilon.minosoft.util.logging.LogLevels +import de.bixilon.minosoft.util.logging.LogMessageType + class TextRenderInfo( val lines: MutableList = mutableListOf(), var currentLineNumber: Int = 0, ) { val currentLine: TextLineInfo - get() = lines[currentLineNumber] + get() { + if (StaticConfiguration.DEBUG_MODE) { + if (currentLineNumber >= lines.size) { + Log.log(LogMessageType.RENDERING_GENERAL, LogLevels.WARN) { "Out of lines! Did you apply?: $lines ($currentLineNumber)" } + return TextLineInfo() + } + } + return lines[currentLineNumber] + } } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt index 85c9b2f23..e7d14e290 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/Element.kt @@ -18,6 +18,7 @@ import de.bixilon.minosoft.gui.rendering.gui.hud.HUDRenderer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIMeshCache import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.EMPTY +import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.isGreater import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.isSmaller import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.max import de.bixilon.minosoft.gui.rendering.util.vec.Vec2Util.min @@ -173,12 +174,12 @@ abstract class Element(val hudRenderer: HUDRenderer) { @Suppress("DEPRECATION") open fun silentApply(): Boolean { val maxSize = maxSize - if (previousMaxSize != maxSize && (maxSize isSmaller size || maxSize isSmaller prefMaxSize)) { + if (previousMaxSize != maxSize && (maxSize isSmaller _size || maxSize isSmaller _prefMaxSize || (maxSize isGreater previousMaxSize && _size isSmaller _prefSize))) { forceSilentApply() previousMaxSize = maxSize return true } - return true + return false } /** diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/RowLayout.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/RowLayout.kt index f60516dee..d6372416b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/RowLayout.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/RowLayout.kt @@ -167,7 +167,7 @@ open class RowLayout( } } - this.size = size + _size = size } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/grid/GridLayout.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/grid/GridLayout.kt index 5819dbb9a..b6af2da78 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/grid/GridLayout.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/layout/grid/GridLayout.kt @@ -155,7 +155,6 @@ class GridLayout(hudRenderer: HUDRenderer, val grid: Vec2i) : Element(hudRendere override fun silentApply(): Boolean { // ToDo: Check forceSilentApply() - applyOnlyChildren() return true } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt index e74d4695a..976dc65b2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt @@ -79,7 +79,7 @@ open class TextElement( this.previousMaxSize = maxSize this.cacheUpToDate = false - this.size = size + _size = size } override fun onChildChange(child: Element?) = error("A TextElement can not have a child!") diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextFlowElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextFlowElement.kt index af8040cfc..1af0db65c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextFlowElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextFlowElement.kt @@ -108,7 +108,7 @@ class TextFlowElement( this.textSize = textSize - size = Vec2i(maxSize.x, visibleLines.size * Font.TOTAL_CHAR_HEIGHT) + _size = Vec2i(maxSize.x, visibleLines.size * Font.TOTAL_CHAR_HEIGHT) background.size = size this.visibleLines = visibleLines }