diff --git a/FontTestGDX/lib/TerrarumSansBitmap.jar b/FontTestGDX/lib/TerrarumSansBitmap.jar index 9ab7e60..33ab79d 100644 Binary files a/FontTestGDX/lib/TerrarumSansBitmap.jar and b/FontTestGDX/lib/TerrarumSansBitmap.jar differ diff --git a/FontTestGDX/src/FontTestGDX.kt b/FontTestGDX/src/FontTestGDX.kt index 9df5822..b64ed72 100755 --- a/FontTestGDX/src/FontTestGDX.kt +++ b/FontTestGDX/src/FontTestGDX.kt @@ -22,7 +22,7 @@ class FontTestGDX : Game() { lateinit var camera: OrthographicCamera - private val testing = true + private val testing = false private val demotextName = if (testing) "testtext.txt" else "demotext.txt" private val outimageName = if (testing) "testing.PNG" else "demo.PNG" diff --git a/demo.PNG b/demo.PNG index a5f885d..f9a61b7 100755 Binary files a/demo.PNG and b/demo.PNG differ diff --git a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt index fc7c607..fd1e542 100755 --- a/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt +++ b/src/net/torvald/terrarumsansbitmap/gdx/GameFontBase.kt @@ -1207,13 +1207,37 @@ for c in s: } } + private fun getKerning(prevChar: CodePoint, thisChar: CodePoint): Int { + return if (prevChar in lowHeightLetters) { + return if (thisChar in kernTees) kernTee // lh - T + else if (thisChar in kernYees) kernYee // lh - Y + else 0 + } + else if (prevChar in kernTees) { + return if (thisChar in lowHeightLetters) kernTee // T - lh + else 0 + } + else if (prevChar in kernYees) { + return if (thisChar in lowHeightLetters) kernYee // Y - lh + else 0 + } + else if (prevChar in kernAyes) { + return if (thisChar in kernVees) kernAV // A - V + else 0 + } + else if (prevChar in kernVees) { + return if (thisChar in kernAyes) kernAV // V - A + else 0 + } + else 0 + } /** * posXbuffer's size is greater than the string, last element marks the width of entire string. */ private fun buildWidthAndPosBuffers(str: CodepointSequence): Pair { - val posXbuffer = IntArray(str.size + 1, { 0 }) - val posYbuffer = IntArray(str.size, { 0 }) + val posXbuffer = IntArray(str.size + 1) { 0 } + val posYbuffer = IntArray(str.size) { 0 } var nonDiacriticCounter = 0 // index of last instance of non-diacritic char @@ -1237,6 +1261,7 @@ for c in s: val thisProp = glyphProps[thisChar] ?: nullProp val lastNonDiacriticChar = str[nonDiacriticCounter] val itsProp = glyphProps[lastNonDiacriticChar] ?: nullProp + val kerning = getKerning(lastNonDiacriticChar, thisChar) //println("char: ${thisChar.charInfo()}\nproperties: $thisProp") @@ -1259,11 +1284,11 @@ for c in s: else if (!thisProp.writeOnTop) { posXbuffer[charIndex] = when (itsProp.alignWhere) { GlyphProps.ALIGN_RIGHT -> - posXbuffer[nonDiacriticCounter] + W_VAR_INIT + alignmentOffset + interchar + posXbuffer[nonDiacriticCounter] + W_VAR_INIT + alignmentOffset + interchar + kerning GlyphProps.ALIGN_CENTRE -> - posXbuffer[nonDiacriticCounter] + HALF_VAR_INIT + itsProp.width + alignmentOffset + interchar + posXbuffer[nonDiacriticCounter] + HALF_VAR_INIT + itsProp.width + alignmentOffset + interchar + kerning else -> - posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset + interchar + posXbuffer[nonDiacriticCounter] + itsProp.width + alignmentOffset + interchar + kerning } diff --git a/testing.PNG b/testing.PNG index b2f2def..c407b48 100755 Binary files a/testing.PNG and b/testing.PNG differ diff --git a/testtext.txt b/testtext.txt index cc58c2b..b1ea012 100755 --- a/testtext.txt +++ b/testtext.txt @@ -1,4 +1,8 @@ -Rotund R -CURIOUSTOꝚVALD -Curioustoꝛvald +iousTorvald +iousYorvald +iousVorvald +iousBorvald + +AVA Online +EVE Online \ No newline at end of file