diff options
author | 2023-04-17 18:40:41 -0700 | |
---|---|---|
committer | 2023-04-17 18:42:13 -0700 | |
commit | ac7b77f59c720bdb618057df0435fa1170d9c84a (patch) | |
tree | 28f7c53c7c6780a68b571fe7d54ef871691003d0 /lazy/src/responsive.rs | |
parent | 07dfebfec00b29ef84a1624ac942bb433628eff6 (diff) | |
download | iced-ac7b77f59c720bdb618057df0435fa1170d9c84a.tar.gz iced-ac7b77f59c720bdb618057df0435fa1170d9c84a.tar.bz2 iced-ac7b77f59c720bdb618057df0435fa1170d9c84a.zip |
Only invalidate layout if children layout is invalid
Diffstat (limited to '')
-rw-r--r-- | lazy/src/responsive.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/lazy/src/responsive.rs b/lazy/src/responsive.rs index cdeec2ad..2f097ff5 100644 --- a/lazy/src/responsive.rs +++ b/lazy/src/responsive.rs @@ -145,8 +145,6 @@ where _renderer: &Renderer, limits: &layout::Limits, ) -> layout::Node { - let _ = self.content.borrow_mut().layout.take(); - layout::Node::new(limits.max()) } @@ -186,7 +184,10 @@ where let state = tree.state.downcast_mut::<State>(); let mut content = self.content.borrow_mut(); - content.resolve( + let mut local_messages = vec![]; + let mut local_shell = Shell::new(&mut local_messages); + + let status = content.resolve( &mut state.tree.borrow_mut(), renderer, layout, @@ -199,10 +200,18 @@ where cursor_position, renderer, clipboard, - shell, + &mut local_shell, ) }, - ) + ); + + if local_shell.is_layout_invalid() { + let _ = content.layout.take(); + } + + shell.merge(local_shell, std::convert::identity); + + status } fn draw( |