From 51d4a31e6cc4b37775b1323eaa6a8966044e8e9b Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sat, 24 Jun 2023 01:06:17 +0200 Subject: [PATCH] text renderer: fix crash when text starts with newline + tests --- .../component/ChatComponentRendererTest.kt | 20 +++++++++++++++++++ .../font/renderer/element/TextRenderInfo.kt | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/font/renderer/component/ChatComponentRendererTest.kt b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/font/renderer/component/ChatComponentRendererTest.kt index b7c5c022e..c5e3fd4b6 100644 --- a/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/font/renderer/component/ChatComponentRendererTest.kt +++ b/src/integration-test/kotlin/de/bixilon/minosoft/gui/rendering/font/renderer/component/ChatComponentRendererTest.kt @@ -444,5 +444,25 @@ class ChatComponentRendererTest { ) } + fun `first line blank`() { + val text = TextComponent("\nbcd") + + val info = render(text) + info.assert(lineIndex = 1, size = Vec2(5.0f, 22.0f), lines = listOf( + LineRenderInfo(BaseComponent(), 0.0f), + LineRenderInfo(BaseComponent(TextComponent("bcd")), 5.0f), + )) + } + + fun `first component blank`() { + val text = BaseComponent(TextComponent("\n"), TextComponent("bcd")) + + val info = render(text) + info.assert(lineIndex = 1, size = Vec2(5.0f, 22.0f), lines = listOf( + LineRenderInfo(BaseComponent(), 0.0f), + LineRenderInfo(BaseComponent(TextComponent("bcd")), 5.0f), + )) + } + // TODO: shadow, formatting (just basic, that is code point renderer's job) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/element/TextRenderInfo.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/element/TextRenderInfo.kt index c83d8aab5..039c8499b 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/element/TextRenderInfo.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/font/renderer/element/TextRenderInfo.kt @@ -30,11 +30,11 @@ class TextRenderInfo( size.x = maxOf(offset.offset.x - offset.initial.x + width, size.x) val line: LineRenderInfo - if (lineIndex == 0 && lines.isEmpty()) { + if ((lineIndex == 0 && lines.isEmpty()) || lineIndex >= lines.size) { // first char of all lines line = LineRenderInfo() lines += line - size.y = properties.lineHeight + size.y += properties.lineHeight } else { line = lines[lineIndex] }