Compare commits

...

3 commits

Author SHA1 Message Date
Scott Shawcroft
2fe9345ee8
Merge pull request #102 from FoamyGuy/set_root_group
root_group properties/functions on Display object and displaycore.
2022-12-15 09:19:17 -08:00
foamyguy
7c0bd2f50d root_group properties/functions on Display object and displaycore. 2022-12-09 17:51:58 -06:00
foamyguy
ec2857d4ec starting set root group. show none also 2022-12-07 20:40:45 -06:00
2 changed files with 35 additions and 8 deletions

View file

@ -23,7 +23,7 @@ import threading
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
@ -158,7 +158,7 @@ class Display:
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:
@ -240,7 +240,7 @@ class Display:
"""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,
@ -263,6 +263,7 @@ class Display:
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))
@ -272,9 +273,19 @@ class Display:
) # pylint: disable=protected-access
# save image to buffer (or probably refresh buffer so we can compare)
self._buffer.paste(buffer)
else:
# 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
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)
@ -452,3 +463,15 @@ class Display:
def bus(self) -> _DisplayBus:
"""Current Display Bus"""
return self._core.get_bus()
@property
def root_group(self) -> Group:
"""The root group on the display."""
return self._core.get_root_group()
@root_group.setter
def root_group(self, new_group):
"""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)

View file

@ -151,7 +151,11 @@ class _DisplayCore:
if self._current_group is not None:
self._current_group._update_transform(self._transform)
def show(self, root_group: Group) -> bool:
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
"""