1
0
Fork 0
mirror of https://github.com/EdgeTX/edgetx.git synced 2025-07-24 16:55:15 +03:00

Fix wrong Chinese characters being displayed (#1257)

* Fixed wrong index calculation.

* Fixed font generation, indexing will goes wrong when no extra chars bitmap is present.

* Image width exceeded 16384 will cause trouble in CJK.

* Include libopenui update

Co-authored-by: Peter Feerick <peter.feerick@gmail.com>
This commit is contained in:
richardclli 2021-12-17 07:32:28 +08:00 committed by GitHub
parent 85bd9d16ea
commit 843d1be868
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 13 deletions

View file

@ -32,7 +32,11 @@ add_truetype_font_target(17 17 ${subset} none "${FONT_ARGS}")
add_truetype_font_target(17en 17 en none "${FONT_ARGS}")
add_truetype_font_target(bold17 17 ${subset} bold "${FONT_ARGS}")
add_truetype_font_target(24 24 ${subset} none "${FONT_ARGS}")
add_truetype_font_target(32 32 ${subset} bold "${FONT_ARGS}")
if( (${subset} STREQUAL "cn") OR (${subset} STREQUAL "tw"))
add_truetype_font_target(32 30 ${subset} bold "${FONT_ARGS}")
else()
add_truetype_font_target(32 32 ${subset} bold "${FONT_ARGS}")
endif()
add_truetype_font_target(64 64 en bold "${FONT_ARGS}")
add_custom_target(truetype_fonts DEPENDS ${truetype_fonts_targets})

View file

@ -62,7 +62,7 @@ int getTextWidth(const char * s, int len, LcdFlags flags)
else if (c >= 0xFE) { // CJK marker
s++;
c = uint8_t(*s) + ((c & 0x01) << 8) - 1;
if (c >= 0x101)
if (c >= 0x100)
c -= 1;
c += CJK_FIRST_LETTER_INDEX;
result += getFontPatternWidth(specs, c) + 1;

@ -1 +1 @@
Subproject commit ad4234ad5d24864d59920747b26374c040031678
Subproject commit ea70d9fcd0dad57390dda4a5845ef65db20e7021

View file

@ -18,6 +18,7 @@ class FontBitmap:
self.background = background
self.font = self.load_font(font_name)
self.extra_bitmap = self.load_extra_bitmap()
self.extra_bitmap_added = False
self.extra_bitmap_width = EXTRA_BITMAP_MAX_WIDTH
if self.extra_bitmap is not None:
self.extra_bitmap_width = self.extra_bitmap.width
@ -80,12 +81,13 @@ class FontBitmap:
width = 0
for c in self.chars:
if c in extra_chars:
if self.extra_bitmap:
if not self.extra_bitmap_added:
# append same width for non-existing characters
for i in range(128 - 32 - len(standard_chars)):
coords.append(width)
if self.extra_bitmap:
# copy extra_bitmap at once
image.paste(self.extra_bitmap, (width, offset_y))
@ -93,9 +95,12 @@ class FontBitmap:
for coord in [14, 14, 12, 12, 13, 13, 13, 13, 13] + [15] * 12:
coords.append(width)
width += coord
else:
for coord in range(21):
coords.append(width)
# once inserted, now remove it
self.extra_bitmap = None
# once inserted, disable insert again
self.extra_bitmap_added = True
# skip
continue