From 6f2a45861c914ffb9d40a5edd15751afd798d614 Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Mon, 20 Oct 2025 19:22:15 -0700 Subject: [PATCH] load all --- system/ui/lib/application.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/system/ui/lib/application.py b/system/ui/lib/application.py index aeeadcebb4..141027e763 100644 --- a/system/ui/lib/application.py +++ b/system/ui/lib/application.py @@ -6,6 +6,7 @@ import signal import sys import pyray as rl import threading +import json from collections.abc import Callable from collections import deque from dataclasses import dataclass @@ -345,16 +346,36 @@ class GuiApplication: def height(self): return self._height - def _load_fonts(self): - # Create a character set from our keyboard layouts + # Build a comprehensive character set for UI text rendering + # 1) Start with characters from our on-screen keyboards from openpilot.system.ui.widgets.keyboard import KEYBOARD_LAYOUTS - all_chars = set() + char_set = set() for layout in KEYBOARD_LAYOUTS.values(): - all_chars.update(key for row in layout for key in row) - all_chars = "".join(all_chars) - all_chars += "–✓×°§•" + char_set.update(key for row in layout for key in row) + + # 2) Add common UI symbols + char_set.update(list("–—…✓×°§•©®™±≤≥≠·•«»‘’‚“”„¥€£₩%½⅓⅔¼¾÷×±±ºªº·`~^¨´¸¯")) + + # 3) Add Latin-1 Supplement and Latin Extended-A (covers accents like ç, ñ, ê) + char_set.update(chr(cp) for cp in range(0x00A0, 0x0100)) + char_set.update(chr(cp) for cp in range(0x0100, 0x0180)) + + # 4) Include characters used in language display names (language picker) + try: + from importlib.resources import files as ir_files + lang_json_path = ir_files("openpilot.selfdrive.ui").joinpath("translations", "languages.json") + with as_file(lang_json_path) as fspath: + with open(fspath, encoding="utf-8") as f: + languages = json.load(f) + for display_name in languages.keys(): + char_set.update(display_name) + except Exception: + # Best-effort; continue with what we have if anything fails + pass + + all_chars = "".join(sorted(char_set)) codepoint_count = rl.ffi.new("int *", 1) codepoints = rl.load_codepoints(all_chars, codepoint_count)