Skip to content

Commit

Permalink
Avoid cloning layout::Node in Responsive widget
Browse files Browse the repository at this point in the history
  • Loading branch information
hecrj committed Apr 21, 2023
1 parent f42fb6a commit ecc1a45
Showing 1 changed file with 13 additions and 11 deletions.
24 changes: 13 additions & 11 deletions lazy/src/responsive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,14 @@ impl<'a, Message, Renderer> Content<'a, Message, Renderer>
where
Renderer: iced_native::Renderer,
{
fn layout(&mut self, renderer: &Renderer) -> layout::Node {
fn layout(&mut self, renderer: &Renderer) {
if self.layout.is_none() {
self.layout =
Some(self.element.as_widget().layout(
renderer,
&layout::Limits::new(Size::ZERO, self.size),
));
}

self.layout.clone().unwrap()
}

fn update(
Expand Down Expand Up @@ -103,11 +101,12 @@ where
R: Deref<Target = Renderer>,
{
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, &node);
let content_layout = Layout::with_offset(
layout.position() - Point::ORIGIN,
self.layout.as_ref().unwrap(),
);

f(tree, renderer, content_layout, &mut self.element)
}
Expand Down Expand Up @@ -290,14 +289,17 @@ where
types: PhantomData,
overlay_builder: |content: &mut RefMut<Content<_, _>>, tree| {
content.update(tree, layout.bounds().size(), &self.view);
content.layout(renderer);

let node = content.layout(renderer);

let Content { element, .. } = content.deref_mut();
let Content {
element,
layout: content_layout_node,
..
} = content.deref_mut();

let content_layout = Layout::with_offset(
layout.bounds().position() - Point::ORIGIN,
&node,
content_layout_node.as_ref().unwrap(),
);

element
Expand Down

0 comments on commit ecc1a45

Please sign in to comment.