]> Repositories - hackapet/Adafruit_Blinka_Displayio.git/commitdiff
Initial untested splitting
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Tue, 19 Mar 2024 19:01:50 +0000 (12:01 -0700)
committerMelissa LeBlanc-Williams <melissa@adafruit.com>
Tue, 19 Mar 2024 19:01:50 +0000 (12:01 -0700)
busdisplay/__init__.py [moved from displayio/_display.py with 96% similarity]
busdisplay/_displaybus.py [moved from displayio/_displaybus.py with 71% similarity]
displayio/__init__.py
displayio/_displaycore.py
displayio/_ondiskbitmap.py
displayio/_shape.py [deleted file]
epaperdisplay/__init__.py [moved from displayio/_epaperdisplay.py with 96% similarity]
fourwire/__init__.py [moved from displayio/_fourwire.py with 99% similarity]
i2cdisplaybus/__init__.py [moved from displayio/_i2cdisplay.py with 96% similarity]
paralleldisplaybus/__init__.py [moved from paralleldisplay.py with 100% similarity]
setup.py

similarity index 96%
rename from displayio/_display.py
rename to busdisplay/__init__.py
index 9e720541fb9787093b56bf0a024e6655ccec7bb1..619b9fe2db717839479ccd40b711e4444eaf8dcc 100644 (file)
@@ -22,12 +22,12 @@ from typing import Optional
 import digitalio
 import microcontroller
 from circuitpython_typing import WriteableBuffer, ReadableBuffer
 import digitalio
 import microcontroller
 from circuitpython_typing import WriteableBuffer, ReadableBuffer
-from ._displaycore import _DisplayCore
+from displayio._displaycore import _DisplayCore
 from ._displaybus import _DisplayBus
 from ._displaybus import _DisplayBus
-from ._colorconverter import ColorConverter
-from ._group import Group, circuitpython_splash
-from ._area import Area
-from ._constants import (
+from displayio._colorconverter import ColorConverter
+from displayio._group import Group, circuitpython_splash
+from displayio._area import Area
+from displayio._constants import (
     CHIP_SELECT_TOGGLE_EVERY_BYTE,
     CHIP_SELECT_UNTOUCHED,
     DISPLAY_COMMAND,
     CHIP_SELECT_TOGGLE_EVERY_BYTE,
     CHIP_SELECT_UNTOUCHED,
     DISPLAY_COMMAND,
@@ -42,7 +42,7 @@ __version__ = "0.0.0+auto.0"
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
 
 
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
 
 
-class Display:
+class BusDisplay:
     # pylint: disable=too-many-instance-attributes, too-many-statements
     """This initializes a display and connects it into CircuitPython. Unlike other objects
     in CircuitPython, Display objects live until ``displayio.release_displays()`` is called.
     # pylint: disable=too-many-instance-attributes, too-many-statements
     """This initializes a display and connects it into CircuitPython. Unlike other objects
     in CircuitPython, Display objects live until ``displayio.release_displays()`` is called.
@@ -225,7 +225,7 @@ class Display:
         self.auto_refresh = auto_refresh
 
     def __new__(cls, *args, **kwargs):
         self.auto_refresh = auto_refresh
 
     def __new__(cls, *args, **kwargs):
-        from . import (  # pylint: disable=import-outside-toplevel, cyclic-import
+        from ..displayio import (  # pylint: disable=import-outside-toplevel, cyclic-import
             allocate_display,
         )
 
             allocate_display,
         )
 
@@ -242,19 +242,8 @@ class Display:
             )
         self._core.send(DISPLAY_DATA, CHIP_SELECT_UNTOUCHED, pixels)
 
             )
         self._core.send(DISPLAY_DATA, CHIP_SELECT_UNTOUCHED, pixels)
 
-    def show(self, group: Group) -> None:
-        """
-        .. note:: `show()` is deprecated and will be removed when CircuitPython 9.0.0
-          is released. Use ``.root_group = group`` instead.
-
-        Switches to displaying the given group of layers. When group is None, the
-        default CircuitPython terminal will be shown.
-
-        :param Group group: The group to show.
-        """
-        if group is None:
-            group = circuitpython_splash
-        self._core.set_root_group(group)
+    def show(self, _group: Group) -> None: # pylint: disable=missing-function-docstring
+        raise AttributeError(".show(x) removed. Use .root_group = x")
 
     def _set_root_group(self, root_group: Group) -> None:
         ok = self._core.set_root_group(root_group)
 
     def _set_root_group(self, root_group: Group) -> None:
         ok = self._core.set_root_group(root_group)
