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 theMesh2Dprimitive iniced_wgpu.
Required Methods§
fn layout(
&mut self,
tree: &mut Tree,
renderer: &Renderer,
limits: &Limits,
) -> Node
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.
Provided Methods§
fn operate(
&mut self,
_tree: &mut Tree,
_layout: Layout<'_>,
_renderer: &Renderer,
_operation: &mut dyn Operation,
)
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 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
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>>
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
fn a11y_nodes( &self, _layout: Layout<'_>, _state: &Tree, _cursor: Cursor, ) -> A11yTree
get the a11y nodes for the widget and its children
fn set_id(&mut self, _id: Id)
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,
)
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§
§impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for &Element<'a, Message, Theme, Renderer>
impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for &Element<'a, Message, Theme, Renderer>
§impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for &mut Element<'a, Message, Theme, Renderer>
impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for &mut Element<'a, Message, Theme, Renderer>
§impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for Element<'a, Message, Theme, Renderer>
impl<'a, Message, Theme, Renderer> Borrow<dyn Widget<Message, Theme, Renderer> + 'a> for Element<'a, Message, Theme, Renderer>
Implementors§
impl<'a, Message> Widget<Message, Theme, Renderer> for cosmic::widget::Toggler<'a, Message>
impl<'a, Message, Renderer, I> Widget<Message, Theme, Renderer> for RectangleTrackingContainer<'a, Message, Renderer, I>
impl<'a, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::Button<'a, Message, Theme, Renderer>
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>
impl<'a, Message, Theme, Renderer, Dependency, View> Widget<Message, Theme, Renderer> for Lazy<'a, Message, Theme, Renderer, Dependency, View>
impl<'a, Message, Theme, Renderer, Handle> Widget<Message, Theme, Renderer> for Image<'a, Handle>
impl<'a, Message: 'a + Clone> Widget<Message, Theme, Renderer> for cosmic::widget::Button<'a, Message>
impl<'a, Message: 'static + Clone, TopLevelMessage: 'static + Clone> Widget<Message, Theme, Renderer> for cosmic::widget::wayland::tooltip::widget::Tooltip<'a, Message, TopLevelMessage>
wayland and Linux and crate feature winit only.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>
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>
impl<Key, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::keyed::Column<'_, Key, Message, Theme, Renderer>
impl<Key, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Sensor<'_, Key, Message, Theme, Renderer>
impl<Link, Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Rich<'_, Link, Message, Theme, Renderer>
impl<M> Widget<M, Theme, Renderer> for RcElementWrapper<M>
impl<Message> Widget<Message, Theme, Renderer> for MenuBar<Message>where
Message: Clone + 'static,
impl<Message> Widget<Message, Theme, Renderer> for ColorPicker<'_, Message>where
Message: Clone + 'static,
impl<Message> Widget<Message, Theme, Renderer> for cosmic::widget::TextInput<'_, Message>where
Message: Clone + 'static,
impl<Message, Renderer> Widget<Message, Theme, Renderer> for AspectRatio<'_, Message, Renderer>where
Renderer: Renderer,
impl<Message, Renderer> Widget<Message, Theme, Renderer> for LayerContainer<'_, Message, Renderer>where
Renderer: Renderer,
impl<Message, Renderer> Widget<Message, Theme, Renderer> for cosmic::widget::Radio<'_, Message, Renderer>
impl<Message, Theme> Widget<Message, Theme, Renderer> for Circular<Theme>where
Message: Clone,
Theme: StyleSheet,
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::applet::column::Column<'_, Message, Theme, Renderer>where
Renderer: Renderer,
applet only.impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::applet::row::Row<'_, Message, Theme, Renderer>where
Renderer: Renderer,
applet only.impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Text<'_, Theme, Renderer>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Subsurfacewhere
Renderer: Renderer,
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Float<'_, Message, Theme, 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>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::Radio<'_, Message, Theme, Renderer>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Rule<'_, Theme>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Scrollable<'_, Message, Theme, Renderer>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::TextInput<'_, Message, Theme, Renderer>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::Toggler<'_, Message, Theme, Renderer>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for cosmic::iced::widget::Tooltip<'_, Message, Theme, Renderer>
impl<Message, Theme, Renderer> Widget<Message, Theme, Renderer> for Autosize<'_, Message, Theme, Renderer>where
Renderer: Renderer,
autosize only.