X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/blobdiff_plain/a53c930973a24a7c55db9448e45d7ca7974cb56e..4ce6ccfe5fdee154abaa19bcdbdc1560b8cf43a0:/displayio/_display.py diff --git a/displayio/_display.py b/displayio/_display.py index 74ee095..d7d04cf 100644 --- a/displayio/_display.py +++ b/displayio/_display.py @@ -18,7 +18,6 @@ displayio for Blinka """ import time -import struct from array import array from typing import Optional import digitalio @@ -338,7 +337,7 @@ class Display: return True rows_per_buffer = clipped.height() - pixels_per_word = (struct.calcsize("I") * 8) // self._core.colorspace.depth + pixels_per_word = 32 // self._core.colorspace.depth pixels_per_buffer = clipped.size() subrectangles = 1 @@ -366,11 +365,7 @@ class Display: buffer_size = pixels_per_buffer // pixels_per_word if pixels_per_buffer % pixels_per_word: buffer_size += 1 - - # TODO: Optimize with memoryview - buffer = bytearray([0] * (buffer_size * struct.calcsize("I"))) - mask_length = (pixels_per_buffer // 32) + 1 - mask = array("L", [0] * mask_length) + mask_length = (pixels_per_buffer // 8) + 1 # 1 bit per pixel + 1 remaining_rows = clipped.height() for subrect_index in range(subrectangles): @@ -393,6 +388,8 @@ class Display: 8 // self._core.colorspace.depth ) + buffer = memoryview(bytearray([0] * (buffer_size * 4))) + mask = memoryview(bytearray([0] * mask_length)) self._core.fill_area(subrectangle, mask, buffer) self._core.begin_transaction() self._send_pixels(buffer[:subrectangle_size_bytes]) @@ -405,13 +402,13 @@ class Display: raise ValueError("Display must have a 16 bit colorspace.") area = Area(0, y, self._core.width, y + 1) - pixels_per_word = (struct.calcsize("I") * 8) // self._core.colorspace.depth + pixels_per_word = 32 // self._core.colorspace.depth buffer_size = self._core.width // pixels_per_word pixels_per_buffer = area.size() if pixels_per_buffer % pixels_per_word: buffer_size += 1 - buffer = bytearray([0] * (buffer_size * struct.calcsize("I"))) + buffer = bytearray([0] * (buffer_size * 4)) mask_length = (pixels_per_buffer // 32) + 1 mask = array("L", [0x00000000] * mask_length) self._core.fill_area(area, mask, buffer)