adafruit-circuitpython-qualia 2.1.3__tar.gz → 2.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/PKG-INFO +1 -1
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_circuitpython_qualia.egg-info/PKG-INFO +1 -1
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/__init__.py +1 -1
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/__init__.py +80 -3
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/graphics.py +12 -2
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/network.py +1 -1
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/peripherals.py +1 -1
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/pyproject.toml +1 -1
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.gitattributes +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.github/PULL_REQUEST_TEMPLATE/adafruit_circuitpython_pr.md +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.github/workflows/build.yml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.github/workflows/failure-help-text.yml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.github/workflows/release_gh.yml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.github/workflows/release_pypi.yml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.gitignore +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.pre-commit-config.yaml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.readthedocs.yaml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/CODE_OF_CONDUCT.md +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSE +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSES/CC-BY-4.0.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSES/MIT.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSES/Unlicense.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/README.rst +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/README.rst.license +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_circuitpython_qualia.egg-info/SOURCES.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_circuitpython_qualia.egg-info/dependency_links.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_circuitpython_qualia.egg-info/requires.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_circuitpython_qualia.egg-info/top_level.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/bar240x960.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/bar320x820.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/bar320x960.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/round21.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/round28.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/round40.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/square34.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/square40.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/adafruit_qualia/displays/square40_480x480.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/_static/custom.css +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/_static/favicon.ico +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/_static/favicon.ico.license +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/api.rst +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/api.rst.license +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/conf.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/examples.rst +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/examples.rst.license +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/index.rst +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/index.rst.license +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/requirements.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/examples/qualia_paint.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/examples/qualia_qrcode_generation.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/examples/qualia_quotes.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/examples/qualia_simpletest.py +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/optional_requirements.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/requirements.txt +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/ruff.toml +0 -0
- {adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/setup.cfg +0 -0
|
@@ -31,6 +31,54 @@ TOUCH_CST826 = Adafruit_CST8XX
|
|
|
31
31
|
TOUCH_INIT_DELAY = 0.1 # 100ms
|
|
32
32
|
|
|
33
33
|
|
|
34
|
+
class Touch:
|
|
35
|
+
"""Simple passthrough touch class that allows rotation transformation"""
|
|
36
|
+
|
|
37
|
+
def __init__(self, touch_driver, display, rotation=0):
|
|
38
|
+
self._driver = touch_driver
|
|
39
|
+
self._width = display.width
|
|
40
|
+
self._height = display.height
|
|
41
|
+
self._rotation = rotation
|
|
42
|
+
|
|
43
|
+
def transform(self, x, y):
|
|
44
|
+
"""Transform touch coordinates based on rotation"""
|
|
45
|
+
if self._rotation == 0:
|
|
46
|
+
return x, y
|
|
47
|
+
elif self._rotation == 90:
|
|
48
|
+
return y, self._height - x
|
|
49
|
+
elif self._rotation == 180:
|
|
50
|
+
return self._width - x, self._height - y
|
|
51
|
+
elif self._rotation == 270:
|
|
52
|
+
return self._width - y, x
|
|
53
|
+
else:
|
|
54
|
+
raise ValueError("Rotation must be 0, 90, 180, or 270")
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
def rotation(self):
|
|
58
|
+
"""Return the rotation"""
|
|
59
|
+
return self._rotation
|
|
60
|
+
|
|
61
|
+
@rotation.setter
|
|
62
|
+
def rotation(self, value):
|
|
63
|
+
"""Set the rotation"""
|
|
64
|
+
if value not in {0, 90, 180, 270}:
|
|
65
|
+
raise ValueError("Rotation must be 0, 90, 180, or 270")
|
|
66
|
+
self._rotation = value
|
|
67
|
+
|
|
68
|
+
@property
|
|
69
|
+
def touches(self):
|
|
70
|
+
"""Return the number of touches"""
|
|
71
|
+
touches = self._driver.touches
|
|
72
|
+
for touch in touches:
|
|
73
|
+
touch["x"], touch["y"] = self.transform(touch["x"], touch["y"])
|
|
74
|
+
return touches
|
|
75
|
+
|
|
76
|
+
@property
|
|
77
|
+
def touched(self):
|
|
78
|
+
"""Return whether the screen is touched"""
|
|
79
|
+
return self._driver.touched
|
|
80
|
+
|
|
81
|
+
|
|
34
82
|
class DotClockDisplay:
|
|
35
83
|
"""DotClock Display Base Class for the Adafruit Qualia ESP32-S3 Library"""
|
|
36
84
|
|
|
@@ -43,7 +91,7 @@ class DotClockDisplay:
|
|
|
43
91
|
self._touch_driver = TOUCH_FOCALTOUCH
|
|
44
92
|
self._touch_address = 0x38
|
|
45
93
|
self.display = None
|
|
46
|
-
self.
|
|
94
|
+
self._touch = None
|
|
47
95
|
self._i2c = None
|
|
48
96
|
self._round = False
|
|
49
97
|
|
|
@@ -73,9 +121,14 @@ class DotClockDisplay:
|
|
|
73
121
|
self._i2c = busio.I2C(board.SCL, board.SDA)
|
|
74
122
|
time.sleep(TOUCH_INIT_DELAY) # Wait for Focaltouch Chip to finish resetting
|
|
75
123
|
try:
|
|
76
|
-
self.
|
|
124
|
+
self._touch = Touch(self._touch_driver(self._i2c, self._touch_address), self.display)
|
|
125
|
+
|
|
77
126
|
except (RuntimeError, ValueError):
|
|
78
|
-
self.
|
|
127
|
+
self._touch = None
|
|
128
|
+
|
|
129
|
+
def _transform_touch(self, x, y):
|
|
130
|
+
"""Transform touch coordinates if needed"""
|
|
131
|
+
return x, y
|
|
79
132
|
|
|
80
133
|
@property
|
|
81
134
|
def width(self):
|
|
@@ -102,3 +155,27 @@ class DotClockDisplay:
|
|
|
102
155
|
def round(self):
|
|
103
156
|
"""Return whether the display is circular"""
|
|
104
157
|
return self._round
|
|
158
|
+
|
|
159
|
+
@property
|
|
160
|
+
def rotation(self):
|
|
161
|
+
"""Return the display touch rotation"""
|
|
162
|
+
display_rotation = self.display.rotation if self.display is not None else 0
|
|
163
|
+
touch_rotation = self._touch.rotation if self._touch is not None else 0
|
|
164
|
+
if display_rotation != touch_rotation:
|
|
165
|
+
raise ValueError("Display and touch rotation do not match")
|
|
166
|
+
return self._touch.rotation
|
|
167
|
+
|
|
168
|
+
@rotation.setter
|
|
169
|
+
def rotation(self, value: int):
|
|
170
|
+
"""Set the display rotation"""
|
|
171
|
+
if value not in {0, 90, 180, 270}:
|
|
172
|
+
raise ValueError("Rotation must be 0, 90, 180, or 270")
|
|
173
|
+
self._touch.rotation = value
|
|
174
|
+
# Update the display rotation if already initialized
|
|
175
|
+
if self.display is not None:
|
|
176
|
+
self.display.rotation = value
|
|
177
|
+
|
|
178
|
+
@property
|
|
179
|
+
def touch(self):
|
|
180
|
+
"""Return the touch driver"""
|
|
181
|
+
return self._touch
|
|
@@ -31,7 +31,7 @@ import os
|
|
|
31
31
|
|
|
32
32
|
from adafruit_portalbase.graphics import GraphicsBase
|
|
33
33
|
|
|
34
|
-
__version__ = "2.
|
|
34
|
+
__version__ = "2.2.0"
|
|
35
35
|
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_Qualia.git"
|
|
36
36
|
|
|
37
37
|
|
|
@@ -90,7 +90,7 @@ class Graphics(GraphicsBase):
|
|
|
90
90
|
scale=scale,
|
|
91
91
|
debug=debug,
|
|
92
92
|
)
|
|
93
|
-
self.
|
|
93
|
+
self._dotclock_display.rotation = rotation
|
|
94
94
|
|
|
95
95
|
def init_display(self, display_type: str, *, auto_refresh: bool = True):
|
|
96
96
|
"""Load the Display Class, then initialize the display and touch driver"""
|
|
@@ -134,3 +134,13 @@ class Graphics(GraphicsBase):
|
|
|
134
134
|
def dotclockdisplay(self):
|
|
135
135
|
"""Return the dotclock display object"""
|
|
136
136
|
return self._dotclock_display
|
|
137
|
+
|
|
138
|
+
@property
|
|
139
|
+
def rotation(self):
|
|
140
|
+
"""Return the rotation"""
|
|
141
|
+
return self._dotclock_display.rotation
|
|
142
|
+
|
|
143
|
+
@rotation.setter
|
|
144
|
+
def rotation(self, value):
|
|
145
|
+
"""Set the rotation"""
|
|
146
|
+
self._dotclock_display.rotation = value
|
|
@@ -13,7 +13,7 @@ requires = [
|
|
|
13
13
|
[project]
|
|
14
14
|
name = "adafruit-circuitpython-qualia"
|
|
15
15
|
description = "Portal Style Library for the Adafruit Qualia ESP32-S3"
|
|
16
|
-
version = "2.
|
|
16
|
+
version = "2.2.0"
|
|
17
17
|
readme = "README.rst"
|
|
18
18
|
authors = [
|
|
19
19
|
{name = "Adafruit Industries", email = "circuitpython@adafruit.com"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.pre-commit-config.yaml
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/.readthedocs.yaml
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/CODE_OF_CONDUCT.md
RENAMED
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSES/CC-BY-4.0.txt
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSES/MIT.txt
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/LICENSES/Unlicense.txt
RENAMED
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/README.rst.license
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/_static/custom.css
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/_static/favicon.ico
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/api.rst.license
RENAMED
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/examples.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/index.rst.license
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/docs/requirements.txt
RENAMED
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/examples/qualia_paint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{adafruit_circuitpython_qualia-2.1.3 → adafruit_circuitpython_qualia-2.2.0}/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|