scrollkit 0.8.3__tar.gz → 0.8.4__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.
- {scrollkit-0.8.3 → scrollkit-0.8.4}/LICENSE +17 -5
- {scrollkit-0.8.3/src/scrollkit.egg-info → scrollkit-0.8.4}/PKG-INFO +9 -2
- {scrollkit-0.8.3 → scrollkit-0.8.4}/README.md +7 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/pyproject.toml +2 -2
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/__init__.py +2 -2
- scrollkit-0.8.4/src/scrollkit/app/__init__.py +6 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/app/base.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/app/memory.py +1 -1
- scrollkit-0.8.4/src/scrollkit/config/__init__.py +1 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/config/settings_manager.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/config/transition_names.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/dev/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/dev/capabilities.py +36 -4
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/dev/harness.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/dev/metrics.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/dev/performance.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/dev/validation.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/_graphics.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/_recording.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/_sim_backend.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/bitmap_text.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/boards.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/colors.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/content.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/gradient_text.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/interface.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/simulator.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/text_fill.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/text_pixels.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/display/unified.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/__init__.py +5 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/drip_splash.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/easing.py +1 -1
- scrollkit-0.8.4/src/scrollkit/effects/image_animators.py +1239 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/overlay.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/particles.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/reveal_splash.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/scrolling.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/swarm_reveal.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/text_render.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/effects/transitions.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/exceptions.py +1 -1
- scrollkit-0.8.4/src/scrollkit/network/__init__.py +1 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/network/http_client.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/network/mdns.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/network/wifi_manager.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/ota/__init__.py +1 -1
- scrollkit-0.8.4/src/scrollkit/ota/client.py +922 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/ota/display_progress.py +27 -3
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/ota/manifest.py +24 -5
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/ota/publish.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/bitmaptools.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/color_utils.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/feasibility.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/hardware_profile.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/led_matrix.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/performance_manager.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/pixel_buffer.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/devices/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/devices/base_device.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/devices/matrixportal_s3.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/bitmap.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/display.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/fourwire.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/group.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/ondiskbitmap.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/palette.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/displayio/tilegrid.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/terminalio/__init__.py +1 -1
- scrollkit-0.8.4/src/scrollkit/utils/__init__.py +1 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/utils/color_utils.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/utils/diagnostics.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/utils/error_handler.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/utils/system_utils.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/utils/url_utils.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/web/__init__.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/web/settings_server.py +1 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/web/wifi_setup.py +10 -2
- {scrollkit-0.8.3 → scrollkit-0.8.4/src/scrollkit.egg-info}/PKG-INFO +9 -2
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit.egg-info/SOURCES.txt +1 -0
- scrollkit-0.8.3/src/scrollkit/app/__init__.py +0 -6
- scrollkit-0.8.3/src/scrollkit/config/__init__.py +0 -1
- scrollkit-0.8.3/src/scrollkit/network/__init__.py +0 -1
- scrollkit-0.8.3/src/scrollkit/ota/client.py +0 -528
- scrollkit-0.8.3/src/scrollkit/utils/__init__.py +0 -1
- {scrollkit-0.8.3 → scrollkit-0.8.4}/setup.cfg +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/ATTRIBUTION.md +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/CIRCUITPYTHON_COMPATIBILITY.md +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/LICENSE +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/README.md +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/adafruit_bitmap_font/__init__.py +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/adafruit_bitmap_font/bitmap_font.py +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/adafruit_bitmap_font/glyph_cache.py +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/adafruit_display_text/__init__.py +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/adafruit_display_text/label.py +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/device_benchmarks.json +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/core/matrixportal_s3_baseline.json +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/3x5.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Arial_16.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Arial_16.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Arial_Bold_12.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Arial_Bold_12.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Arial_Bold_18.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Arial_Bold_18.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Junction_regular_24.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/Junction_regular_24.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/LeagueSpartan-Bold-16.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/LeagueSpartan-Bold-16.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/LeagueSpartan_Bold_16.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/LeagueSpartan_Bold_16.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/LibreBodoniv2002-Bold-27.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/LibreBodoniv2002-Bold-27.bdf.license +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/tom-thumb.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/viii-bold.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit/simulator/fonts/viii.bdf +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit.egg-info/dependency_links.txt +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit.egg-info/requires.txt +0 -0
- {scrollkit-0.8.3 → scrollkit-0.8.4}/src/scrollkit.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c) 2024-2026 Michael
|
|
3
|
+
Copyright (c) 2024-2026 Michael Czeiszperger
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -25,7 +25,19 @@ SOFTWARE.
|
|
|
25
25
|
This repository vendors third-party components that retain their own licenses
|
|
26
26
|
and copyright notices; this MIT license does not supersede them:
|
|
27
27
|
|
|
28
|
-
- src/scrollkit/simulator/
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
- Bundled fonts under src/scrollkit/simulator/fonts/ — various foundries under
|
|
29
|
+
the SIL Open Font License (OFL). Each font ships with its own .license file;
|
|
30
|
+
see src/scrollkit/simulator/ATTRIBUTION.md.
|
|
31
|
+
|
|
32
|
+
The desktop simulator provides API-compatible, clean-room reimplementations
|
|
33
|
+
under Adafruit-matching names (e.g. src/scrollkit/simulator/adafruit_display_text/
|
|
34
|
+
and adafruit_bitmap_font/) so that unmodified device code — which imports those
|
|
35
|
+
module names — also runs on the desktop. These directories contain ScrollKit's
|
|
36
|
+
own code, not Adafruit's, and are covered by the MIT license above. The
|
|
37
|
+
corresponding Adafruit CircuitPython libraries are not redistributed here; they
|
|
38
|
+
are installed separately onto the device.
|
|
39
|
+
|
|
40
|
+
Acknowledgement: ScrollKit's over-the-air update feature was inspired by Ronald
|
|
41
|
+
Dehuysser's micropython-ota-updater
|
|
42
|
+
(https://github.com/rdehuyss/micropython-ota-updater). ScrollKit's OTA subsystem
|
|
43
|
+
is its own manifest-based design and contains none of that project's code.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: scrollkit
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.4
|
|
4
4
|
Summary: LED Matrix Display Framework for CircuitPython and Desktop
|
|
5
|
-
Author-email: Michael
|
|
5
|
+
Author-email: Michael Czeiszperger <michael@czei.org>
|
|
6
6
|
License: MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/czei/scrollkit
|
|
8
8
|
Project-URL: Repository, https://github.com/czei/scrollkit
|
|
@@ -243,6 +243,13 @@ voice, with my own screenshots. Yes, AI has touched a lot of this code. It was
|
|
|
243
243
|
also directed by an engineer who has shipped production software for a living,
|
|
244
244
|
including time on one of Sun Microsystems' API teams. Both are true.
|
|
245
245
|
|
|
246
|
+
## Acknowledgements
|
|
247
|
+
|
|
248
|
+
ScrollKit's over-the-air update feature was inspired by
|
|
249
|
+
[Ronald Dehuysser's micropython-ota-updater](https://github.com/rdehuyss/micropython-ota-updater).
|
|
250
|
+
The current implementation is ScrollKit's own manifest-based design and uses none
|
|
251
|
+
of his code — but the idea came from his project, and it deserves the shout-out.
|
|
252
|
+
|
|
246
253
|
## License
|
|
247
254
|
|
|
248
255
|
MIT
|
|
@@ -199,6 +199,13 @@ voice, with my own screenshots. Yes, AI has touched a lot of this code. It was
|
|
|
199
199
|
also directed by an engineer who has shipped production software for a living,
|
|
200
200
|
including time on one of Sun Microsystems' API teams. Both are true.
|
|
201
201
|
|
|
202
|
+
## Acknowledgements
|
|
203
|
+
|
|
204
|
+
ScrollKit's over-the-air update feature was inspired by
|
|
205
|
+
[Ronald Dehuysser's micropython-ota-updater](https://github.com/rdehuyss/micropython-ota-updater).
|
|
206
|
+
The current implementation is ScrollKit's own manifest-based design and uses none
|
|
207
|
+
of his code — but the idea came from his project, and it deserves the shout-out.
|
|
208
|
+
|
|
202
209
|
## License
|
|
203
210
|
|
|
204
211
|
MIT
|
|
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "scrollkit"
|
|
7
|
-
version = "0.8.
|
|
7
|
+
version = "0.8.4"
|
|
8
8
|
description = "LED Matrix Display Framework for CircuitPython and Desktop"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.8"
|
|
11
11
|
license = {text = "MIT"}
|
|
12
12
|
authors = [
|
|
13
|
-
{name = "Michael
|
|
13
|
+
{name = "Michael Czeiszperger", email = "michael@czei.org"}
|
|
14
14
|
]
|
|
15
15
|
keywords = ["circuitpython", "led-matrix", "display", "matrixportal", "simulator"]
|
|
16
16
|
classifiers = [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2024-2026 Michael
|
|
1
|
+
# Copyright (c) 2024-2026 Michael Czeiszperger
|
|
2
2
|
"""ScrollKit - LED Matrix Display Framework for CircuitPython and Desktop.
|
|
3
3
|
|
|
4
4
|
A framework for building scrolling LED matrix applications that run unchanged on
|
|
@@ -13,4 +13,4 @@ need from submodules, e.g.::
|
|
|
13
13
|
from scrollkit.display.unified import UnifiedDisplay
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
-
__version__ = "0.8.
|
|
16
|
+
__version__ = "0.8.4"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Copyright (c) 2024-2026 Michael Czeiszperger
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
# Copyright (c) 2024-2026 Michael
|
|
1
|
+
# Copyright (c) 2024-2026 Michael Czeiszperger
|
|
2
2
|
"""Machine-readable catalog of what a ScrollKit app can use — for AI authoring.
|
|
3
3
|
|
|
4
4
|
``capabilities()`` returns a JSON-able dict describing the building blocks an
|
|
5
5
|
agent should reach for when writing an app: the panel geometry, the content
|
|
6
|
-
types and their constructor parameters, priority levels,
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
types and their constructor parameters, priority levels, the effect categories
|
|
7
|
+
(standalone splash/particle ``effects``, content-swap ``transitions``,
|
|
8
|
+
``scrolling`` presentations, BitmapText ``palette_effects``, and the
|
|
9
|
+
``image_animators`` that decorate a static image), named colors, and the display
|
|
10
|
+
drawing API — plus a pointer at the headless verification loop.
|
|
9
11
|
|
|
10
12
|
Everything is **introspected from live code** (the real ``Priority`` class, the
|
|
11
13
|
``effects`` package's ``__all__``, ``NAMED_COLORS``, the
|
|
@@ -147,6 +149,27 @@ def _effects():
|
|
|
147
149
|
return out
|
|
148
150
|
|
|
149
151
|
|
|
152
|
+
def _image_animators():
|
|
153
|
+
"""``[{name, doc, feasibility}]`` for the per-frame image-layer animators.
|
|
154
|
+
|
|
155
|
+
Its OWN category — these decorate a *static image already on screen* via the
|
|
156
|
+
start/step/detach contract, distinct from the content-swap ``transitions`` and from
|
|
157
|
+
the standalone splash/particle ``effects``. Enumerated via the module's explicit
|
|
158
|
+
``ANIMATOR_CLASSES`` catalog (not ``__subclasses__``) so the order is stable and the
|
|
159
|
+
base ``IntroAnimator`` scaffolding is excluded. No ``pairs_with`` — they attach to an
|
|
160
|
+
image, not to text presentations; ``feasibility`` is each class's FEASIBILITY budget.
|
|
161
|
+
"""
|
|
162
|
+
out = []
|
|
163
|
+
try:
|
|
164
|
+
from ..effects.image_animators import ANIMATOR_CLASSES
|
|
165
|
+
except ImportError:
|
|
166
|
+
return out
|
|
167
|
+
for cls in ANIMATOR_CLASSES:
|
|
168
|
+
out.append({"name": cls.__name__, "doc": _first_line(cls),
|
|
169
|
+
"feasibility": getattr(cls, "FEASIBILITY", None)})
|
|
170
|
+
return out
|
|
171
|
+
|
|
172
|
+
|
|
150
173
|
def _transitions():
|
|
151
174
|
"""``[{name, doc, feasibility, pairs_with}]`` for the built-in content-swap transitions.
|
|
152
175
|
|
|
@@ -299,6 +322,7 @@ def capabilities():
|
|
|
299
322
|
for key, fn in (("content_types", _content_types), ("priorities", _priorities),
|
|
300
323
|
("effects", _effects), ("transitions", _transitions),
|
|
301
324
|
("scrolling", _scrolling), ("palette_effects", _palette_effects),
|
|
325
|
+
("image_animators", _image_animators),
|
|
302
326
|
("text_fills", _text_fills), ("color_utilities", _color_utilities),
|
|
303
327
|
("named_colors", _named_colors),
|
|
304
328
|
("display_api", _display_api), ("hardware", _hardware),
|
|
@@ -356,6 +380,14 @@ def as_text(cat=None):
|
|
|
356
380
|
lines.append("Palette effects (on BitmapText):")
|
|
357
381
|
for e in pe:
|
|
358
382
|
lines.append(" - %s%s — %s" % (e["name"], _pairs(e), e["doc"]))
|
|
383
|
+
ia = cat.get("image_animators")
|
|
384
|
+
if isinstance(ia, list) and ia:
|
|
385
|
+
lines.append("Image animators (decorate a static image on screen):")
|
|
386
|
+
for e in ia:
|
|
387
|
+
feas = e.get("feasibility") or {}
|
|
388
|
+
ms = feas.get("modeled_frame_ms")
|
|
389
|
+
budget = " (~%sms/frame)" % ms if ms is not None else ""
|
|
390
|
+
lines.append(" - %s%s — %s" % (e["name"], budget, e["doc"]))
|
|
359
391
|
tf = cat.get("text_fills")
|
|
360
392
|
if isinstance(tf, dict) and isinstance(tf.get("gradient"), dict):
|
|
361
393
|
g = tf["gradient"]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2024-2026 Michael
|
|
1
|
+
# Copyright (c) 2024-2026 Michael Czeiszperger
|
|
2
2
|
"""ScrollKit Effects package.
|
|
3
3
|
|
|
4
4
|
Kept deliberately empty of imports: importing ``scrollkit.effects`` must not
|
|
@@ -18,6 +18,10 @@ into RAM. Import each submodule directly instead:
|
|
|
18
18
|
``from scrollkit.effects.swarm_reveal import show_swarm_splash, SwarmReveal``
|
|
19
19
|
- **Particles** —
|
|
20
20
|
``from scrollkit.effects.particles import ParticleEngine, Sparkle, Snow``
|
|
21
|
+
- **Image animators** (per-frame motion layered onto a static image already on
|
|
22
|
+
screen — start/step/detach, not the ``Transition`` contract) —
|
|
23
|
+
``from scrollkit.effects.image_animators import TwinkleAnimator, MotionAnimator,
|
|
24
|
+
ComboAnimator``
|
|
21
25
|
- **Text-rendering helpers** —
|
|
22
26
|
``from scrollkit.effects.text_render import pixels_from_font_text, font_text_width``
|
|
23
27
|
|