mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-08-24 01:33:46 +08:00
raylib ui: store rects (#35538)
* simple version * use it * use it in one place
This commit is contained in:
@@ -21,7 +21,6 @@ class MainLayout(Widget):
|
||||
self._sidebar_visible = True
|
||||
self._current_mode = MainState.HOME
|
||||
self._prev_onroad = False
|
||||
self._window_rect = None
|
||||
|
||||
# Initialize layouts
|
||||
self._layouts = {MainState.HOME: HomeLayout(), MainState.SETTINGS: SettingsLayout(), MainState.ONROAD: AugmentedRoadView()}
|
||||
@@ -45,7 +44,6 @@ class MainLayout(Widget):
|
||||
self._layouts[MainState.ONROAD].set_callbacks(on_click=self._on_onroad_clicked)
|
||||
|
||||
def _update_layout_rects(self, rect):
|
||||
self._window_rect = rect
|
||||
self._sidebar_rect = rl.Rectangle(rect.x, rect.y, SIDEBAR_WIDTH, rect.height)
|
||||
|
||||
x_offset = SIDEBAR_WIDTH if self._sidebar_visible else 0
|
||||
@@ -85,5 +83,5 @@ class MainLayout(Widget):
|
||||
if self._sidebar_visible:
|
||||
self._sidebar.render(self._sidebar_rect)
|
||||
|
||||
content_rect = self._content_rect if self._sidebar_visible else self._window_rect
|
||||
content_rect = self._content_rect if self._sidebar_visible else self._rect
|
||||
self._layouts[self._current_mode].render(content_rect)
|
||||
|
||||
@@ -23,7 +23,10 @@ class ExpButton(Widget):
|
||||
self._black_bg: rl.Color = rl.Color(0, 0, 0, 166)
|
||||
self._txt_wheel: rl.Texture = gui_app.texture('icons/chffr_wheel.png', icon_size, icon_size)
|
||||
self._txt_exp: rl.Texture = gui_app.texture('icons/experimental.png', icon_size, icon_size)
|
||||
self._rect: rl.Rectangle = rl.Rectangle(0, 0, button_size, button_size)
|
||||
self._rect = rl.Rectangle(0, 0, button_size, button_size)
|
||||
|
||||
def set_rect(self, rect: rl.Rectangle) -> None:
|
||||
self._rect.x, self._rect.y = rect.x, rect.y
|
||||
|
||||
def update_state(self, sm: SubMaster) -> None:
|
||||
selfdrive_state = sm["selfdriveState"]
|
||||
@@ -44,7 +47,6 @@ class ExpButton(Widget):
|
||||
return False
|
||||
|
||||
def _render(self, rect: rl.Rectangle) -> None:
|
||||
self._rect.x, self._rect.y = rect.x, rect.y
|
||||
center_x = int(self._rect.x + self._rect.width // 2)
|
||||
center_y = int(self._rect.y + self._rect.height // 2)
|
||||
|
||||
|
||||
@@ -66,7 +66,6 @@ class ModelRenderer(Widget):
|
||||
self._car_space_transform = np.zeros((3, 3), dtype=np.float32)
|
||||
self._transform_dirty = True
|
||||
self._clip_region = None
|
||||
self._rect = None
|
||||
|
||||
self._exp_gradient = {
|
||||
'start': (0.0, 1.0), # Bottom of path
|
||||
@@ -93,7 +92,6 @@ class ModelRenderer(Widget):
|
||||
return
|
||||
|
||||
# Set up clipping region
|
||||
self._rect = rect
|
||||
self._clip_region = rl.Rectangle(
|
||||
rect.x - CLIP_MARGIN, rect.y - CLIP_MARGIN, rect.width + 2 * CLIP_MARGIN, rect.height + 2 * CLIP_MARGIN
|
||||
)
|
||||
|
||||
+2
-1
@@ -9,12 +9,13 @@ from openpilot.selfdrive.ui.ui_state import ui_state
|
||||
def main():
|
||||
gui_app.init_window("UI")
|
||||
main_layout = MainLayout()
|
||||
main_layout.set_rect(rl.Rectangle(0, 0, gui_app.width, gui_app.height))
|
||||
for _ in gui_app.render():
|
||||
ui_state.update()
|
||||
|
||||
# TODO handle brigntness and awake state here
|
||||
|
||||
main_layout.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height))
|
||||
main_layout.render()
|
||||
|
||||
kick_watchdog()
|
||||
|
||||
|
||||
@@ -17,10 +17,12 @@ class Toggle(Widget):
|
||||
super().__init__()
|
||||
self._state = initial_state
|
||||
self._enabled = True
|
||||
self._rect = rl.Rectangle(0, 0, WIDTH, HEIGHT)
|
||||
self._progress = 1.0 if initial_state else 0.0
|
||||
self._target = self._progress
|
||||
|
||||
def set_rect(self, rect: rl.Rectangle):
|
||||
self._rect = rl.Rectangle(rect.x, rect.y, WIDTH, HEIGHT)
|
||||
|
||||
def handle_input(self):
|
||||
if not self._enabled:
|
||||
return 0
|
||||
@@ -52,7 +54,6 @@ class Toggle(Widget):
|
||||
self._progress = max(0.0, min(1.0, self._progress))
|
||||
|
||||
def _render(self, rect: rl.Rectangle):
|
||||
self._rect.x, self._rect.y = rect.x, rect.y
|
||||
self.update()
|
||||
|
||||
if self._enabled:
|
||||
|
||||
+11
-4
@@ -11,19 +11,26 @@ class DialogResult(IntEnum):
|
||||
|
||||
class Widget(abc.ABC):
|
||||
def __init__(self):
|
||||
self._rect: rl.Rectangle = rl.Rectangle(0, 0, 0, 0)
|
||||
self._is_pressed = False
|
||||
|
||||
def render(self, rect: rl.Rectangle) -> bool | int | None:
|
||||
ret = self._render(rect)
|
||||
def set_rect(self, rect: rl.Rectangle) -> None:
|
||||
self._rect = rect
|
||||
|
||||
def render(self, rect: rl.Rectangle = None) -> bool | int | None:
|
||||
if rect is not None:
|
||||
self.set_rect(rect)
|
||||
|
||||
ret = self._render(self._rect)
|
||||
|
||||
# Keep track of whether mouse down started within the widget's rectangle
|
||||
mouse_pos = rl.get_mouse_position()
|
||||
if rl.is_mouse_button_pressed(rl.MouseButton.MOUSE_BUTTON_LEFT):
|
||||
if rl.check_collision_point_rec(mouse_pos, rect):
|
||||
if rl.check_collision_point_rec(mouse_pos, self._rect):
|
||||
self._is_pressed = True
|
||||
|
||||
if rl.is_mouse_button_released(rl.MouseButton.MOUSE_BUTTON_LEFT):
|
||||
if self._is_pressed and rl.check_collision_point_rec(mouse_pos, rect):
|
||||
if self._is_pressed and rl.check_collision_point_rec(mouse_pos, self._rect):
|
||||
self._handle_mouse_release(mouse_pos)
|
||||
self._is_pressed = False
|
||||
|
||||
|
||||
Reference in New Issue
Block a user