Trait Widget
pub trait Widget<Message, Theme, Renderer>where
Renderer: Renderer,{
// Required methods
fn size(&self) -> Size<Length>;
fn layout(
&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(&self, _tree: &mut Tree) { ... }
fn operate(
&self,
_state: &mut Tree,
_layout: Layout<'_>,
_renderer: &Renderer,
_operation: &mut dyn Operation,
) { ... }
fn update(
&mut self,
_state: &mut Tree,
_event: Event,
_layout: Layout<'_>,
_cursor: Cursor,
_renderer: &Renderer,
_clipboard: &mut dyn Clipboard,
_shell: &mut Shell<'_, Message>,
_viewport: &Rectangle,
) { ... }
fn mouse_interaction(
&self,
_state: &Tree,
_layout: Layout<'_>,
_cursor: Cursor,
_viewport: &Rectangle,
_renderer: &Renderer,
) -> Interaction { ... }
fn overlay<'a>(
&'a mut self,
_state: &'a mut Tree,
_layout: Layout<'_>,
_renderer: &Renderer,
_translation: Vector,
) -> Option<Element<'a, Message, Theme, Renderer>> { ... }
}
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:
bezier_tool
, a Paint-like tool for drawing Bézier curves usinglyon
.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 theMesh2D
primitive iniced_wgpu
.
Required Methods§
fn layout(&self, tree: &mut Tree, renderer: &Renderer, limits: &Limits) -> Node
fn layout(&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(
&self,
_state: &mut Tree,
_layout: Layout<'_>,
_renderer: &Renderer,
_operation: &mut dyn Operation,
)
fn operate( &self, _state: &mut Tree, _layout: Layout<'_>, _renderer: &Renderer, _operation: &mut dyn Operation, )
fn update(
&mut self,
_state: &mut Tree,
_event: Event,
_layout: Layout<'_>,
_cursor: Cursor,
_renderer: &Renderer,
_clipboard: &mut dyn Clipboard,
_shell: &mut Shell<'_, Message>,
_viewport: &Rectangle,
)
fn update( &mut self, _state: &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,
_state: &Tree,
_layout: Layout<'_>,
_cursor: Cursor,
_viewport: &Rectangle,
_renderer: &Renderer,
) -> Interaction
fn mouse_interaction( &self, _state: &Tree, _layout: Layout<'_>, _cursor: Cursor, _viewport: &Rectangle, _renderer: &Renderer, ) -> Interaction
Returns the current mouse::Interaction
of the Widget
.
By default, it returns mouse::Interaction::Idle
.