diff options
author | 2021-11-08 15:29:58 +0700 | |
---|---|---|
committer | 2021-11-29 15:04:13 +0700 | |
commit | 010b62b9ee20b03053ab538a5910795bc0618378 (patch) | |
tree | 6b75a4844239bd93e0a125e6f9d81a356f268f28 /lazy | |
parent | bffa7203dfd333b699bc29a22c74fb602eea4ea1 (diff) | |
download | iced-010b62b9ee20b03053ab538a5910795bc0618378.tar.gz iced-010b62b9ee20b03053ab538a5910795bc0618378.tar.bz2 iced-010b62b9ee20b03053ab538a5910795bc0618378.zip |
Draft `component` example :tada:
Diffstat (limited to 'lazy')
-rw-r--r-- | lazy/src/component.rs | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/lazy/src/component.rs b/lazy/src/component.rs index 3296533e..04832d9d 100644 --- a/lazy/src/component.rs +++ b/lazy/src/component.rs @@ -11,10 +11,12 @@ use ouroboros::self_referencing; use std::marker::PhantomData; pub fn view<'a, Event, Message, Renderer>( - component: &'a mut dyn Component<Message, Renderer, Event = Event>, + component: Box<dyn Component<Message, Renderer, Event = Event> + 'a>, ) -> Element<'a, Message, Renderer> where - Renderer: iced_native::Renderer, + Message: 'a, + Event: 'a, + Renderer: iced_native::Renderer + 'a, { Element::new(Instance { state: Some( @@ -43,8 +45,8 @@ struct Instance<'a, Message, Renderer, Event> { } #[self_referencing] -struct State<'a, Message, Renderer, Event> { - component: &'a mut dyn Component<Message, Renderer, Event = Event>, +struct State<'a, Message: 'a, Renderer: 'a, Event: 'a> { + component: Box<dyn Component<Message, Renderer, Event = Event> + 'a>, #[borrows(mut component)] #[covariant] @@ -106,7 +108,8 @@ where }); if !local_messages.is_empty() { - let component = self.state.take().unwrap().into_heads().component; + let mut component = + self.state.take().unwrap().into_heads().component; messages.extend( local_messages |