Type Alias Element

Source
pub type Element<'a, Message, Theme = Theme, Renderer = Renderer> = Element<'a, Message, Theme, Renderer>;
Expand description

A generic widget.

This is an alias of an iced_native element with a default Renderer.

Aliased Type§

struct Element<'a, Message, Theme = Theme, Renderer = Renderer> { /* private fields */ }

Implementations

§

impl<'a, Message, Theme, Renderer> Element<'a, Message, Theme, Renderer>

pub fn new( widget: impl Widget<Message, Theme, Renderer> + 'a, ) -> Element<'a, Message, Theme, Renderer>
where Renderer: Renderer,

Creates a new [Element] containing the given Widget.

pub fn as_widget(&self) -> &dyn Widget<Message, Theme, Renderer>

Returns a reference to the Widget of the [Element],

pub fn as_widget_mut(&mut self) -> &mut dyn Widget<Message, Theme, Renderer>

Returns a mutable reference to the Widget of the [Element],

pub fn map<B>( self, f: impl Fn(Message) -> B + 'a, ) -> Element<'a, B, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a, B: 'a,

Applies a transformation to the produced message of the [Element].

This method is useful when you want to decouple different parts of your UI and make them composable.

§Example

Imagine we want to use our counter. But instead of showing a single counter, we want to display many of them. We can reuse the Counter type as it is!

We use composition to model the state of our new application:

use counter::Counter;

struct ManyCounters {
    counters: Vec<Counter>,
}

We can store the state of multiple counters now. However, the messages we implemented before describe the user interactions of a single counter. Right now, we need to also identify which counter is receiving user interactions. Can we use composition again? Yes.

#[derive(Debug, Clone, Copy)]
pub enum Message {
    Counter(usize, counter::Message)
}

We compose the previous messages with the index of the counter producing them. Let’s implement our view logic now:

use counter::Counter;

use iced::widget::row;
use iced::{Element, Function};

struct ManyCounters {
    counters: Vec<Counter>,
}

#[derive(Debug, Clone, Copy)]
pub enum Message {
    Counter(usize, counter::Message),
}

impl ManyCounters {
    pub fn view(&self) -> Element<Message> {
        // We can quickly populate a `row` by mapping our counters
        row(
            self.counters
                .iter()
                .map(Counter::view)
                .enumerate()
                .map(|(index, counter)| {
                    // Here we turn our `Element<counter::Message>` into
                    // an `Element<Message>` by combining the `index` and the
                    // message of the `element`.
                    counter.map(Message::Counter.with(index))
                }),
        )
        .into()
    }
}

Finally, our update logic is pretty straightforward: simple delegation.

impl ManyCounters {
    pub fn update(&mut self, message: Message) {
        match message {
            Message::Counter(index, counter_msg) => {
                if let Some(counter) = self.counters.get_mut(index) {
                    counter.update(counter_msg);
                }
            }
        }
    }
}

pub fn explain<C>(self, color: C) -> Element<'a, Message, Theme, Renderer>
where C: Into<Color>, Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Marks the [Element] as to-be-explained.

The Renderer will explain the layout of the [Element] graphically. This can be very useful for debugging your layout!

Trait Implementations

§

impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for Element<'a, Message, Theme, Renderer>

§

fn borrow(&self) -> &(dyn Widget<Message, Theme, Renderer> + 'a)

Immutably borrows from an owned value. Read more
§

impl<'a, Message, Theme, Renderer> From<&'a str> for Element<'a, Message, Theme, Renderer>
where Theme: Catalog + 'a, Renderer: Renderer + 'a,

§

fn from(content: &'a str) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Button<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( button: Button<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, P, Message, Theme, Renderer> From<Canvas<P, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: 'a + Renderer, P: 'a + Program<Message, Theme, Renderer>,

Source§

fn from( canvas: Canvas<P, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Checkbox<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a + Catalog, Renderer: 'a + Renderer,

Source§

fn from( checkbox: Checkbox<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Key, Message, Theme, Renderer> From<Column<'a, Key, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Key: Copy + PartialEq + 'static, Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( column: Column<'a, Key, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Column<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( column: Column<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, T, Message, Theme, Renderer> From<ComboBox<'a, T, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where T: Display + Clone + 'static, Message: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( combo_box: ComboBox<'a, T, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Container<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( column: Container<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer, Handle> From<Image<Handle>> for Element<'a, Message, Theme, Renderer>
where Renderer: Renderer<Handle = Handle>, Handle: Clone + 'a,

Source§

fn from(image: Image<Handle>) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer, Dependency, View> From<Lazy<'a, Message, Theme, Renderer, Dependency, View>> for Element<'a, Message, Theme, Renderer>
where View: Into<Element<'static, Message, Theme, Renderer>> + 'static, Renderer: Renderer + 'static, Message: 'static, Theme: 'static, Dependency: Hash + 'a,

Source§

fn from( lazy: Lazy<'a, Message, Theme, Renderer, Dependency, View>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, 'b, T, Message, Theme, Renderer> From<List<'a, 'b, T, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where 'b: 'a, T: ToString + Clone, Message: 'a, Theme: 'a + Catalog, Renderer: 'a + Renderer,

Source§

fn from( list: List<'a, 'b, T, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<MouseArea<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a + Clone, Theme: 'a, Renderer: 'a + Renderer,

Source§

fn from( area: MouseArea<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<PaneGrid<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( pane_grid: PaneGrid<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, T, L, V, Message, Theme, Renderer> From<PickList<'a, T, L, V, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where T: Clone + ToString + PartialEq + 'a, L: Borrow<[T]> + 'a, V: Borrow<T> + 'a, Message: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( pick_list: PickList<'a, T, L, V, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Pin<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( pin: Pin<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Pop<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Renderer: Renderer + 'a, Theme: 'a, Message: Clone + 'a,

Source§

fn from( pop: Pop<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<ProgressBar<'a, Theme>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a + Catalog, Renderer: 'a + Renderer,

Source§

fn from( progress_bar: ProgressBar<'a, Theme>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme> From<QRCode<'a, Theme>> for Element<'a, Message, Theme, Renderer<Renderer, Renderer>>
where Theme: Catalog + 'a,

Source§

fn from( qr_code: QRCode<'a, Theme>, ) -> Element<'a, Message, Theme, Renderer<Renderer, Renderer>>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Radio<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a + Clone, Theme: 'a + Catalog, Renderer: 'a + Renderer,

Source§

fn from( radio: Radio<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Responsive<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( responsive: Responsive<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Link, Message, Theme, Renderer> From<Rich<'a, Link, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Link: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( text: Rich<'a, Link, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Row<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( row: Row<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Rule<'a, Theme>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a + Catalog, Renderer: 'a + Renderer,

Source§

fn from(rule: Rule<'a, Theme>) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Scrollable<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a + Catalog, Renderer: 'a + Renderer,

Source§

fn from( text_input: Scrollable<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer, P> From<Shader<Message, P>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Renderer: Renderer, P: Program<Message> + 'a,

Source§

fn from(custom: Shader<Message, P>) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, T, Message, Theme, Renderer> From<Slider<'a, T, Message, Theme>> for Element<'a, Message, Theme, Renderer>
where T: Copy + Into<f64> + FromPrimitive + 'a, Message: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( slider: Slider<'a, T, Message, Theme>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Space> for Element<'a, Message, Theme, Renderer>
where Renderer: Renderer, Message: 'a,

Source§

fn from(space: Space) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Stack<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( stack: Stack<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Svg<'a, Theme>> for Element<'a, Message, Theme, Renderer>
where Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from(icon: Svg<'a, Theme>) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
§

impl<'a, Message, Theme, Renderer> From<Text<'a, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Theme: Catalog + 'a, Renderer: Renderer + 'a,

§

fn from( text: Text<'a, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Highlighter, Message, Theme, Renderer> From<TextEditor<'a, Highlighter, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Highlighter: Highlighter, Message: 'a, Theme: Catalog + 'a, Renderer: Renderer,

Source§

fn from( text_editor: TextEditor<'a, Highlighter, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<TextInput<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( text_input: TextInput<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, NewTheme, F, Renderer> From<Themer<'a, Message, Theme, NewTheme, F, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, NewTheme: 'a, F: Fn(&Theme) -> NewTheme + 'a, Renderer: 'a + Renderer,

Source§

fn from( themer: Themer<'a, Message, Theme, NewTheme, F, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Toggler<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( toggler: Toggler<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Tooltip<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( tooltip: Tooltip<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, T, Message, Theme, Renderer> From<VerticalSlider<'a, T, Message, Theme>> for Element<'a, Message, Theme, Renderer>
where T: Copy + Into<f64> + FromPrimitive + 'a, Message: Clone + 'a, Theme: Catalog + 'a, Renderer: Renderer + 'a,

Source§

fn from( slider: VerticalSlider<'a, T, Message, Theme>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer, Handle> From<Viewer<Handle>> for Element<'a, Message, Theme, Renderer>
where Renderer: 'a + Renderer<Handle = Handle>, Message: 'a, Handle: Clone + 'a,

Source§

fn from(viewer: Viewer<Handle>) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.
Source§

impl<'a, Message, Theme, Renderer> From<Wrapping<'a, Message, Theme, Renderer>> for Element<'a, Message, Theme, Renderer>
where Message: 'a, Theme: 'a, Renderer: Renderer + 'a,

Source§

fn from( row: Wrapping<'a, Message, Theme, Renderer>, ) -> Element<'a, Message, Theme, Renderer>

Converts to this type from the input type.