Skip to main content

Widget

Trait Widget 

Source
pub trait Widget<Message, Theme, Renderer>: Meta {
    // Required methods
    fn size(&self) -> Size<Length>;
    fn layout(&mut self, tree: &mut Tree, renderer: &Renderer, limits: &Limits);
    fn draw(
        &self,
        tree: &Tree,
        renderer: &mut Renderer,
        theme: &Theme,
        style: &Style,
        layout: Layout,
        cursor: Cursor,
        viewport: &Rectangle,
    );

    // Provided methods
    fn tag(&self) -> Tag { ... }
    fn state(&self) -> State { ... }
    fn diff(&mut self, tree: &mut Tree) { ... }
    fn operate(
        &mut self,
        _tree: &mut Tree,
        _layout: Layout,
        _viewport: &Rectangle,
        _renderer: &Renderer,
        _operation: &mut dyn Operation,
    ) { ... }
    fn update(
        &mut self,
        _tree: &mut Tree,
        _event: &Event,
        _layout: Layout,
        _cursor: Cursor,
        _renderer: &Renderer,
        _shell: &mut Shell<'_, Message>,
        _viewport: &Rectangle,
    ) { ... }
    fn mouse_interaction(
        &self,
        _tree: &Tree,
        _layout: Layout,
        _cursor: Cursor,
        _viewport: &Rectangle,
        _renderer: &Renderer,
    ) -> Interaction { ... }
    fn overlay<'a>(
        &'a mut self,
        _tree: &'a mut Tree,
        _layout: Layout,
        _renderer: &Renderer,
        _viewport: &Rectangle,
        _translation: Vector,
        _window: Size,
    ) -> Vec<Element<'a, Message, Theme, Renderer>> { ... }
    fn _map<F, B>(self, f: F) -> Map<Self, F, Message>
       where Self: Sized,
             F: Fn(Message) -> B { ... }
    fn _boxed<'a>(self) -> Element<'a, Message, Theme, Renderer>
       where Self: Sized + 'a { ... }
}
Expand description

A component that displays information and allows interaction.

If you want to build your own widgets, you will need to implement this trait.

§Examples

The repository has some examples showcasing how to implement a custom widget:

  • custom_widget, a demonstration of how to build a custom widget that draws a circle.
  • geometry, a custom widget showcasing how to draw geometry with the Mesh2D primitive in iced_wgpu.

Required Methods§

Source

fn size(&self) -> Size<Length>

Returns the Size of the Widget in lengths.

Source

fn layout(&mut self, tree: &mut Tree, renderer: &Renderer, limits: &Limits)

Lays out the Widget.

This computes the Layout of the Widget and stores the result in the provided Tree.

Source

fn draw( &self, tree: &Tree, renderer: &mut Renderer, theme: &Theme, style: &Style, layout: Layout, cursor: Cursor, viewport: &Rectangle, )

Draws the Widget using the associated Renderer.

Provided Methods§

Source

fn tag(&self) -> Tag

Returns the Tag of the Widget.

Source

fn state(&self) -> State

Returns the State of the Widget.

Source

fn diff(&mut self, tree: &mut Tree)

Reconciles the Widget with the provided Tree.

Source

fn operate( &mut self, _tree: &mut Tree, _layout: Layout, _viewport: &Rectangle, _renderer: &Renderer, _operation: &mut dyn Operation, )

Applies an Operation to the Widget.

Source

