mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-08-24 04:23:47 +08:00
changes
This commit is contained in:
@@ -7,6 +7,7 @@ See the LICENSE.md file in the root directory for more details.
|
||||
from cereal import messaging, custom
|
||||
from openpilot.common.params import Params
|
||||
from openpilot.sunnypilot.sunnylink.sunnylink_state import SunnylinkState
|
||||
from openpilot.system.ui.sunnypilot.widgets.screen_saver import ScreenSaverSP
|
||||
|
||||
|
||||
class UIStateSP:
|
||||
@@ -18,6 +19,7 @@ class UIStateSP:
|
||||
]
|
||||
|
||||
self.sunnylink_state = SunnylinkState()
|
||||
self.screensaver = ScreenSaverSP()
|
||||
|
||||
def update(self) -> None:
|
||||
self.sunnylink_state.start()
|
||||
|
||||
@@ -11,7 +11,6 @@ from openpilot.common.swaglog import cloudlog
|
||||
from openpilot.selfdrive.ui.lib.prime_state import PrimeState
|
||||
from openpilot.system.ui.lib.application import gui_app
|
||||
from openpilot.system.hardware import HARDWARE, PC
|
||||
from openpilot.system.ui.sunnypilot.widgets.screen_saver import ScreenSaverSP
|
||||
|
||||
from openpilot.selfdrive.ui.sunnypilot.ui_state import UIStateSP
|
||||
|
||||
@@ -270,18 +269,19 @@ class Device:
|
||||
|
||||
def _set_awake(self, on: bool):
|
||||
if on != self._awake:
|
||||
self._awake = on
|
||||
|
||||
def set_display_power():
|
||||
def set_display_power(power: bool):
|
||||
self._awake = on
|
||||
cloudlog.debug(f"setting display power {int(on)}")
|
||||
HARDWARE.set_display_power(on)
|
||||
gui_app.set_should_render(on)
|
||||
|
||||
screensaver_enabled = ui_state.params.get_bool("ScreenSaverEnabled")
|
||||
if gui_app.sunnypilot_ui() and not on and screensaver_enabled:
|
||||
gui_app.set_modal_overlay(ScreenSaverSP(dismiss_callback=lambda: set_display_power()))
|
||||
ui_state.screensaver.initialize(dismiss_callback=lambda: set_display_power(False))
|
||||
gui_app.set_modal_overlay(ui_state.screensaver)
|
||||
else:
|
||||
set_display_power()
|
||||
set_display_power(on)
|
||||
|
||||
|
||||
# Global instance
|
||||
|
||||
@@ -11,39 +11,47 @@ from openpilot.system.ui.lib.text_measure import measure_text_cached
|
||||
from openpilot.system.ui.widgets import Widget
|
||||
|
||||
class ScreenSaverSP(Widget):
|
||||
def __init__(self, dismiss_callback: Callable):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.dismiss_callback = dismiss_callback
|
||||
self.screensaver_timeout = Params().get("ScreenSaverTimeout")
|
||||
|
||||
self.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height))
|
||||
self.screensaver_timeout = Params().get("ScreenSaverTimeout")
|
||||
self._is_mici = HARDWARE.get_device_type() == 'mici' or (HARDWARE.get_device_type() == "pc" and os.getenv("BIG") != "1")
|
||||
|
||||
self.text = "sunnypilot"
|
||||
self.font_size = 50 if self._is_mici else 200
|
||||
self.font = gui_app.font(FontWeight.AUDIOWIDE)
|
||||
text_size = measure_text_cached(self.font, self.text, self.font_size, 0)
|
||||
self.logo_width = text_size.x
|
||||
self.logo_height = text_size.y
|
||||
self._start_time = time.monotonic()
|
||||
|
||||
self.x = 0.0
|
||||
self.y = 100.0
|
||||
self.vx = 120.0 if self._is_mici else 300.0
|
||||
self.vy = 70.0 if self._is_mici else 200.0
|
||||
self.color = rl.Color(0, 255, 0, 255)
|
||||
self._hue = 150
|
||||
self.color = rl.color_from_hsv(self._hue, 1, 1)
|
||||
|
||||
self.text = "sunnypilot"
|
||||
self.font_size = 50 if self._is_mici else 200
|
||||
self._start_time = None
|
||||
|
||||
def initialize(self, dismiss_callback: Callable):
|
||||
if self._start_time is None:
|
||||
self._start_time = time.monotonic()
|
||||
self.dismiss_callback = dismiss_callback
|
||||
self._dismiss = False
|
||||
|
||||
def _handle_mouse_press(self, mouse_pos) -> bool:
|
||||
self._dismiss = True
|
||||
self._reset()
|
||||
return super()._handle_mouse_press(mouse_pos)
|
||||
|
||||
def _reset(self):
|
||||
self._dismiss = True
|
||||
self._start_time = None
|
||||
|
||||
def _update_state(self):
|
||||
super()._update_state()
|
||||
|
||||
self.font = gui_app.font(FontWeight.AUDIOWIDE)
|
||||
text_size = measure_text_cached(self.font, self.text, self.font_size, 0)
|
||||
self.logo_width = text_size.x
|
||||
self.logo_height = text_size.y
|
||||
|
||||
if time.monotonic() - self._start_time > self.screensaver_timeout:
|
||||
self._dismiss = True
|
||||
self._reset()
|
||||
|
||||
dt = rl.get_frame_time()
|
||||
|
||||
@@ -70,7 +78,10 @@ class ScreenSaverSP(Widget):
|
||||
hit_y = True
|
||||
|
||||
if hit_x or hit_y:
|
||||
self.color = rl.color_from_hsv(rl.get_random_value(0, 360), 1, 1)
|
||||
while not abs((new_hue := rl.get_random_value(0, 360)) - self._hue) >= 50:
|
||||
pass
|
||||
self._hue = new_hue
|
||||
self.color = rl.color_from_hsv(self._hue, 1, 1)
|
||||
|
||||
def _render(self, rect: rl.Rectangle):
|
||||
if self._dismiss:
|
||||
|
||||
Reference in New Issue
Block a user