From 044cc38551ce33c94e9dca050565177ef04199f0 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Fri, 18 Feb 2022 13:38:46 +0100 Subject: [PATCH] base component: fix crash, gui: popper (wip 2) --- .../bixilon/minosoft/data/text/BaseComponent.kt | 2 +- .../minosoft/gui/rendering/gui/popper/Popper.kt | 15 +++++++++++++-- .../gui/rendering/gui/popper/text/TextPopper.kt | 15 ++++++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt index 3de12f10b..3f27dd750 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt @@ -285,7 +285,7 @@ class BaseComponent : ChatComponent { var pointer = pointer for (part in parts) { val length = part.length - if (pointer < length) { + if (pointer <= length) { return part.getTextAt(pointer) } pointer -= length diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/Popper.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/Popper.kt index 950883043..523fd31f2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/Popper.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/Popper.kt @@ -25,18 +25,29 @@ import glm_.vec2.Vec2i abstract class Popper( guiRenderer: GUIRenderer, - var position: Vec2i, + position: Vec2i, ) : Element(guiRenderer), LayoutedElement { private val background = ColorElement(guiRenderer, Vec2i.EMPTY, color = ChatColors.YELLOW) open var dead = false - override val layoutOffset: Vec2i = position + override var layoutOffset: Vec2i = position + protected set + var position = position + set(value) { + if (field == value) { + return + } + field = value + forceApply() + } override fun forceRender(offset: Vec2i, consumer: GUIVertexConsumer, options: GUIVertexOptions?) { background.render(offset, consumer, options) } override fun forceSilentApply() { + layoutOffset = position background.size = size + cacheUpToDate = false } fun show() { diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/text/TextPopper.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/text/TextPopper.kt index c4e6b6008..f1ec8f51d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/text/TextPopper.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/popper/text/TextPopper.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.gui.rendering.gui.popper.text import de.bixilon.minosoft.gui.rendering.gui.GUIRenderer +import de.bixilon.minosoft.gui.rendering.gui.elements.Element import de.bixilon.minosoft.gui.rendering.gui.elements.text.TextElement import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexConsumer import de.bixilon.minosoft.gui.rendering.gui.mesh.GUIVertexOptions @@ -25,11 +26,23 @@ class TextPopper( position: Vec2i, text: Any, ) : Popper(guiRenderer, position) { - private val textElement = TextElement(guiRenderer, text, parent = this) + private val textElement = TextElement(guiRenderer, text, background = false, parent = this) + + init { + recalculateSize() + } override fun forceRender(offset: Vec2i, consumer: GUIVertexConsumer, options: GUIVertexOptions?) { super.forceRender(offset, consumer, options) textElement.render(offset, consumer, options) } + + override fun onChildChange(child: Element) { + recalculateSize() + } + + private fun recalculateSize() { + size = textElement.size + } }