Skip to content

Commit de2490c

Browse files
committed
Fix: font renderer width issue
1 parent 081b677 commit de2490c

File tree

1 file changed

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

1 file changed

+13
-10
lines changed

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ object FontRenderer : AbstractGUIRenderer(VertexAttrib.Group.FONT, shader("font/
4141
private val chars get() = RenderSettings.textFont
4242
private val emojis get() = RenderSettings.emojiFont
4343

44-
private val shadowShift get() = RenderSettings.shadowShift * 5.0
44+
private val shadowShift get() = RenderSettings.shadowShift * 10.0
4545
private val baselineOffset get() = RenderSettings.baselineOffset * 2.0f - 10f
4646
private val gap get() = RenderSettings.gap * 0.5f - 0.8f
4747

@@ -65,7 +65,7 @@ object FontRenderer : AbstractGUIRenderer(VertexAttrib.Group.FONT, shader("font/
6565
) = render {
6666
shader["u_FontTexture"] = 0
6767
shader["u_EmojiTexture"] = 1
68-
shader["u_SDFMin"] = 0.3
68+
shader["u_SDFMin"] = 0.4
6969
shader["u_SDFMax"] = 1.0
7070

7171
bind(chars, emojis)
@@ -83,7 +83,7 @@ object FontRenderer : AbstractGUIRenderer(VertexAttrib.Group.FONT, shader("font/
8383
) = render {
8484
shader["u_FontTexture"] = 0
8585
shader["u_EmojiTexture"] = 1
86-
shader["u_SDFMin"] = 0.3
86+
shader["u_SDFMin"] = 0.4
8787
shader["u_SDFMax"] = 1.0
8888

8989
bind(chars, emojis)
@@ -143,10 +143,14 @@ object FontRenderer : AbstractGUIRenderer(VertexAttrib.Group.FONT, shader("font/
143143
parseEmoji: Boolean = LambdaMoji.isEnabled,
144144
): Double {
145145
var width = 0.0
146-
processText(text, scale = scale, parseEmoji = parseEmoji) {
147-
char, _, _, _, isShadow -> width += char.width * isShadow.toInt()
146+
var gaps = -1
147+
148+
processText(text, scale = scale, parseEmoji = parseEmoji) { char, _, _, _, isShadow ->
149+
if (isShadow) return@processText
150+
width += char.width; gaps++
148151
}
149-
return width * getScaleFactor(scale)
152+
153+
return (width + gaps.coerceAtLeast(0) * gap) * getScaleFactor(scale)
150154
}
151155

152156
/**
@@ -184,12 +188,11 @@ object FontRenderer : AbstractGUIRenderer(VertexAttrib.Group.FONT, shader("font/
184188
var posX = 0.0
185189
var posY = getHeight(scale) * -0.5 + baselineOffset * actualScale
186190

187-
fun drawGlyph(info: GlyphInfo?, color: Color, offset: Double = 0.0) {
191+
fun drawGlyph(info: GlyphInfo?, color: Color, isShadow: Boolean = false) {
188192
if (info == null) return
189-
val isShadow = offset != 0.0
190193

191194
val scaledSize = info.size * actualScale
192-
val pos1 = Vec2d(posX, posY) + offset * actualScale
195+
val pos1 = Vec2d(posX, posY) + shadowShift * actualScale * isShadow.toInt()
193196
val pos2 = pos1 + scaledSize
194197

195198
block(info, pos1, pos2, color, isShadow)
@@ -210,7 +213,7 @@ object FontRenderer : AbstractGUIRenderer(VertexAttrib.Group.FONT, shader("font/
210213

211214
val glyph = chars[char] ?: return@forEach
212215

213-
if (shadow && shadowShift > 0.0) drawGlyph(glyph, shadowColor, shadowShift)
216+
if (shadow) drawGlyph(glyph, shadowColor, true)
214217
drawGlyph(glyph, color)
215218
}
216219
} else {

0 commit comments

Comments
 (0)