ui: use Label in keyboard (#35941)

better
pull/35943/head
Maxime Desroches 4 days ago committed by GitHub
parent a84089c6e5
commit a51477d40d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 14
      system/ui/widgets/keyboard.py
  2. 5
      system/ui/widgets/label.py

@ -8,7 +8,7 @@ from openpilot.system.ui.lib.application import gui_app, FontWeight
from openpilot.system.ui.widgets import Widget from openpilot.system.ui.widgets import Widget
from openpilot.system.ui.widgets.button import ButtonStyle, Button from openpilot.system.ui.widgets.button import ButtonStyle, Button
from openpilot.system.ui.widgets.inputbox import InputBox from openpilot.system.ui.widgets.inputbox import InputBox
from openpilot.system.ui.widgets.label import gui_label from openpilot.system.ui.widgets.label import Label, TextAlignment
KEY_FONT_SIZE = 96 KEY_FONT_SIZE = 96
DOUBLE_CLICK_THRESHOLD = 0.5 # seconds DOUBLE_CLICK_THRESHOLD = 0.5 # seconds
@ -62,8 +62,8 @@ class Keyboard(Widget):
self._layout_name: Literal["lowercase", "uppercase", "numbers", "specials"] = "lowercase" self._layout_name: Literal["lowercase", "uppercase", "numbers", "specials"] = "lowercase"
self._caps_lock = False self._caps_lock = False
self._last_shift_press_time = 0 self._last_shift_press_time = 0
self._title = "" self._title = Label("", 90, FontWeight.BOLD, TextAlignment.LEFT)
self._sub_title = "" self._sub_title = Label("", 55, FontWeight.NORMAL, TextAlignment.LEFT)
self._max_text_size = max_text_size self._max_text_size = max_text_size
self._min_text_size = min_text_size self._min_text_size = min_text_size
@ -115,8 +115,8 @@ class Keyboard(Widget):
self._backspace_pressed = False self._backspace_pressed = False
def set_title(self, title: str, sub_title: str = ""): def set_title(self, title: str, sub_title: str = ""):
self._title = title self._title.set_text(title)
self._sub_title = sub_title self._sub_title.set_text(sub_title)
def _eye_button_callback(self): def _eye_button_callback(self):
self._password_mode = not self._password_mode self._password_mode = not self._password_mode
@ -133,8 +133,8 @@ class Keyboard(Widget):
def _render(self, rect: rl.Rectangle): def _render(self, rect: rl.Rectangle):
rect = rl.Rectangle(rect.x + CONTENT_MARGIN, rect.y + CONTENT_MARGIN, rect.width - 2 * CONTENT_MARGIN, rect.height - 2 * CONTENT_MARGIN) rect = rl.Rectangle(rect.x + CONTENT_MARGIN, rect.y + CONTENT_MARGIN, rect.width - 2 * CONTENT_MARGIN, rect.height - 2 * CONTENT_MARGIN)
gui_label(rl.Rectangle(rect.x, rect.y, rect.width, 95), self._title, 90, font_weight=FontWeight.BOLD) self._title.render(rl.Rectangle(rect.x, rect.y, rect.width, 95))
gui_label(rl.Rectangle(rect.x, rect.y + 95, rect.width, 60), self._sub_title, 55, font_weight=FontWeight.NORMAL) self._sub_title.render(rl.Rectangle(rect.x, rect.y + 95, rect.width, 60))
self._cancel_button.render(rl.Rectangle(rect.x + rect.width - 386, rect.y, 386, 125)) self._cancel_button.render(rl.Rectangle(rect.x + rect.width - 386, rect.y, 386, 125))
# Draw input box and password toggle # Draw input box and password toggle

@ -112,10 +112,11 @@ class Label(Widget):
self._text_size = measure_text_cached(self._font, self._text, self._font_size) self._text_size = measure_text_cached(self._font, self._text, self._font_size)
self._text_color = text_color self._text_color = text_color
self._icon = icon self._icon = icon
self.emojis = find_emoji(self._text) self._emojis = find_emoji(self._text)
def set_text(self, text): def set_text(self, text):
self._text = text self._text = text
self._emojis = find_emoji(self._text)
self._text_size = measure_text_cached(self._font, self._text, self._font_size) self._text_size = measure_text_cached(self._font, self._text, self._font_size)
def set_text_color(self, color): def set_text_color(self, color):
@ -148,7 +149,7 @@ class Label(Widget):
text_pos.x = self._rect.x + self._rect.width - self._text_size.x - self._text_padding text_pos.x = self._rect.x + self._rect.width - self._text_size.x - self._text_padding
prev_index = 0 prev_index = 0
for start, end, emoji in self.emojis: for start, end, emoji in self._emojis:
text_before = self._text[prev_index:start] text_before = self._text[prev_index:start]
width_before = measure_text_cached(self._font, text_before, self._font_size) width_before = measure_text_cached(self._font, text_before, self._font_size)
rl.draw_text_ex(self._font, text_before, text_pos, self._font_size, 0, self._text_color) rl.draw_text_ex(self._font, text_before, text_pos, self._font_size, 0, self._text_color)

Loading…
Cancel
Save