from typing import Optional
from dataclasses import astuple
import digitalio
-from PIL import Image
+from PIL import Image, ImageDraw
import numpy
import microcontroller
import circuitpython_typing
self._buffer = Image.new("RGB", (width, height))
self._subrectangles = []
self._bounds_encoding = ">BB" if single_byte_bounds else ">HH"
- self._current_group = None
+
displays.append(self)
self._refresh_thread = None
if self._auto_refresh:
"""Switches to displaying the given group of layers. When group is None, the
default CircuitPython terminal will be shown.
"""
- self._core.show(group)
+ self._core.set_root_group(group)
def refresh(
self,
if not self._core.start_refresh():
return False
+ force_full_refresh = False
# Go through groups and and add each to buffer
if self._core._current_group is not None:
buffer = Image.new("RGBA", (self._core._width, self._core._height))
self._buffer.paste(buffer)
else:
# show nothing
- print("show nothing")
buffer = Image.new("RGBA", (self._core._width, self._core._height))
+ draw = ImageDraw.Draw(buffer)
+ draw.rectangle([(0, 0), buffer.size], fill=(0, 0, 0))
self._buffer.paste(buffer)
+ force_full_refresh = True
- self._subrectangles = self._core.get_refresh_areas()
-
- for area in self._subrectangles:
- self._refresh_display_area(area)
+ if force_full_refresh:
+ full_rect = RectangleStruct(0, 0, self._width, self._height)
+ self._refresh_display_area(full_rect)
+ else:
+ self._subrectangles = self._core.get_refresh_areas()
+ for area in self._subrectangles:
+ self._refresh_display_area(area)
self._core.finish_refresh()
@property
def root_group(self) -> Group:
- return self._current_group
+ """The root group on the display."""
+ return self._core.get_root_group()
@root_group.setter
def root_group(self, new_group):
- self._current_group = new_group
\ No newline at end of file
+ """Switches to displaying the given group of layers. When group is None,
+ a blank screen will be shown.
+ """
+ self._core.set_root_group(new_group)
if self._current_group is not None:
self._current_group._update_transform(self._transform)
- def show(self, root_group: Group) -> bool:
- # pylint: disable=protected-access
-
- """
- Switches to displaying the given group of layers. When group is `None`, the
- default CircuitPython terminal will be shown.
-
- :param Optional[displayio.Group] root_group: The group to show.
- """
-
- """
- # TODO: Implement Supervisor
- if root_group is None:
- circuitpython_splash = _Supervisor().circuitpython_splash
- if not circuitpython_splash._in_group:
- root_group = circuitpython_splash
- elif self._current_group == circuitpython_splash:
- return True
- """
-
- if root_group == self._current_group:
- return True
-
- if root_group is not None and root_group._in_group:
- return False
-
- if self._current_group is not None:
- self._current_group._in_group = False
-
- if root_group is not None:
- root_group._update_transform(self._transform)
- root_group._in_group = True
-
- self._current_group = root_group
- self._full_refresh = True
-
- print(f"end of show: {root_group}")
- return True
+ def get_root_group(self):
+ """The root group on the display."""
+ return self._current_group
def set_root_group(self, root_group: Group) -> bool:
# pylint: disable=protected-access