//! Use the built-in widgets or create your own. pub mod button; pub mod checkbox; pub mod container; pub mod image; pub mod pane_grid; pub mod pick_list; pub mod progress_bar; pub mod radio; pub mod rule; pub mod scrollable; pub mod slider; pub mod svg; pub mod text; pub mod text_input; pub mod toggler; pub mod tooltip; pub mod tree; mod column; mod row; mod space; pub use button::Button; pub use checkbox::Checkbox; pub use column::Column; pub use container::Container; pub use image::Image; pub use pane_grid::PaneGrid; pub use pick_list::PickList; pub use progress_bar::ProgressBar; pub use radio::Radio; pub use row::Row; pub use rule::Rule; pub use scrollable::Scrollable; pub use slider::Slider; pub use space::Space; pub use svg::Svg; pub use text::Text; pub use text_input::TextInput; pub use toggler::Toggler; pub use tooltip::{Position, Tooltip}; pub use tree::Tree; use iced_native::event::{self, Event}; use iced_native::layout::{self, Layout}; use iced_native::mouse; use iced_native::overlay; use iced_native::renderer; use iced_native::{Clipboard, Length, Point, Rectangle, Shell}; /// A component that displays information and allows interaction. /// /// If you want to build your own widgets, you will need to implement this /// trait. pub trait Widget where Renderer: iced_native::Renderer, { /// Returns the width of the [`Widget`]. fn width(&self) -> Length; /// Returns the height of the [`Widget`]. fn height(&self) -> Length; /// Returns the [`layout::Node`] of the [`Widget`]. /// /// This [`layout::Node`] is used by the runtime to compute the [`Layout`] of the /// user interface. fn layout( &self, renderer: &Renderer, limits: &layout::Limits, ) -> layout::Node; /// Draws the [`Widget`] using the associated `Renderer`. fn draw( &self, state: &Tree, renderer: &mut Renderer, theme: &Renderer::Theme, style: &renderer::Style, layout: Layout<'_>, cursor_position: Point, viewport: &Rectangle, ); /// Returns the [`Tag`] of the [`Widget`]. /// /// [`Tag`]: tree::Tag fn tag(&self) -> tree::Tag { tree::Tag::stateless() } /// Returns the [`State`] of the [`Widget`]. /// /// [`State`]: tree::State fn state(&self) -> tree::State { tree::State::None } /// Returns the state [`Tree`] of the children of the [`Widget`]. fn children(&self) -> Vec { Vec::new() } /// Reconciliates the [`Widget`] with the provided [`Tree`]. fn diff(&self, _tree: &mut Tree) {} /// Processes a runtime [`Event`]. /// /// By default, it does nothing. fn on_event( &mut self, _state: &mut Tree, _event: Event, _layout: Layout<'_>, _cursor_position: Point, _renderer: &Renderer, _clipboard: &mut dyn Clipboard, _shell: &mut Shell<'_, Message>, ) -> event::Status { event::Status::Ignored } /// Returns the current [`mouse::Interaction`] of the [`Widget`]. /// /// By default, it returns [`mouse::Interaction::Idle`]. fn mouse_interaction( &self, _state: &Tree, _layout: Layout<'_>, _cursor_position: Point, _viewport: &Rectangle, _renderer: &Renderer, ) -> mouse::Interaction { mouse::Interaction::Idle } /// Returns the overlay of the [`Widget`], if there is any. fn overlay<'a>( &'a self, _state: &'a mut Tree, _layout: Layout<'_>, _renderer: &Renderer, ) -> Option> { None } }