Skip to content

Commit f915e46

Browse files
committed
support return lines
1 parent 3884652 commit f915e46

File tree

1 file changed

+15
-10
lines changed
  • common/src/main/kotlin/com/lambda/graphics/renderer/gui/font

1 file changed

+15
-10
lines changed

common/src/main/kotlin/com/lambda/graphics/renderer/gui/font/FontRenderer.kt

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ class FontRenderer {
4444
private val shader = Shader("renderer/font")
4545
private val pipeline = VertexPipeline(VertexMode.TRIANGLES, VertexAttrib.Group.FONT)
4646

47-
val shadowShift get() = RenderSettings.shadowShift * 5.0
48-
val baselineOffset get() = RenderSettings.baselineOffset * 2.0f - 10f
49-
val gap get() = RenderSettings.gap * 0.5f - 0.8f
50-
val scaleMultiplier: Double get() = ClickGui.settingsFontScale
47+
private val shadowShift get() = RenderSettings.shadowShift * 5.0
48+
private val baselineOffset get() = RenderSettings.baselineOffset * 2.0f - 10f
49+
private val gap get() = RenderSettings.gap * 0.5f - 0.8f
50+
private val scaleMultiplier: Double get() = ClickGui.settingsFontScale
5151

5252
/**
5353
* Builds the vertex array for rendering the provided text string at a specified position.
@@ -145,7 +145,7 @@ class FontRenderer {
145145
val emojiColor = color.setAlpha(color.a)
146146

147147
var posX = 0.0
148-
val posY = getHeight(scale) * -0.5 + baselineOffset * actualScale
148+
var posY = getHeight(scale) * -0.5 + baselineOffset * actualScale
149149

150150
fun drawGlyph(info: GlyphInfo?, color: Color, offset: Double = 0.0) {
151151
if (info == null) return
@@ -164,12 +164,17 @@ class FontRenderer {
164164
if (section.isEmpty()) return
165165
if (!parseEmoji || parsed.isEmpty() || !hasEmojis) {
166166
// Draw simple characters if no emojis are present
167-
section
168-
.mapNotNull { chars[it] }
169-
.forEach { charGlyph ->
170-
if (shadow && shadowShift > 0.0) drawGlyph(charGlyph, shadowColor, shadowShift)
171-
drawGlyph(charGlyph, color)
167+
section.forEach { char ->
168+
// Logic for control characters
169+
when (char) {
170+
'\n', '\r' -> { posX = 0.0; posY += chars.height * actualScale; return@forEach }
172171
}
172+
173+
val glyph = chars[char] ?: return@forEach
174+
175+
if (shadow && shadowShift > 0.0) drawGlyph(glyph, shadowColor, shadowShift)
176+
drawGlyph(glyph, color)
177+
}
173178
} else {
174179
// Only compute the first parsed emoji to avoid duplication
175180
// This is important in order to keep the parsed ranges valid

0 commit comments

Comments
 (0)