Merge branch 'master' into feature/test-recorder
This commit is contained in:
commit
98d8f466bb
98 changed files with 643 additions and 204 deletions
|
|
@ -38,6 +38,8 @@ use crate::{
|
|||
Element, Executor, Font, Result, Settings, Size, Subscription, Task,
|
||||
};
|
||||
|
||||
use iced_debug as debug;
|
||||
|
||||
use std::borrow::Cow;
|
||||
|
||||
pub mod timed;
|
||||
|
|
@ -128,7 +130,7 @@ where
|
|||
state: &mut Self::State,
|
||||
message: Self::Message,
|
||||
) -> Task<Self::Message> {
|
||||
self.update.update(state, message)
|
||||
debug::hot(|| self.update.update(state, message))
|
||||
}
|
||||
|
||||
fn view<'a>(
|
||||
|
|
@ -136,7 +138,7 @@ where
|
|||
state: &'a Self::State,
|
||||
_window: window::Id,
|
||||
) -> Element<'a, Self::Message, Self::Theme, Self::Renderer> {
|
||||
self.view.view(state)
|
||||
debug::hot(|| self.view.view(state))
|
||||
}
|
||||
|
||||
fn settings(&self) -> Settings {
|
||||
|
|
@ -342,7 +344,7 @@ impl<P: Program> Application<P> {
|
|||
> {
|
||||
Application {
|
||||
raw: program::with_title(self.raw, move |state, _window| {
|
||||
title.title(state)
|
||||
debug::hot(|| title.title(state))
|
||||
}),
|
||||
settings: self.settings,
|
||||
window: self.window,
|
||||
|
|
@ -359,7 +361,9 @@ impl<P: Program> Application<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Application {
|
||||
raw: program::with_subscription(self.raw, f),
|
||||
raw: program::with_subscription(self.raw, move |state| {
|
||||
debug::hot(|| f(state))
|
||||
}),
|
||||
settings: self.settings,
|
||||
window: self.window,
|
||||
#[cfg(feature = "test")]
|
||||
|
|
@ -375,7 +379,9 @@ impl<P: Program> Application<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Application {
|
||||
raw: program::with_theme(self.raw, move |state, _window| f(state)),
|
||||
raw: program::with_theme(self.raw, move |state, _window| {
|
||||
debug::hot(|| f(state))
|
||||
}),
|
||||
settings: self.settings,
|
||||
window: self.window,
|
||||
#[cfg(feature = "test")]
|
||||
|
|
@ -391,7 +397,9 @@ impl<P: Program> Application<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Application {
|
||||
raw: program::with_style(self.raw, f),
|
||||
raw: program::with_style(self.raw, move |state, theme| {
|
||||
debug::hot(|| f(state, theme))
|
||||
}),
|
||||
settings: self.settings,
|
||||
window: self.window,
|
||||
#[cfg(feature = "test")]
|
||||
|
|
@ -408,7 +416,7 @@ impl<P: Program> Application<P> {
|
|||
> {
|
||||
Application {
|
||||
raw: program::with_scale_factor(self.raw, move |state, _window| {
|
||||
f(state)
|
||||
debug::hot(|| f(state))
|
||||
}),
|
||||
settings: self.settings,
|
||||
window: self.window,
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ use crate::time::Instant;
|
|||
use crate::window;
|
||||
use crate::{Element, Program, Settings, Subscription, Task};
|
||||
|
||||
use iced_debug as debug;
|
||||
|
||||
/// Creates an [`Application`] with an `update` function that also
|
||||
/// takes the [`Instant`] of each `Message`.
|
||||
///
|
||||
|
|
@ -101,10 +103,12 @@ where
|
|||
state: &mut Self::State,
|
||||
(message, now): Self::Message,
|
||||
) -> Task<Self::Message> {
|
||||
self.update
|
||||
.update(state, message, now)
|
||||
.into()
|
||||
.map(|message| (message, Instant::now()))
|
||||
debug::hot(move || {
|
||||
self.update
|
||||
.update(state, message, now)
|
||||
.into()
|
||||
.map(|message| (message, Instant::now()))
|
||||
})
|
||||
}
|
||||
|
||||
fn view<'a>(
|
||||
|
|
@ -112,16 +116,21 @@ where
|
|||
state: &'a Self::State,
|
||||
_window: window::Id,
|
||||
) -> Element<'a, Self::Message, Self::Theme, Self::Renderer> {
|
||||
self.view
|
||||
.view(state)
|
||||
.map(|message| (message, Instant::now()))
|
||||
debug::hot(|| {
|
||||
self.view
|
||||
.view(state)
|
||||
.map(|message| (message, Instant::now()))
|
||||
})
|
||||
}
|
||||
|
||||
fn subscription(
|
||||
&self,
|
||||
state: &Self::State,
|
||||
) -> self::Subscription<Self::Message> {
|
||||
(self.subscription)(state).map(|message| (message, Instant::now()))
|
||||
debug::hot(|| {
|
||||
(self.subscription)(state)
|
||||
.map(|message| (message, Instant::now()))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ use crate::theme;
|
|||
use crate::window;
|
||||
use crate::{Element, Executor, Font, Result, Settings, Subscription, Task};
|
||||
|
||||
use iced_debug as debug;
|
||||
|
||||
use std::borrow::Cow;
|
||||
|
||||
/// Creates an iced [`Daemon`] given its boot, update, and view logic.
|
||||
|
|
@ -76,7 +78,7 @@ where
|
|||
state: &mut Self::State,
|
||||
message: Self::Message,
|
||||
) -> Task<Self::Message> {
|
||||
self.update.update(state, message)
|
||||
debug::hot(|| self.update.update(state, message))
|
||||
}
|
||||
|
||||
fn view<'a>(
|
||||
|
|
@ -84,7 +86,7 @@ where
|
|||
state: &'a Self::State,
|
||||
window: window::Id,
|
||||
) -> Element<'a, Self::Message, Self::Theme, Self::Renderer> {
|
||||
self.view.view(state, window)
|
||||
debug::hot(|| self.view.view(state, window))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -182,7 +184,7 @@ impl<P: Program> Daemon<P> {
|
|||
> {
|
||||
Daemon {
|
||||
raw: program::with_title(self.raw, move |state, window| {
|
||||
title.title(state, window)
|
||||
debug::hot(|| title.title(state, window))
|
||||
}),
|
||||
settings: self.settings,
|
||||
}
|
||||
|
|
@ -196,7 +198,9 @@ impl<P: Program> Daemon<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Daemon {
|
||||
raw: program::with_subscription(self.raw, f),
|
||||
raw: program::with_subscription(self.raw, move |state| {
|
||||
debug::hot(|| f(state))
|
||||
}),
|
||||
settings: self.settings,
|
||||
}
|
||||
}
|
||||
|
|
@ -209,7 +213,9 @@ impl<P: Program> Daemon<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Daemon {
|
||||
raw: program::with_theme(self.raw, f),
|
||||
raw: program::with_theme(self.raw, move |state, window| {
|
||||
debug::hot(|| f(state, window))
|
||||
}),
|
||||
settings: self.settings,
|
||||
}
|
||||
}
|
||||
|
|
@ -222,7 +228,9 @@ impl<P: Program> Daemon<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Daemon {
|
||||
raw: program::with_style(self.raw, f),
|
||||
raw: program::with_style(self.raw, move |state, theme| {
|
||||
debug::hot(|| f(state, theme))
|
||||
}),
|
||||
settings: self.settings,
|
||||
}
|
||||
}
|
||||
|
|
@ -235,7 +243,9 @@ impl<P: Program> Daemon<P> {
|
|||
impl Program<State = P::State, Message = P::Message, Theme = P::Theme>,
|
||||
> {
|
||||
Daemon {
|
||||
raw: program::with_scale_factor(self.raw, f),
|
||||
raw: program::with_scale_factor(self.raw, move |state, window| {
|
||||
debug::hot(|| f(state, window))
|
||||
}),
|
||||
settings: self.settings,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
26
src/lib.rs
26
src/lib.rs
|
|
@ -34,7 +34,7 @@
|
|||
//! iced::run(update, view)
|
||||
//! }
|
||||
//! # fn update(state: &mut (), message: ()) {}
|
||||
//! # fn view(state: &()) -> iced::Element<()> { iced::widget::text("").into() }
|
||||
//! # fn view(state: &()) -> iced::Element<'_, ()> { iced::widget::text("").into() }
|
||||
//! ```
|
||||
//!
|
||||
//! Define an `update` function to __change__ your state:
|
||||
|
|
@ -55,7 +55,7 @@
|
|||
//! use iced::widget::{button, text};
|
||||
//! use iced::Element;
|
||||
//!
|
||||
//! fn view(counter: &u64) -> Element<Message> {
|
||||
//! fn view(counter: &u64) -> Element<'_, Message> {
|
||||
//! button(text(counter)).on_press(Message::Increment).into()
|
||||
//! }
|
||||
//! # #[derive(Clone)]
|
||||
|
|
@ -95,7 +95,7 @@
|
|||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! fn view(counter: &Counter) -> Element<Message> {
|
||||
//! fn view(counter: &Counter) -> Element<'_, Message> {
|
||||
//! button(text(counter.value)).on_press(Message::Increment).into()
|
||||
//! }
|
||||
//! ```
|
||||
|
|
@ -115,7 +115,7 @@
|
|||
//! use iced::widget::{button, column, text};
|
||||
//! use iced::Element;
|
||||
//!
|
||||
//! fn view(counter: &Counter) -> Element<Message> {
|
||||
//! fn view(counter: &Counter) -> Element<'_, Message> {
|
||||
//! column![
|
||||
//! text(counter.value).size(20),
|
||||
//! button("Increment").on_press(Message::Increment),
|
||||
|
|
@ -144,7 +144,7 @@
|
|||
//! use iced::widget::{column, container, row};
|
||||
//! use iced::{Fill, Element};
|
||||
//!
|
||||
//! fn view(state: &State) -> Element<Message> {
|
||||
//! fn view(state: &State) -> Element<'_, Message> {
|
||||
//! container(
|
||||
//! column![
|
||||
//! "Top",
|
||||
|
|
@ -187,7 +187,7 @@
|
|||
//! use iced::widget::container;
|
||||
//! use iced::Element;
|
||||
//!
|
||||
//! fn view(state: &State) -> Element<Message> {
|
||||
//! fn view(state: &State) -> Element<'_, Message> {
|
||||
//! container("I am 300px tall!").height(300).into()
|
||||
//! }
|
||||
//! ```
|
||||
|
|
@ -216,7 +216,7 @@
|
|||
//! Theme::TokyoNight
|
||||
//! }
|
||||
//! # fn update(state: &mut State, message: ()) {}
|
||||
//! # fn view(state: &State) -> iced::Element<()> { iced::widget::text("").into() }
|
||||
//! # fn view(state: &State) -> iced::Element<'_, ()> { iced::widget::text("").into() }
|
||||
//! ```
|
||||
//!
|
||||
//! The `theme` function takes the current state of the application, allowing the
|
||||
|
|
@ -237,7 +237,7 @@
|
|||
//! use iced::widget::container;
|
||||
//! use iced::Element;
|
||||
//!
|
||||
//! fn view(state: &State) -> Element<Message> {
|
||||
//! fn view(state: &State) -> Element<'_, Message> {
|
||||
//! container("I am a rounded box!").style(container::rounded_box).into()
|
||||
//! }
|
||||
//! ```
|
||||
|
|
@ -252,7 +252,7 @@
|
|||
//! use iced::widget::button;
|
||||
//! use iced::{Element, Theme};
|
||||
//!
|
||||
//! fn view(state: &State) -> Element<Message> {
|
||||
//! fn view(state: &State) -> Element<'_, Message> {
|
||||
//! button("I am a styled button!").style(|theme: &Theme, status| {
|
||||
//! let palette = theme.extended_palette();
|
||||
//!
|
||||
|
|
@ -359,7 +359,7 @@
|
|||
//! }
|
||||
//! # fn new() -> State { State }
|
||||
//! # fn update(state: &mut State, message: Message) {}
|
||||
//! # fn view(state: &State) -> iced::Element<Message> { iced::widget::text("").into() }
|
||||
//! # fn view(state: &State) -> iced::Element<'_, Message> { iced::widget::text("").into() }
|
||||
//! ```
|
||||
//!
|
||||
//! A [`Subscription`] is [a _declarative_ builder of streams](Subscription#the-lifetime-of-a-subscription)
|
||||
|
|
@ -452,7 +452,7 @@
|
|||
//! }
|
||||
//! }
|
||||
//!
|
||||
//! fn view(state: &State) -> Element<Message> {
|
||||
//! fn view(state: &State) -> Element<'_, Message> {
|
||||
//! match &state.screen {
|
||||
//! Screen::Contacts(contacts) => contacts.view().map(Message::Contacts),
|
||||
//! Screen::Conversation(conversation) => conversation.view().map(Message::Conversation),
|
||||
|
|
@ -659,8 +659,8 @@ pub type Element<
|
|||
/// The result of running an iced program.
|
||||
pub type Result = std::result::Result<(), Error>;
|
||||
|
||||
/// Runs a basic iced application with default [`Settings`] given its title,
|
||||
/// update, and view logic.
|
||||
/// Runs a basic iced application with default [`Settings`] given its update
|
||||
/// and view logic.
|
||||
///
|
||||
/// This is equivalent to chaining [`application()`] with [`Application::run`].
|
||||
///
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue