import time
import struct
+from array import array
from typing import Optional
import digitalio
from PIL import Image
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):
from __future__ import annotations
from typing import Union, Callable
+import circuitpython_typing
from ._structs import TransformStruct
from ._tilegrid import TileGrid
from ._colorspace import Colorspace
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
import struct
from typing import Union, Optional, Tuple
+import circuitpython_typing
from ._bitmap import Bitmap
from ._colorconverter import ColorConverter
from ._ondiskbitmap import OnDiskBitmap
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
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 (