diff --git a/CHANGELOG.md b/CHANGELOG.md index 845c220903..28eb11fbbe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,12 @@ You can grab pre-release versions from PyPi. See the available versions from the Arcade [PyPi Release History](https://pypi.org/project/arcade/#history) page. +## Version 3.1.2 (unreleased) + +- GUI + - Fix `UIScrollArea.add` always returning None + - Support `layer` in `UIView.add_widget()` + ## Version 3.1.1 * Text objects are now lazy and can be created before the window diff --git a/arcade/gui/experimental/scroll_area.py b/arcade/gui/experimental/scroll_area.py index cc1bc55352..25b75d5d48 100644 --- a/arcade/gui/experimental/scroll_area.py +++ b/arcade/gui/experimental/scroll_area.py @@ -1,6 +1,6 @@ from __future__ import annotations -from typing import Iterable +from typing import Iterable, TypeVar from pyglet.event import EVENT_UNHANDLED @@ -23,6 +23,8 @@ ) from arcade.types import LBWH +W = TypeVar("W", bound="UIWidget") + class UIScrollBar(UIWidget): """Scroll bar for a UIScrollLayout. @@ -210,7 +212,7 @@ def __init__( y: float = 0, width: float = 300, height: float = 300, - children: Iterable["UIWidget"] = tuple(), + children: Iterable[UIWidget] = tuple(), size_hint=None, size_hint_min=None, size_hint_max=None, @@ -242,7 +244,7 @@ def __init__( bind(self, "scroll_x", self.trigger_full_render) bind(self, "scroll_y", self.trigger_full_render) - def add(self, child: "UIWidget", **kwargs): + def add(self, child: W, **kwargs) -> W: """Add a child to the widget.""" if self._children: raise ValueError("UIScrollArea can only have one child") @@ -250,7 +252,9 @@ def add(self, child: "UIWidget", **kwargs): super().add(child, **kwargs) self.trigger_full_render() - def remove(self, child: "UIWidget"): + return child + + def remove(self, child: UIWidget): """Remove a child from the widget.""" super().remove(child) self.trigger_full_render() diff --git a/arcade/gui/ui_manager.py b/arcade/gui/ui_manager.py index ffa4c055b0..b97505ce3f 100644 --- a/arcade/gui/ui_manager.py +++ b/arcade/gui/ui_manager.py @@ -320,7 +320,7 @@ def on_update(self, time_delta): """Dispatches an update event to all widgets in the UIManager.""" return self.dispatch_ui_event(UIOnUpdateEvent(self, time_delta)) - def draw(self, pixelated=False) -> None: + def draw(self, **kwargs) -> None: """Will draw all widgets to the window. UIManager caches all rendered widgets into a framebuffer (something like a diff --git a/arcade/gui/view.py b/arcade/gui/view.py index 885f4587a1..7190952797 100644 --- a/arcade/gui/view.py +++ b/arcade/gui/view.py @@ -31,9 +31,15 @@ def __init__(self): The UIManager of this view. """ - def add_widget(self, widget: W) -> W: - """Add a widget to the UIManager of this view.""" - return self.ui.add(widget) + def add_widget(self, widget: W, *, index=None, layer=UIManager.DEFAULT_LAYER) -> W: + """Add a widget to the UIManager of this view. + + Args: + widget: widget to add + index: position a widget is added, None has the highest priority + layer: layer which the widget should be added to, higher layer are above + """ + return self.ui.add(widget, index=index, layer=layer) def on_show_view(self): """If subclassing UIView, don't forget to call super().on_show_view()."""