Fix overlay flickering after Application::update

This commit is contained in:
Héctor Ramón Jiménez 2022-03-01 14:02:46 +07:00
parent af7cbf0003
commit f85b421ae7
No known key found for this signature in database
GPG key ID: 140CC052C94F138E

View file

@ -345,13 +345,28 @@ where
let viewport = Rectangle::with_size(self.bounds); let viewport = Rectangle::with_size(self.bounds);
if let Some(layout) = &self.overlay { let base_cursor = if let Some(overlay) =
let base_cursor = if layout.bounds().contains(cursor_position) { self.root.overlay(Layout::new(&self.base), renderer)
{
let overlay_layout = self
.overlay
.take()
.unwrap_or_else(|| overlay.layout(renderer, self.bounds));
let new_cursor_position =
if overlay_layout.bounds().contains(cursor_position) {
Point::new(-1.0, -1.0) Point::new(-1.0, -1.0)
} else { } else {
cursor_position cursor_position
}; };
self.overlay = Some(overlay_layout);
new_cursor_position
} else {
cursor_position
};
self.root.widget.draw( self.root.widget.draw(
renderer, renderer,
&renderer::Style::default(), &renderer::Style::default(),
@ -359,15 +374,6 @@ where
base_cursor, base_cursor,
&viewport, &viewport,
); );
} else {
self.root.widget.draw(
renderer,
&renderer::Style::default(),
Layout::new(&self.base),
cursor_position,
&viewport,
);
};
let base_interaction = self.root.widget.mouse_interaction( let base_interaction = self.root.widget.mouse_interaction(
Layout::new(&self.base), Layout::new(&self.base),