diff options
author | 2024-09-18 21:57:04 +0200 | |
---|---|---|
committer | 2024-09-18 21:57:04 +0200 | |
commit | db7ba958d1ddebe6a2fcbec00582f81524cc6e69 (patch) | |
tree | 64183c913c7560f6d19df593383be0d7abbb3c81 /src/program.rs | |
parent | fc722f1356f9720b3b922a525e8b08bedddb6a5b (diff) | |
parent | 7f4a73e1856134821e3e0af11f21469cdc4544a2 (diff) | |
download | iced-db7ba958d1ddebe6a2fcbec00582f81524cc6e69.tar.gz iced-db7ba958d1ddebe6a2fcbec00582f81524cc6e69.tar.bz2 iced-db7ba958d1ddebe6a2fcbec00582f81524cc6e69.zip |
Merge pull request #2580 from mtkennerly/feature/custom-executor
Allow specifying a custom executor
Diffstat (limited to 'src/program.rs')
-rw-r--r-- | src/program.rs | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/program.rs b/src/program.rs index 2b697fbe..94cb9a7d 100644 --- a/src/program.rs +++ b/src/program.rs @@ -550,6 +550,80 @@ pub fn with_scale_factor<P: Program>( } } +pub fn with_executor<P: Program, E: Executor>( + program: P, +) -> impl Program<State = P::State, Message = P::Message, Theme = P::Theme> { + use std::marker::PhantomData; + + struct WithExecutor<P, E> { + program: P, + executor: PhantomData<E>, + } + + impl<P: Program, E> Program for WithExecutor<P, E> + where + E: Executor, + { + type State = P::State; + type Message = P::Message; + type Theme = P::Theme; + type Renderer = P::Renderer; + type Executor = E; + + fn title(&self, state: &Self::State, window: window::Id) -> String { + self.program.title(state, window) + } + + fn update( + &self, + state: &mut Self::State, + message: Self::Message, + ) -> Task<Self::Message> { + self.program.update(state, message) + } + + fn view<'a>( + &self, + state: &'a Self::State, + window: window::Id, + ) -> Element<'a, Self::Message, Self::Theme, Self::Renderer> { + self.program.view(state, window) + } + + fn subscription( + &self, + state: &Self::State, + ) -> Subscription<Self::Message> { + self.program.subscription(state) + } + + fn theme( + &self, + state: &Self::State, + window: window::Id, + ) -> Self::Theme { + self.program.theme(state, window) + } + + fn style( + &self, + state: &Self::State, + theme: &Self::Theme, + ) -> Appearance { + self.program.style(state, theme) + } + + fn scale_factor(&self, state: &Self::State, window: window::Id) -> f64 { + self.program.scale_factor(state, window) + } + } + + WithExecutor { + program, + executor: PhantomData::<E>, + } +} + /// The renderer of some [`Program`]. pub trait Renderer: text::Renderer + compositor::Default {} |