Expand description
ยงWidgets
If none of these do what you need, implementing a new WidgetImpl
isnโt tough.
TODO inline pictures of some of these
Autocomplete
- select predefined value by combining text entry with menusButton
- clickable buttons with keybindings and tooltipsToggle
- checkboxes, switches, and other togglesCompareTimes
- a scatter plot specialized for comparing timesDragDrop
- a reorderable row of draggable cardsDrawWithTooltips
- draw static geometry, with mouse tooltips in certain regionsDropdown
- a button that expands into a menuFanChart
- visualize a range of values over timeFiller
- just carve out space in the layout for something elseJustDraw
(argh private) - just draw text,GeomBatch
es, SVGsLinePlot
- visualize 2 variables with a line plotMenu
- select something from a menu, with keybindingsPersistentSplit
- a button with a dropdown to change its stateScatterPlot
- visualize 2 variables with a scatter plotSlider
- horizontal and vertical slidersSpinner
- numeric input with up/down buttonstable::Table
- rows and columns, supporting filtering and paginationTextBox
- single line text entry
Re-exportsยง
pub use crate::tools::Cached;
Modulesยง
- app_
state ๐A widgetry application splits its state into two pieces: global shared state that lasts for the entire lifetime of the application, and a stack of smaller states, only one of which is active at a time. For example, imagine an application to view a map. The shared state would include the map and pre-rendered geometry for it. The individual states might start with a splash screen or menu to choose a map, then a map viewer, then maybe a state to drill down into pieces of the map. - assets ๐
- backend ๐
- backend_
glow ๐ - backend_
glow_ ๐native - canvas ๐
- color ๐
- drawing ๐
- event ๐
- event_
ctx ๐ - geom ๐
- input ๐
- runner ๐
- screen_
geom ๐ - style ๐
- svg ๐
- text ๐
- widgets ๐
Macrosยง
- Like
std::include_bytes!
, but also returns its argument, the relative path to the bytes
Structsยง
- Geometry thatโs been uploaded to the GPU once and can be quickly redrawn many times. Create by creating a
GeomBatch
and callingctx.upload(batch)
. - Doesnโt do anything by itself, just used for widgetsing. Something else reaches in, asks for the ScreenRectangle to use.
- A mutable builder for a group of colored tessellated polygons.
- Similar to [
Widget::row
]/[Widget::column
], but forGeomBatch
s instead of [Widget
]s, and follows a builder pattern - A stylable UI component builder which presents vector graphics from an
ImageSource
. - An f64 rounded to 4 decimal places. Useful with Spinners, to avoid values accumulating small drift.
- ScreenDims is in units of logical pixels, as opposed to physical pixels.
- ScreenPt is in units of logical pixels, as opposed to physical pixels.
- ScreenRectangle is in units of logical pixels, as opposed to physical pixels.
- Customize how widgetry works. Most of these settings canโt be changed after starting.
- An invisible widget that stores some arbitrary data on the Panel. Users of the panel can read and write the value. This is one method for โreturningโ data when a State completes.
Enumsยง
- When an action happens through a button-like widget, what data is plumbed back?
- Rules for how content should stretch to fill its bounds
- Before
State::draw
is called, draw something else. - The visual
- The result of a Panel handling an event
- A way to transform all colors in a GeomBatch.
- When a state responds to an event, it can specify some way to manipulate the stack of states.
Constantsยง
Traitsยง
- Any data that should last the entire lifetime of the application should be stored in the struct implementing this trait.
- Many states fit a pattern of managing a single panel, handling mouseover events, and other interactions on the map. Implementing this instead of
State
reduces some boilerplate. - A temporary state of an application. Thereโs a stack of these, with the most recent being the active one.
- Create a new widget by implementing this trait. You can instantiate your widget by calling
Widget::new(Box::new(instance of your new widget))
, which gives you the usual style options.