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,
impl<'a, Message, Theme, Renderer> UserInterface<'a, Message, Theme, Renderer>where
Renderer: Renderer,
sourcepub fn build<E>(
root: E,
bounds: Size,
cache: Cache,
renderer: &mut Renderer,
) -> UserInterface<'a, Message, Theme, Renderer>
pub fn build<E>( root: E, bounds: Size, cache: Cache, renderer: &mut Renderer, ) -> UserInterface<'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();
}
sourcepub fn update(
&mut self,
events: &[Event],
cursor: Cursor,
renderer: &mut Renderer,
clipboard: &mut dyn Clipboard,
messages: &mut Vec<Message>,
) -> (State, Vec<Status>)
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);
}
}
sourcepub fn draw(
&mut self,
renderer: &mut Renderer,
theme: &Theme,
style: &Style,
cursor: Cursor,
) -> Interaction
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...
}
sourcepub fn operate(&mut self, renderer: &Renderer, operation: &mut dyn Operation)
pub fn operate(&mut self, renderer: &Renderer, operation: &mut dyn Operation)
Applies a widget::Operation
to the UserInterface
.
sourcepub fn relayout(
self,
bounds: Size,
renderer: &mut Renderer,
) -> UserInterface<'a, Message, Theme, Renderer>
pub fn relayout( self, bounds: Size, renderer: &mut Renderer, ) -> UserInterface<'a, Message, Theme, Renderer>
Relayouts and returns a new UserInterface
using the provided
bounds.
sourcepub fn into_cache(self) -> Cache
pub fn into_cache(self) -> Cache
Extract the Cache
of the UserInterface
, consuming it in the
process.
sourcepub fn a11y_nodes(&self, cursor: Cursor) -> A11yTree
pub fn a11y_nodes(&self, cursor: Cursor) -> A11yTree
get a11y nodes
sourcepub fn dnd_rectangles(
&self,
prev_capacity: usize,
renderer: &Renderer,
) -> DndDestinationRectangles
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 Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
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) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
source§impl<T, Res> Apply<Res> for Twhere
T: ?Sized,
impl<T, Res> Apply<Res> for Twhere
T: ?Sized,
source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters
when converting.source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
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)
fn as_any(&self) -> &(dyn Any + 'static)
&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)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&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> FromAngle<T> for T
impl<T> FromAngle<T> for T
source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle
.source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other
into Self
, while performing the appropriate scaling,
rounding and clamping.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
source§fn into_angle(self) -> U
fn into_angle(self) -> U
T
.source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters
when converting.source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self
into C
, using the provided parameters.source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
source§fn into_color(self) -> U
fn into_color(self) -> U
source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moresource§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self
into T
, while performing the appropriate scaling,
rounding and clamping.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors
fails to cast.source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds
error is returned which contains
the unclamped color. Read more