From 3e3e20e5d4890b384237b0372733a8b0c2113411 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 26 Feb 2026 11:19:21 +0900 Subject: [PATCH] fix: stack-down diacritic with nudge-Y values for both Kotlin and OTF --- OTFbuild/calligra_font_tests.odt | Bin 14691 -> 14708 bytes OTFbuild/font_builder.py | 8 +++++++- .../gdx/TerrarumSansBitmap.kt | 6 +++--- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/OTFbuild/calligra_font_tests.odt b/OTFbuild/calligra_font_tests.odt index 687354a7abd03b665ebf94cd6636f96791c0beea..bc904ae0ad26fe84a48795f35bdc1d5dbc4fd950 100644 GIT binary patch delta 7815 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 R2v(fH!9xSx$@L%Ne*ygB0gV6v delta 7818 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 He*ymoY9h= 0: + y_offset = g.props.nudge_y * SCALE + else: + y_offset = -g.props.nudge_y * SCALE contours = trace_bitmap(g.bitmap, g.props.width) diff --git a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt index b6bd8af..440684c 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/TerrarumSansBitmap.kt @@ -1250,7 +1250,7 @@ class TerrarumSansBitmap( // set Y pos according to diacritics position when (thisProp.stackWhere) { GlyphProps.STACK_DOWN -> { - posYbuffer[charIndex] = -thisProp.nudgeY + (H_DIACRITICS * stackDownwardCounter + -thisProp.nudgeY) * flipY.toSign() + posYbuffer[charIndex] = (-thisProp.nudgeY + H_DIACRITICS * stackDownwardCounter) * flipY.toSign() stackDownwardCounter++ } GlyphProps.STACK_UP -> { @@ -1272,11 +1272,11 @@ class TerrarumSansBitmap( // dbgprn("lastNonDiacriticChar: ${lastNonDiacriticChar.charInfo()}; stack counter: $stackUpwardCounter") } GlyphProps.STACK_UP_N_DOWN -> { - posYbuffer[charIndex] = -thisProp.nudgeY + (H_DIACRITICS * stackDownwardCounter + -thisProp.nudgeY) * flipY.toSign() + posYbuffer[charIndex] = (-thisProp.nudgeY + H_DIACRITICS * stackDownwardCounter) * flipY.toSign() stackDownwardCounter++ - posYbuffer[charIndex] = -thisProp.nudgeY + (-H_DIACRITICS * stackUpwardCounter + -thisProp.nudgeY) * flipY.toSign() + posYbuffer[charIndex] = (-thisProp.nudgeY + -H_DIACRITICS * stackUpwardCounter) * flipY.toSign() // shift down on lowercase if applicable if (getSheetType(thisChar) in autoShiftDownOnLowercase && lastNonDiacriticChar.isLowHeight()) {