raylib: use touch thread in all places (#36212)

* fix not opening alerts

* whops

* rm mouse pressed from offroad alerts

* ah its a base class

* one last place

* fix

* rm lines
pull/36185/merge
Shane Smiskol 2 days ago committed by GitHub
parent 2feddf32b2
commit 35e2fc7dd9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 21
      selfdrive/ui/layouts/home.py
  2. 7
      selfdrive/ui/onroad/driver_camera_dialog.py
  3. 26
      selfdrive/ui/widgets/offroad_alerts.py

@ -8,7 +8,7 @@ from openpilot.selfdrive.ui.widgets.exp_mode_button import ExperimentalModeButto
from openpilot.selfdrive.ui.widgets.prime import PrimeWidget from openpilot.selfdrive.ui.widgets.prime import PrimeWidget
from openpilot.selfdrive.ui.widgets.setup import SetupWidget from openpilot.selfdrive.ui.widgets.setup import SetupWidget
from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.system.ui.lib.text_measure import measure_text_cached
from openpilot.system.ui.lib.application import gui_app, FontWeight, DEFAULT_TEXT_COLOR from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos, DEFAULT_TEXT_COLOR
from openpilot.system.ui.widgets import Widget from openpilot.system.ui.widgets import Widget
HEADER_HEIGHT = 80 HEADER_HEIGHT = 80
@ -72,7 +72,6 @@ class HomeLayout(Widget):
self._refresh() self._refresh()
self.last_refresh = current_time self.last_refresh = current_time
self._handle_input()
self._render_header() self._render_header()
# Render content based on current state # Render content based on current state
@ -110,25 +109,13 @@ class HomeLayout(Widget):
self.alert_notif_rect.x = notif_x self.alert_notif_rect.x = notif_x
self.alert_notif_rect.y = self.header_rect.y + (self.header_rect.height - 60) // 2 self.alert_notif_rect.y = self.header_rect.y + (self.header_rect.height - 60) // 2
def _handle_input(self): def _handle_mouse_release(self, mouse_pos: MousePos):
if not rl.is_mouse_button_pressed(rl.MouseButton.MOUSE_BUTTON_LEFT): super()._handle_mouse_release(mouse_pos)
return
mouse_pos = rl.get_mouse_position()
if self.update_available and rl.check_collision_point_rec(mouse_pos, self.update_notif_rect): if self.update_available and rl.check_collision_point_rec(mouse_pos, self.update_notif_rect):
self._set_state(HomeLayoutState.UPDATE) self._set_state(HomeLayoutState.UPDATE)
return elif self.alert_count > 0 and rl.check_collision_point_rec(mouse_pos, self.alert_notif_rect):
if self.alert_count > 0 and rl.check_collision_point_rec(mouse_pos, self.alert_notif_rect):
self._set_state(HomeLayoutState.ALERTS) self._set_state(HomeLayoutState.ALERTS)
return
# Content area input handling
if self.current_state == HomeLayoutState.UPDATE:
self.update_alert.handle_input(mouse_pos, True)
elif self.current_state == HomeLayoutState.ALERTS:
self.offroad_alert.handle_input(mouse_pos, True)
def _render_header(self): def _render_header(self):
font = gui_app.font(FontWeight.MEDIUM) font = gui_app.font(FontWeight.MEDIUM)

@ -13,12 +13,13 @@ class DriverCameraDialog(CameraView):
super().__init__("camerad", VisionStreamType.VISION_STREAM_DRIVER) super().__init__("camerad", VisionStreamType.VISION_STREAM_DRIVER)
self.driver_state_renderer = DriverStateRenderer() self.driver_state_renderer = DriverStateRenderer()
def _handle_mouse_release(self, _):
super()._handle_mouse_release(_)
gui_app.set_modal_overlay(None)
def _render(self, rect): def _render(self, rect):
super()._render(rect) super()._render(rect)
if rl.is_mouse_button_pressed(rl.MouseButton.MOUSE_BUTTON_LEFT):
return 1
if not self.frame: if not self.frame:
gui_label( gui_label(
rect, rect,

@ -1,11 +1,14 @@
import os
import json import json
import pyray as rl import pyray as rl
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from collections.abc import Callable from collections.abc import Callable
from dataclasses import dataclass from dataclasses import dataclass
from openpilot.common.swaglog import cloudlog
from openpilot.common.basedir import BASEDIR
from openpilot.common.params import Params from openpilot.common.params import Params
from openpilot.system.hardware import HARDWARE from openpilot.system.hardware import HARDWARE
from openpilot.system.ui.lib.application import gui_app, FontWeight from openpilot.system.ui.lib.application import gui_app, FontWeight, MousePos
from openpilot.system.ui.lib.scroll_panel import GuiScrollPanel from openpilot.system.ui.lib.scroll_panel import GuiScrollPanel
from openpilot.system.ui.lib.text_measure import measure_text_cached from openpilot.system.ui.lib.text_measure import measure_text_cached
from openpilot.system.ui.lib.wrap_text import wrap_text from openpilot.system.ui.lib.wrap_text import wrap_text
@ -69,26 +72,23 @@ class AbstractAlert(Widget, ABC):
def get_content_height(self) -> float: def get_content_height(self) -> float:
pass pass
def handle_input(self, mouse_pos: rl.Vector2, mouse_clicked: bool) -> bool: def _handle_mouse_release(self, mouse_pos: MousePos):
if not mouse_clicked or not self.scroll_panel.is_touch_valid(): super()._handle_mouse_release(mouse_pos)
return False
if not self.scroll_panel.is_touch_valid():
return
if rl.check_collision_point_rec(mouse_pos, self.dismiss_btn_rect): if rl.check_collision_point_rec(mouse_pos, self.dismiss_btn_rect):
if self.dismiss_callback: if self.dismiss_callback:
self.dismiss_callback() self.dismiss_callback()
return True
if self.snooze_visible and rl.check_collision_point_rec(mouse_pos, self.snooze_btn_rect): elif self.snooze_visible and rl.check_collision_point_rec(mouse_pos, self.snooze_btn_rect):
self.params.put_bool("SnoozeUpdate", True) self.params.put_bool("SnoozeUpdate", True)
if self.dismiss_callback: if self.dismiss_callback:
self.dismiss_callback() self.dismiss_callback()
return True
if self.has_reboot_btn and rl.check_collision_point_rec(mouse_pos, self.reboot_btn_rect): elif self.has_reboot_btn and rl.check_collision_point_rec(mouse_pos, self.reboot_btn_rect):
HARDWARE.reboot() HARDWARE.reboot()
return True
return False
def _render(self, rect: rl.Rectangle): def _render(self, rect: rl.Rectangle):
rl.draw_rectangle_rounded(rect, AlertConstants.BORDER_RADIUS / rect.width, 10, AlertColors.BACKGROUND) rl.draw_rectangle_rounded(rect, AlertConstants.BORDER_RADIUS / rect.width, 10, AlertColors.BACKGROUND)
@ -233,14 +233,14 @@ class OffroadAlert(AbstractAlert):
def _build_alerts(self): def _build_alerts(self):
self.sorted_alerts = [] self.sorted_alerts = []
try: try:
with open("../selfdrived/alerts_offroad.json", "rb") as f: with open(os.path.join(BASEDIR, "selfdrive/selfdrived/alerts_offroad.json"), "rb") as f:
alerts_config = json.load(f) alerts_config = json.load(f)
for key, config in sorted(alerts_config.items(), key=lambda x: x[1].get("severity", 0), reverse=True): for key, config in sorted(alerts_config.items(), key=lambda x: x[1].get("severity", 0), reverse=True):
severity = config.get("severity", 0) severity = config.get("severity", 0)
alert_data = AlertData(key=key, text="", severity=severity) alert_data = AlertData(key=key, text="", severity=severity)
self.sorted_alerts.append(alert_data) self.sorted_alerts.append(alert_data)
except (FileNotFoundError, json.JSONDecodeError): except (FileNotFoundError, json.JSONDecodeError):
pass cloudlog.exception("Failed to load offroad alerts")
def _render_content(self, content_rect: rl.Rectangle): def _render_content(self, content_rect: rl.Rectangle):
y_offset = 20 y_offset = 20

Loading…
Cancel
Save