Module druid::lens [−][src]
Expand description
Support for lenses, a way of focusing on subfields of data.
Lenses are useful whenever a widget only needs access to a subfield of a larger struct or generally access to part of a larger value.
For example: If one wants to embed a TextBox
in a widget with a Data
type
that is not String
, they need to specify how to access a String
from within the Data
.
use druid::{Data, Lens, Widget, WidgetExt, widget::{TextBox, Flex}};
#[derive(Clone, Debug, Data, Lens)]
struct MyState {
search_term: String,
scale: f64,
// ...
}
fn my_sidebar() -> impl Widget<MyState> {
// `TextBox` is of type `Widget<String>`
// via `.lens` we get it to be of type `Widget<MyState>`.
// `MyState::search_term` is a lens generated by the `derive(Lens)` macro,
// that provides access to the search_term field.
let searchbar = TextBox::new().lens(MyState::search_term);
// ...
// We can now use `searchbar` just like any other `Widget<MyState>`
Flex::column().with_child(searchbar)
}
Structs
A lens that always gives the same value and discards changes.
Lens
for invoking Deref
and DerefMut
on a type
Lens accessing a member of some type using accessor functions
The identity lens: the lens which does nothing, i.e. exposes exactly the original value.
A Lens
that exposes data within an Arc
with copy-on-write semantics
Lens
for indexing containers
Lens
built from a getter and a setter
Lens
composed of two lenses joined together
A Lens
that always yields ().