From 843d1be8686a91839944ce88b1fb1a12af092eae Mon Sep 17 00:00:00 2001 From: richardclli Date: Fri, 17 Dec 2021 07:32:28 +0800 Subject: [PATCH] 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 --- radio/src/fonts/CMakeLists.txt | 6 +++++- radio/src/gui/colorlcd/lcd.cpp | 2 +- radio/src/thirdparty/libopenui | 2 +- tools/build-font-bitmap.py | 25 +++++++++++++++---------- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/radio/src/fonts/CMakeLists.txt b/radio/src/fonts/CMakeLists.txt index 4e4233e00..3cee5e29a 100644 --- a/radio/src/fonts/CMakeLists.txt +++ b/radio/src/fonts/CMakeLists.txt @@ -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}) diff --git a/radio/src/gui/colorlcd/lcd.cpp b/radio/src/gui/colorlcd/lcd.cpp index 41c706e8e..0e93f4695 100644 --- a/radio/src/gui/colorlcd/lcd.cpp +++ b/radio/src/gui/colorlcd/lcd.cpp @@ -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; diff --git a/radio/src/thirdparty/libopenui b/radio/src/thirdparty/libopenui index ad4234ad5..ea70d9fcd 160000 --- a/radio/src/thirdparty/libopenui +++ b/radio/src/thirdparty/libopenui @@ -1 +1 @@ -Subproject commit ad4234ad5d24864d59920747b26374c040031678 +Subproject commit ea70d9fcd0dad57390dda4a5845ef65db20e7021 diff --git a/tools/build-font-bitmap.py b/tools/build-font-bitmap.py index c1aaafe9e..ba051dd5f 100755 --- a/tools/build-font-bitmap.py +++ b/tools/build-font-bitmap.py @@ -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,22 +81,26 @@ 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) - # copy extra_bitmap at once - image.paste(self.extra_bitmap, (width, offset_y)) + if self.extra_bitmap: - # append width for extra_bitmap symbols - for coord in [14, 14, 12, 12, 13, 13, 13, 13, 13] + [15] * 12: - coords.append(width) - width += coord + # copy extra_bitmap at once + image.paste(self.extra_bitmap, (width, offset_y)) - # once inserted, now remove it - self.extra_bitmap = None + # append width for extra_bitmap symbols + 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, disable insert again + self.extra_bitmap_added = True # skip continue