Fix deferred layout on resize after drawing

This commit is contained in:
Héctor Ramón Jiménez 2024-10-29 20:53:29 +01:00
parent 4e47450c33
commit c6af79a1d0
No known key found for this signature in database
GPG key ID: 4C07CEC81AFA161F
3 changed files with 49 additions and 73 deletions

View file

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

View file

@ -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;
tree.diff(&self.element);
} else {
let is_tree_empty =
tree.tag == tree::Tag::stateless() && tree.children.is_empty();
if is_tree_empty {
self.layout = None;
tree.diff(&self.element);
}
}
self.element = view(new_size);
self.size = new_size;
self.layout = None;
tree.diff(&self.element);
}
fn resolve<R, T>(