- docs: update README.md with the new features
- feat: divide each frame into multiple rectangles, compare rectangle with the same rectangle in the previous frame and update only the changed ones
- feat: add two throttling mechanisms to avoid sending too many frames to the display, one based on total bandwidth of all draw commands of all
HeadlessWidget
s and the other based on set fps of a particularHeadlessWidget
- feat: add
show_update_regions
property toHeadlessWidget
to show the regions that are updated in each frame as a debug feature
- fix: change type of
kwargs
inHeadlessWidget.__init__
toobject
- refactor: drop all the fps handling and render scheduling logic in favor of
Canvas
'sCallback
instruction which gets called only when new drawing is done
- chore: set dependencies for
[test]
extra
- chore: migrate from poetry to uv for the sake of improving performance and dealing with conflicting sub-dependencies
- refactor: make it ready to be used for local widgets
- fix: an error in data slicing causing failure when HDMI display is connected
- fix: slice the data in case it exceeds the size of the display
- fix: make it compatible with kivy 3
- refactor: set minimum version of
kivy
to2.1.0
(used to be2.3.0
)
- refactor: update snapshot fixture with latest changes
- refactor: migrate from
uint16
touint8
as each channel of the RGB image is a single byte - feat: add alpha channel ... yet again
- feat: add a demo app based on the code provided here
- fix: the order of width and height in different places so that it works when the screen is not a square - closes #12, closes #13
- fix: apply rotations and flips and drop alpha channel on data before storing it
in
raw_data
- fix: consider alpha channel in the data stored in
raw_data
field ofHeadlessWidget
- refactor: remove all features specific to Raspberry Pi, now it is a general headless Kivy library suitable for different platforms and test environments
- build: rename project to
headless-kivy
as it is not specific to Raspberry Pi anymore - build: update repository to https://github.com/sassanh/headless-kivy
- refactor: drop code for positioning the window on the screen
- refactor: drop
is_test_environment
, the code using headless kivy should be responsible for setting up the environment so that it can fully customize the configuration
- refactor: use
str_to_bool
ofpython-strtobool
instead ofstrtobool
ofdistutils
- feat: add snapshot fixture
- feat: add
rotation
,flip_horizontal
, andflip_vertical
parameters toSetupHeadlessConfig
to allow configuration of the display orientation
- feat: configurable rotation and flip parameters
- feat: let the user render a splash screen before the first frame is ready to be rendered, if not provided, it renders a black screen
- fix: revert numpy data structure storing display data to uint16 as 2 bytes are used per pixel
- fix: don't interact with window system when running headless for tests
- feat: render relevant parts of the screen only
- feat: keep a copy of the raw data transferred to the display in
config._display.raw_data
- chore: GitHub workflow to publish pushes on
main
branch to PyPI - chore: create GitHub release for main branch in GitHub workflows
- refactor:
HeadlessWidget
is not a singleton anymore, config migrated to config module - refactor: initializing display and config is now done in
setup_headless_kivy
- feat: class method
get_instance
to get the closest parent instance of typeHeadlessWidget
- fix: make sure
kivy.core.window
is loaded insetup_headless
to avoid segmentation fault
- docs: remove instructions to deal with legacy Raspbian from
README.md
- feat: ensure
setup_headless
is called before instantiatingHeadlessWidget
- feat: periodically write snapshots of the screen to filesystem in debug mode for remote debugging
- refactor: fix pyright and ruff errors and warnings by faking modules
- refactor: split
__init__.py
into several files
- refactor: make
synchronous_clock
enabled by default
- refactor: avoid unnecessary scheduled calls of
render_on_display
- refactor: make
automatic_fps
enabled by default
- feat: cancel clock event when kivy app stops
- fix: ignore data hash and render a single frame after resume
- feat: add
clear_at_exit
setting andpause
andresume
methods
- chore: simplify
pyproject.toml
and the setup instructions
- fix: incorrect local import path
- chore: drop support for python 3.9 and 3.10
- chore: migrate from poetry groups to poetry extras
- chore: update development installation command in
README.md
- chore: add dev extra, remove watchdog and cython
- chore: update typing-extensions
- chore: migrate repository to https://github.com/ubopod/headless-kivy-pi
- chore: add CHANGELOG.md
- feat: add stencil support in HeadlessWidget's framebuffer
- chore: update packages
- docs: add icons in README.md
- chore: drop unused dependencies
- refactor: make some methods of HeadlessWidget class methods
- docs: update the README.md file
- chore: add license file
- chore: update lockfile
- chore: github action for building wheels
- fix: make adafruit-circuitpython-rgb-display conditionally install only on raspberry pi
- chore: remove demo files
- feat: keyboard navigation for pagination demo
- feat: add typings and docs
- docs: add pagination demo
- chore: update poetry packages and config
- feat: add activate_low_fps_mode and activate_high_fps_mode to manually set fps when needed
- feat: add logging and improve fps handler
- docs: add sdl installation instructions and a reference to demo.py in README.md
- feat: drop Kivy FPS to min_fps when the user interface is idle
- feat: Add default values for
setup_headless()
based on environment variables - docs: add demo.py to show all the features in action
- docs: add README.md
- feat: avoid sending data to the lcd when the current frame is the same as the last one
- feat: add double buffering
- feat: add synchronous mode to save CPU time by avoiding Kivy from rendering frames when last frame is not yet rendered on the lcd
- feat: implement Headless widget to render content on SPI display without needing a display server/window manager