# guiver
GUI programming with Rust.
guiver can be used in immediate mode, which is inspired by [egui](https://github.com/emilk/egui). In this case it is
just a thin wrapper around [druid-shell](https://github.com/linebender/druid/tree/master/druid-shell) for event
handling/windowing and [Piet](https://github.com/linebender/piet) for rendering.
There are retained mode widgets that can be used with the help of an optional widget manager.
The widgets are decoupled from the application data via message passing, which is inspired by
[Tk commands](https://en.wikipedia.org/wiki/Tk_(software)) and egui.
## Backlog
* `TextInput`:
* [ ] accept paste
* [ ] display a caret
* [ ] arrow keys should move the caret
* support text selection:
* [ ] Shift + cursor movement
* [ ] Ctrl + A
* [ ] Ctrl+X should cut the text
* [ ] Ctrl-C should copy the text
* [ ] add to `Style:
* `accent_color`
* `font`
* `spacing`
* [ ] use it in `Row` CTOR?
* [ ] use it in `Padding` CTOR?
* [ ] implement [7GUIs](https://eugenkiss.github.io/7guis/tasks)
* [ ] 7GUIs "Flight Booker"
* [ ] implement `DropdownBox`
* [ ] 7GUIs "Timer"
* [ ] 7GUIs "CRUD"
* [ ] 7GUIs "Circle Drawer"
* [ ] 7GUIs "Cells"
* [ ] add Redmond 31 widgets
* [ ] `WidgetManager`: implement `collect_garbage()`
* remove all widgets that do not have the main widget as ancestor
* [ ] `WidgetManager`: add tab order
* [ ] allow a "no loop" optimization for static applications that only render once
* [ ] add Python bindings
* [ ] provide native widgets?
* [ ] provide a WebAssembly demo
See also ["So you want to write a GUI framework"](https://www.cmyr.net/blog/gui-framework-ingredients.html)