pull/36410/head
Shane Smiskol 5 days ago
parent aef9f0f431
commit 6f2a45861c
  1. 33
      system/ui/lib/application.py

@ -6,6 +6,7 @@ import signal
import sys import sys
import pyray as rl import pyray as rl
import threading import threading
import json
from collections.abc import Callable from collections.abc import Callable
from collections import deque from collections import deque
from dataclasses import dataclass from dataclasses import dataclass
@ -345,16 +346,36 @@ class GuiApplication:
def height(self): def height(self):
return self._height return self._height
def _load_fonts(self): 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 from openpilot.system.ui.widgets.keyboard import KEYBOARD_LAYOUTS
all_chars = set() char_set = set()
for layout in KEYBOARD_LAYOUTS.values(): for layout in KEYBOARD_LAYOUTS.values():
all_chars.update(key for row in layout for key in row) char_set.update(key for row in layout for key in row)
all_chars = "".join(all_chars)
all_chars += "–✓×°§•" # 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) codepoint_count = rl.ffi.new("int *", 1)
codepoints = rl.load_codepoints(all_chars, codepoint_count) codepoints = rl.load_codepoints(all_chars, codepoint_count)

Loading…
Cancel
Save