X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/blobdiff_plain/b971dbe24e9c469e1929573909a6db63941b5d32..03b2e1008f33585652fad5ecedad65d44694b2bc:/displayio/_group.py diff --git a/displayio/_group.py b/displayio/_group.py index abfe807..b38eaff 100644 --- a/displayio/_group.py +++ b/displayio/_group.py @@ -19,16 +19,13 @@ displayio for Blinka from __future__ import annotations from typing import Union, Callable -from recordclass import recordclass +from ._structs import TransformStruct from ._tilegrid import TileGrid __version__ = "0.0.0-auto.0" __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git" -Transform = recordclass("Transform", "x y dx dy scale transpose_xy mirror_x mirror_y") - - class Group: """ Manage a group of sprites and groups and how they are inter-related. @@ -52,14 +49,14 @@ class Group: self._hidden_group = False self._layers = [] self._supported_types = (TileGrid, Group) - self.in_group = False - self._absolute_transform = Transform(0, 0, 1, 1, 1, False, False, False) + self._in_group = False + self._absolute_transform = TransformStruct(0, 0, 1, 1, 1, False, False, False) self._set_scale(scale) # Set the scale via the setter def _update_transform(self, parent_transform): """Update the parent transform and child transforms""" - self.in_group = parent_transform is not None - if self.in_group: + self._in_group = parent_transform is not None + if self._in_group: x = self._group_x y = self._group_y if parent_transform.transpose_xy: @@ -76,7 +73,7 @@ class Group: def _update_child_transforms(self): # pylint: disable=protected-access - if self.in_group: + if self._in_group: for layer in self._layers: layer._update_transform(self._absolute_transform) @@ -100,7 +97,7 @@ class Group: """Insert a layer into the group.""" if not isinstance(layer, self._supported_types): raise ValueError("Invalid Group Member") - if layer.in_group: + if layer._in_group: # pylint: disable=protected-access raise ValueError("Layer already in a group.") self._layers.insert(index, layer) self._layer_update(index) @@ -111,32 +108,36 @@ class Group: """ return self._layers.index(layer) - def pop(self, index=-1) -> Union[Group, TileGrid]: + def pop(self, index: int = -1) -> Union[Group, TileGrid]: """Remove the ith item and return it.""" self._removal_cleanup(index) return self._layers.pop(index) - def remove(self, layer) -> None: + def remove(self, layer: Union[Group, TileGrid]) -> None: """Remove the first copy of layer. Raises ValueError if it is not present.""" index = self.index(layer) self._layers.pop(index) + def __bool__(self) -> bool: + """Returns if there are any layers""" + return len(self._layers) > 0 + def __len__(self) -> int: """Returns the number of layers in a Group""" return len(self._layers) - def __getitem__(self, index) -> Union[Group, TileGrid]: + def __getitem__(self, index: int) -> Union[Group, TileGrid]: """Returns the value at the given index.""" return self._layers[index] - def __setitem__(self, index, value) -> None: + def __setitem__(self, index: int, value: Union[Group, TileGrid]) -> None: """Sets the value at the given index.""" self._removal_cleanup(index) self._layers[index] = value self._layer_update(index) - def __delitem__(self, index) -> None: + def __delitem__(self, index: int) -> None: """Deletes the value at the given index.""" del self._layers[index] @@ -152,10 +153,15 @@ class Group: """Sort the members of the group.""" self._layers.sort(key=key, reverse=reverse) + def _finish_refresh(self): + for layer in self._layers: + if isinstance(layer, (Group, TileGrid)): + layer._finish_refresh() # pylint: disable=protected-access + @property def hidden(self) -> bool: - """True when the Group and all of it’s layers are not visible. When False, the - Group’s layers are visible if they haven’t been hidden. + """True when the Group and all of it's layers are not visible. When False, the + Group’s layers are visible if they haven't been hidden. """ return self._hidden_group