19 releases
0.6.2 | Jan 30, 2024 |
---|---|
0.6.0 | Nov 7, 2020 |
0.5.0 | Mar 27, 2020 |
0.4.0 | Sep 16, 2019 |
0.0.0 | Mar 4, 2018 |
#141 in GUI
Used in 2 crates
43KB
726 lines
gui
gui (short for generic user interface) is a crate providing basic user interface functionality. It strives to be as independent as possible of the underlying system architecture. That is, it is compatible with windowing as well as terminal based systems and it does not rely on the specifics of any GUI toolkit.
Part of this story means that it is not an out-of-the-box replacement for your favorite user interface toolkit (think: GTK+, Qt, wxWidgets to name popular ones), but that it should be seen more as a building block, providing certain hooks and basic functionality typically seen in a UI. The infrastructure for dispatching events to widgets is an example. To make proper use of it, the functionality provided by this crate needs to be glued with the underlying system.
gui is used for exploring parts of the design space for user interface architecture using Rust. Design of UI systems in Rust is generally considered hard and to a large degree an unsolved problem, although there are various promising designs out there.
The crate uses Rust's async
/await
for ergonomic event handling and
message passing between widgets and to the best of the author's knowledge,
is the first doing so.
Features
- completely independent of underlying architecture
- generic over events and messages used
- compatible with any rendering library
async
/await
based event handling and message passing support- no dependencies other than
async-trait
to work around current short comings in Rust
Status
The crate is under active development, and while its core has been reasonably stable for a while, changes should be anticipated in the future.
Given this current state, changes in API design are to be expected.
Example Usage
The notnow
program is relying on the gui crate for the
creation of its terminal based UI. The basic workings can be seen there.
Dependencies
~225–670KB
~16K SLoC