WARNING: Cushy is in early alpha. This guide doubly so.
Everything is a Widget
A widget is a rectangular area of a screen that implements the
Widget
trait. Widgets are the fundamental building block of Cushy.
The Widget
trait can look daunting, as it defines every possible function a
Widget
might need in a graphical user interface. Thankfully, the details of
how this trait works can be ignored until you're ready to create custom widgets.
Developing a user interface in Cushy is a two-step process: gather the information for the interface and present the information in one or more widgets.
Cushy makes the process of creating widgets easy through the
MakeWidget
trait. Every Widget
implementor automatically
implements MakeWidget
, but it can also be implemented by any type to make it
easy to utilize within Cushy. For example, String
implements MakeWidget
by
returning a Label
. This approach can also be used to convert complex
structures into multi-widget components without needing to create any new
Widget
implementations.
MakeWidget
is also responsible for why "Hello, World".run()
works. The
Run
trait is automatically implemented for all MakeWidget
implementations. The implementation simply creates a Window
from the
widget and runs it:
#![allow(unused)] fn main() { impl<T> Run for T where T: MakeWidget, { fn run(self) -> crate::Result { Window::for_widget(self).run() } } }
So now that we know our goal is to create one or more widgets to represent our data, how do we transform our data and application state into widgets?