1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 14:20:04 -04:00

Simplify render_immediate_viewport

This commit is contained in:
Emil Ernerfeldt
2023-11-14 06:47:09 +01:00
parent 4be66c057f
commit 67c192bfb3

View File

@@ -2146,29 +2146,25 @@ mod wgpu_integration {
viewport_maps, viewport_maps,
} = &mut *shared; } = &mut *shared;
// Creating a new native window if is needed if builder.icon.is_none() {
if !viewports.contains_key(&ids.this) { // Inherit icon from parent
if builder.icon.is_none() { builder.icon = viewports
builder.icon = viewports .get(&ids.parent)
.get(&ids.parent) .and_then(|vp| vp.builder.icon.clone());
.and_then(|vp| vp.builder.icon.clone()); }
}
let viewport = viewports.entry(ids.this).or_insert(Viewport { let viewport = viewports.entry(ids.this).or_insert(Viewport {
ids, ids,
builder, builder,
viewport_ui_cb: None, viewport_ui_cb: None,
window: None, window: None,
egui_winit: None, egui_winit: None,
}); });
if viewport.window.is_none() {
viewport.init_window(viewport_maps, painter, event_loop); viewport.init_window(viewport_maps, painter, event_loop);
} }
// Render sync viewport:
let Some(viewport) = viewports.get_mut(&ids.this) else {
return;
};
let Some(winit_state) = &mut viewport.egui_winit else { let Some(winit_state) = &mut viewport.egui_winit else {
return; return;
}; };
@@ -2756,6 +2752,7 @@ mod wgpu_integration {
match viewports.entry(ids.this) { match viewports.entry(ids.this) {
std::collections::hash_map::Entry::Vacant(entry) => { std::collections::hash_map::Entry::Vacant(entry) => {
// New viewport: // New viewport:
log::debug!("Creating new viewport {:?} ({:?})", ids.this, builder.title);
entry.insert(Viewport { entry.insert(Viewport {
ids, ids,
builder, builder,
@@ -2775,6 +2772,11 @@ mod wgpu_integration {
let (commands, recreate) = viewport.builder.patch(&builder); let (commands, recreate) = viewport.builder.patch(&builder);
if recreate { if recreate {
log::debug!(
"Recreating window for viewport {:?} ({:?})",
ids.this,
builder.title
);
viewport.window = None; viewport.window = None;
viewport.egui_winit = None; viewport.egui_winit = None;
} else if let Some(window) = &viewport.window { } else if let Some(window) = &viewport.window {