|
|
|
@ -7,7 +7,7 @@ from openpilot.system.hardware import TICI |
|
|
|
|
from openpilot.system.ui.lib.application import gui_app, FontWeight |
|
|
|
|
from openpilot.system.ui.lib.text_measure import measure_text_cached |
|
|
|
|
from openpilot.system.ui.widgets import Widget |
|
|
|
|
from openpilot.system.ui.widgets.label import gui_text_box |
|
|
|
|
from openpilot.system.ui.widgets.label import Label |
|
|
|
|
|
|
|
|
|
AlertSize = log.SelfdriveState.AlertSize |
|
|
|
|
AlertStatus = log.SelfdriveState.AlertStatus |
|
|
|
@ -74,6 +74,12 @@ class AlertRenderer(Widget): |
|
|
|
|
self.font_regular: rl.Font = gui_app.font(FontWeight.NORMAL) |
|
|
|
|
self.font_bold: rl.Font = gui_app.font(FontWeight.BOLD) |
|
|
|
|
|
|
|
|
|
# font size is set dynamically |
|
|
|
|
self._full_text1_label = Label("", font_size=0, font_weight=FontWeight.BOLD, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, |
|
|
|
|
text_alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP) |
|
|
|
|
self._full_text2_label = Label("", font_size=ALERT_FONT_BIG, text_alignment=rl.GuiTextAlignment.TEXT_ALIGN_CENTER, |
|
|
|
|
text_alignment_vertical=rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP) |
|
|
|
|
|
|
|
|
|
def get_alert(self, sm: messaging.SubMaster) -> Alert | None: |
|
|
|
|
"""Generate the current alert based on selfdrive state.""" |
|
|
|
|
ss = sm['selfdriveState'] |
|
|
|
@ -153,16 +159,16 @@ class AlertRenderer(Widget): |
|
|
|
|
is_long = len(alert.text1) > 15 |
|
|
|
|
font_size1 = 132 if is_long else 177 |
|
|
|
|
|
|
|
|
|
align_center = rl.GuiTextAlignment.TEXT_ALIGN_CENTER |
|
|
|
|
align_top = rl.GuiTextAlignmentVertical.TEXT_ALIGN_TOP |
|
|
|
|
|
|
|
|
|
top_offset = 240 if is_long else 270 |
|
|
|
|
top_offset = 200 if is_long or '\n' in alert.text1 else 270 |
|
|
|
|
title_rect = rl.Rectangle(rect.x, rect.y + top_offset, rect.width, 600) |
|
|
|
|
gui_text_box(title_rect, alert.text1, font_size1, alignment=align_center, alignment_vertical=align_top, font_weight=FontWeight.BOLD) |
|
|
|
|
self._full_text1_label.set_font_size(font_size1) |
|
|
|
|
self._full_text1_label.set_text(alert.text1) |
|
|
|
|
self._full_text1_label.render(title_rect) |
|
|
|
|
|
|
|
|
|
bottom_offset = 361 if is_long else 420 |
|
|
|
|
subtitle_rect = rl.Rectangle(rect.x, rect.y + rect.height - bottom_offset, rect.width, 300) |
|
|
|
|
gui_text_box(subtitle_rect, alert.text2, ALERT_FONT_BIG, alignment=align_center, alignment_vertical=align_top) |
|
|
|
|
self._full_text2_label.set_text(alert.text2) |
|
|
|
|
self._full_text2_label.render(subtitle_rect) |
|
|
|
|
|
|
|
|
|
def _draw_centered(self, text, rect, font, font_size, center_y=True, color=rl.WHITE) -> None: |
|
|
|
|
text_size = measure_text_cached(font, text, font_size) |
|
|
|
|