cosmic::iced_widget::runtime

Struct UserInterface

source
pub struct UserInterface<'a, Message, Theme, 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 example uses a UserInterface to integrate Iced in an existing graphical application.

Implementations§

source§

impl<'a, Message, Theme, Renderer> UserInterface<'a, Message, Theme, Renderer>
where Renderer: Renderer,

source

pub fn build<E>( root: E, bounds: Size, cache: Cache, renderer: &mut Renderer, ) -> UserInterface<'a, Message, Theme, Renderer>
where E: Into<Element<'a, Message, Theme, Renderer>>,

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_runtime::core::Size;
use iced_runtime::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::default();
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();
}
source

pub fn update( &mut self, events: &[Event], cursor: Cursor, renderer: &mut Renderer, clipboard: &mut dyn Clipboard, messages: &mut Vec<Message>, ) -> (State, Vec<Status>)

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_runtime::core::clipboard;
use iced_runtime::core::mouse;
use iced_runtime::core::Size;
use iced_runtime::user_interface::{self, UserInterface};
use iced_wgpu::Renderer;

let mut counter = Counter::new();
let mut cache = user_interface::Cache::new();
let mut renderer = Renderer::default();
let mut window_size = Size::new(1024.0, 768.0);
let mut cursor = mouse::Cursor::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,
        &mut renderer,
        &mut clipboard,
        &mut messages
    );

    cache = user_interface.into_cache();

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

pub fn draw( &mut self, renderer: &mut Renderer, theme: &Theme, style: &Style, cursor: Cursor, ) -> Interaction

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_runtime::core::clipboard;
use iced_runtime::core::mouse;
use iced_runtime::core::renderer;
use iced_runtime::core::{Element, Size};
use iced_runtime::user_interface::{self, UserInterface};
use iced_wgpu::{Renderer, Theme};

let mut counter = Counter::new();
let mut cache = user_interface::Cache::new();
let mut renderer = Renderer::default();
let mut window_size = Size::new(1024.0, 768.0);
let mut cursor = mouse::Cursor::default();
let mut clipboard = clipboard::Null;
let mut events = Vec::new();
let mut messages = Vec::new();
let mut theme = Theme::default();

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,
        &mut renderer,
        &mut clipboard,
        &mut messages
    );

    // Draw the user interface
    let mouse_interaction = user_interface.draw(&mut renderer, &theme, &renderer::Style::default(), cursor);

    cache = user_interface.into_cache();

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

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

pub fn operate(&mut self, renderer: &Renderer, operation: &mut dyn Operation)

Applies a widget::Operation to the UserInterface.

source

pub fn relayout( self, bounds: Size, renderer: &mut Renderer, ) -> UserInterface<'a, Message, Theme, Renderer>

Relayouts and returns a new UserInterface using the provided bounds.

source

pub fn into_cache(self) -> Cache

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

source

pub fn a11y_nodes(&self, cursor: Cursor) -> A11yTree

get a11y nodes

source

pub fn find(&self, id: &Id) -> Option<&Tree>

Find widget with given id

source

pub fn dnd_rectangles( &self, prev_capacity: usize, renderer: &Renderer, ) -> DndDestinationRectangles

Get the destination rectangles for the user interface.

Auto Trait Implementations§

§

impl<'a, Message, Theme, Renderer> Freeze for UserInterface<'a, Message, Theme, Renderer>

§

impl<'a, Message, Theme, Renderer> !RefUnwindSafe for UserInterface<'a, Message, Theme, Renderer>

§

impl<'a, Message, Theme, Renderer> !Send for UserInterface<'a, Message, Theme, Renderer>

§

impl<'a, Message, Theme, Renderer> !Sync for UserInterface<'a, Message, Theme, Renderer>

§

impl<'a, Message, Theme, Renderer> Unpin for UserInterface<'a, Message, Theme, Renderer>

§

impl<'a, Message, Theme, Renderer> !UnwindSafe for UserInterface<'a, Message, Theme, Renderer>

Blanket Implementations§

source§

impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for S
where T: Real + Zero + Arithmetics + Clone, Swp: WhitePoint<T>, Dwp: WhitePoint<T>, D: AdaptFrom<S, Swp, Dwp, T>,

source§

fn adapt_into_using<M>(self, method: M) -> D
where M: TransformMatrix<T>,

Convert the source color to the destination color using the specified method.
source§

fn adapt_into(self) -> D

Convert the source color to the destination color using the bradford method by default.
source§

impl<T> Also for T

source§

fn also<F>(self, block: F) -> Self
where F: FnOnce(&mut Self),

Apply a function to this value and return the (possibly) modified value.
source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T, Res> Apply<Res> for T
where T: ?Sized,

source§

fn apply<F>(self, f: F) -> Res
where F: FnOnce(Self) -> Res, Self: Sized,

Apply a function which takes the parameter by value.
source§

fn apply_ref<F>(&self, f: F) -> Res
where F: FnOnce(&Self) -> Res,

Apply a function which takes the parameter by reference.
source§

fn apply_mut<F>(&mut self, f: F) -> Res
where F: FnOnce(&mut Self) -> Res,

Apply a function which takes the parameter by mutable reference.
source§

impl<T, C> ArraysFrom<C> for T
where C: IntoArrays<T>,

source§

fn arrays_from(colors: C) -> T

Cast a collection of colors into a collection of arrays.
source§

impl<T, C> ArraysInto<C> for T
where C: FromArrays<T>,

source§

fn arrays_into(self) -> C

Cast this collection of arrays into a collection of colors.
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for U
where T: FromCam16Unclamped<WpParam, U>,

source§

type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
source§

fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
source§

impl<T, C> ComponentsFrom<C> for T
where C: IntoComponents<T>,

source§

fn components_from(colors: C) -> T

Cast a collection of colors into a collection of color components.
source§

impl<T> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> FromAngle<T> for T

source§

fn from_angle(angle: T) -> T

Performs a conversion from angle.
source§

impl<T, U> FromStimulus<U> for T
where U: IntoStimulus<T>,

source§

fn from_stimulus(other: U) -> T

Converts other into Self, while performing the appropriate scaling, rounding and clamping.
source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

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

source§

impl<T, U> IntoAngle<U> for T
where U: FromAngle<T>,

source§

fn into_angle(self) -> U

Performs a conversion into T.
source§

impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for U
where T: Cam16FromUnclamped<WpParam, U>,

source§

type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar

The number type that’s used in parameters when converting.
source§

fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T

Converts self into C, using the provided parameters.
source§

impl<T, U> IntoColor<U> for T
where U: FromColor<T>,

source§

fn into_color(self) -> U

Convert into T with values clamped to the color defined bounds Read more
source§

impl<T, U> IntoColorUnclamped<U> for T
where U: FromColorUnclamped<T>,

source§

fn into_color_unclamped(self) -> U

Convert into T. The resulting color might be invalid in its color space Read more
source§

impl<T> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

impl<T> IntoStimulus<T> for T

source§

fn into_stimulus(self) -> T

Converts self into T, while performing the appropriate scaling, rounding and clamping.
source§

impl<T> Pointable for T

source§

const ALIGN: usize = _

The alignment of pointer.
source§

type Init = T

The type for initializers.
source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

source§

type Output = T

Should always be Self
source§

impl<T, C> TryComponentsInto<C> for T
where C: TryFromComponents<T>,

source§

type Error = <C as TryFromComponents<T>>::Error

The error for when try_into_colors fails to cast.
source§

fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>

Try to cast this collection of color components into a collection of colors. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T, U> TryIntoColor<U> for T
where U: TryFromColor<T>,

source§

fn try_into_color(self) -> Result<U, OutOfBounds<U>>

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
source§

impl<C, U> UintsFrom<C> for U
where C: IntoUints<U>,

source§

fn uints_from(colors: C) -> U

Cast a collection of colors into a collection of unsigned integers.
source§

impl<C, U> UintsInto<C> for U
where C: FromUints<U>,

source§

fn uints_into(self) -> C

Cast this collection of unsigned integers into a collection of colors.
source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

impl<T> MaybeSendSync for T