diff options
author | 2022-03-14 17:41:21 +0700 | |
---|---|---|
committer | 2022-03-14 17:44:25 +0700 | |
commit | 9f27969d14232355ad628431fb67aa07e42e768f (patch) | |
tree | d8f4e86aa58478a206c62c349548e9be40dda164 /lazy | |
parent | 3efb59dea3d206a9d627ce5a7a7a93c00d769ba8 (diff) | |
download | iced-9f27969d14232355ad628431fb67aa07e42e768f.tar.gz iced-9f27969d14232355ad628431fb67aa07e42e768f.tar.bz2 iced-9f27969d14232355ad628431fb67aa07e42e768f.zip |
Fix incorrect `layout` in `Widget::overlay` for `pure::Responsive`
Diffstat (limited to 'lazy')
-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>>, } |