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
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.
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 calling ctx.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 for GeomBatch
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.