diff --git a/selfdrive/ui/layouts/home.py b/selfdrive/ui/layouts/home.py index cf61056f..be231dcd 100644 --- a/selfdrive/ui/layouts/home.py +++ b/selfdrive/ui/layouts/home.py @@ -5,6 +5,8 @@ from enum import IntEnum from openpilot.common.params import Params from openpilot.selfdrive.ui.widgets.offroad_alerts import UpdateAlert, OffroadAlert from openpilot.selfdrive.ui.widgets.exp_mode_button import ExperimentalModeButton +from openpilot.selfdrive.ui.widgets.prime import PrimeWidget +from openpilot.selfdrive.ui.widgets.setup import SetupWidget from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos from openpilot.system.ui.lib.multilang import tr, trn @@ -53,16 +55,22 @@ class HomeLayout(Widget): self.update_notif_rect = rl.Rectangle(0, 0, 200, HEADER_HEIGHT - 10) self.alert_notif_rect = rl.Rectangle(0, 0, 220, HEADER_HEIGHT - 10) + self._prime_widget = PrimeWidget() + self._setup_widget = SetupWidget() + + self._exp_mode_button = ExperimentalModeButton() self._setup_callbacks() def show_event(self): super().show_event() + self._exp_mode_button.show_event() self.last_refresh = time.monotonic() self._refresh() def _setup_callbacks(self): self.update_alert.set_dismiss_callback(lambda: self._set_state(HomeLayoutState.HOME)) self.offroad_alert.set_dismiss_callback(lambda: self._set_state(HomeLayoutState.HOME)) + self._exp_mode_button.set_click_callback(lambda: self.settings_callback() if self.settings_callback else None) def set_settings_callback(self, callback: Callable): self.settings_callback = callback @@ -70,6 +78,9 @@ class HomeLayout(Widget): def _set_state(self, state: HomeLayoutState): # propagate show/hide events if state != self.current_state: + if state == HomeLayoutState.HOME: + self._exp_mode_button.show_event() + if state in self._layout_widgets: self._layout_widgets[state].show_event() if self.current_state in self._layout_widgets: @@ -170,11 +181,8 @@ class HomeLayout(Widget): gui_label(version_rect, self._version_text, 48, rl.WHITE, alignment=rl.GuiTextAlignment.TEXT_ALIGN_RIGHT) def _render_home_content(self): - # Draw Hello Kitty image centered in content area - kitty_tex = gui_app.texture("../../sunnypilot/selfdrive/assets/hello_kitty.png", int(self.content_rect.width * 0.6), int(self.content_rect.height * 0.6), keep_aspect_ratio=True) - x = self.content_rect.x + (self.content_rect.width - kitty_tex.width) / 2 - y = self.content_rect.y + (self.content_rect.height - kitty_tex.height) / 2 - rl.draw_texture_ex(kitty_tex, rl.Vector2(x, y), 0.0, 1.0, rl.WHITE) + self._render_left_column() + self._render_right_column() def _render_update_view(self): self.update_alert.render(self.content_rect) @@ -182,6 +190,24 @@ class HomeLayout(Widget): def _render_alerts_view(self): self.offroad_alert.render(self.content_rect) + def _render_left_column(self): + self._prime_widget.render(self.left_column_rect) + + def _render_right_column(self): + exp_height = 125 + exp_rect = rl.Rectangle( + self.right_column_rect.x, self.right_column_rect.y, self.right_column_rect.width, exp_height + ) + self._exp_mode_button.render(exp_rect) + + setup_rect = rl.Rectangle( + self.right_column_rect.x, + self.right_column_rect.y + exp_height + SPACING, + self.right_column_rect.width, + self.right_column_rect.height - exp_height - SPACING, + ) + self._setup_widget.render(setup_rect) + def _refresh(self): self._version_text = self._get_version_text() update_available = self.update_alert.refresh() diff --git a/sunnypilot/selfdrive/assets/hello_kitty.png b/sunnypilot/selfdrive/assets/hello_kitty.png deleted file mode 100644 index 38452020..00000000 Binary files a/sunnypilot/selfdrive/assets/hello_kitty.png and /dev/null differ