Trait Widget

pub trait Widget<Message, Theme, Renderer>
where Renderer: Renderer,
{
Show 16 methods // Required methods fn size(&self) -> Size<Length>; fn layout( &mut self, tree: &mut Tree, renderer: &Renderer, limits: &Limits, ) -> Node; fn draw( &self, tree: &Tree, renderer: &mut Renderer, theme: &Theme, style: &Style, layout: Layout<'_>, cursor: Cursor, viewport: &Rectangle, ); // Provided methods fn size_hint(&self) -> Size<Length> { ... } fn tag(&self) -> Tag { ... } fn state(&self) -> State { ... } fn children(&self) -> Vec<Tree> { ... } fn diff(&mut self, tree: &mut Tree) { ... } fn operate( &mut self, _tree: &mut Tree, _layout: Layout<'_>, _renderer: &Renderer, _operation: &mut dyn Operation, ) { ... } fn update( &mut self, _tree: &mut Tree, _event: &Event, _layout: Layout<'_>, _cursor: Cursor, _renderer: &Renderer, _clipboard: &mut dyn Clipboard, _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<'a>, _renderer: &Renderer, _viewport: &Rectangle, _translation: Vector, ) -> Option<Element<'a, Message, Theme, Renderer>> { ... } fn a11y_nodes( &self, _layout: Layout<'_>, _state: &Tree, _cursor: Cursor, ) -> A11yTree { ... } fn id(&self) -> Option<Id> { ... } fn set_id(&mut self, _id: Id) { ... } fn drag_destinations( &self, _state: &Tree, _layout: Layout<'_>, _renderer: &Renderer, _dnd_rectangles: &mut DndDestinationRectangles, ) { ... }
}
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, ) -> Node

Returns the layout::Node of the Widget.

This layout::Node is used by the runtime to compute the Layout of the user interface.

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 size_hint(&self) -> Size<Length>

Returns a Size hint for laying out the Widget.

This hint may be used by some widget containers to adjust their sizing strategy during construction.

fn tag(&self) -> Tag

Returns the Tag of the Widget.

fn state(&self) -> State

Returns the State of the Widget.

fn children(&self) -> Vec<Tree>

Returns the state Tree of the children 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<'_>, _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, _clipboard: &mut dyn Clipboard, _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<'a>, _renderer: &Renderer, _viewport: &Rectangle, _translation: Vector, ) -> Option<Element<'a, Message, Theme, Renderer>>

Returns the overlay of the Widget, if there is any.

