Fix overlay flickering after Application::update
This commit is contained in:
parent
af7cbf0003
commit
f85b421ae7
1 changed files with 26 additions and 20 deletions
|
|
@ -345,30 +345,36 @@ 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)
|
||||||
Point::new(-1.0, -1.0)
|
{
|
||||||
} else {
|
let overlay_layout = self
|
||||||
cursor_position
|
.overlay
|
||||||
};
|
.take()
|
||||||
|
.unwrap_or_else(|| overlay.layout(renderer, self.bounds));
|
||||||
|
|
||||||
self.root.widget.draw(
|
let new_cursor_position =
|
||||||
renderer,
|
if overlay_layout.bounds().contains(cursor_position) {
|
||||||
&renderer::Style::default(),
|
Point::new(-1.0, -1.0)
|
||||||
Layout::new(&self.base),
|
} else {
|
||||||
base_cursor,
|
cursor_position
|
||||||
&viewport,
|
};
|
||||||
);
|
|
||||||
|
self.overlay = Some(overlay_layout);
|
||||||
|
|
||||||
|
new_cursor_position
|
||||||
} else {
|
} else {
|
||||||
self.root.widget.draw(
|
cursor_position
|
||||||
renderer,
|
|
||||||
&renderer::Style::default(),
|
|
||||||
Layout::new(&self.base),
|
|
||||||
cursor_position,
|
|
||||||
&viewport,
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.root.widget.draw(
|
||||||
|
renderer,
|
||||||
|
&renderer::Style::default(),
|
||||||
|
Layout::new(&self.base),
|
||||||
|
base_cursor,
|
||||||
|
&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),
|
||||||
cursor_position,
|
cursor_position,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue