diff options
author | 2022-11-19 12:25:59 -0800 | |
---|---|---|
committer | 2022-11-29 12:17:29 -0800 | |
commit | f1ada7a803998ac3fb2c1bedc6d6650264f3e603 (patch) | |
tree | 17b503307d94ccac239f79f0fc9c3d532732be24 /lazy/src/component.rs | |
parent | 67420cb1e4ac8f7819ee5775c52676c6b7b58718 (diff) | |
download | iced-f1ada7a803998ac3fb2c1bedc6d6650264f3e603.tar.gz iced-f1ada7a803998ac3fb2c1bedc6d6650264f3e603.tar.bz2 iced-f1ada7a803998ac3fb2c1bedc6d6650264f3e603.zip |
Allow &mut self in overlay
Diffstat (limited to 'lazy/src/component.rs')
-rw-r--r-- | lazy/src/component.rs | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/lazy/src/component.rs b/lazy/src/component.rs index 4f1df650..3d7b8758 100644 --- a/lazy/src/component.rs +++ b/lazy/src/component.rs @@ -11,7 +11,7 @@ use iced_native::{ }; use ouroboros::self_referencing; -use std::cell::{Ref, RefCell}; +use std::cell::RefCell; use std::marker::PhantomData; /// A reusable, custom widget that uses The Elm Architecture. @@ -322,25 +322,25 @@ where } fn overlay<'b>( - &'b self, + &'b mut self, tree: &'b mut Tree, layout: Layout<'_>, renderer: &Renderer, ) -> Option<overlay::Element<'b, Message, Renderer>> { let overlay = OverlayBuilder { instance: self, - instance_ref_builder: |instance| instance.state.borrow(), tree, types: PhantomData, overlay_builder: |instance, tree| { - instance - .as_ref() - .unwrap() - .borrow_element() - .as_ref() - .unwrap() - .as_widget() - .overlay(&mut tree.children[0], layout, renderer) + instance.state.get_mut().as_mut().unwrap().with_element_mut( + move |element| { + element.as_mut().unwrap().as_widget_mut().overlay( + &mut tree.children[0], + layout, + renderer, + ) + }, + ) }, } .build(); @@ -362,15 +362,11 @@ where #[self_referencing] struct Overlay<'a, 'b, Message, Renderer, Event, S> { - instance: &'a Instance<'b, Message, Renderer, Event, S>, + instance: &'a mut Instance<'b, Message, Renderer, Event, S>, tree: &'a mut Tree, types: PhantomData<(Message, Event, S)>, - #[borrows(instance)] - #[covariant] - instance_ref: Ref<'this, Option<State<'a, Message, Renderer, Event, S>>>, - - #[borrows(instance_ref, mut tree)] + #[borrows(mut instance, mut tree)] #[covariant] overlay: Option<overlay::Element<'this, Event, Renderer>>, } @@ -514,7 +510,6 @@ where self.overlay = Some( OverlayBuilder { instance: overlay.instance, - instance_ref_builder: |instance| instance.state.borrow(), tree: overlay.tree, types: PhantomData, overlay_builder: |_, _| None, |