diff --git a/system/ui/spinner.py b/system/ui/spinner.py index 8b3e4ff407..6998ed01c2 100755 --- a/system/ui/spinner.py +++ b/system/ui/spinner.py @@ -38,19 +38,19 @@ class Spinner(Widget): self._progress = None self._wrapped_lines = wrap_text(text, FONT_SIZE, gui_app.width - MARGIN_H) - def render(self, _: rl.Rectangle = None): + def render(self, rect: rl.Rectangle): if self._wrapped_lines: # Calculate total height required for spinner and text spacing = 50 total_height = TEXTURE_SIZE + spacing + len(self._wrapped_lines) * LINE_HEIGHT - center_y = (gui_app.height - total_height) / 2.0 + TEXTURE_SIZE / 2.0 + center_y = (rect.height - total_height) / 2.0 + TEXTURE_SIZE / 2.0 else: # Center spinner vertically spacing = 150 - center_y = gui_app.height / 2.0 + center_y = rect.height / 2.0 y_pos = center_y + TEXTURE_SIZE / 2.0 + spacing - center = rl.Vector2(gui_app.width / 2.0, center_y) + center = rl.Vector2(rect.width / 2.0, center_y) spinner_origin = rl.Vector2(TEXTURE_SIZE / 2.0, TEXTURE_SIZE / 2.0) comma_position = rl.Vector2(center.x - TEXTURE_SIZE / 2.0, center.y - TEXTURE_SIZE / 2.0) @@ -99,7 +99,7 @@ def main(): if text_list: spinner.set_text(text_list[-1]) - spinner.render() + spinner.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) if __name__ == "__main__": diff --git a/system/ui/text.py b/system/ui/text.py index d434cbe43d..f24e8bf2cd 100755 --- a/system/ui/text.py +++ b/system/ui/text.py @@ -54,7 +54,7 @@ class TextWindow(Widget): self._scroll_panel = GuiScrollPanel(show_vertical_scroll_bar=True) self._scroll_panel._offset.y = -max(self._content_rect.height - self._textarea_rect.height, 0) - def render(self, _: rl.Rectangle = None): + def render(self, rect: rl.Rectangle): scroll = self._scroll_panel.handle_scroll(self._textarea_rect, self._content_rect) rl.begin_scissor_mode(int(self._textarea_rect.x), int(self._textarea_rect.y), int(self._textarea_rect.width), int(self._textarea_rect.height)) for i, line in enumerate(self._wrapped_lines): @@ -64,7 +64,7 @@ class TextWindow(Widget): rl.draw_text_ex(gui_app.font(), line, position, FONT_SIZE, 0, rl.WHITE) rl.end_scissor_mode() - button_bounds = rl.Rectangle(gui_app.width - MARGIN - BUTTON_SIZE.x - SPACING, gui_app.height - MARGIN - BUTTON_SIZE.y, BUTTON_SIZE.x, BUTTON_SIZE.y) + button_bounds = rl.Rectangle(rect.width - MARGIN - BUTTON_SIZE.x - SPACING, rect.height - MARGIN - BUTTON_SIZE.y, BUTTON_SIZE.x, BUTTON_SIZE.y) ret = gui_button(button_bounds, "Exit" if PC else "Reboot", button_style=ButtonStyle.TRANSPARENT) if ret: if PC: @@ -79,4 +79,4 @@ if __name__ == "__main__": gui_app.init_window("Text Viewer") text_window = TextWindow(text) for _ in gui_app.render(): - text_window.render() + text_window.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) diff --git a/system/ui/updater.py b/system/ui/updater.py index b7e36a6204..a4fb80cd96 100755 --- a/system/ui/updater.py +++ b/system/ui/updater.py @@ -77,21 +77,21 @@ class Updater(Widget): self.progress_text = "Update failed" self.show_reboot_button = True - def render_prompt_screen(self): + def render_prompt_screen(self, rect: rl.Rectangle): # Title - title_rect = rl.Rectangle(MARGIN + 50, 250, gui_app.width - MARGIN * 2 - 100, TITLE_FONT_SIZE) + title_rect = rl.Rectangle(MARGIN + 50, 250, rect.width - MARGIN * 2 - 100, TITLE_FONT_SIZE) gui_label(title_rect, "Update Required", TITLE_FONT_SIZE, font_weight=FontWeight.BOLD) # Description desc_text = ("An operating system update is required. Connect your device to Wi-Fi for the fastest update experience. " + "The download size is approximately 1GB.") - desc_rect = rl.Rectangle(MARGIN + 50, 250 + TITLE_FONT_SIZE + 75, gui_app.width - MARGIN * 2 - 100, BODY_FONT_SIZE * 3) + desc_rect = rl.Rectangle(MARGIN + 50, 250 + TITLE_FONT_SIZE + 75, rect.width - MARGIN * 2 - 100, BODY_FONT_SIZE * 3) gui_text_box(desc_rect, desc_text, BODY_FONT_SIZE) # Buttons at the bottom - button_y = gui_app.height - MARGIN - BUTTON_HEIGHT - button_width = (gui_app.width - MARGIN * 3) // 2 + button_y = rect.height - MARGIN - BUTTON_HEIGHT + button_width = (rect.width - MARGIN * 3) // 2 # WiFi button wifi_button_rect = rl.Rectangle(MARGIN, button_y, button_width, BUTTON_HEIGHT) @@ -105,22 +105,22 @@ class Updater(Widget): self.install_update() return # Return to avoid further processing after action - def render_wifi_screen(self): + def render_wifi_screen(self, rect: rl.Rectangle): # Draw the Wi-Fi manager UI - wifi_rect = rl.Rectangle(MARGIN + 50, MARGIN, gui_app.width - MARGIN * 2 - 100, gui_app.height - MARGIN * 2 - BUTTON_HEIGHT - 20) + wifi_rect = rl.Rectangle(MARGIN + 50, MARGIN, rect.width - MARGIN * 2 - 100, rect.height - MARGIN * 2 - BUTTON_HEIGHT - 20) self.wifi_manager_ui.render(wifi_rect) - back_button_rect = rl.Rectangle(MARGIN, gui_app.height - MARGIN - BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT) + back_button_rect = rl.Rectangle(MARGIN, rect.height - MARGIN - BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT) if gui_button(back_button_rect, "Back"): self.current_screen = Screen.PROMPT return # Return to avoid processing other interactions after screen change - def render_progress_screen(self): - title_rect = rl.Rectangle(MARGIN + 100, 330, gui_app.width - MARGIN * 2 - 200, 100) + def render_progress_screen(self, rect: rl.Rectangle): + title_rect = rl.Rectangle(MARGIN + 100, 330, rect.width - MARGIN * 2 - 200, 100) gui_label(title_rect, self.progress_text, 90, font_weight=FontWeight.SEMI_BOLD) # Progress bar - bar_rect = rl.Rectangle(MARGIN + 100, 330 + 100 + 100, gui_app.width - MARGIN * 2 - 200, PROGRESS_BAR_HEIGHT) + bar_rect = rl.Rectangle(MARGIN + 100, 330 + 100 + 100, rect.width - MARGIN * 2 - 200, PROGRESS_BAR_HEIGHT) rl.draw_rectangle_rounded(bar_rect, 0.5, 10, PROGRESS_BG_COLOR) # Calculate the width of the progress chunk @@ -131,19 +131,19 @@ class Updater(Widget): # Show reboot button if needed if self.show_reboot_button: - reboot_rect = rl.Rectangle(MARGIN + 100, gui_app.height - MARGIN - BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT) + reboot_rect = rl.Rectangle(MARGIN + 100, rect.height - MARGIN - BUTTON_HEIGHT, BUTTON_WIDTH, BUTTON_HEIGHT) if gui_button(reboot_rect, "Reboot"): # Return True to signal main loop to exit before rebooting HARDWARE.reboot() return - def render(self, _: rl.Rectangle = None): + def render(self, rect: rl.Rectangle): if self.current_screen == Screen.PROMPT: - self.render_prompt_screen() + self.render_prompt_screen(rect) elif self.current_screen == Screen.WIFI: - self.render_wifi_screen() + self.render_wifi_screen(rect) elif self.current_screen == Screen.PROGRESS: - self.render_progress_screen() + self.render_progress_screen(rect) def main(): @@ -158,7 +158,7 @@ def main(): gui_app.init_window("System Update") updater = Updater(updater_path, manifest_path) for _ in gui_app.render(): - updater.render() + updater.render(rl.Rectangle(0, 0, gui_app.width, gui_app.height)) finally: # Make sure we clean up even if there's an error gui_app.close()