[][src]Trait coffee::ui::core::Widget

pub trait Widget<Message, Renderer>: Debug {
    fn node(&self, renderer: &Renderer) -> Node;
fn draw(
        &self,
        renderer: &mut Renderer,
        layout: Layout,
        cursor_position: Point
    ) -> MouseCursor;
fn hash(&self, state: &mut Hasher); fn on_event(
        &mut self,
        _event: Event,
        _layout: Layout,
        _cursor_position: Point,
        _messages: &mut Vec<Message>
    ) { ... } }

A component that displays information or allows interaction.

If you want to build a custom widget, you will need to implement this trait. Additionally, remember to also provide Into<Element> so your users can easily turn your Widget into a generic Element

Required methods

fn node(&self, renderer: &Renderer) -> Node

Returns the Node of the Widget.

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

fn draw(
    &self,
    renderer: &mut Renderer,
    layout: Layout,
    cursor_position: Point
) -> MouseCursor

Draws the Widget using the associated Renderer.

It must return the MouseCursor state for the Widget.

fn hash(&self, state: &mut Hasher)

Computes the layout hash of the Widget.

The produced hash is used by the runtime to decide if the Layout needs to be recomputed between frames. Therefore, to ensure maximum efficiency, the hash should only be affected by the properties of the Widget that can affect layouting.

For example, the Text widget does not hash its color property, as its value cannot affect the overall Layout of the user interface.

Loading content...

Provided methods

fn on_event(
    &mut self,
    _event: Event,
    _layout: Layout,
    _cursor_position: Point,
    _messages: &mut Vec<Message>
)

Processes a runtime Event.

It receives:

  • an Event describing user interaction
  • the computed Layout of the Widget
  • the current cursor position
  • a mutable Message vector, allowing the Widget to produce new messages based on user interaction.

By default, it does nothing.

Loading content...

Implementors

impl<'a, Message, Renderer> Widget<Message, Renderer> for Button<'a, Message> where
    Renderer: Renderer,
    Message: Copy + Debug
[src]

impl<'a, Message, Renderer> Widget<Message, Renderer> for Panel<'a, Message, Renderer> where
    Renderer: Renderer
[src]

impl<'a, Message, Renderer> Widget<Message, Renderer> for Slider<'a, Message> where
    Renderer: Renderer
[src]

impl<'a, Message, Renderer> Widget<Message, Renderer> for Column<'a, Message, Renderer>[src]

impl<'a, Message, Renderer> Widget<Message, Renderer> for Row<'a, Message, Renderer>[src]

impl<Message, Renderer> Widget<Message, Renderer> for Checkbox<Message> where
    Renderer: Renderer + Renderer
[src]

impl<Message, Renderer> Widget<Message, Renderer> for Image where
    Renderer: Renderer
[src]

impl<Message, Renderer> Widget<Message, Renderer> for ProgressBar where
    Renderer: Renderer
[src]

impl<Message, Renderer> Widget<Message, Renderer> for Radio<Message> where
    Renderer: Renderer + Renderer,
    Message: Copy + Debug
[src]

impl<Message, Renderer> Widget<Message, Renderer> for Text where
    Renderer: Renderer
[src]

Loading content...