base component: fix crash, gui: popper (wip 2)

This commit is contained in:
Bixilon 2022-02-18 13:38:46 +01:00
parent 704de95b94
commit 044cc38551
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
3 changed files with 28 additions and 4 deletions

View File

@ -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

View File

@ -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() {

View File

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