fn update( &mut self, _tree: &mut Tree, _event: &Event, _layout: Layout, _cursor: Cursor, _renderer: &Renderer, _shell: &mut Shell<'_, Message>, _viewport: &Rectangle, )

Processes a runtime Event.

By default, it does nothing.

Source

fn mouse_interaction( &self, _tree: &Tree, _layout: Layout, _cursor: Cursor, _viewport: &Rectangle, _renderer: &Renderer, ) -> Interaction

Returns the current mouse::Interaction of the Widget.

By default, it returns mouse::Interaction::None.

Source

fn overlay<'a>( &'a mut self, _tree: &'a mut Tree, _layout: Layout, _renderer: &Renderer, _viewport: &Rectangle, _translation: Vector, _window: Size, ) -> Vec<Element<'a, Message, Theme, Renderer>>

Returns the overlays of the Widget.

Source

fn _map<F, B>(self, f: F) -> Map<Self, F, Message>
where Self: Sized, F: Fn(Message) -> B,

Applies a transformation to the produced message of this Widget, returning a Map.

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

Source

fn _boxed<'a>(self) -> Element<'a, Message, Theme, Renderer>
where Self: Sized + 'a,

Boxes this Widget, turning it into a generic Element.

Implementations on Foreign Types§

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for &str
where Theme: Catalog, Renderer: Renderer,

Source§

fn size(&self) -> Size<Length>

Source§

fn tag(&self) -> Tag

Source§

fn state(&self) -> State

Source§

fn layout(&mut self, tree: &mut Tree, renderer: &Renderer, limits: &Limits)

Source§

fn draw( &self, tree: &Tree, renderer: &mut Renderer, theme: &Theme, defaults: &Style, layout: Layout, _cursor_position: Cursor, viewport: &Rectangle, )

Source§

fn operate( &mut self, tree: &mut Tree, layout: Layout, _viewport: &Rectangle, _renderer: &Renderer, operation: &mut dyn Operation, )

Source§

impl<T, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Option<T>
where T: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

fn size(&self) -> Size<Length>

Source§

fn tag(&self) -> Tag

Source§

fn state(&self) -> State

Source§

fn diff(&mut self, tree: &mut Tree)

Source§

fn layout(&mut self, tree: &mut Tree, renderer: &Renderer, limits: &Limits)

Source§

fn draw( &self, tree: &Tree, renderer: &mut Renderer, theme: &Theme, style: &Style, layout: Layout, cursor: Cursor, viewport: &Rectangle, )

Source§

fn operate( &mut self, tree: &mut Tree, layout: Layout, viewport: &Rectangle, renderer: &Renderer, operation: &mut dyn Operation, )

Source§

fn update( &mut self, tree: &mut Tree, event: &Event, layout: Layout, cursor: Cursor, renderer: &Renderer, shell: &mut Shell<'_, Message>, viewport: &Rectangle, )

Source§

fn mouse_interaction( &self, tree: &Tree, layout: Layout, cursor: Cursor, viewport: &Rectangle, renderer: &Renderer, ) -> Interaction

Source§

fn overlay<'a>( &'a mut self, tree: &'a mut Tree, layout: Layout, renderer: &Renderer, viewport: &Rectangle, translation: Vector, window: Size, ) -> Vec<Element<'a, Message, Theme, Renderer>>

Source§

impl<T, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for &mut T
where Renderer: Renderer, T: Widget<Message, Theme, Renderer>,

Source§

fn size(&self) -> Size<Length>

Source§

fn tag(&self) -> Tag

Source§

fn state(&self) -> State

Source§

fn diff(&mut self, tree: &mut Tree)

Source§

fn layout(&mut self, tree: &mut Tree, renderer: &Renderer, limits: &Limits)

Source§

fn draw( &self, tree: &Tree, renderer: &mut Renderer, theme: &Theme, style: &Style, layout: Layout, cursor: Cursor, viewport: &Rectangle, )

Source§

fn operate( &mut self, tree: &mut Tree, layout: Layout, viewport: &Rectangle, renderer: &Renderer, operation: &mut dyn Operation, )

Source§

fn update( &mut self, tree: &mut Tree, event: &Event, layout: Layout, cursor: Cursor, renderer: &Renderer, shell: &mut Shell<'_, Message>, viewport: &Rectangle, )

Source§

fn mouse_interaction( &self, tree: &Tree, layout: Layout, cursor: Cursor, viewport: &Rectangle, renderer: &Renderer, ) -> Interaction

Source§

fn overlay<'a>( &'a mut self, tree: &'a mut Tree, layout: Layout, renderer: &Renderer, viewport: &Rectangle, translation: Vector, window: Size, ) -> Vec<Element<'a, Message, Theme, Renderer>>

Implementors§

Source§

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

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Void

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Text<'_, Theme>
where Theme: Catalog, Renderer: Renderer,

Source§

impl<W, A, B, F, Theme, Renderer> Widget<B, Theme, Renderer> for Map<W, F, A>
where W: Widget<A, Theme, Renderer>, B: 'static, F: Fn(A) -> B, Theme: 'static, Renderer: Renderer + 'static,