raylib: fix emoji centering with Label (#36376)

* kinda works

* but spacing was off, so back to big emoji

* rm debug

* fixed!

* fixed!

* fix newline in emoji pattern

* fix

* fix dat
This commit is contained in:
Shane Smiskol
2025-10-15 21:53:52 -07:00
committed by GitHub
parent d9fc6c0086
commit 80a8df0643
4 changed files with 22 additions and 5 deletions
+1 -1
View File
@@ -28,7 +28,7 @@ EMOJI_REGEX = re.compile(
\u231a
\ufe0f
\u3030
]+""",
]+""".replace("\n", ""),
flags=re.UNICODE
)
+19 -1
View File
@@ -1,5 +1,6 @@
import pyray as rl
from openpilot.system.ui.lib.application import FONT_SCALE
from openpilot.system.ui.lib.emoji import find_emoji
_cache: dict[int, rl.Vector2] = {}
@@ -10,6 +11,23 @@ def measure_text_cached(font: rl.Font, text: str, font_size: int, spacing: int =
if key in _cache:
return _cache[key]
result = rl.measure_text_ex(font, text, font_size * FONT_SCALE, spacing) # noqa: TID251
# Measure normal characters without emojis, then add standard width for each found emoji
emoji = find_emoji(text)
if emoji:
non_emoji_text = ""
last_index = 0
for start, end, _ in emoji:
non_emoji_text += text[last_index:start]
last_index = end
else:
non_emoji_text = text
result = rl.measure_text_ex(font, non_emoji_text, font_size * FONT_SCALE, spacing) # noqa: TID251
if emoji:
result.x += len(emoji) * font_size * FONT_SCALE
# If just emoji assume a single line height
if result.y == 0:
result.y = font_size * FONT_SCALE
_cache[key] = result
return result