diff options
author | 2024-10-29 20:53:29 +0100 | |
---|---|---|
committer | 2024-11-05 23:52:58 +0100 | |
commit | c6af79a1d06013343f9caf2de80597d627254084 (patch) | |
tree | 123d5752eb3ee6c3ada00776eafded5428994482 /widget | |
parent | 4e47450c336a235fe26090665aca1cc7b4d23384 (diff) | |
download | iced-c6af79a1d06013343f9caf2de80597d627254084.tar.gz iced-c6af79a1d06013343f9caf2de80597d627254084.tar.bz2 iced-c6af79a1d06013343f9caf2de80597d627254084.zip |
Fix deferred layout on resize after drawing
Diffstat (limited to '')
-rw-r--r-- | widget/src/button.rs | 7 | ||||
-rw-r--r-- | widget/src/lazy/responsive.rs | 23 |
2 files changed, 16 insertions, 14 deletions
diff --git a/widget/src/button.rs b/widget/src/button.rs index 64f2b793..9eac2e4c 100644 --- a/widget/src/button.rs +++ b/widget/src/button.rs @@ -17,7 +17,6 @@ //! } //! ``` use crate::core::border::{self, Border}; -use crate::core::event::{self, Event}; use crate::core::layout; use crate::core::mouse; use crate::core::overlay; @@ -28,8 +27,8 @@ use crate::core::widget::tree::{self, Tree}; use crate::core::widget::Operation; use crate::core::window; use crate::core::{ - Background, Clipboard, Color, Element, Layout, Length, Padding, Rectangle, - Shadow, Shell, Size, Theme, Vector, Widget, + Background, Clipboard, Color, Element, Event, Layout, Length, Padding, + Rectangle, Shadow, Shell, Size, Theme, Vector, Widget, }; /// A generic widget that produces a message when pressed. @@ -295,7 +294,7 @@ where viewport, ); - if shell.event_status() == event::Status::Captured { + if shell.is_event_captured() { return; } diff --git a/widget/src/lazy/responsive.rs b/widget/src/lazy/responsive.rs index a8abbce8..f9bd0334 100644 --- a/widget/src/lazy/responsive.rs +++ b/widget/src/lazy/responsive.rs @@ -82,18 +82,21 @@ where new_size: Size, view: &dyn Fn(Size) -> Element<'a, Message, Theme, Renderer>, ) { - let is_tree_empty = - tree.tag == tree::Tag::stateless() && tree.children.is_empty(); + if self.size != new_size { + self.element = view(new_size); + self.size = new_size; + self.layout = None; - if !is_tree_empty && self.size == new_size { - return; - } - - self.element = view(new_size); - self.size = new_size; - self.layout = None; + tree.diff(&self.element); + } else { + let is_tree_empty = + tree.tag == tree::Tag::stateless() && tree.children.is_empty(); - tree.diff(&self.element); + if is_tree_empty { + self.layout = None; + tree.diff(&self.element); + } + } } fn resolve<R, T>( |