[−][src]Struct coffee::ui::core::Element
A generic Widget
.
If you have a widget, you should be able to use widget.into()
to turn it
into an Element
.
Implementations
impl<'a, Message, Renderer> Element<'a, Message, Renderer>
[src]
pub fn new(
widget: impl Widget<Message, Renderer> + 'a
) -> Element<'a, Message, Renderer>
[src]
widget: impl Widget<Message, Renderer> + 'a
) -> Element<'a, Message, Renderer>
pub fn map<F, B>(self, f: F) -> Element<'a, B, Renderer> where
Message: 'static + Copy,
Renderer: 'a,
B: 'static,
F: 'static + Fn(Message) -> B,
[src]
Message: 'static + Copy,
Renderer: 'a,
B: 'static,
F: 'static + Fn(Message) -> B,
Applies a transformation to the produced message of the Element
.
This method is useful when you want to decouple different parts of your UI.
Example
Let's say that we want to have a main menu and a gameplay overlay in our game. We can decouple the interfaces nicely using modules and nested messages:
mod main_menu { use coffee::ui::core::Element; use coffee::ui::Renderer; pub struct MainMenu { // Our main menu state here... // Probably a bunch of `button::State` and other stuff. } #[derive(Debug, Clone, Copy)] pub enum Message { // The different interactions of the main menu here... } impl MainMenu { // We probably would have our `update` function here too... pub fn layout(&mut self) -> Element<Message, Renderer> { // We show the main menu here... // The returned `Element` produces `main_menu::Message` } } } mod gameplay_overlay { // Analogous to the `main_menu` module } use coffee::ui::core::Element; use coffee::ui::Renderer; use main_menu::MainMenu; use gameplay_overlay::GameplayOverlay; // The state of our UI enum State { MainMenu(MainMenu), GameplayOverlay(GameplayOverlay), // ... } // The messages of our UI // We nest the messages here #[derive(Debug, Clone, Copy)] enum Message { MainMenu(main_menu::Message), GameplayOverlay(gameplay_overlay::Message), // ... } // We show the UI here, transforming the local messages of each branch // into the global `Message` type as needed. pub fn layout(state: &mut State) -> Element<Message, Renderer> { match state { State::MainMenu(main_menu) => { main_menu.layout().map(Message::MainMenu) } State::GameplayOverlay(gameplay_overlay) => { gameplay_overlay.layout().map(Message::GameplayOverlay) } // ... } }
This way, neither main_menu
nor gameplay_overlay
know anything about
the global Message
type. They become reusable, allowing the user of
these modules to compose them together freely.
pub fn explain(self, color: Color) -> Element<'a, Message, Renderer> where
Message: 'static,
Renderer: 'a + Renderer,
[src]
Message: 'static,
Renderer: 'a + Renderer,
Trait Implementations
impl<'a, Message, Renderer> Debug for Element<'a, Message, Renderer>
[src]
impl<'a, Message, Renderer> From<Button<'a, Message>> for Element<'a, Message, Renderer> where
Renderer: Renderer,
Message: 'static + Copy + Debug,
[src]
Renderer: Renderer,
Message: 'static + Copy + Debug,
impl<'a, Message, Renderer> From<Checkbox<Message>> for Element<'a, Message, Renderer> where
Renderer: Renderer + Renderer,
Message: 'static,
[src]
Renderer: Renderer + Renderer,
Message: 'static,
impl<'a, Message, Renderer> From<Column<'a, Message, Renderer>> for Element<'a, Message, Renderer> where
Renderer: 'a,
Message: 'static,
[src]
Renderer: 'a,
Message: 'static,
impl<'a, Message, Renderer> From<Image> for Element<'a, Message, Renderer> where
Renderer: Renderer,
[src]
Renderer: Renderer,
impl<'a, Message, Renderer> From<Panel<'a, Message, Renderer>> for Element<'a, Message, Renderer> where
Renderer: 'static + Renderer,
Message: 'static,
[src]
Renderer: 'static + Renderer,
Message: 'static,
impl<'a, Message, Renderer> From<ProgressBar> for Element<'a, Message, Renderer> where
Renderer: Renderer,
[src]
Renderer: Renderer,
fn from(progress_bar: ProgressBar) -> Element<'a, Message, Renderer>
[src]
impl<'a, Message, Renderer> From<Radio<Message>> for Element<'a, Message, Renderer> where
Renderer: Renderer + Renderer,
Message: 'static + Copy + Debug,
[src]
Renderer: Renderer + Renderer,
Message: 'static + Copy + Debug,
impl<'a, Message, Renderer> From<Row<'a, Message, Renderer>> for Element<'a, Message, Renderer> where
Renderer: 'a,
Message: 'static,
[src]
Renderer: 'a,
Message: 'static,
impl<'a, Message, Renderer> From<Slider<'a, Message>> for Element<'a, Message, Renderer> where
Renderer: Renderer,
Message: 'static,
[src]
Renderer: Renderer,
Message: 'static,
impl<'a, Message, Renderer> From<Text> for Element<'a, Message, Renderer> where
Renderer: Renderer,
[src]
Renderer: Renderer,
Auto Trait Implementations
impl<'a, Message, Renderer> !RefUnwindSafe for Element<'a, Message, Renderer>
impl<'a, Message, Renderer> !Send for Element<'a, Message, Renderer>
impl<'a, Message, Renderer> !Sync for Element<'a, Message, Renderer>
impl<'a, Message, Renderer> Unpin for Element<'a, Message, Renderer>
impl<'a, Message, Renderer> !UnwindSafe for Element<'a, Message, Renderer>
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<T> SetParameter for T
fn set<T>(&mut self, value: T) -> <T as Parameter<Self>>::Result where
T: Parameter<Self>,
T: Parameter<Self>,
impl<SS, SP> SupersetOf<SS> for SP where
SS: SubsetOf<SP>,
SS: SubsetOf<SP>,
fn to_subset(&self) -> Option<SS>
fn is_in_subset(&self) -> bool
unsafe fn to_subset_unchecked(&self) -> SS
fn from_subset(element: &SS) -> SP
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,