similarity index 71%
rename from displayio/_displaybus.py
rename to busdisplay/_displaybus.py
index 8080e6445e4d96feef8ff617c14dd19276d71ec0..0dd7edc032f3a4fee1a4622c5ada7b905979825c 100644 (file)
@@ -3,7 +3,7 @@
 # SPDX-License-Identifier: MIT
 
 """
 # SPDX-License-Identifier: MIT
 
 """
-`displayio._displaybus`
+`busdisplay._displaybus`
 ================================================================================
 
 Type aliases for Blinka
 ================================================================================
 
 Type aliases for Blinka
@@ -18,11 +18,11 @@ Type aliases for Blinka
 """
 
 from typing import Union
 """
 
 from typing import Union
-import paralleldisplay
-from ._fourwire import FourWire
-from ._i2cdisplay import I2CDisplay
+import paralleldisplaybus
+import fourwire
+import i2cdisplaybus
 
 __version__ = "0.0.0+auto.0"
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_Displayio.git"
 
 
 __version__ = "0.0.0+auto.0"
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_Displayio.git"
 
-_DisplayBus = Union[FourWire, I2CDisplay, paralleldisplay.ParallelBus]
+_DisplayBus = Union[fourwire.FourWire, i2cdisplaybus.I2CDisplayBus, paralleldisplaybus.ParallelBus]
index 55bb1d53a145621142f61d72c09dcbec6cbb8d58..87583f4f984eab010cc0785d62f98f4a9ddb382b 100644 (file)
@@ -18,19 +18,16 @@ displayio for Blinka
 """
 import threading
 from typing import Union
 """
 import threading
 from typing import Union
-from ._fourwire import FourWire
-from ._i2cdisplay import I2CDisplay
 from ._bitmap import Bitmap
 from ._colorspace import Colorspace
 from ._colorconverter import ColorConverter
 from ._bitmap import Bitmap
 from ._colorspace import Colorspace
 from ._colorconverter import ColorConverter
-from ._display import Display
-from ._epaperdisplay import EPaperDisplay
+from busdisplay import BusDisplay
+from epaperdisplay import EPaperDisplay
 from ._group import Group
 from ._ondiskbitmap import OnDiskBitmap
 from ._palette import Palette
 from ._group import Group
 from ._ondiskbitmap import OnDiskBitmap
 from ._palette import Palette
-from ._shape import Shape
 from ._tilegrid import TileGrid
 from ._tilegrid import TileGrid
-from ._displaybus import _DisplayBus
+from busdisplay._displaybus import _DisplayBus
 from ._constants import CIRCUITPY_DISPLAY_LIMIT
 
 __version__ = "0.0.0+auto.0"
 from ._constants import CIRCUITPY_DISPLAY_LIMIT
 
 __version__ = "0.0.0+auto.0"
@@ -63,7 +60,7 @@ def release_displays() -> None:
     display_buses.clear()
 
 
     display_buses.clear()
 
 
-def allocate_display(new_display: Union[Display, EPaperDisplay]) -> None:
+def allocate_display(new_display: Union[BusDisplay, EPaperDisplay]) -> None:
     """Add a display to the displays pool and return the new display"""
     if len(displays) >= CIRCUITPY_DISPLAY_LIMIT:
         raise RuntimeError("Too many displays")
     """Add a display to the displays pool and return the new display"""
     if len(displays) >= CIRCUITPY_DISPLAY_LIMIT:
         raise RuntimeError("Too many displays")
index 207f37a058dcb30584cceba469289e27d28fc559..cead44e45cbdf47b9e88f98862394f4fcd309954 100644 (file)
@@ -25,13 +25,13 @@ __repo__ = "https://github.com/adafruit/Adafruit_Blinka_Displayio.git"
 import time
 import struct
 from circuitpython_typing import WriteableBuffer, ReadableBuffer
 import time
 import struct
 from circuitpython_typing import WriteableBuffer, ReadableBuffer
-from paralleldisplay import ParallelBus
-from ._fourwire import FourWire
+from paralleldisplaybus import ParallelBus
+from fourwire import FourWire
 from ._group import Group
 from ._group import Group
-from ._i2cdisplay import I2CDisplay
+from i2cdisplaybus import I2CDisplayBus
 from ._structs import ColorspaceStruct, TransformStruct
 from ._area import Area
 from ._structs import ColorspaceStruct, TransformStruct
 from ._area import Area
-from ._displaybus import _DisplayBus
+from busdisplay._displaybus import _DisplayBus
 from ._helpers import bswap16
 from ._constants import (
     CHIP_SELECT_UNTOUCHED,
 from ._helpers import bswap16
 from ._constants import (
     CHIP_SELECT_UNTOUCHED,
@@ -99,7 +99,7 @@ class _DisplayCore:
         self.last_refresh = 0
 
         if bus:
         self.last_refresh = 0
 
         if bus:
-            if isinstance(bus, (FourWire, I2CDisplay, ParallelBus)):
+            if isinstance(bus, (FourWire, I2CDisplayBus, ParallelBus)):
                 self._bus_reset = bus.reset
                 self._bus_free = bus._free
                 self._begin_transaction = bus._begin_transaction
                 self._bus_reset = bus.reset
                 self._bus_free = bus._free
                 self._begin_transaction = bus._begin_transaction
index 67c7e08289cfa8156a3ceecd97b9299a99940423..654a312a199b999b22231da11f5b1f262b0bbb04 100644 (file)
@@ -35,9 +35,6 @@ class OnDiskBitmap:
     load times. These load times may result in frame tearing where only part of the image is
     visible.
 
     load times. These load times may result in frame tearing where only part of the image is
     visible.
 
-    It's easiest to use on a board with a built in display such as the `Hallowing M0 Express
-    <https://www.adafruit.com/product/3900>`_.
-
     .. code-block:: Python
 
         import board
     .. code-block:: Python
 
         import board
@@ -48,7 +45,7 @@ class OnDiskBitmap:
         board.DISPLAY.auto_brightness = False
         board.DISPLAY.brightness = 0
         splash = displayio.Group()
         board.DISPLAY.auto_brightness = False
         board.DISPLAY.brightness = 0
         splash = displayio.Group()
-        board.DISPLAY.show(splash)
+        board.DISPLAY.root_group = splash
 
         odb = displayio.OnDiskBitmap(\'/sample.bmp\')
         face = displayio.TileGrid(odb, pixel_shader=odb.pixel_shader)
 
         odb = displayio.OnDiskBitmap(\'/sample.bmp\')
         face = displayio.TileGrid(odb, pixel_shader=odb.pixel_shader)
diff --git a/displayio/_shape.py b/displayio/_shape.py
deleted file mode 100644 (file)
index 8545cf1..0000000
+++ /dev/null
@@ -1,129 +0,0 @@
-# SPDX-FileCopyrightText: 2020 Melissa LeBlanc-Williams for Adafruit Industries
-#
-# SPDX-License-Identifier: MIT
-
-
-"""
-`displayio.shape`
-================================================================================
-
-displayio for Blinka
-
-**Software and Dependencies:**
-
-* Adafruit Blinka:
-  https://github.com/adafruit/Adafruit_Blinka/releases
-
-* Author(s): Melissa LeBlanc-Williams
-
-"""
-
-from ._bitmap import Bitmap
-from ._area import Area
-from ._helpers import clamp
-
-__version__ = "0.0.0+auto.0"
-__repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
-
-
-class Shape(Bitmap):
-    """Create a Shape object with the given fixed size. Each pixel is one bit and is stored
-    by the column boundaries of the shape on each row. Each row’s boundary defaults to the
-    full row.
-    """
-
-    def __init__(
-        self, width: int, height: int, *, mirror_x: bool = False, mirror_y: bool = False
-    ):
-        """Create a Shape object with the given fixed size. Each pixel is one bit and is
-        stored by the column boundaries of the shape on each row. Each row’s boundary
-        defaults to the full row.
-        """
-        self._mirror_x = mirror_x
-        self._mirror_y = mirror_y
-        self._width = width
-        self._height = height
-        if self._mirror_x:
-            width //= 2
-            width += self._width % 2
-        self._half_width = width
-        if self._mirror_y:
-            height //= 2
-            height += self._height % 2
-        self._half_height = height
-        self._data = bytearray(height * 4)
-        for i in range(height):
-            self._data[2 * i] = 0
-            self._data[2 * i + 1] = width
-
-        self._dirty_area = Area(0, 0, width, height)
-        super().__init__(width, height, 2)
-
-    def set_boundary(self, y: int, start_x: int, end_x: int) -> None:
-        """Loads pre-packed data into the given row."""
-        max_y = self._height - 1
-        if self._mirror_y:
-            max_y = self._half_height - 1
-        y = clamp(y, 0, max_y)
-        max_x = self._width - 1
-        if self._mirror_x:
-            max_x = self._half_width - 1
-        start_x = clamp(start_x, 0, max_x)
-        end_x = clamp(end_x, 0, max_x)
-
-        # find x-boundaries for updating based on current data and start_x, end_x, and mirror_x
-        lower_x = min(start_x, self._data[2 * y])
-
-        if self._mirror_x:
-            upper_x = (
-                self._width - lower_x + 1
-            )  # dirty rectangles are treated with max value exclusive
-        else:
-            upper_x = max(
-                end_x, self._data[2 * y + 1]
-            )  # dirty rectangles are treated with max value exclusive
-
-        # find y-boundaries based on y and mirror_y
-        lower_y = y
-
-        if self._mirror_y:
-            upper_y = (
-                self._height - lower_y + 1
-            )  # dirty rectangles are treated with max value exclusive
-        else:
-            upper_y = y + 1  # dirty rectangles are treated with max value exclusive
-
-        self._data[2 * y] = start_x  # update the data array with the new boundaries
-        self._data[2 * y + 1] = end_x
-
-        if self._dirty_area.x1 == self._dirty_area.x2:  # dirty region is empty
-            self._dirty_area.x1 = lower_x
-            self._dirty_area.x2 = upper_x
-            self._dirty_area.y1 = lower_y
-            self._dirty_area.y2 = upper_y
-        else:
-            self._dirty_area.x1 = min(lower_x, self._dirty_area.x1)
-            self._dirty_area.x2 = max(upper_x, self._dirty_area.x2)
-            self._dirty_area.y1 = min(lower_y, self._dirty_area.y1)
-            self._dirty_area.y2 = max(upper_y, self._dirty_area.y2)
-
-    def _get_pixel(self, x: int, y: int) -> int:
-        if x >= self._width or x < 0 or y >= self._height or y < 0:
-            return 0
-        if self._mirror_x and x >= self._half_width:
-            x = self._width - x - 1
-        if self._mirror_y and y >= self._half_height:
-            y = self._height - y - 1
-        start_x = self._data[2 * y]
-        end_x = self._data[2 * y + 1]
-        if x < start_x or x >= end_x:
-            return 0
-        return 1
-
-    def _finish_refresh(self):
-        self._dirty_area.x1 = 0
-        self._dirty_area.x2 = 0
-
-    def _get_refresh_areas(self, areas: list[Area]) -> None:
-        if self._dirty_area.x1 != self._dirty_area.x2:
-            areas.append(self._dirty_area)
similarity index 96%
rename from displayio/_epaperdisplay.py
rename to epaperdisplay/__init__.py
index 6ce0664be468bd123db42251e7a76fcf23f52f69..537e9e60ec128eac02c1e13767783d263e7e8f6e 100644 (file)
@@ -22,12 +22,12 @@ from typing import Optional, Union
 import microcontroller
 from digitalio import DigitalInOut
 from circuitpython_typing import ReadableBuffer
 import microcontroller
 from digitalio import DigitalInOut
 from circuitpython_typing import ReadableBuffer
-from ._displaycore import _DisplayCore
-from ._group import Group, circuitpython_splash
-from ._colorconverter import ColorConverter
-from ._displaybus import _DisplayBus
-from ._area import Area
-from ._constants import (
+from displayio._displaycore import _DisplayCore
+from displayio._group import Group, circuitpython_splash
+from displayio._colorconverter import ColorConverter
+from busdisplay._displaybus import _DisplayBus
+from displayio._area import Area
+from displayio._constants import (
     CHIP_SELECT_TOGGLE_EVERY_BYTE,
     CHIP_SELECT_UNTOUCHED,
     DISPLAY_COMMAND,
     CHIP_SELECT_TOGGLE_EVERY_BYTE,
     CHIP_SELECT_UNTOUCHED,
     DISPLAY_COMMAND,
@@ -235,10 +235,10 @@ class EPaperDisplay:
         if highlight_color == 0x00 and write_color_ram_command != NO_COMMAND:
             """TODO: Clear"""
 
         if highlight_color == 0x00 and write_color_ram_command != NO_COMMAND:
             """TODO: Clear"""
 
-        self.show(circuitpython_splash)
+        self._set_root_group(circuitpython_splash)
 
     def __new__(cls, *args, **kwargs):
 
     def __new__(cls, *args, **kwargs):
-        from . import (  # pylint: disable=import-outside-toplevel, cyclic-import
+        from ..displayio import (  # pylint: disable=import-outside-toplevel, cyclic-import
             allocate_display,
         )
 
             allocate_display,
         )
 
@@ -246,18 +246,8 @@ class EPaperDisplay:
         allocate_display(display_instance)
         return display_instance
 
         allocate_display(display_instance)
         return display_instance
 
-    def show(self, group: Group) -> None:
-        # pylint: disable=unnecessary-pass
-        """
-        .. note:: `show()` is deprecated and will be removed when CircuitPython 9.0.0
-          is released. Use ``.root_group = group`` instead.
-
-        Switches to displaying the given group of layers. When group is None, the default
-        CircuitPython terminal will be shown (eventually).
-        """
-        if group is None:
-            group = circuitpython_splash
-        self._core.set_root_group(group)
+    def show(self, _group: Group) -> None: # pylint: disable=missing-function-docstring
+        raise AttributeError(".show(x) removed. Use .root_group = x")
 
     def _set_root_group(self, root_group: Group) -> None:
         ok = self._core.set_root_group(root_group)
 
     def _set_root_group(self, root_group: Group) -> None:
         ok = self._core.set_root_group(root_group)
similarity index 99%
rename from displayio/_fourwire.py
rename to fourwire/__init__.py
index 1ea905cc89767556852f5751e01f98006400c55b..5e136be48a382fc52008c968b9619ea1dc0b076c 100644 (file)
@@ -23,7 +23,7 @@ import digitalio
 import busio
 import microcontroller
 from circuitpython_typing import ReadableBuffer
 import busio
 import microcontroller
 from circuitpython_typing import ReadableBuffer
-from ._constants import (
+from displayio._constants import (
     CHIP_SELECT_TOGGLE_EVERY_BYTE,
     CHIP_SELECT_UNTOUCHED,
     DISPLAY_COMMAND,
     CHIP_SELECT_TOGGLE_EVERY_BYTE,
     CHIP_SELECT_UNTOUCHED,
     DISPLAY_COMMAND,
similarity index 96%
rename from displayio/_i2cdisplay.py
rename to i2cdisplaybus/__init__.py
index 9611fb09187a687351c308a3cbb07097997b8eca..bcc8e4c35c855d45f4426cff29262f54a07218ff 100644 (file)
@@ -24,13 +24,13 @@ import time
 import busio
 import digitalio
 from circuitpython_typing import ReadableBuffer
 import busio
 import digitalio
 from circuitpython_typing import ReadableBuffer
-from ._constants import CHIP_SELECT_UNTOUCHED, DISPLAY_COMMAND
+from displayio._constants import CHIP_SELECT_UNTOUCHED, DISPLAY_COMMAND
 
 __version__ = "0.0.0+auto.0"
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
 
 
 
 __version__ = "0.0.0+auto.0"
 __repo__ = "https://github.com/adafruit/Adafruit_Blinka_displayio.git"
 
 
-class I2CDisplay:
+class I2CDisplayBus:
     """Manage updating a display over I2C in the background while Python code runs.
     It doesn’t handle display initialization.
     """
     """Manage updating a display over I2C in the background while Python code runs.
     It doesn’t handle display initialization.
     """
@@ -54,7 +54,7 @@ class I2CDisplay:
         self._dev_addr = device_address
 
     def __new__(cls, *args, **kwargs):
         self._dev_addr = device_address
 
     def __new__(cls, *args, **kwargs):
-        from . import (  # pylint: disable=import-outside-toplevel, cyclic-import
+        from ..displayio import (  # pylint: disable=import-outside-toplevel, cyclic-import
             allocate_display_bus,
         )
 
             allocate_display_bus,
         )
 
index 7a04dcec57b95164fd8288967b2ec15feb9078a2..011af4c00665e735eb24fb496f5a92707558a1ac 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -56,6 +56,6 @@ setup(
     keywords="adafruit blinka circuitpython micropython displayio lcd tft display pitft",
     # You can just specify the packages manually here if your project is
     # simple. Or you can use find_packages().
     keywords="adafruit blinka circuitpython micropython displayio lcd tft display pitft",
     # You can just specify the packages manually here if your project is
     # simple. Or you can use find_packages().
-    py_modules=["fontio", "terminalio", "paralleldisplay"],
-    packages=["displayio", "vectorio"],
+    py_modules=["fontio", "terminalio"],
+    packages=["displayio", "vectorio", "paralleldisplaybus", "i2cdisplaybus", "fourwire", "busdisplay"],
 )
 )