From: Melissa LeBlanc-Williams Date: Fri, 22 Sep 2023 22:29:38 +0000 (-0700) Subject: Fixed buffer and get_refresh_areas X-Git-Tag: 1.0.0^2~18 X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/commitdiff_plain/156e7fcd0eef94819ee29417e8a68894795a03f5?ds=inline Fixed buffer and get_refresh_areas --- diff --git a/displayio/_display.py b/displayio/_display.py index cdf9f78..ac71981 100644 --- a/displayio/_display.py +++ b/displayio/_display.py @@ -19,6 +19,7 @@ displayio for Blinka import time import struct +from array import array from typing import Optional import digitalio from PIL import Image @@ -372,9 +373,9 @@ class Display: if pixels_per_buffer % pixels_per_word: buffer_size += 1 - buffer = bytearray(buffer_size) + buffer = bytearray([0] * (buffer_size * struct.calcsize("I"))) mask_length = (pixels_per_buffer // 32) + 1 - mask = bytearray(mask_length) + mask = array("L", [0] * mask_length) remaining_rows = clipped.height() for subrect_index in range(subrectangles): diff --git a/displayio/_displaycore.py b/displayio/_displaycore.py index d2f298a..8db49e0 100644 --- a/displayio/_displaycore.py +++ b/displayio/_displaycore.py @@ -405,7 +405,7 @@ class _DisplayCore: """ Send the data to the current bus """ - print(data_type, chip_select, data) + # print(data_type, chip_select, data) self._send(data_type, chip_select, data) def begin_transaction(self) -> None: diff --git a/displayio/_group.py b/displayio/_group.py index 903d721..ed90f8e 100644 --- a/displayio/_group.py +++ b/displayio/_group.py @@ -19,6 +19,7 @@ displayio for Blinka from __future__ import annotations from typing import Union, Callable +import circuitpython_typing from ._structs import TransformStruct from ._tilegrid import TileGrid from ._colorspace import Colorspace @@ -145,7 +146,11 @@ class Group: del self._layers[index] def _fill_area( - self, colorspace: Colorspace, area: Area, mask: int, buffer: bytearray + self, + colorspace: Colorspace, + area: Area, + mask: circuitpython_typing.WriteableBuffer, + buffer: circuitpython_typing.WriteableBuffer, ) -> bool: if self._hidden_group: return False diff --git a/displayio/_tilegrid.py b/displayio/_tilegrid.py index 72e57c0..ec5e45f 100644 --- a/displayio/_tilegrid.py +++ b/displayio/_tilegrid.py @@ -19,6 +19,7 @@ displayio for Blinka import struct from typing import Union, Optional, Tuple +import circuitpython_typing from ._bitmap import Bitmap from ._colorconverter import ColorConverter from ._ondiskbitmap import OnDiskBitmap @@ -211,7 +212,11 @@ class TileGrid: image.putalpha(alpha.convert("L")) def _fill_area( - self, colorspace: Colorspace, area: Area, mask: bytearray, buffer: bytearray + self, + colorspace: Colorspace, + area: Area, + mask: circuitpython_typing.WriteableBuffer, + buffer: circuitpython_typing.WriteableBuffer, ) -> bool: """Draw onto the image""" # pylint: disable=too-many-locals,too-many-branches,too-many-statements @@ -400,22 +405,24 @@ class TileGrid: areas.append(self._previous_area) return - tail = areas[-1] + tail = areas[-1] if areas else None # If we have an in-memory bitmap, then check it for modifications if isinstance(self._bitmap, Bitmap): self._bitmap._get_refresh_areas(areas) # pylint: disable=protected-access - if tail != areas[-1]: + refresh_area = areas[-1] if areas else None + if tail != refresh_area: # Special case a TileGrid that shows a full bitmap and use its # dirty area. Copy it to ours so we can transform it. if self._tiles_in_bitmap == 1: - areas[-1].copy_into(self._dirty_area) + refresh_area.copy_into(self._dirty_area) self._partial_change = True else: self._full_change = True elif isinstance(self._bitmap, Shape): self._bitmap._get_refresh_areas(areas) # pylint: disable=protected-access - if areas[-1] != tail: - areas[-1].copy_into(self._dirty_area) + refresh_area = areas[-1] if areas else None + if refresh_area != tail: + refresh_area.copy_into(self._dirty_area) self._partial_change = True self._full_change = self._full_change or (