mirror of
https://github.com/rustdesk/rustdesk.git
synced 2026-07-05 23:04:59 +03:00
fix(arm64-linux): fix CJK font rendering on flutter-elinux (#15324)
* fix(arm64-linux): fix CJK font rendering on flutter-elinux The flutter-elinux engine used for ARM64 Linux builds is compiled without --enable-fontconfig, so Flutter's text shaper cannot discover system fonts. This causes CJK characters to render as tofu boxes even when fonts such as Noto Sans CJK are installed. See flutter/flutter#139293. Fix by loading a CJK font at startup via FontLoader (bypassing fontconfig) and propagating it through two paths so all text widgets are covered: 1. MyTheme.applyFontFallback() — updates textTheme on both light and dark ThemeData so Material components receive the fallback through the theme. 2. _mergeCjkFallback() in GetMaterialApp builders — wraps child widgets in DefaultTextStyle.merge so bare Text() widgets and those with inherit:true also render CJK characters correctly. Font discovery queries fc-list for zh, ja, and ko separately, preferring fonts present in all three sets (true pan-CJK fonts such as NotoSansCJK or SourceHanSans) over Chinese-only fonts that may lack Japanese kana or Korean hangul glyphs. Falls back to a hardcoded search-path list covering Debian/Ubuntu, Fedora/RHEL, Arch Linux, and WenQuanYi font layouts. This is an app-level workaround. The engine-level fix is tracked at flutter/flutter#180235 (open as of 2026-06). Fixes #10666 Signed-off-by: Bia503 <yinwenche189@gmail.com> * Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Signed-off-by: Bia503 <yinwenche189@gmail.com> Co-authored-by: RustDesk <71636191+rustdesk@users.noreply.github.com> Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -598,6 +598,22 @@ class MyTheme {
|
||||
}
|
||||
}
|
||||
|
||||
/// Applies [fallbacks] as fontFamilyFallback to every text style in both
|
||||
/// themes. Called once at startup on ARM64 Linux after a CJK font has been
|
||||
/// loaded via FontLoader (see flutter/flutter#139293).
|
||||
static void applyFontFallback(List<String> fallbacks) {
|
||||
lightTheme = lightTheme.copyWith(
|
||||
textTheme: lightTheme.textTheme.apply(fontFamilyFallback: fallbacks),
|
||||
primaryTextTheme:
|
||||
lightTheme.primaryTextTheme.apply(fontFamilyFallback: fallbacks),
|
||||
);
|
||||
darkTheme = darkTheme.copyWith(
|
||||
textTheme: darkTheme.textTheme.apply(fontFamilyFallback: fallbacks),
|
||||
primaryTextTheme:
|
||||
darkTheme.primaryTextTheme.apply(fontFamilyFallback: fallbacks),
|
||||
);
|
||||
}
|
||||
|
||||
static ThemeMode currentThemeMode() {
|
||||
final preference = getThemeModePreference();
|
||||
if (preference == ThemeMode.system) {
|
||||
|
||||
Reference in New Issue
Block a user