Skip to main content

Widget

Trait Widget 

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 { ... }
}
Available on crate feature advanced only.
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§

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

Returns the Size of the Widget in lengths.

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.

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§

fn tag(&self) -> Tag

Returns the Tag of the Widget.

fn state(&self) -> State

Returns the State of the Widget.

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

Reconciles the Widget with the provided Tree.

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

Applies an Operation to the Widget.

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.

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.

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.

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.

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§

§

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

§

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

§

fn tag(&self) -> Tag

§

fn state(&self) -> State

§

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

§

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

§

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

§

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

§

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

§

fn tag(&self) -> Tag

§

fn state(&self) -> State

§

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

§

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, )

§

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>>

§

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

§

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

§

fn tag(&self) -> Tag

§

fn state(&self) -> State

§

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

§

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, )

§

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>>

Implementors§

Source§

impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Table<'a, Message, Theme, Renderer>
where Theme: Catalog, Renderer: Renderer,

§

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

Source§

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

Source§

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

Source§

impl<'a, W, Message, Theme, Renderer, Dependency> Widget<Message, Theme, Renderer> for Lazy<'a, W, Dependency>
where W: Widget<Message, Theme, Renderer> + 'static, Dependency: Hash + 'a, Renderer: Renderer,

Source§

impl<Key, Message, W, Theme, Renderer> Widget<Message, Theme, Renderer> for Sensor<'_, Key, Message, W>
where Key: Key, Renderer: Renderer, W: Widget<Message, Theme, Renderer>,

Source§

impl<Key, W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for iced::widget::keyed::Column<Key, W>
where Renderer: Renderer, Key: Copy + PartialEq + 'static, W: Widget<Message, Theme, Renderer>,

Source§

impl<Link, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Rich<'_, Link, Message, Theme>
where Link: Clone + 'static, Theme: Catalog, Renderer: Renderer,

Source§

impl<Message, T, W, Theme, Renderer> Widget<Message, Theme, Renderer> for PaneGrid<'_, Message, T, W, Theme, Renderer>
where Theme: Catalog, Renderer: Renderer, T: Widget<Message, Theme, Renderer>, W: Widget<Message, Theme, Renderer>,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Space
where Renderer: Renderer,

Source§

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

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for TextInput<'_, Message, Theme>
where Message: Clone, Theme: Catalog, Renderer: Renderer + 'static,

Source§

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

§

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

§

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

Source§

impl<Message, Theme, Renderer, AnyTheme> Widget<Message, AnyTheme, Renderer> for Themer<'_, Message, Theme, Renderer>
where Theme: Base, AnyTheme: Base, Renderer: Renderer,

Source§

impl<Message, Theme, Renderer, Handle> Widget<Message, Theme, Renderer> for Viewer<Handle>
where Renderer: Renderer<Handle = Handle>, Handle: Clone,

Source§

impl<Message, Theme, Renderer, Handle> Widget<Message, Theme, Renderer> for Image<Handle>
where Renderer: Renderer<Handle = Handle>, Handle: Clone,

Source§

impl<Message, W, Theme, Renderer> Widget<Message, Theme, Renderer> for MouseArea<'_, Message, W>
where Renderer: Renderer, Message: Clone, W: Widget<Message, Theme, Renderer>,

Source§

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

Source§

impl<Message, W, Theme, Renderer, P> Widget<Message, Theme, Renderer> for Transition<'_, Message, W, P>
where Renderer: Renderer, P: Program, W: Widget<Message, Theme, Renderer>,

Source§

impl<P, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Canvas<P, Message, Theme, Renderer>
where Renderer: Renderer, P: Program<Message, Theme, Renderer>,

Source§

impl<P, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Shader<Message, P>
where P: Program<Message>, Renderer: Renderer,

Source§

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

Source§

impl<T, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for ComboBox<'_, T, Message, Theme>
where T: Display + Clone + 'static, Message: Clone, Theme: Catalog, Renderer: Renderer + 'static,

Source§

impl<T, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Slider<'_, T, Message, Theme>
where T: Copy + AsPrimitive<f64> + FromPrimitive, Message: Clone, Theme: Catalog, Renderer: Renderer,

Source§

impl<T, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for VerticalSlider<'_, T, Message, Theme>
where T: Copy + AsPrimitive<f64> + FromPrimitive, Message: Clone, Theme: Catalog, Renderer: Renderer,

§

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,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Wrapping<W>
where W: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for iced::widget::Column<W>
where W: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

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

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Explain<W>
where W: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

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

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Grid<W>
where Renderer: Renderer, W: Widget<Message, Theme, Renderer>,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Pin<W>
where W: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Responsive<'_, W>
where Renderer: Renderer, W: Widget<Message, Theme, Renderer>,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Row<W>
where W: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Stack<W>
where W: Widget<Message, Theme, Renderer>, Renderer: Renderer,

Source§

impl<W, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Sticky<W>
where Renderer: Renderer, W: Widget<Message, Theme, Renderer>,

Source§

impl<W, V, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Hover<W, V>
where Renderer: Renderer, W: Widget<Message, Theme, Renderer>, V: Widget<Message, Theme, Renderer>,

Source§

impl<W, V, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Tooltip<'_, W, V, Theme>
where Theme: Catalog, Renderer: Renderer, W: Widget<Message, Theme, Renderer>, V: Widget<Message, Theme, Renderer>,