From d91fcaf031c26a740269389fa94fe6b2d3267d7c Mon Sep 17 00:00:00 2001 From: Adafruit Adabot Date: Sun, 4 Apr 2021 09:04:34 -0400 Subject: [PATCH 1/5] Initial Commit --- .../utilities/wheel_maker.py | 187 ++++++++++++++++++ .../widgets/color_picker.py | 174 ++++++++++++++++ docs/conf.py | 2 + 3 files changed, 363 insertions(+) create mode 100644 adafruit_displayio_layout/utilities/wheel_maker.py create mode 100644 adafruit_displayio_layout/widgets/color_picker.py diff --git a/adafruit_displayio_layout/utilities/wheel_maker.py b/adafruit_displayio_layout/utilities/wheel_maker.py new file mode 100644 index 0000000..293972e --- /dev/null +++ b/adafruit_displayio_layout/utilities/wheel_maker.py @@ -0,0 +1,187 @@ +# SPDY-FileCopyrightText: 2012 jacksongabbard +# SPDX-FileCopyrightText: 2019 Dave Astels for Adafruit Industries +# SPDX-FileCopyrightText: 2021 Kevin Matocha, Jose David M. +# +# SPDX-License-Identifier: MIT +# SPDY-License-Identifier: Unlicense + +""" +`adafruit_wheel_maker` +================================================================================ + +Save a displayio.Bitmap (and associated displayio.Palette) in a BMP file. +This script is adapted in the works from Dave Astels on the ``adafruit_bitmapsaver`` +and the works of Jackson Glabbard +https://jg.gg/2012/05/28/generating-a-color-picker-style-color-wheel-in-python/ +https://github.com/jacksongabbard/Python-Color-Gamut-Generator/blob/master/color-wheel-generator.py +and Kevin Matocha on the ``switch_round`` for the ``_color_to_tuple`` function + +* Author(s): Dave Astels, Jackson Glabbard, Kevin Matocha, Jose David M. + +Implementation Notes +-------------------- + +**Hardware:** + + +**Software and Dependencies:** + +* Adafruit CircuitPython firmware for the supported boards: + https://github.com/adafruit/circuitpython/releases + +""" + +import math +import struct +import gc +import board +import digitalio +import busio +try: + import adafruit_sdcard + import storage +except ImportError: + pass + +# pylint: disable=invalid-name, no-member, too-many-locals + + +def _write_bmp_header(output_file, filesize): + output_file.write(bytes("BM", "ascii")) + output_file.write(struct.pack(" 1: + shade_ratio = shade - 1 + new_chan = (0xFF * shade_ratio) + (new_chan * (1 - shade_ratio)) + + output = output + (int(new_chan) << bit) + bit = bit + 8 + return output + + +def color_to_tuple(value): + """Converts a color from a 24-bit integer to a tuple. + :param value: RGB LED desired value - can be a RGB tuple or a 24-bit integer. + """ + if isinstance(value, tuple): + return value + if isinstance(value, int): + if value >> 24: + raise ValueError("Only bits 0->23 valid for integer input") + r = value >> 16 + g = (value >> 8) & 0xFF + b = value & 0xFF + return [r, g, b] + + raise ValueError("Color must be a tuple or 24-bit integer value.") + + +color_wheel = [ + [0xFF, 0x00, 0xFF], + [0xFF, 0x00, 0x00], + [0xFF, 0xFF, 0x00], + [0x00, 0xFF, 0x00], + [0x00, 0xFF, 0xFF], + [0x00, 0x00, 0xFF], + [0xFF, 0x00, 0xFF], +] + + +def make_wheel(image_name, img_size, bg_color): + """ + :param image_name: TBD + :param img_size: TBD + :param bg_color: TBD + :return: color + """ + img_size_width = img_size + img_size_height = img_size + img_half = img_size / 2 + outer_radius = img_size // 2 + background_color = color_to_tuple(bg_color) + row_buffer = bytearray(_bytes_per_row(img_size_width)) + result_buffer = bytearray(2048) + + spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO) + cs = digitalio.DigitalInOut(board.SD_CS) + sdcard = adafruit_sdcard.SDCard(spi, cs) + vfs = storage.VfsFat(sdcard) + storage.mount(vfs, "/sd") + file_path = "/sd" + image_name + print("saving starts") + output_file = open(file_path, "wb") + filesize = 54 + img_size_height * _bytes_per_row(img_size_width) + _write_bmp_header(output_file, filesize) + _write_dib_header(output_file, img_size_width, img_size_height) + + for y in range(img_size): + buffer_index = 0 + for x in range(img_size): + dist = abs(math.sqrt((x - img_half) ** 2 + (y - img_half) ** 2)) + shade = 1 * dist / outer_radius + if x - img_half == 0: + angle = angle = -90 + if y > img_half: + angle = 90 + else: + angle = math.atan2((y - img_half), (x - img_half)) * 180 / math.pi + angle = (angle + 30) % 360 + + idx = angle / 60 + if idx < 0: + idx = 6 + idx + base = int(round(idx)) + adj = (6 + base + (-1 if base > idx else 1)) % 6 + ratio = max(idx, base) - min(idx, base) + color = make_color(base, adj, ratio, shade) + + if dist > outer_radius: + color_rgb = background_color + else: + color_rgb = color_to_tuple(color) + + for b in color_rgb: + row_buffer[buffer_index] = b & 0xFF + buffer_index += 1 + output_file.write(row_buffer) + for i in range(img_size_width * 2): + result_buffer[i] = 0 + gc.collect() + + output_file.close() + print("saving done") diff --git a/adafruit_displayio_layout/widgets/color_picker.py b/adafruit_displayio_layout/widgets/color_picker.py new file mode 100644 index 0000000..d7f5d8f --- /dev/null +++ b/adafruit_displayio_layout/widgets/color_picker.py @@ -0,0 +1,174 @@ +# SPDX-FileCopyrightText: 2021 Jose David +# +# SPDX-License-Identifier: MIT +""" + +`color_picker` +================================================================================ +A colorpicker using a existing bitmap. + +* Author(s): Jose David M. + +Implementation Notes +-------------------- + +**Hardware:** + +**Software and Dependencies:** + +* Adafruit CircuitPython firmware for the supported boards: + https://github.com/adafruit/circuitpython/releases + +""" + +################################ +# A color picker for CircuitPython, using displayio +# +# Features: +# - color picker using a existing Bitmap +# +# Future options to consider: +# --------------------------- +# Better color wheel logic +# Sliders to mix Red, Green and Blue +# + +import math +from displayio import TileGrid, OnDiskBitmap, ColorConverter +from adafruit_displayio_layout.widgets.widget import Widget +from adafruit_displayio_layout.widgets.control import Control + + +__version__ = "0.0.0-auto.0" +__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_DisplayIO_Layout.git" + + +class ColorPicker(Widget, Control): + """ + TBD + """ + + # pylint: disable=too-many-lines, too-many-instance-attributes, too-many-arguments + # pylint: disable=too-many-locals, too-many-statements + + def __init__( + self, + x=0, + y=0, + filename=None, + image_size=100, + touch_padding=0, + anchor_point=None, + anchored_position=None, + **kwargs, + ): + + Widget.__init__( + self, x=x, y=y, height=image_size, width=image_size, **kwargs, max_size=4 + ) + Control.__init__(self) + + self._file = open(filename, "rb") + image = OnDiskBitmap(self._file) + tile_grid = TileGrid(image, pixel_shader=ColorConverter()) + + self._image_size = image_size + self._touch_padding = touch_padding + + self.append(tile_grid) + + self.touch_boundary = ( + 0, + 0, + image.width, + image.height, + ) + + def contains(self, touch_point): # overrides, then calls Control.contains(x,y) + + """Checks if the ColorPicker was touched. Returns True if the touch_point is + within the ColorPicker's touch_boundary. + + :param touch_point: x,y location of the screen, converted to local coordinates. + :type touch_point: Tuple[x,y] + :return: Boolean + """ + + touch_x = ( + touch_point[0] - self.x + ) # adjust touch position for the local position + touch_y = touch_point[1] - self.y + + return super().contains((touch_x, touch_y, 0)) + + def when_selected(self, touch_point): + """Response function when ColorPicker is selected. When selected, the ColorPicker + will give the color corresponding with the position + + :param touch_point: x,y location of the screen, in absolute display coordinates. + :return: Color + + """ + + touch_x = ( + touch_point[0] - self.x + ) # adjust touch position for the local position + touch_y = touch_point[1] - self.y + + # Call the parent's .selected function in case there is any work up there. + # touch_point is adjusted for group's x,y position before sending to super() + super().selected((touch_x, touch_y, 0)) + return self._color_from_position(touch_x, touch_y, self._image_size) + + def _color_from_position(self, x, y, image_size): + img_half = image_size // 2 + dist = abs(math.sqrt((x - img_half) ** 2 + (y - img_half) ** 2)) + if x - img_half == 0: + angle = angle = -90 + if y > img_half: + angle = 90 + else: + angle = math.atan2((y - img_half), (x - img_half)) * 180 / math.pi + shade = 1 * dist / img_half + idx = angle / 60 + base = int(round(idx)) + adj = (6 + base + (-1 if base > idx else 1)) % 6 + ratio = max(idx, base) - min(idx, base) + color = self._make_color(base, adj, ratio, shade) + + return color + + @staticmethod + def _make_color(base, adj, ratio, shade): + + color_wheel = [ + [0xFF, 0x00, 0xFF], + [0xFF, 0x00, 0x00], + [0xFF, 0xFF, 0x00], + [0x00, 0xFF, 0x00], + [0x00, 0xFF, 0xFF], + [0x00, 0x00, 0xFF], + [0xFF, 0x00, 0xFF], + ] + + output = 0x0 + bit = 0 + """ + Go through each bit of the colors adjusting blue with blue, red with red, + green with green, etc. + """ + for pos in range(3): + base_chan = color_wheel[base][pos] + adj_chan = color_wheel[adj][pos] + new_chan = int(round(base_chan * (1 - ratio) + adj_chan * ratio)) + + # now alter the channel by the shade + if shade < 1: + new_chan = new_chan * shade + elif shade > 1: + shade_ratio = shade - 1 + new_chan = (0xFF * shade_ratio) + (new_chan * (1 - shade_ratio)) + + output = output + (int(new_chan) << bit) + bit = bit + 8 + return output diff --git a/docs/conf.py b/docs/conf.py index 554e2bf..32c3dc5 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -37,6 +37,8 @@ "adafruit_imageload", "adafruit_display_text", "bitmaptools", + "adafruit_sdcard", + "storage" ] From 71f0291e1ab46c5bc47d2f705761fc1b9a68a5b5 Mon Sep 17 00:00:00 2001 From: Adafruit Adabot Date: Sun, 4 Apr 2021 09:15:11 -0400 Subject: [PATCH 2/5] Black --- adafruit_displayio_layout/utilities/wheel_maker.py | 1 + docs/conf.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/adafruit_displayio_layout/utilities/wheel_maker.py b/adafruit_displayio_layout/utilities/wheel_maker.py index 293972e..9441cef 100644 --- a/adafruit_displayio_layout/utilities/wheel_maker.py +++ b/adafruit_displayio_layout/utilities/wheel_maker.py @@ -37,6 +37,7 @@ import board import digitalio import busio + try: import adafruit_sdcard import storage diff --git a/docs/conf.py b/docs/conf.py index 32c3dc5..ae7a682 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -38,7 +38,7 @@ "adafruit_display_text", "bitmaptools", "adafruit_sdcard", - "storage" + "storage", ] From 68678e82e18596f62ae99a6b26e0925eb3745dfe Mon Sep 17 00:00:00 2001 From: Adafruit Adabot Date: Sun, 4 Apr 2021 09:20:48 -0400 Subject: [PATCH 3/5] Docs Correction --- adafruit_displayio_layout/widgets/color_picker.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/adafruit_displayio_layout/widgets/color_picker.py b/adafruit_displayio_layout/widgets/color_picker.py index d7f5d8f..325491f 100644 --- a/adafruit_displayio_layout/widgets/color_picker.py +++ b/adafruit_displayio_layout/widgets/color_picker.py @@ -140,7 +140,10 @@ def _color_from_position(self, x, y, image_size): @staticmethod def _make_color(base, adj, ratio, shade): - + """ + Go through each bit of the colors adjusting blue with blue, red with red, + green with green, etc. + """ color_wheel = [ [0xFF, 0x00, 0xFF], [0xFF, 0x00, 0x00], @@ -153,10 +156,7 @@ def _make_color(base, adj, ratio, shade): output = 0x0 bit = 0 - """ - Go through each bit of the colors adjusting blue with blue, red with red, - green with green, etc. - """ + for pos in range(3): base_chan = color_wheel[base][pos] adj_chan = color_wheel[adj][pos] From 7760a6e99c8a23aee506199fe7cadeb08c6a3088 Mon Sep 17 00:00:00 2001 From: Adafruit Adabot Date: Sun, 4 Apr 2021 20:55:50 -0400 Subject: [PATCH 4/5] Documentation, examples, and graphics --- .../utilities/wheel_maker.py | 8 +- .../widgets/color_picker.py | 90 +++++++++++++++--- docs/color_picker.png | Bin 0 -> 18329 bytes docs/color_picker.png.license | 3 + docs/examples.rst | 9 ++ docs/wheel200.bmp | Bin 0 -> 120054 bytes docs/wheel200.bmp.license | 3 + ...isplayio_layout_color_picker_simpletest.py | 74 ++++++++++++++ 8 files changed, 170 insertions(+), 17 deletions(-) create mode 100644 docs/color_picker.png create mode 100644 docs/color_picker.png.license create mode 100644 docs/wheel200.bmp create mode 100644 docs/wheel200.bmp.license create mode 100644 examples/displayio_layout_color_picker_simpletest.py diff --git a/adafruit_displayio_layout/utilities/wheel_maker.py b/adafruit_displayio_layout/utilities/wheel_maker.py index 9441cef..ff58b71 100644 --- a/adafruit_displayio_layout/utilities/wheel_maker.py +++ b/adafruit_displayio_layout/utilities/wheel_maker.py @@ -150,23 +150,25 @@ def make_wheel(image_name, img_size, bg_color): _write_bmp_header(output_file, filesize) _write_dib_header(output_file, img_size_width, img_size_height) - for y in range(img_size): + for y in range(img_size, 0, -1): buffer_index = 0 for x in range(img_size): dist = abs(math.sqrt((x - img_half) ** 2 + (y - img_half) ** 2)) shade = 1 * dist / outer_radius if x - img_half == 0: - angle = angle = -90 + angle = -90 if y > img_half: angle = 90 else: angle = math.atan2((y - img_half), (x - img_half)) * 180 / math.pi - angle = (angle + 30) % 360 + + angle = (angle - 30) % 360 idx = angle / 60 if idx < 0: idx = 6 + idx base = int(round(idx)) + adj = (6 + base + (-1 if base > idx else 1)) % 6 ratio = max(idx, base) - min(idx, base) color = make_color(base, adj, ratio, shade) diff --git a/adafruit_displayio_layout/widgets/color_picker.py b/adafruit_displayio_layout/widgets/color_picker.py index 325491f..b6b5b47 100644 --- a/adafruit_displayio_layout/widgets/color_picker.py +++ b/adafruit_displayio_layout/widgets/color_picker.py @@ -5,7 +5,7 @@ `color_picker` ================================================================================ -A colorpicker using a existing bitmap. +A colorpicker using a existing bitmap created by the make_wheel utility. * Author(s): Jose David M. @@ -44,8 +44,70 @@ class ColorPicker(Widget, Control): - """ - TBD + """A widget to be used to select colors from a heel. + + :param str filename: name of the bitmap file to be used as a ColorPicker + + :param int x: x position of the color picker origin + :param int y: y position of the color picker origin + + :param int imagesize: size of the bitmap file. The bitmap colorwheels are squares. + + + **Quickstart: Importing and using the Color Picker** + + Here is one way of importing the ``ColorPicker`` class so you can use: + + .. code-block:: python + + from adafruit_displayio_layout.widgets.color_picker import ColorPicker + + Now you can create an Slider at pixel position x=20, y=30 using: + + .. code-block:: python + + my_colorpicker=ColorPicker(x=20, y=30) + + Once you setup your display, you can now add ``my_colorpicker`` to your display using: + + .. code-block:: python + + display.show(my_colorpicker) # add the group to the display + + If you want to have multiple display elements, you can create a group and then + append the slider and the other elements to the group. Then, you can add the full + group to the display as in this example: + + .. code-block:: python + + my_colorpicker= ColorPicker(20, 30) + my_group = displayio.Group(max_size=10) # make a group that can hold 10 items + my_group.append(my_colorpicker) # Add my_slider to the group + + # + # Append other display elements to the group + # + + display.show(my_group) # add the group to the display + + + **Final Notes** + + Depending on the screen results may vary. Resolution of the bitmap will no be as seen in a PC. + Sensitivity of the screen could also affect the behaviour of the library. + + + **The Color Picker Widget** + + .. figure:: color_picker.png + :scale: 100 % + :align: center + :alt: Example of the color picker widget. + + Example of the color picker. representation will vary according to screen used. + + + """ # pylint: disable=too-many-lines, too-many-instance-attributes, too-many-arguments @@ -53,13 +115,10 @@ class ColorPicker(Widget, Control): def __init__( self, - x=0, - y=0, - filename=None, - image_size=100, - touch_padding=0, - anchor_point=None, - anchored_position=None, + filename: str = None, + x: int = 0, + y: int = 0, + image_size: int = 100, **kwargs, ): @@ -73,7 +132,6 @@ def __init__( tile_grid = TileGrid(image, pixel_shader=ColorConverter()) self._image_size = image_size - self._touch_padding = touch_padding self.append(tile_grid) @@ -101,11 +159,12 @@ def contains(self, touch_point): # overrides, then calls Control.contains(x,y) return super().contains((touch_x, touch_y, 0)) - def when_selected(self, touch_point): + def when_selected(self, touch_point, screen_height): """Response function when ColorPicker is selected. When selected, the ColorPicker will give the color corresponding with the position :param touch_point: x,y location of the screen, in absolute display coordinates. + :param int screen_height: screen height :return: Color """ @@ -113,7 +172,7 @@ def when_selected(self, touch_point): touch_x = ( touch_point[0] - self.x ) # adjust touch position for the local position - touch_y = touch_point[1] - self.y + touch_y = screen_height - touch_point[1] - self.y # Call the parent's .selected function in case there is any work up there. # touch_point is adjusted for group's x,y position before sending to super() @@ -124,11 +183,14 @@ def _color_from_position(self, x, y, image_size): img_half = image_size // 2 dist = abs(math.sqrt((x - img_half) ** 2 + (y - img_half) ** 2)) if x - img_half == 0: - angle = angle = -90 + angle = -90 if y > img_half: angle = 90 else: angle = math.atan2((y - img_half), (x - img_half)) * 180 / math.pi + + angle = (angle + 30) % 360 + shade = 1 * dist / img_half idx = angle / 60 base = int(round(idx)) diff --git a/docs/color_picker.png b/docs/color_picker.png new file mode 100644 index 0000000000000000000000000000000000000000..87a0021d6ed6baaaf78f98ddffb307d25debf8e1 GIT binary patch literal 18329 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 Ib4q9e0AF-L&;S4c literal 0 HcmV?d00001 diff --git a/docs/color_picker.png.license b/docs/color_picker.png.license new file mode 100644 index 0000000..a55a809 --- /dev/null +++ b/docs/color_picker.png.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2021 Jose David M. + +SPDX-License-Identifier: MIT diff --git a/docs/examples.rst b/docs/examples.rst index 265e5fa..fdce442 100644 --- a/docs/examples.rst +++ b/docs/examples.rst @@ -60,3 +60,12 @@ Displays annotations, examples relative to SwitchRound widget or as freeform. .. literalinclude:: ../examples/displayio_layout_annotation_simpletest.py :caption: examples/displayio_layout_annotation_simpletest.py :linenos: + +Color Picker example +-------------------- + +Simple example of the use of the Color Picker using a 200x200 pixels Bitmap + +.. literalinclude:: ../examples/displayio_layout_color_picker_simpletest.py + :caption: examples/displayio_layout_color_picker_simpletest.py + :linenos: diff --git a/docs/wheel200.bmp b/docs/wheel200.bmp new file mode 100644 index 0000000000000000000000000000000000000000..0ffcaa3f62e890a59b02b873c9473b7cc7b7f4df GIT binary patch literal 120054 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¥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 TW2dka*ir28*I?%Vv%^0CG$PKR literal 0 HcmV?d00001 diff --git a/docs/wheel200.bmp.license b/docs/wheel200.bmp.license new file mode 100644 index 0000000..a55a809 --- /dev/null +++ b/docs/wheel200.bmp.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2021 Jose David M. + +SPDX-License-Identifier: MIT diff --git a/examples/displayio_layout_color_picker_simpletest.py b/examples/displayio_layout_color_picker_simpletest.py new file mode 100644 index 0000000..b02428e --- /dev/null +++ b/examples/displayio_layout_color_picker_simpletest.py @@ -0,0 +1,74 @@ +# SPDX-FileCopyrightText: 2021 Jose David +# +# SPDX-License-Identifier: MIT +""" +Creates a single color picker +""" + +import time +import board +import terminalio +from displayio import Group, TileGrid, Bitmap, Palette +from adafruit_display_text import bitmap_label +from adafruit_displayio_layout.widgets.color_picker import ColorPicker +import adafruit_touchscreen + + +display = board.DISPLAY + +# TouchScreen Configuration +ts = adafruit_touchscreen.Touchscreen( + board.TOUCH_XL, + board.TOUCH_XR, + board.TOUCH_YD, + board.TOUCH_YU, + calibration=((5200, 59000), (5800, 57000)), + size=(display.width, display.height), +) + +# Colorwheel Bitmap file +filename = "wheel200.bmp" # You can find this file in the examples directory in the library Github +# Change the imagesize_used according to the bitmap file used. Colorwheel are identified +# according to the size in pixels +imagesize_used = 200 +my_colorpicker = ColorPicker( + filename, + display.width // 2 - imagesize_used // 2, + display.height // 2 - imagesize_used // 2, + imagesize_used, +) +my_group = Group(max_size=4) +my_group.append(my_colorpicker) + +palette = Palette(2) +palette[0] = 0x990099 +palette[1] = 0x00FFFF + +bitmap = Bitmap(100, 20, 2) +color_square = TileGrid(bitmap, pixel_shader=palette, x=display.width - 100, y=10) +my_group.append(color_square) +# Adding text information +text_area = bitmap_label.Label( + terminalio.FONT, + text="Color", + x=display.width - 100, + y=35, +) +my_group.append(text_area) + +# Add my_group to the display +display.show(my_group) + +p = False +# Start the main loop +while True: + p = ts.touch_point + if p: # Check if colorpicker is selected + if my_colorpicker.contains(p): + color = my_colorpicker.when_selected(p, display.height) + palette[0] = color + print(f"Color Selected is: {hex(color)}") + text_area.text = str(hex(color)) + time.sleep(1.5) + + time.sleep(0.05) # touch response on PyPortal is more accurate with a small delay From 6b9f27b330535dc850709fedc868a822e175b37a Mon Sep 17 00:00:00 2001 From: Adafruit Adabot Date: Sun, 4 Apr 2021 21:05:58 -0400 Subject: [PATCH 5/5] Adding Color_picker to the API modules --- docs/api.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/api.rst b/docs/api.rst index 82b8dca..793e4e3 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -45,3 +45,10 @@ .. automodule:: adafruit_displayio_layout.widgets.annotation :members: :member-order: bysource + +.. automodule:: adafruit_displayio_layout.widgets.color_picker + :members: + :member-order: bysource + :inherited-members: + +.. inheritance-diagram:: adafruit_displayio_layout.widgets.color_picker