fn a11y_nodes( &self, _layout: Layout<'_>, _state: &Tree, _cursor: Cursor, ) -> A11yTree

get the a11y nodes for the widget and its children

fn id(&self) -> Option<Id>

Returns the id of the widget

fn set_id(&mut self, _id: Id)

Sets the id of the widget This may be called while diffing the widget tree

fn drag_destinations( &self, _state: &Tree, _layout: Layout<'_>, _renderer: &Renderer, _dnd_rectangles: &mut DndDestinationRectangles, )

Adds the drag destination rectangles of the widget. Runs after the layout phase for each widget in the tree.

Trait Implementations§

Source§

impl<M: 'static> Borrow<dyn Widget<M, Theme, Renderer>> for RcElementWrapper<M>

Source§

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

Immutably borrows from an owned value. Read more
§

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> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for &mut 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> 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> BorrowMut<dyn Widget<Message, Theme, Renderer> + 'a> for &mut Element<'a, Message, Theme, Renderer>

§

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

Mutably borrows from an owned value. Read more
§

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

§

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

Mutably borrows from an owned value. Read more

Implementors§

Source§

impl<'a, Message> Widget<Message, Theme, Renderer> for cosmic::widget::Toggler<'a, Message>

Source§

impl<'a, Message, Renderer, I> Widget<Message, Theme, Renderer> for RectangleTrackingContainer<'a, Message, Renderer, I>
where Renderer: Renderer, I: 'a + Hash + Copy + Send + Sync + Debug,

§

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

§

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

§

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, Dependency, View> Widget<Message, Theme, Renderer> for Lazy<'a, Message, Theme, Renderer, Dependency, View>
where View: Into<Element<'static, Message, Theme, Renderer>> + 'static, Dependency: Hash + 'a, Message: 'static, Theme: 'static, Renderer: Renderer + 'static,

§

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

Source§

impl<'a, Message: 'a + Clone> Widget<Message, Theme, Renderer> for cosmic::widget::Button<'a, Message>

Source§

impl<'a, Message: 'static + Clone, TopLevelMessage: 'static + Clone> Widget<Message, Theme, Renderer> for cosmic::widget::wayland::tooltip::widget::Tooltip<'a, Message, TopLevelMessage>

Available on crate feature wayland and Linux and crate feature winit only.
Source§

impl<'a, S: AsRef<str>, Message: 'a, Item: Clone + PartialEq + 'static> Widget<Message, Theme, Renderer> for cosmic::widget::dropdown::multi::Dropdown<'a, S, Message, Item>

§

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

§

impl<'a, T, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for List<'a, T, Message, Theme, Renderer>
where Renderer: Renderer,

§

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

§

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

§

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

§

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

Source§

impl<M> Widget<M, Theme, Renderer> for RcElementWrapper<M>

Source§

impl<Message> Widget<Message, Theme, Renderer> for MenuBar<Message>
where Message: Clone + 'static,

Source§

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

Source§

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

Source§

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

Source§

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

Source§

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

Source§

impl<Message, Theme> Widget<Message, Theme, Renderer> for Circular<Theme>
where Message: Clone, Theme: StyleSheet,

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::applet::column::Column<'_, Message, Theme, Renderer>
where Renderer: Renderer,

Available on crate feature applet only.
Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::applet::row::Row<'_, Message, Theme, Renderer>
where Renderer: Renderer,

Available on crate feature applet only.
Source§

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

Available on crate feature autosize only.
§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::widget::column::Wrapping<'_, Message, Theme, Renderer>
where Renderer: Renderer,

§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::widget::row::Wrapping<'_, Message, Theme, Renderer>
where Renderer: Renderer,

§

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

§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::widget::Column<'_, Message, Theme, Renderer>
where Renderer: Renderer,

§

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

Source§

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

Source§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Linear<Theme>
where Message: Clone, Theme: StyleSheet, Renderer: Renderer,

§

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

§

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

§

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

§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::widget::Row<'_, Message, Theme, Renderer>
where Renderer: Renderer,

§

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

§

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

§

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

§

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

§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::Grid<'_, Message, Theme, Renderer>
where Renderer: Renderer,

§

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

§

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

§

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

§

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

§

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

§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::TextInput<'_, Message, Theme, Renderer>
where Message: Clone, Theme: Catalog, Renderer: Renderer,

§

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

§

impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::Tooltip<'_, Message, Theme, Renderer>
where Theme: Catalog, Renderer: Renderer,

§

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

§

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

§

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

Source§

impl<Message: 'static + Clone> Widget<Message, Theme, Renderer> for ContextMenu<'_, Message>

Source§

impl<Message: 'static + Clone> Widget<Message, Theme, Renderer> for FlexRow<'_, Message>

Source§

impl<Message: 'static + Clone> Widget<Message, Theme, Renderer> for cosmic::widget::Grid<'_, Message>

Source§

impl<Message: 'static> Widget<Message, Theme, Renderer> for DndDestination<'_, Message>

Source§

impl<Message: Clone + 'static, D: AsMimeTypes + Send + 'static> Widget<Message, Theme, Renderer> for DndSource<'_, Message, D>

Source§

impl<Message: Clone> Widget<Message, Theme, Renderer> for ContextDrawer<'_, Message>

Source§

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

§

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<S: AsRef<str> + Send + Sync + Clone + 'static, Message: 'static + Clone, AppMessage: 'static + Clone> Widget<Message, Theme, Renderer> for cosmic::widget::Dropdown<'_, S, Message, AppMessage>
where [S]: ToOwned,

§

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

§

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

§

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

Source§

impl<Variant, SelectionMode, Message> Widget<Message, Theme, Renderer> for SegmentedButton<'_, Variant, SelectionMode, Message>
where Self: SegmentedVariant, Model<SelectionMode>: Selectable, SelectionMode: Default, Message: 'static + Clone,