pub struct UserInterface<'a, Message, Renderer> { /* private fields */ }
Expand description

A set of interactive graphical elements with a specific Layout.

It can be updated and drawn.

Iced tries to avoid dictating how to write your event loop. You are in charge of using this type in your system in any way you want.

Example

The integration_opengl & integration_wgpu examples use a UserInterface to integrate Iced in an existing graphical application.

Implementations§

Builds a user interface for an Element.

It is able to avoid expensive computations when using a Cache obtained from a previous instance of a UserInterface.

Example

Imagine we want to build a UserInterface for the counter example that we previously wrote. Here is naive way to set up our application loop:

use iced_native::Size;
use iced_native::user_interface::{self, UserInterface};
use iced_wgpu::Renderer;

// Initialization
let mut counter = Counter::new();
let mut cache = user_interface::Cache::new();
let mut renderer = Renderer::new();
let mut window_size = Size::new(1024.0, 768.0);

// Application loop
loop {
    // Process system events here...

    // Build the user interface
    let user_interface = UserInterface::build(
        counter.view(),
        window_size,
        cache,
        &mut renderer,
    );

    // Update and draw the user interface here...
    // ...

    // Obtain the cache for the next iteration
    cache = user_interface.into_cache();
}

Updates the UserInterface by processing each provided Event.

It returns messages that may have been produced as a result of user interactions. You should feed these to your update logic.

Example

Let’s allow our counter to change state by completing the previous example:

use iced_native::{clipboard, Size, Point};
use iced_native::user_interface::{self, UserInterface};
use iced_wgpu::Renderer;

let mut counter = Counter::new();
let mut cache = user_interface::Cache::new();
let mut renderer = Renderer::new();
let mut window_size = Size::new(1024.0, 768.0);
let mut cursor_position = Point::default();
let mut clipboard = clipboard::Null;

// Initialize our event storage
let mut events = Vec::new();
let mut messages = Vec::new();

loop {
    // Obtain system events...

    let mut user_interface = UserInterface::build(
        counter.view(),
        window_size,
        cache,
        &mut renderer,
    );

    // Update the user interface
    let (state, event_statuses) = user_interface.update(
        &events,
        cursor_position,
        &mut renderer,
        &mut clipboard,
        &mut messages
    );

    cache = user_interface.into_cache();

    // Process the produced messages
    for message in messages.drain(..) {
        counter.update(message);
    }
}

Draws the UserInterface with the provided Renderer.

It returns the current mouse::Interaction. You should update the icon of the mouse cursor accordingly in your system.

Example

We can finally draw our counter by completing the last example:

use iced_native::clipboard;
use iced_native::renderer;
use iced_native::user_interface::{self, UserInterface};
use iced_native::{Size, Point, Theme};
use iced_wgpu::Renderer;

let mut counter = Counter::new();
let mut cache = user_interface::Cache::new();
let mut renderer = Renderer::new();
let mut window_size = Size::new(1024.0, 768.0);
let mut cursor_position = Point::default();
let mut clipboard = clipboard::Null;
let mut events = Vec::new();
let mut messages = Vec::new();

loop {
    // Obtain system events...

    let mut user_interface = UserInterface::build(
        counter.view(),
        window_size,
        cache,
        &mut renderer,
    );

    // Update the user interface
    let event_statuses = user_interface.update(
        &events,
        cursor_position,
        &mut renderer,
        &mut clipboard,
        &mut messages
    );

    // Draw the user interface
    let mouse_cursor = user_interface.draw(&mut renderer, &Theme::default(), &renderer::Style::default(), cursor_position);

    cache = user_interface.into_cache();

    for message in messages.drain(..) {
        counter.update(message);
    }

    // Update mouse cursor icon...
    // Flush rendering operations...
}

Applies a widget::Operation to the UserInterface.

Relayouts and returns a new UserInterface using the provided bounds.

Extract the Cache of the UserInterface, consuming it in the process.

Auto Trait Implementations§

Blanket Implementations§

Convert the source color to the destination color using the specified method Read more
Convert the source color to the destination color using the bradford method by default Read more
Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Convert into T with values clamped to the color defined bounds Read more
Convert into T. The resulting color might be invalid in its color space Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.
Convert into T, returning ok if the color is inside of its defined range, otherwise an OutOfBounds error is returned which contains the unclamped color. Read more