diff options
Diffstat (limited to '')
-rw-r--r-- | lazy/src/pure/responsive.rs | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/lazy/src/pure/responsive.rs b/lazy/src/pure/responsive.rs index 2b77873f..291f1aaf 100644 --- a/lazy/src/pure/responsive.rs +++ b/lazy/src/pure/responsive.rs @@ -9,7 +9,7 @@ use iced_pure::widget::tree::{self, Tree}; use iced_pure::{Element, Widget}; use ouroboros::self_referencing; -use std::cell::{Ref, RefCell, RefMut}; +use std::cell::{RefCell, RefMut}; use std::marker::PhantomData; use std::ops::Deref; @@ -236,11 +236,27 @@ where let state = tree.state.downcast_ref::<State>(); let overlay = OverlayBuilder { - content: self.content.borrow(), + content: self.content.borrow_mut(), tree: state.tree.borrow_mut(), types: PhantomData, overlay_builder: |content, tree| { - content.element.as_widget().overlay(tree, layout, renderer) + content.update( + tree, + renderer, + layout.bounds().size(), + &self.view, + ); + + let content_layout = Layout::with_offset( + layout.position() - Point::ORIGIN, + &content.layout, + ); + + content.element.as_widget().overlay( + tree, + content_layout, + renderer, + ) }, } .build(); @@ -267,11 +283,11 @@ where #[self_referencing] struct Overlay<'a, 'b, Message, Renderer> { - content: Ref<'a, Content<'b, Message, Renderer>>, + content: RefMut<'a, Content<'b, Message, Renderer>>, tree: RefMut<'a, Tree>, types: PhantomData<Message>, - #[borrows(content, mut tree)] + #[borrows(mut content, mut tree)] #[covariant] overlay: Option<overlay::Element<'this, Message, Renderer>>, } |