# 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. Bildschirmfoto 2022-07-25 um 19 35 35 Bildschirmfoto 2022-07-25 um 19 59 34 Bildschirmfoto 2022-07-24 um 13 41 24 Bildschirmfoto 2022-07-24 um 11 59 31 Bildschirmfoto 2022-07-24 um 11 58 56 Bildschirmfoto 2022-07-24 um 12 59 33 ## 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)