Add Application::Executor associated type
This commit is contained in:
parent
35760ac68f
commit
90690702e1
29 changed files with 195 additions and 72 deletions
|
|
@ -1,4 +1,4 @@
|
|||
use crate::{window, Command, Element, Settings, Subscription};
|
||||
use crate::{window, Command, Element, Executor, Settings, Subscription};
|
||||
|
||||
/// An interactive cross-platform application.
|
||||
///
|
||||
|
|
@ -19,7 +19,7 @@ use crate::{window, Command, Element, Settings, Subscription};
|
|||
/// before](index.html#overview). We just need to fill in the gaps:
|
||||
///
|
||||
/// ```no_run
|
||||
/// use iced::{button, Application, Button, Column, Command, Element, Settings, Text};
|
||||
/// use iced::{button, executor, Application, Button, Column, Command, Element, Settings, Text};
|
||||
///
|
||||
/// pub fn main() {
|
||||
/// Counter::run(Settings::default())
|
||||
|
|
@ -39,6 +39,7 @@ use crate::{window, Command, Element, Settings, Subscription};
|
|||
/// }
|
||||
///
|
||||
/// impl Application for Counter {
|
||||
/// type Executor = executor::Null;
|
||||
/// type Message = Message;
|
||||
///
|
||||
/// fn new() -> (Self, Command<Message>) {
|
||||
|
|
@ -80,6 +81,14 @@ use crate::{window, Command, Element, Settings, Subscription};
|
|||
/// }
|
||||
/// ```
|
||||
pub trait Application: Sized {
|
||||
/// The [`Executor`] that will run commands and subscriptions.
|
||||
///
|
||||
/// The [`executor::Default`] can be a good starting point!
|
||||
///
|
||||
/// [`Executor`]: trait.Executor.html
|
||||
/// [`executor::Default`]: executor/struct.Default.html
|
||||
type Executor: Executor;
|
||||
|
||||
/// The type of __messages__ your [`Application`] will produce.
|
||||
///
|
||||
/// [`Application`]: trait.Application.html
|
||||
|
|
@ -185,6 +194,7 @@ where
|
|||
A: Application,
|
||||
{
|
||||
type Renderer = iced_wgpu::Renderer;
|
||||
type Executor = A::Executor;
|
||||
type Message = A::Message;
|
||||
|
||||
fn new() -> (Self, Command<A::Message>) {
|
||||
|
|
|
|||
22
src/lib.rs
22
src/lib.rs
|
|
@ -180,18 +180,26 @@
|
|||
#![deny(unsafe_code)]
|
||||
#![deny(rust_2018_idioms)]
|
||||
mod application;
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
#[path = "web.rs"]
|
||||
mod platform;
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[path = "native.rs"]
|
||||
mod platform;
|
||||
mod sandbox;
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
mod native;
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
pub use native::*;
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
mod web;
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
pub use web::*;
|
||||
|
||||
pub mod settings;
|
||||
pub mod window;
|
||||
|
||||
#[doc(no_inline)]
|
||||
pub use executor::Executor;
|
||||
|
||||
pub use application::Application;
|
||||
pub use platform::*;
|
||||
pub use sandbox::Sandbox;
|
||||
pub use settings::Settings;
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ pub use iced_winit::{
|
|||
Space, Subscription, Vector, VerticalAlignment,
|
||||
};
|
||||
|
||||
pub mod executor;
|
||||
|
||||
pub mod widget {
|
||||
//! Display information and interactive controls in your application.
|
||||
//!
|
||||
|
|
|
|||
23
src/native/executor.rs
Normal file
23
src/native/executor.rs
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
//! Choose your preferred executor to power your application.
|
||||
pub use iced_winit::{executor::Null, Executor};
|
||||
use iced_winit::{executor::ThreadPool, futures};
|
||||
|
||||
/// The default cross-platform executor.
|
||||
///
|
||||
/// - On native platforms, it will use a `ThreadPool`.
|
||||
/// - On the Web, it will use `wasm-bindgen-futures::spawn_local`.
|
||||
#[derive(Debug)]
|
||||
pub struct Default(ThreadPool);
|
||||
|
||||
impl Executor for Default {
|
||||
fn new() -> Result<Self, futures::io::Error> {
|
||||
Ok(Default(ThreadPool::new()?))
|
||||
}
|
||||
|
||||
fn spawn(
|
||||
&self,
|
||||
future: impl futures::Future<Output = ()> + Send + 'static,
|
||||
) {
|
||||
self.0.spawn(future);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
use crate::{Application, Command, Element, Settings, Subscription};
|
||||
use crate::{executor, Application, Command, Element, Settings, Subscription};
|
||||
|
||||
/// A sandboxed [`Application`].
|
||||
///
|
||||
|
|
@ -133,6 +133,7 @@ impl<T> Application for T
|
|||
where
|
||||
T: Sandbox,
|
||||
{
|
||||
type Executor = executor::Null;
|
||||
type Message = T::Message;
|
||||
|
||||
fn new() -> (Self, Command<T::Message>) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue