diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt index c37a13504..4d3b647c4 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/TextComponentRenderer.kt @@ -48,11 +48,15 @@ object TextComponentRenderer : ChatComponentRenderer { return true } - fun pushLine() { - if (consumer != null || currentLineText.isEmpty()) { + fun pushLine(index: Int = -1) { + var pushText: String = currentLineText + if (index > 0) { + pushText = currentLineText.substring(0, index) + } + if (consumer != null || pushText.isEmpty()) { return } - renderInfo.currentLine.text += text.copy(message = currentLineText) + renderInfo.currentLine.text += text.copy(message = pushText) currentLineText = "" } @@ -124,11 +128,11 @@ object TextComponentRenderer : ChatComponentRenderer { } applyOffset() - - for (charCode in text.message.codePoints().toArray()) { + for ((index, charCode) in text.message.codePoints().toArray().withIndex()) { val char = charCode.toChar() if (char == '\n') { if (wrap()) { + pushLine(index) return true } continue @@ -157,6 +161,7 @@ object TextComponentRenderer : ChatComponentRenderer { val previousY = offset.y if (addX(width)) { + pushLine(index) 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 24e67399e..c9f8928bb 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 @@ -219,9 +219,14 @@ open class TextElement( textElement._prefMaxSize = Vec2i(offset.x, charHeight) textElement.forceSilentApply() + offset.x += fontAlignment.getOffset(size.x, line.width) - return Pair(line.text.getTextAt(textElement.renderInfo.lines.getOrNull(0)?.text?.message?.length ?: return null), offset) + val line0 = textElement.renderInfo.lines.getOrNull(0) ?: return null + val text = line.text.getTextAt(line0.text.message.length) + offset.x -= line0.width // ToDo: Not 100% correct + + return Pair(text, offset) } override fun toString(): String {