cheval 0.2.0-alpha

A tool to render stream overlays, or smart mirror content, or just images.
Documentation
TODO: This file is not 100% up to date. Sorry.


## In Progress

		
## TODO


### post v0.2

- [ ] Combine RGB565 and RGBA8888 mode for fbdev backend

- [ ] Put profiling behind feature flag
- [ ] Put profiling behind command line flag

- [ ] Fix mutability of self in Cheval::render()

- [ ] Extract http handling from cheval.rs
- [ ] Remove actix, and use axum instead

### post v0.3

- [ ] Extract shared rendering functions -> RenderBuffer package
- [ ] Replace :HACK: text effects with better version

- [ ] Improve reporting of broken config files

- [ ] Refactor FileCache::run

- [ ] Remove unneeded copying from FileCache aka buffer bloat
- [ ] Double check why outer FileCache needs to be Arc< Mutex< ... > >

- [ ] Add sound effect support
	- [ ] Fix time expire sound to be more precise

- [ ] Add event system
- [ ] Soundbank element should own it's soundbank, and react to events
- [ ] Extract ElementConfig parameters

- [ ] Make FileCache watcher async
- [ ] Optimise pathes to watch for FileCache notify

- [ ] Use BakedExpression where sensible
	- [x] Use BakedExpression for text position, and bounding box config
	- [x] Use BakedExpression for text
	- [ ] Verify we use BakedExpressions everywhere

- [ ] Fix missing initialization of active page for multi page configs

- [ ] Cleanup config file selection, and error reporting
- [ ] Make Windows work
- [ ] Persist variables in regular intervals
- [ ] Enable debug frames via command line 
- [ ] Merge goto next&prev page into turn page with direction
- [ ] Decide on http response for page changes
- [ ] Fix default for bounding boxes
- [ ] Change config format
	- [ ] Add general config section
	- [x] Add support for multiple "pages"
	- [x] Add support for default values for variables
- [ ] Add more position modes, e.g negative values for "from bottom/right"
- [ ] Add clipping at buffer edges
	- [x] Add clipping for text
- [ ] Auto reloading on config change
- [ ] Make config loading more robust
- [ ] Improve Debug and/or Display traits for elements
- [ ] Allow parameters for windows
- [ ] Add animations
	- [ ] Use spline/bezier based files for values
- [ ] Add audio support -> is started
- [ ] Allow elements to register for http (or just sign them up all)
- [ ] Handle strings with whitespace in expressions

- [ ] Make filename for png renderer configurable

## Obsolete

~ - [#] Refactor Variable to allow baking of value ~


## DONE

### Released in v0.2.0

- [x] Build packages automatically after push to github.
- [x] Use tracing for all debugging
- [x] Remember previous window positions for windows that are not currently used
- [x] Allow writing of png sequences for window mode png
- [x] Alpha handling _should_ be correct now
- [x] Enable profiling via feature
- [x] Update packages
- [x] Merge, and kill `multi-window` branch for good.
- [x] Fix crash when moving right without pages
- [x] Upgrade edition to 2021
- [x] Allow window title prefix to be passed on command line
- [x] Add file watcher to FileCache to allow automatic updates
	- [x] Poll files for changes
	- [x] or: Use operating system to get notified about changes

- [x] Use file cache for image element, including hot reload
- [x] Replace/refactor LoadTextElement -> delete?
	- [x] Removed ~Check~ file watcher (seems to be broken sometimes) (merge with FileCache?!)
- [x] Add multi line support to TextElement
- [x] Add text_lines_from_file to expressions to allow loading specific lines from file
- [x] Add text_from_file to expressions to allow loading text from file
- [x] Rename `master` branch to `main`
- [x] Merge `multi-window` branch
- [x] Add text effects (shadow, glow?) to text element
	- [x] Add text shadow
	- [x] Add text glow (:HACK:)
- [x] Send actual resulting value back when changing variables via http
- [x] Allow selecting of variable, and inc/dec of that selected variable
- [x] Fix set/inc/dec variable api to respond with resulting value (and name)
- [x] Allow incrementing & decrementing variable via http api
- [x] Fix alpha blending for blocks
- [x] Allow using css names for colors
- [x] Default to current directory for configuration
- [x] Use \*config.yaml if exactly one matches
- [x] Check for config.yaml if config parameter is a directory
- [x] Make filepath in config file relative to config file
- [x] Allow keyboard input from console
- [x] Add support for animated images
- [x] Add visual countdown example
- [x] Fix http interface to allow setting of f32
- [x] Add support for default variable values from 
- [x] Add BakedExpression
- [x] Add bounding box support for text rendering
- [x] Add timer element
- [x] Add http API (setVariable)
- [x] Implement font cache
- [x] Text rendering
- [x] Add clean error handling
- [x] Render to png