Fix incorrect layout in Widget::overlay for pure::Responsive

This commit is contained in:
Héctor Ramón Jiménez 2022-03-14 17:41:21 +07:00
parent 3efb59dea3
commit 9f27969d14
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -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>>,
}