Avoid cloning layout::Node in Responsive widget

This commit is contained in:
Héctor Ramón Jiménez 2023-04-21 21:40:43 +02:00
parent f42fb6af54
commit ecc1a4509a
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -58,7 +58,7 @@ impl<'a, Message, Renderer> Content<'a, Message, Renderer>
where where
Renderer: iced_native::Renderer, Renderer: iced_native::Renderer,
{ {
fn layout(&mut self, renderer: &Renderer) -> layout::Node { fn layout(&mut self, renderer: &Renderer) {
if self.layout.is_none() { if self.layout.is_none() {
self.layout = self.layout =
Some(self.element.as_widget().layout( Some(self.element.as_widget().layout(
@ -66,8 +66,6 @@ where
&layout::Limits::new(Size::ZERO, self.size), &layout::Limits::new(Size::ZERO, self.size),
)); ));
} }
self.layout.clone().unwrap()
} }
fn update( fn update(
@ -103,11 +101,12 @@ where
R: Deref<Target = Renderer>, R: Deref<Target = Renderer>,
{ {
self.update(tree, layout.bounds().size(), view); self.update(tree, layout.bounds().size(), view);
self.layout(renderer.deref());
let node = self.layout(renderer.deref()); let content_layout = Layout::with_offset(
layout.position() - Point::ORIGIN,
let content_layout = self.layout.as_ref().unwrap(),
Layout::with_offset(layout.position() - Point::ORIGIN, &node); );
f(tree, renderer, content_layout, &mut self.element) f(tree, renderer, content_layout, &mut self.element)
} }
@ -290,14 +289,17 @@ where
types: PhantomData, types: PhantomData,
overlay_builder: |content: &mut RefMut<Content<_, _>>, tree| { overlay_builder: |content: &mut RefMut<Content<_, _>>, tree| {
content.update(tree, layout.bounds().size(), &self.view); content.update(tree, layout.bounds().size(), &self.view);
content.layout(renderer);
let node = content.layout(renderer); let Content {
element,
let Content { element, .. } = content.deref_mut(); layout: content_layout_node,
..
} = content.deref_mut();
let content_layout = Layout::with_offset( let content_layout = Layout::with_offset(
layout.bounds().position() - Point::ORIGIN, layout.bounds().position() - Point::ORIGIN,
&node, content_layout_node.as_ref().unwrap(),
); );
element element