mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 06:40:06 -04:00
Fix: When we have a Viewport in a Viewport and when the first is destroyed, takes one more frame for the child to be destroyed.
This commit is contained in:
@@ -1529,14 +1529,8 @@ impl Context {
|
|||||||
|
|
||||||
let shapes = self.drain_paint_lists();
|
let shapes = self.drain_paint_lists();
|
||||||
|
|
||||||
let all_viewport_ids = self.read(|ctx| {
|
let mut all_viewport_ids = ViewportIdSet::default();
|
||||||
let mut all_viewport_ids = ViewportIdSet::default();
|
all_viewport_ids.insert(ViewportId::ROOT);
|
||||||
all_viewport_ids.insert(ViewportId::ROOT);
|
|
||||||
for vp in ctx.viewports.values() {
|
|
||||||
all_viewport_ids.insert(vp.id_pair.this);
|
|
||||||
}
|
|
||||||
all_viewport_ids
|
|
||||||
});
|
|
||||||
|
|
||||||
let viewport_id = self.viewport_id();
|
let viewport_id = self.viewport_id();
|
||||||
|
|
||||||
@@ -1551,25 +1545,32 @@ impl Context {
|
|||||||
viewport.used = false; // reset so we can check again next frame
|
viewport.used = false; // reset so we can check again next frame
|
||||||
}
|
}
|
||||||
|
|
||||||
viewports.push(ViewportOutput {
|
if all_viewport_ids.contains(&viewport.id_pair.parent) {
|
||||||
builder: viewport.builder.clone(),
|
viewports.push(ViewportOutput {
|
||||||
id_pair: viewport.id_pair,
|
builder: viewport.builder.clone(),
|
||||||
viewport_ui_cb: viewport.viewport_ui_cb.clone(),
|
id_pair: viewport.id_pair,
|
||||||
});
|
viewport_ui_cb: viewport.viewport_ui_cb.clone(),
|
||||||
|
});
|
||||||
if !all_viewport_ids.contains(&viewport.id_pair.parent) {
|
} else {
|
||||||
// Parent is gone - remove this viewport.
|
// Parent is gone - remove this viewport.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let is_child = viewport_id == viewport.id_pair.parent;
|
let is_child = viewport_id == viewport.id_pair.parent;
|
||||||
if is_child {
|
|
||||||
|
let result = if is_child {
|
||||||
// Keep all children that have been updated this frame
|
// Keep all children that have been updated this frame
|
||||||
was_used
|
was_used
|
||||||
} else {
|
} else {
|
||||||
// Somebody elses child - don't touch
|
// Somebody elses child - don't touch
|
||||||
true
|
true
|
||||||
|
};
|
||||||
|
|
||||||
|
if result {
|
||||||
|
all_viewport_ids.insert(viewport.id_pair.this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user