mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 06:40:06 -04:00
Now when creating a async viewport, if we not spefify the icon will have his parent icon
This commit is contained in:
@@ -492,7 +492,7 @@ mod glow_integration {
|
|||||||
builder: ViewportBuilder,
|
builder: ViewportBuilder,
|
||||||
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
||||||
window: Option<Arc<RwLock<winit::window::Window>>>,
|
window: Option<Arc<RwLock<winit::window::Window>>>,
|
||||||
window_id: ViewportId,
|
viewport_id: ViewportId,
|
||||||
parent_id: ViewportId,
|
parent_id: ViewportId,
|
||||||
render: Option<Arc<Box<ViewportRender>>>,
|
render: Option<Arc<Box<ViewportRender>>>,
|
||||||
pub egui_winit: Option<egui_winit::State>,
|
pub egui_winit: Option<egui_winit::State>,
|
||||||
@@ -642,7 +642,7 @@ mod glow_integration {
|
|||||||
builder: window_builder,
|
builder: window_builder,
|
||||||
gl_surface: None,
|
gl_surface: None,
|
||||||
window: window.map(|w| Arc::new(RwLock::new(w))),
|
window: window.map(|w| Arc::new(RwLock::new(w))),
|
||||||
window_id: ViewportId::MAIN,
|
viewport_id: ViewportId::MAIN,
|
||||||
egui_winit: None,
|
egui_winit: None,
|
||||||
render: None,
|
render: None,
|
||||||
parent_id: ViewportId::MAIN,
|
parent_id: ViewportId::MAIN,
|
||||||
@@ -759,7 +759,7 @@ mod glow_integration {
|
|||||||
|
|
||||||
win.gl_surface = Some(gl_surface);
|
win.gl_surface = Some(gl_surface);
|
||||||
self.current_gl_context = Some(current_gl_context);
|
self.current_gl_context = Some(current_gl_context);
|
||||||
self.window_maps.insert(window.id(), win.window_id);
|
self.window_maps.insert(window.id(), win.viewport_id);
|
||||||
}
|
}
|
||||||
win.window = Some(window);
|
win.window = Some(window);
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -1032,12 +1032,14 @@ mod glow_integration {
|
|||||||
|
|
||||||
let focused = self.is_focused.clone();
|
let focused = self.is_focused.clone();
|
||||||
|
|
||||||
// Sync Rendering
|
// ## Sync Rendering
|
||||||
integration.egui_ctx.set_render_sync_callback(
|
integration.egui_ctx.set_render_sync_callback(
|
||||||
move |viewport_builder, viewport_id, parent_viewport_id, render| {
|
move |viewport_builder, viewport_id, parent_id, render| {
|
||||||
|
// TODO: If the `viewport_builder` do not have a icon set the icon to be the icon of the parent viewport
|
||||||
|
|
||||||
let has_window = glutin.read().windows.get(&viewport_id).is_some();
|
let has_window = glutin.read().windows.get(&viewport_id).is_some();
|
||||||
if !has_window{
|
if !has_window{
|
||||||
glutin.write().windows.entry(viewport_id).or_insert(Arc::new(RwLock::new(Window{ builder: viewport_builder, gl_surface: None, window: None, window_id: viewport_id, parent_id: parent_viewport_id, render: None, egui_winit: None })));
|
glutin.write().windows.entry(viewport_id).or_insert(Arc::new(RwLock::new(Window{ builder: viewport_builder, gl_surface: None, window: None, viewport_id, parent_id, render: None, egui_winit: None })));
|
||||||
let win = glutin.read().windows.get(&viewport_id).cloned().unwrap();
|
let win = glutin.read().windows.get(&viewport_id).cloned().unwrap();
|
||||||
let event_loop;
|
let event_loop;
|
||||||
#[allow(unsafe_code)]
|
#[allow(unsafe_code)]
|
||||||
@@ -1061,7 +1063,7 @@ mod glow_integration {
|
|||||||
output = egui_ctx.run(
|
output = egui_ctx.run(
|
||||||
input,
|
input,
|
||||||
viewport_id,
|
viewport_id,
|
||||||
parent_viewport_id,
|
parent_id,
|
||||||
|ctx| {
|
|ctx| {
|
||||||
render(ctx);
|
render(ctx);
|
||||||
},
|
},
|
||||||
@@ -1186,17 +1188,27 @@ mod glow_integration {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for (id, parent, builder, render) in viewports {
|
for (id, parent_id, mut builder, render) in viewports {
|
||||||
|
let default_icon = glutin_ctx
|
||||||
|
.read()
|
||||||
|
.windows
|
||||||
|
.get(&parent_id)
|
||||||
|
.map(|w| w.read().builder.icon.clone())
|
||||||
|
.flatten();
|
||||||
|
|
||||||
|
if builder.icon.is_none() {
|
||||||
|
builder.icon = default_icon;
|
||||||
|
}
|
||||||
glutin_ctx.write().windows.insert(
|
glutin_ctx.write().windows.insert(
|
||||||
id,
|
id,
|
||||||
Arc::new(RwLock::new(Window {
|
Arc::new(RwLock::new(Window {
|
||||||
builder,
|
builder,
|
||||||
gl_surface: None,
|
gl_surface: None,
|
||||||
window: None,
|
window: None,
|
||||||
window_id: id,
|
viewport_id: id,
|
||||||
egui_winit: None,
|
egui_winit: None,
|
||||||
render: render.clone(),
|
render,
|
||||||
parent_id: parent,
|
parent_id,
|
||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
active_viewports_ids.push(id);
|
active_viewports_ids.push(id);
|
||||||
@@ -1359,7 +1371,7 @@ mod glow_integration {
|
|||||||
&win.window.as_ref().unwrap().read(),
|
&win.window.as_ref().unwrap().read(),
|
||||||
win.egui_winit.as_mut().unwrap(),
|
win.egui_winit.as_mut().unwrap(),
|
||||||
&win.render.clone(),
|
&win.render.clone(),
|
||||||
win.window_id,
|
win.viewport_id,
|
||||||
win.parent_id,
|
win.parent_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -1641,7 +1653,7 @@ mod glow_integration {
|
|||||||
if let Some(win) = window.read().window.as_ref() {
|
if let Some(win) = window.read().window.as_ref() {
|
||||||
let win = win.read();
|
let win = win.read();
|
||||||
if win.id() == *window_id {
|
if win.id() == *window_id {
|
||||||
Some(window.read().window_id)
|
Some(window.read().viewport_id)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -1680,7 +1692,7 @@ mod glow_integration {
|
|||||||
running.app.write().as_mut(),
|
running.app.write().as_mut(),
|
||||||
event,
|
event,
|
||||||
viewport.egui_winit.as_mut().unwrap(),
|
viewport.egui_winit.as_mut().unwrap(),
|
||||||
viewport.window_id,
|
viewport.viewport_id,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2048,8 +2060,11 @@ mod wgpu_integration {
|
|||||||
let _painter = painter.clone();
|
let _painter = painter.clone();
|
||||||
let _windows_id = windows_id.clone();
|
let _windows_id = windows_id.clone();
|
||||||
|
|
||||||
|
// ## Sync Rendering
|
||||||
integration.egui_ctx.set_render_sync_callback(
|
integration.egui_ctx.set_render_sync_callback(
|
||||||
move |viewport_builder, viewport_id, parent_viewport_id, render| {
|
move |viewport_builder, viewport_id, parent_viewport_id, render| {
|
||||||
|
// TODO: If the `viewport_builder` do not have a icon set the icon to be the icon of the parent viewport
|
||||||
|
|
||||||
if _windows.read().get(&viewport_id).is_none(){
|
if _windows.read().get(&viewport_id).is_none(){
|
||||||
let mut _windows = _windows.write();
|
let mut _windows = _windows.write();
|
||||||
let Window{window, state, ..} = _windows.entry(viewport_id).or_insert(Window{window: None, state: Arc::new(RwLock::new(None)), render: None, parent_id: viewport_id, builder: viewport_builder.clone()});
|
let Window{window, state, ..} = _windows.entry(viewport_id).or_insert(Window{window: None, state: Arc::new(RwLock::new(None)), render: None, parent_id: viewport_id, builder: viewport_builder.clone()});
|
||||||
@@ -2110,33 +2125,10 @@ mod wgpu_integration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut viewports = output.viewports;
|
|
||||||
let mut active_viewports_ids = vec![ViewportId::MAIN];
|
|
||||||
|
|
||||||
viewports.retain_mut(|(id, parent, _builder, render)| {
|
|
||||||
if let Some(w) = _windows.write().get_mut(id) {
|
|
||||||
w.render = render.clone();
|
|
||||||
w.parent_id = *parent;
|
|
||||||
active_viewports_ids.push(*id);
|
|
||||||
false
|
|
||||||
} else {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
for (id, parent, builder, render) in viewports {
|
|
||||||
_windows.write().insert(
|
|
||||||
id,
|
|
||||||
Window{window: None, state: Arc::new(RwLock::new(None)), render, parent_id: parent, builder},
|
|
||||||
);
|
|
||||||
active_viewports_ids.push(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
egui_winit::process_viewports_commands(
|
egui_winit::process_viewports_commands(
|
||||||
output.viewport_commands,
|
output.viewport_commands,
|
||||||
*focused.read(),
|
*focused.read(),
|
||||||
|id| _windows.read().get(&id).and_then(|w| w.window.clone())
|
|id| _windows.read().get(&id).and_then(|w| w.window.clone()),
|
||||||
,
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2315,14 +2307,22 @@ mod wgpu_integration {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
for (id, parent, builder, render) in viewports {
|
for (id, parent_id, mut builder, render) in viewports {
|
||||||
|
if builder.icon.is_none() {
|
||||||
|
builder.icon = windows
|
||||||
|
.read()
|
||||||
|
.get(&parent_id)
|
||||||
|
.map(|w| w.builder.icon.clone())
|
||||||
|
.flatten();
|
||||||
|
}
|
||||||
|
|
||||||
windows.write().insert(
|
windows.write().insert(
|
||||||
id,
|
id,
|
||||||
Window {
|
Window {
|
||||||
window: None,
|
window: None,
|
||||||
state: Arc::new(RwLock::new(None)),
|
state: Arc::new(RwLock::new(None)),
|
||||||
render,
|
render,
|
||||||
parent_id: parent,
|
parent_id,
|
||||||
builder,
|
builder,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|||||||
Reference in New Issue
Block a user