From 8e5a7187dc252b8eadea441e0a3401c39f9ebc4e Mon Sep 17 00:00:00 2001 From: csd4ni3l Date: Sat, 8 Mar 2025 09:36:54 +0100 Subject: [PATCH] Add UIFocusMixin do_post_render None widget handling - Adds a None check to do_post_render, so it doesnt crash when trying to access the widget's rect if the widget is None --- arcade/gui/experimental/focus.py | 67 ++++++++++++++++---------------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/arcade/gui/experimental/focus.py b/arcade/gui/experimental/focus.py index 5abb775a2c..ab0de1bba3 100644 --- a/arcade/gui/experimental/focus.py +++ b/arcade/gui/experimental/focus.py @@ -290,39 +290,40 @@ def do_post_render(self, surface: Surface): surface.limit(None) widget = self._get_focused_widget() - arcade.draw_rect_outline( - rect=widget.rect, - color=arcade.color.WHITE, - border_width=2, - ) - - if self._debug: - # debugging - if isinstance(widget, Focusable): - if widget.neighbor_up: - self._draw_indicator( - widget.rect.top_center, - widget.neighbor_up.rect.bottom_center, - color=arcade.color.RED, - ) - if widget.neighbor_down: - self._draw_indicator( - widget.rect.bottom_center, - widget.neighbor_down.rect.top_center, - color=arcade.color.GREEN, - ) - if widget.neighbor_left: - self._draw_indicator( - widget.rect.center_left, - widget.neighbor_left.rect.center_right, - color=arcade.color.BLUE, - ) - if widget.neighbor_right: - self._draw_indicator( - widget.rect.center_right, - widget.neighbor_right.rect.center_left, - color=arcade.color.ORANGE, - ) + if widget: + arcade.draw_rect_outline( + rect=widget.rect, + color=arcade.color.WHITE, + border_width=2, + ) + + if self._debug: + # debugging + if isinstance(widget, Focusable): + if widget.neighbor_up: + self._draw_indicator( + widget.rect.top_center, + widget.neighbor_up.rect.bottom_center, + color=arcade.color.RED, + ) + if widget.neighbor_down: + self._draw_indicator( + widget.rect.bottom_center, + widget.neighbor_down.rect.top_center, + color=arcade.color.GREEN, + ) + if widget.neighbor_left: + self._draw_indicator( + widget.rect.center_left, + widget.neighbor_left.rect.center_right, + color=arcade.color.BLUE, + ) + if widget.neighbor_right: + self._draw_indicator( + widget.rect.center_right, + widget.neighbor_right.rect.center_left, + color=arcade.color.ORANGE, + ) def _draw_indicator(self, start: Vec2, end: Vec2, color=arcade.color.WHITE): arcade.draw_line(start.x, start.y, end.x, end.y, color, 2)