mirror of
https://github.com/EdgeTX/edgetx.git
synced 2025-07-25 17:25:10 +03:00
Use the same font all the way for a specific language
This commit is contained in:
parent
3f64afaa5c
commit
aeb297c800
4 changed files with 30 additions and 24 deletions
|
@ -34,14 +34,12 @@ macro(add_truetype_font_target name size subset effect args)
|
||||||
set(target font_${name})
|
set(target font_${name})
|
||||||
if(${effect} STREQUAL "bold")
|
if(${effect} STREQUAL "bold")
|
||||||
set(font ${FONT_BOLD})
|
set(font ${FONT_BOLD})
|
||||||
set(cjk_font ${CJK_FONT_BOLD})
|
|
||||||
else()
|
else()
|
||||||
set(font ${FONT})
|
set(font ${FONT})
|
||||||
set(cjk_font ${CJK_FONT})
|
|
||||||
endif()
|
endif()
|
||||||
add_custom_command(
|
add_custom_command(
|
||||||
OUTPUT ${target}.png ${target}.specs ${target}.lbm
|
OUTPUT ${target}.png ${target}.specs ${target}.lbm
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${TOOLS_DIR}/build-font-bitmap.py --subset ${subset} --size ${size} --font ${font} --cjk-font ${cjk_font} --output ${target}
|
COMMAND ${PYTHON_EXECUTABLE} ${TOOLS_DIR}/build-font-bitmap.py --subset ${subset} --size ${size} --font ${font} --output ${target}
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${LIBOPENUI_TOOLS_DIR}/encode-bitmap.py --format 8bits --rle --size-format 2 ${args} ${target}.png ${target}.lbm
|
COMMAND ${PYTHON_EXECUTABLE} ${LIBOPENUI_TOOLS_DIR}/encode-bitmap.py --format 8bits --rle --size-format 2 ${args} ${target}.png ${target}.lbm
|
||||||
DEPENDS ${TOOLS_DIR}/build-font-bitmap.py ${TOOLS_DIR}/charset.py ${LIBOPENUI_TOOLS_DIR}/encode-bitmap.py ${RADIO_SRC_DIR}/translations/cn.h.txt ${RADIO_SRC_DIR}/fonts/extra_${size}px.png
|
DEPENDS ${TOOLS_DIR}/build-font-bitmap.py ${TOOLS_DIR}/charset.py ${LIBOPENUI_TOOLS_DIR}/encode-bitmap.py ${RADIO_SRC_DIR}/translations/cn.h.txt ${RADIO_SRC_DIR}/fonts/extra_${size}px.png
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,16 +1,23 @@
|
||||||
set(FONT "Roboto/Roboto-Regular")
|
|
||||||
set(FONT_BOLD "Roboto/Roboto-Bold")
|
|
||||||
set(CJK_FONT "Noto/NotoSansCJKsc-Regular")
|
|
||||||
set(CJK_FONT_BOLD "Noto/NotoSansCJKsc-Bold")
|
|
||||||
|
|
||||||
#set(FONT "Kanit/Kanit-Regular")
|
|
||||||
#set(FONT_BOLD "Kanit/Kanit-Bold")
|
|
||||||
|
|
||||||
#set(FONT "Ubuntu/Ubuntu-Regular")
|
|
||||||
#set(FONT_BOLD "Ubuntu/Ubuntu-Bold")
|
|
||||||
|
|
||||||
string(TOLOWER ${TRANSLATIONS} subset)
|
string(TOLOWER ${TRANSLATIONS} subset)
|
||||||
|
|
||||||
|
if( (${subset} STREQUAL "cn") OR (${subset} STREQUAL "tw"))
|
||||||
|
# Use this font for CJK languages
|
||||||
|
set(FONT "Noto/NotoSansCJKsc-Regular")
|
||||||
|
set(FONT_BOLD "Noto/NotoSansCJKsc-Bold")
|
||||||
|
set(FONT_OFFSET -3)
|
||||||
|
else()
|
||||||
|
# Use this font for non-CJK languages
|
||||||
|
set(FONT "Roboto/Roboto-Regular")
|
||||||
|
set(FONT_BOLD "Roboto/Roboto-Bold")
|
||||||
|
set(FONT_OFFSET 0)
|
||||||
|
|
||||||
|
#set(FONT "Kanit/Kanit-Regular")
|
||||||
|
#set(FONT_BOLD "Kanit/Kanit-Bold")
|
||||||
|
|
||||||
|
#set(FONT "Ubuntu/Ubuntu-Regular")
|
||||||
|
#set(FONT_BOLD "Ubuntu/Ubuntu-Bold")
|
||||||
|
endif()
|
||||||
|
|
||||||
if(PCB STREQUAL X10)
|
if(PCB STREQUAL X10)
|
||||||
set(FONT_ARGS ${FONT_ARGS} --reverse)
|
set(FONT_ARGS ${FONT_ARGS} --reverse)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -5,18 +5,17 @@ import argparse
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
from charset import get_chars, special_chars, extra_chars, standard_chars
|
from charset import get_chars, special_chars, extra_chars, standard_chars, is_cjk_char
|
||||||
|
|
||||||
|
|
||||||
class FontBitmap:
|
class FontBitmap:
|
||||||
def __init__(self, language, font_size, font_name, cjk_font_name, foreground, background):
|
def __init__(self, language, font_size, font_name, foreground, background):
|
||||||
self.language = language
|
self.language = language
|
||||||
self.chars = get_chars(language)
|
self.chars = get_chars(language)
|
||||||
self.font_size = font_size
|
self.font_size = font_size
|
||||||
self.foreground = foreground
|
self.foreground = foreground
|
||||||
self.background = background
|
self.background = background
|
||||||
self.font = self.load_font(font_name)
|
self.font = self.load_font(font_name)
|
||||||
self.cjk_font = self.load_font(cjk_font_name)
|
|
||||||
self.extra_bitmap = self.load_extra_bitmap()
|
self.extra_bitmap = self.load_extra_bitmap()
|
||||||
|
|
||||||
def load_extra_bitmap(self):
|
def load_extra_bitmap(self):
|
||||||
|
@ -77,7 +76,8 @@ class FontBitmap:
|
||||||
bottom -= 1
|
bottom -= 1
|
||||||
return left, top, right, bottom
|
return left, top, right, bottom
|
||||||
|
|
||||||
def draw_char(self, image, x, c, font, offset_y=0):
|
def draw_char(self, image, x, c, offset_y=0):
|
||||||
|
font=self.font
|
||||||
size = font.font.getsize(c)
|
size = font.font.getsize(c)
|
||||||
width = size[0][0]
|
width = size[0][0]
|
||||||
offset_x = size[1][0]
|
offset_x = size[1][0]
|
||||||
|
@ -106,10 +106,10 @@ class FontBitmap:
|
||||||
width += coord
|
width += coord
|
||||||
self.extra_bitmap = None
|
self.extra_bitmap = None
|
||||||
continue
|
continue
|
||||||
elif c in special_chars[self.language]:
|
elif is_cjk_char(c):
|
||||||
w = self.draw_char(image, width, c, self.cjk_font, -3)
|
w = self.draw_char(image, width, c, -3)
|
||||||
else:
|
else:
|
||||||
w = self.draw_char(image, width, c, self.font)
|
w = self.draw_char(image, width, c)
|
||||||
|
|
||||||
coords.append(width)
|
coords.append(width)
|
||||||
width += w
|
width += w
|
||||||
|
@ -139,10 +139,9 @@ def main():
|
||||||
parser.add_argument('--subset', help="Subset")
|
parser.add_argument('--subset', help="Subset")
|
||||||
parser.add_argument('--size', type=int, help="Font size")
|
parser.add_argument('--size', type=int, help="Font size")
|
||||||
parser.add_argument('--font', help="Font name")
|
parser.add_argument('--font', help="Font name")
|
||||||
parser.add_argument('--cjk-font', help="CJK font name")
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
font = FontBitmap(args.subset, args.size, args.font, args.cjk_font, (0, 0, 0), (255, 255, 255))
|
font = FontBitmap(args.subset, args.size, args.font, (0, 0, 0), (255, 255, 255))
|
||||||
font.generate(args.output)
|
font.generate(args.output)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@ standard_chars = """ !"#$%&'()*+,-./0123456789:;<=>?°ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||||
|
|
||||||
extra_chars = "".join([chr(0x10000+i) for i in range(21)])
|
extra_chars = "".join([chr(0x10000+i) for i in range(21)])
|
||||||
|
|
||||||
|
def is_cjk_char(c):
|
||||||
|
return 0x4E00 <= ord(c) <= 0x9FFF
|
||||||
|
|
||||||
def cjk_chars(lang):
|
def cjk_chars(lang):
|
||||||
charset = set()
|
charset = set()
|
||||||
|
@ -16,7 +18,7 @@ def cjk_chars(lang):
|
||||||
with open(os.path.join(tools_path, "../radio/src/translations/%s.h.txt" % lang), encoding='utf-8') as f:
|
with open(os.path.join(tools_path, "../radio/src/translations/%s.h.txt" % lang), encoding='utf-8') as f:
|
||||||
data = f.read()
|
data = f.read()
|
||||||
for c in data:
|
for c in data:
|
||||||
if 0x4E00 <= ord(c) <= 0x9FFF:
|
if is_cjk_char(c):
|
||||||
charset.add(c)
|
charset.add(c)
|
||||||
# print(ord(c))
|
# print(ord(c))
|
||||||
result = list(charset)
|
result = list(charset)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue