mirror of
https://github.com/curioustorvald/Terrarum-sans-bitmap.git
synced 2026-06-06 05:58:30 +09:00
Compare commits
2 Commits
5fca96a861
...
f4e1db5846
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f4e1db5846 | ||
|
|
1c7471ccf3 |
@@ -143,7 +143,7 @@ CODE_RANGE = [
|
||||
list(range(0x400, 0x530)), # 7: Cyrillic
|
||||
list(range(0xFF00, 0x10000)), # 8: Halfwidth/Fullwidth
|
||||
list(range(0x2000, 0x20A0)), # 9: Uni Punct
|
||||
list(range(0x370, 0x3CF)), # 10: Greek
|
||||
list(range(0x370, 0x400)), # 10: Greek
|
||||
list(range(0xE00, 0xE60)), # 11: Thai
|
||||
list(range(0x530, 0x590)), # 12: Armenian
|
||||
list(range(0x10D0, 0x1100)), # 13: Georgian
|
||||
|
||||
BIN
demo.PNG
BIN
demo.PNG
Binary file not shown.
|
Before Width: | Height: | Size: 178 KiB After Width: | Height: | Size: 177 KiB |
@@ -36,7 +36,7 @@ How multilingual? Real multilingual!
|
||||
სწრაფი ყავისფერი მელა გადაახტა ზარმაც ძაღლს ᲘᲜᲢᲔᲚ ᲞᲔᲜᲢᲘᲣᲛᲘ ᲛᲘᲙᲠᲝᲞᲠᲝᲪᲔᲡᲝᲠᲘ
|
||||
ऋषियों को सताने वाले दुष्ट राक्षसों के राजा रावण का सर्वनाश करने वाले विष्णुवतार भगवान श्रीराम अयोध्या के महाराज दशरथ के
|
||||
Kæmi ný öxi hér, ykist þjófum nú bæði víl og ádrepa
|
||||
Ċuaiġ bé ṁórṡáċ le dlúṫspád fíoꝛḟinn trí hata mo ḋea-ṗoꝛcáin ḃig
|
||||
Scríoḃ Fergus ⁊ a ṁáṫaır dán le peann úr
|
||||
あめつちほしそら やまかはみねたに くもきりむろこけ ひといぬうへすゑ ゆわさるおふせよ えの𛀁をなれゐて
|
||||
トリナクコヱス ユメサマセ ミヨアケワタル ヒンカシヲ ソライロハエテ オキツヘニ ホフネムレヰヌ モヤノウチ
|
||||
田居に出で 菜摘むわれをぞ 君召すと 求食り追ひゆく 山城の 打酔へる子ら 藻葉干せよ え舟繋けぬ
|
||||
@@ -134,7 +134,7 @@ How multilingual? Real multilingual!
|
||||
⁃ General Punctuations
|
||||
⁃ Georgianჼ
|
||||
⁃ Georgian Extended
|
||||
⁃ Greek and Copticᴱ
|
||||
⁃ Greek and Coptic
|
||||
⁃ Greek Extended
|
||||
⁃ Halfwidth and Fullwidth Forms
|
||||
⁃ Hangul Compatibility Jamo
|
||||
@@ -161,8 +161,8 @@ How multilingual? Real multilingual!
|
||||
⁃ Tamil
|
||||
⁃ Thai
|
||||
|
||||
ᴱ No support for Coptic ᴬ Uppercase only
|
||||
ᶠⁱ No support for ligatures ჼ Mkhedruli only
|
||||
ᶠⁱ No support for ligatures
|
||||
ᴬ Uppercase only ჼ Mkhedruli only
|
||||
⁶ ¹²·¹ Up to the specified Unicode version
|
||||
|
||||
GitHub’s issue page is open! You can report any errors, or leave suggestions. You can help this font to be more versatile. (for more languages, more frameworks) Clone this repo, make changes, and make a pull request! I appreciate any and all supports.
|
||||
@@ -579,15 +579,15 @@ const EXAMPLES = [
|
||||
{ zones: 'BDFGH', wye: false, chars: '\u027A', desc: 'BDFGH' },
|
||||
{ zones: 'BG', wye: true, chars: '/', desc: 'BG(Y)' },
|
||||
{ zones: 'CD', wye: false, chars: '\u10B5', desc: 'CD' },
|
||||
{ zones: 'CDEF', wye: true, chars: '\u03A6', desc: 'CDEF(Y)' },
|
||||
{ zones: 'CDEFGH', wye: false, chars: 'a,c,e', desc: 'CDEFGH' },
|
||||
{ zones: 'CDEF', wye: true, chars: '\u03A6,v', desc: 'CDEF(Y)' },
|
||||
{ zones: 'CDEFGH', wye: false, chars: 'a,e', desc: 'CDEFGH' },
|
||||
{ zones: 'CDEFGHJK', wye: false, chars: 'g', desc: 'CDEFGHJK' },
|
||||
{ zones: 'CDEFGHK', wye: false, chars: '\u019E', desc: 'CDEFGHK' },
|
||||
{ zones: 'CDEFGH', wye: true, chars: 'A', desc: 'CDEFGH(Y)' },
|
||||
{ zones: 'CDEGH', wye: false, chars: 'c', desc: 'CDEGH' },
|
||||
{ zones: 'AB', wye: true, chars: 'Y', desc: 'AB(Y)' },
|
||||
{ zones: 'ABCD', wye: true, chars: 'V', desc: 'ABCD(Y)' },
|
||||
{ zones: 'CDEF', wye: true, chars: 'v', desc: 'CDEF(Y)' },
|
||||
{ zones: 'EFGH', wye: true, chars: '\u028C', desc: 'EFGH(Y)' },
|
||||
{ zones: 'CDEFGH', wye: true, chars: 'A', desc: 'CDEFGH(Y)' },
|
||||
];
|
||||
|
||||
function buildExamples() {
|
||||
|
||||
BIN
src/assets/ascii_variable.tga
LFS
BIN
src/assets/ascii_variable.tga
LFS
Binary file not shown.
BIN
src/assets/greek_variable.tga
LFS
BIN
src/assets/greek_variable.tga
LFS
Binary file not shown.
BIN
src/assets/unipunct_variable.tga
LFS
BIN
src/assets/unipunct_variable.tga
LFS
Binary file not shown.
81
src/net/torvald/terrarumsansbitmap/gdx/GlyphAtlas.kt
Normal file
81
src/net/torvald/terrarumsansbitmap/gdx/GlyphAtlas.kt
Normal file
@@ -0,0 +1,81 @@
|
||||
package net.torvald.terrarumsansbitmap.gdx
|
||||
|
||||
import com.badlogic.gdx.graphics.Pixmap
|
||||
|
||||
data class AtlasRegion(
|
||||
val atlasX: Int,
|
||||
val atlasY: Int,
|
||||
val width: Int,
|
||||
val height: Int,
|
||||
val offsetX: Int = 0,
|
||||
val offsetY: Int = 0
|
||||
)
|
||||
|
||||
class GlyphAtlas(val atlasWidth: Int, val atlasHeight: Int) {
|
||||
|
||||
val pixmap = Pixmap(atlasWidth, atlasHeight, Pixmap.Format.RGBA8888).also { it.blending = Pixmap.Blending.None }
|
||||
|
||||
private val regions = HashMap<Long, AtlasRegion>()
|
||||
|
||||
private var cursorX = 0
|
||||
private var cursorY = 0
|
||||
private var shelfHeight = 0
|
||||
|
||||
private fun atlasKey(sheetID: Int, cellX: Int, cellY: Int): Long =
|
||||
sheetID.toLong().shl(32) or cellX.toLong().shl(16) or cellY.toLong()
|
||||
|
||||
fun packCell(sheetID: Int, cellX: Int, cellY: Int, cellPixmap: Pixmap) {
|
||||
val w = cellPixmap.width
|
||||
val h = cellPixmap.height
|
||||
|
||||
if (cursorX + w > atlasWidth) {
|
||||
cursorX = 0
|
||||
cursorY += shelfHeight
|
||||
shelfHeight = 0
|
||||
}
|
||||
|
||||
pixmap.drawPixmap(cellPixmap, cursorX, cursorY)
|
||||
|
||||
regions[atlasKey(sheetID, cellX, cellY)] = AtlasRegion(cursorX, cursorY, w, h)
|
||||
|
||||
cursorX += w
|
||||
if (h > shelfHeight) shelfHeight = h
|
||||
}
|
||||
|
||||
fun blitSheet(sheetID: Int, sheetPixmap: Pixmap, cellW: Int, cellH: Int, cols: Int, rows: Int) {
|
||||
if (cursorX > 0) {
|
||||
cursorX = 0
|
||||
cursorY += shelfHeight
|
||||
shelfHeight = 0
|
||||
}
|
||||
|
||||
val baseY = cursorY
|
||||
|
||||
pixmap.drawPixmap(sheetPixmap, 0, baseY)
|
||||
|
||||
for (cy in 0 until rows) {
|
||||
for (cx in 0 until cols) {
|
||||
regions[atlasKey(sheetID, cx, cy)] = AtlasRegion(cx * cellW, baseY + cy * cellH, cellW, cellH)
|
||||
}
|
||||
}
|
||||
|
||||
cursorY = baseY + sheetPixmap.height
|
||||
cursorX = 0
|
||||
shelfHeight = 0
|
||||
}
|
||||
|
||||
fun getRegion(sheetID: Int, cellX: Int, cellY: Int): AtlasRegion? =
|
||||
regions[atlasKey(sheetID, cellX, cellY)]
|
||||
|
||||
fun clearRegion(region: AtlasRegion) {
|
||||
for (y in 0 until region.height) {
|
||||
for (x in 0 until region.width) {
|
||||
pixmap.drawPixel(region.atlasX + x, region.atlasY + y, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun dispose() {
|
||||
pixmap.dispose()
|
||||
}
|
||||
}
|
||||
@@ -318,7 +318,7 @@ class TerrarumSansBitmap(
|
||||
/** Props of all printable Unicode points. */
|
||||
private val glyphProps = HashMap<CodePoint, GlyphProps>()
|
||||
private val textReplaces = HashMap<CodePoint, CodePoint>()
|
||||
private val sheets: Array<PixmapRegionPack>
|
||||
private lateinit var atlas: GlyphAtlas
|
||||
|
||||
// private var charsetOverride = 0
|
||||
|
||||
@@ -326,9 +326,10 @@ class TerrarumSansBitmap(
|
||||
// private val tempFiles = ArrayList<String>()
|
||||
|
||||
init {
|
||||
val sheetsPack = ArrayList<PixmapRegionPack>()
|
||||
atlas = GlyphAtlas(4096, 4096)
|
||||
var unihanPixmap: Pixmap? = null
|
||||
|
||||
// first we create pixmap to read pixels, then make texture using pixmap
|
||||
// first we create pixmap to read pixels, then pack into atlas
|
||||
fileList.forEachIndexed { index, it ->
|
||||
val isVariable = it.endsWith("_variable.tga")
|
||||
val isXYSwapped = it.contains("xyswap", true)
|
||||
@@ -346,32 +347,6 @@ class TerrarumSansBitmap(
|
||||
else
|
||||
dbgprn("loading texture [STATIC] $it")
|
||||
|
||||
|
||||
// unpack gz if applicable
|
||||
/*if (it.endsWith(".gz")) {
|
||||
val tmpFilePath = tempDir + "/tmp_${it.dropLast(7)}.tga"
|
||||
|
||||
try {
|
||||
val gzi = GZIPInputStream(Gdx.files.classpath(fontParentDir + it).read(8192))
|
||||
val wholeFile = gzi.readBytes()
|
||||
gzi.close()
|
||||
val fos = BufferedOutputStream(FileOutputStream(tmpFilePath))
|
||||
fos.write(wholeFile)
|
||||
fos.flush()
|
||||
fos.close()
|
||||
|
||||
pixmap = Pixmap(Gdx.files.absolute(tmpFilePath))
|
||||
// tempFiles.add(tmpFilePath)
|
||||
}
|
||||
catch (e: GdxRuntimeException) {
|
||||
//e.printStackTrace()
|
||||
dbgprn("said texture not found, skipping...")
|
||||
|
||||
pixmap = Pixmap(1, 1, Pixmap.Format.RGBA8888)
|
||||
}
|
||||
//File(tmpFileName).delete()
|
||||
}
|
||||
else {*/
|
||||
try {
|
||||
pixmap = Pixmap(Gdx.files.classpath("assets/$it"))
|
||||
}
|
||||
@@ -387,7 +362,6 @@ class TerrarumSansBitmap(
|
||||
System.exit(1)
|
||||
}
|
||||
}
|
||||
//}
|
||||
|
||||
if (isVariable) buildWidthTable(pixmap, codeRange[index], if (isExtraWide) 32 else 16)
|
||||
buildWidthTableFixed()
|
||||
@@ -395,40 +369,50 @@ class TerrarumSansBitmap(
|
||||
|
||||
setupDynamicTextReplacer()
|
||||
|
||||
/*if (!noShadow) {
|
||||
makeShadowForSheet(pixmap)
|
||||
}*/
|
||||
if (index == SHEET_UNIHAN) {
|
||||
// defer wenquanyi packing to after all other sheets
|
||||
unihanPixmap = pixmap
|
||||
}
|
||||
else {
|
||||
val texRegPack = if (isExtraWide)
|
||||
PixmapRegionPack(pixmap, W_WIDEVAR_INIT, H, HGAP_VAR, 0, xySwapped = isXYSwapped)
|
||||
else if (isVariable)
|
||||
PixmapRegionPack(pixmap, W_VAR_INIT, H, HGAP_VAR, 0, xySwapped = isXYSwapped)
|
||||
else if (index == SHEET_HANGUL)
|
||||
PixmapRegionPack(pixmap, W_HANGUL_BASE, H)
|
||||
else if (index == SHEET_CUSTOM_SYM)
|
||||
PixmapRegionPack(pixmap, SIZE_CUSTOM_SYM, SIZE_CUSTOM_SYM)
|
||||
else if (index == SHEET_RUNIC)
|
||||
PixmapRegionPack(pixmap, W_LATIN_WIDE, H)
|
||||
else throw IllegalArgumentException("Unknown sheet index: $index")
|
||||
|
||||
for (cy in 0 until texRegPack.verticalCount) {
|
||||
for (cx in 0 until texRegPack.horizontalCount) {
|
||||
atlas.packCell(index, cx, cy, texRegPack.get(cx, cy))
|
||||
}
|
||||
}
|
||||
|
||||
//val texture = Texture(pixmap)
|
||||
val texRegPack = if (isExtraWide)
|
||||
PixmapRegionPack(pixmap, W_WIDEVAR_INIT, H, HGAP_VAR, 0, xySwapped = isXYSwapped)
|
||||
else if (isVariable)
|
||||
PixmapRegionPack(pixmap, W_VAR_INIT, H, HGAP_VAR, 0, xySwapped = isXYSwapped)
|
||||
else if (index == SHEET_UNIHAN)
|
||||
PixmapRegionPack(pixmap, W_UNIHAN, H_UNIHAN) // the only exception that is height is 16
|
||||
// below they all have height of 20 'H'
|
||||
else if (index == SHEET_HANGUL)
|
||||
PixmapRegionPack(pixmap, W_HANGUL_BASE, H)
|
||||
else if (index == SHEET_CUSTOM_SYM)
|
||||
PixmapRegionPack(pixmap, SIZE_CUSTOM_SYM, SIZE_CUSTOM_SYM) // TODO variable
|
||||
else if (index == SHEET_RUNIC)
|
||||
PixmapRegionPack(pixmap, W_LATIN_WIDE, H)
|
||||
else throw IllegalArgumentException("Unknown sheet index: $index")
|
||||
|
||||
//texRegPack.texture.setFilter(minFilter, magFilter)
|
||||
|
||||
sheetsPack.add(texRegPack)
|
||||
|
||||
pixmap.dispose() // you are terminated
|
||||
texRegPack.dispose()
|
||||
pixmap.dispose()
|
||||
}
|
||||
}
|
||||
|
||||
sheets = sheetsPack.toTypedArray()
|
||||
// pack wenquanyi (SHEET_UNIHAN) last as a contiguous blit
|
||||
unihanPixmap?.let {
|
||||
val cols = it.width / W_UNIHAN
|
||||
val rows = it.height / H_UNIHAN
|
||||
atlas.blitSheet(SHEET_UNIHAN, it, W_UNIHAN, H_UNIHAN, cols, rows)
|
||||
it.dispose()
|
||||
}
|
||||
|
||||
// make sure null char is actually null (draws nothing and has zero width)
|
||||
sheets[SHEET_ASCII_VARW].regions[0].setColor(0)
|
||||
sheets[SHEET_ASCII_VARW].regions[0].fill()
|
||||
atlas.getRegion(SHEET_ASCII_VARW, 0, 0)?.let { atlas.clearRegion(it) }
|
||||
glyphProps[0] = GlyphProps(0)
|
||||
|
||||
if (debug) {
|
||||
com.badlogic.gdx.graphics.PixmapIO.writePNG(Gdx.files.absolute("$tempDir/glyph_atlas_dump.png"), atlas.pixmap)
|
||||
dbgprn("atlas dumped to $tempDir/glyph_atlas_dump.png")
|
||||
}
|
||||
}
|
||||
|
||||
override fun getLineHeight(): Float = LINE_HEIGHT.toFloat() * scale
|
||||
@@ -599,39 +583,31 @@ class TerrarumSansBitmap(
|
||||
|
||||
val (indexCho, indexJung, indexJong) = indices
|
||||
val (choRow, jungRow, jongRow) = rows
|
||||
val hangulSheet = sheets[SHEET_HANGUL]
|
||||
|
||||
|
||||
|
||||
val choTex = hangulSheet.get(indexCho, choRow)
|
||||
val jungTex = hangulSheet.get(indexJung, jungRow)
|
||||
val jongTex = hangulSheet.get(indexJong, jongRow)
|
||||
|
||||
linotypePixmap.drawPixmap(choTex, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
linotypePixmap.drawPixmap(jungTex, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
linotypePixmap.drawPixmap(jongTex, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
atlas.getRegion(SHEET_HANGUL, indexCho, choRow)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
}
|
||||
atlas.getRegion(SHEET_HANGUL, indexJung, jungRow)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
}
|
||||
atlas.getRegion(SHEET_HANGUL, indexJong, jongRow)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
}
|
||||
|
||||
|
||||
index += hangulLength - 1
|
||||
|
||||
}
|
||||
else {
|
||||
try {
|
||||
val posY = posmap.y[index].flipY() +
|
||||
if (sheetID == SHEET_UNIHAN) // evil exceptions
|
||||
offsetUnihan
|
||||
else if (sheetID == SHEET_CUSTOM_SYM)
|
||||
offsetCustomSym
|
||||
else 0
|
||||
val posY = posmap.y[index].flipY() +
|
||||
if (sheetID == SHEET_UNIHAN) // evil exceptions
|
||||
offsetUnihan
|
||||
else if (sheetID == SHEET_CUSTOM_SYM)
|
||||
offsetCustomSym
|
||||
else 0
|
||||
|
||||
val posX = posmap.x[index]
|
||||
val texture = sheets[sheetID].get(sheetX, sheetY)
|
||||
|
||||
linotypePixmap.drawPixmap(texture, posX + linotypePaddingX, posY + linotypePaddingY, renderCol)
|
||||
|
||||
|
||||
}
|
||||
catch (noSuchGlyph: ArrayIndexOutOfBoundsException) {
|
||||
val posX = posmap.x[index]
|
||||
atlas.getRegion(sheetID, sheetX, sheetY)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posX + linotypePaddingX, posY + linotypePaddingY, renderCol)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -715,39 +691,31 @@ class TerrarumSansBitmap(
|
||||
|
||||
val (indexCho, indexJung, indexJong) = indices
|
||||
val (choRow, jungRow, jongRow) = rows
|
||||
val hangulSheet = sheets[SHEET_HANGUL]
|
||||
|
||||
|
||||
|
||||
val choTex = hangulSheet.get(indexCho, choRow)
|
||||
val jungTex = hangulSheet.get(indexJung, jungRow)
|
||||
val jongTex = hangulSheet.get(indexJong, jongRow)
|
||||
|
||||
linotypePixmap.drawPixmap(choTex, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
linotypePixmap.drawPixmap(jungTex, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
linotypePixmap.drawPixmap(jongTex, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
atlas.getRegion(SHEET_HANGUL, indexCho, choRow)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
}
|
||||
atlas.getRegion(SHEET_HANGUL, indexJung, jungRow)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
}
|
||||
atlas.getRegion(SHEET_HANGUL, indexJong, jongRow)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posmap.x[index] + linotypePaddingX, linotypePaddingY, renderCol)
|
||||
}
|
||||
|
||||
|
||||
index += hangulLength - 1
|
||||
|
||||
}
|
||||
else {
|
||||
try {
|
||||
val posY = posmap.y[index].flipY() +
|
||||
if (sheetID == SHEET_UNIHAN) // evil exceptions
|
||||
offsetUnihan
|
||||
else if (sheetID == SHEET_CUSTOM_SYM)
|
||||
offsetCustomSym
|
||||
else 0
|
||||
val posY = posmap.y[index].flipY() +
|
||||
if (sheetID == SHEET_UNIHAN) // evil exceptions
|
||||
offsetUnihan
|
||||
else if (sheetID == SHEET_CUSTOM_SYM)
|
||||
offsetCustomSym
|
||||
else 0
|
||||
|
||||
val posX = posmap.x[index]
|
||||
val texture = sheets[sheetID].get(sheetX, sheetY)
|
||||
|
||||
linotypePixmap.drawPixmap(texture, posX + linotypePaddingX, posY + linotypePaddingY, renderCol)
|
||||
|
||||
|
||||
}
|
||||
catch (noSuchGlyph: ArrayIndexOutOfBoundsException) {
|
||||
val posX = posmap.x[index]
|
||||
atlas.getRegion(sheetID, sheetX, sheetY)?.let {
|
||||
linotypePixmap.drawFromAtlas(atlas.pixmap, it, posX + linotypePaddingX, posY + linotypePaddingY, renderCol)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -826,7 +794,7 @@ class TerrarumSansBitmap(
|
||||
override fun dispose() {
|
||||
super.dispose()
|
||||
textCache.values.forEach { it.dispose() }
|
||||
sheets.forEach { it.dispose() }
|
||||
atlas.dispose()
|
||||
}
|
||||
|
||||
fun getSheetType(c: CodePoint): Int {
|
||||
@@ -2163,6 +2131,16 @@ class TerrarumSansBitmap(
|
||||
}
|
||||
}
|
||||
|
||||
private fun Pixmap.drawFromAtlas(atlas: Pixmap, region: AtlasRegion, xPos: Int, yPos: Int, col: Int) {
|
||||
for (y in 0 until region.height) {
|
||||
for (x in 0 until region.width) {
|
||||
val pixel = atlas.getPixel(region.atlasX + x, region.atlasY + y)
|
||||
val newPixel = pixel colorTimes col
|
||||
this.drawPixel(xPos + x + region.offsetX, yPos + y + region.offsetY, newPixel)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun Color.toRGBA8888() =
|
||||
(this.r * 255f).toInt().shl(24) or
|
||||
(this.g * 255f).toInt().shl(16) or
|
||||
@@ -2697,7 +2675,7 @@ class TerrarumSansBitmap(
|
||||
0x400..0x52F, // SHEET_CYRILIC_VARW
|
||||
0xFF00..0xFFFF, // SHEET_HALFWIDTH_FULLWIDTH_VARW
|
||||
0x2000..0x209F, // SHEET_UNI_PUNCT_VARW
|
||||
0x370..0x3CE, // SHEET_GREEK_VARW
|
||||
0x370..0x3FF, // SHEET_GREEK_VARW
|
||||
0xE00..0xE5F, // SHEET_THAI_VARW
|
||||
0x530..0x58F, // SHEET_HAYEREN_VARW
|
||||
0x10D0..0x10FF, // SHEET_KARTULI_VARW
|
||||
|
||||
BIN
work_files/ascii_variable.psd
LFS
BIN
work_files/ascii_variable.psd
LFS
Binary file not shown.
BIN
work_files/cyrilic_variable.psd
LFS
BIN
work_files/cyrilic_variable.psd
LFS
Binary file not shown.
BIN
work_files/greek_variable.psd
LFS
BIN
work_files/greek_variable.psd
LFS
Binary file not shown.
BIN
work_files/maths1_extrawide_variable.kra
LFS
Normal file
BIN
work_files/maths1_extrawide_variable.kra
LFS
Normal file
Binary file not shown.
BIN
work_files/unipunct_variable.psd
LFS
BIN
work_files/unipunct_variable.psd
LFS
Binary file not shown.
Reference in New Issue
Block a user