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 for invoking AsRef and AsMut on a type.

Lens composed of two lenses joined together

A Lens that always yields ().