mirror of
https://github.com/emilk/egui.git
synced 2026-09-02 06:40:06 -04:00
Rename id_pair to ids everywhere
This commit is contained in:
@@ -511,7 +511,7 @@ mod glow_integration {
|
|||||||
let viewport = &glutin.viewports[&viewport_id];
|
let viewport = &glutin.viewports[&viewport_id];
|
||||||
let is_immediate = viewport.viewport_ui_cb.is_none();
|
let is_immediate = viewport.viewport_ui_cb.is_none();
|
||||||
if is_immediate && viewport_id != ViewportId::ROOT {
|
if is_immediate && viewport_id != ViewportId::ROOT {
|
||||||
if let Some(parent_viewport) = glutin.viewports.get(&viewport.id_pair.parent) {
|
if let Some(parent_viewport) = glutin.viewports.get(&viewport.ids.parent) {
|
||||||
if let Some(window) = parent_viewport.window.as_ref() {
|
if let Some(window) = parent_viewport.window.as_ref() {
|
||||||
// This will only happen if this is an immediate viewport.
|
// This will only happen if this is an immediate viewport.
|
||||||
// That means that the viewport cannot be rendered by itself and needs his parent to be rendered.
|
// That means that the viewport cannot be rendered by itself and needs his parent to be rendered.
|
||||||
@@ -528,7 +528,7 @@ mod glow_integration {
|
|||||||
let window = viewport.window.as_ref().unwrap();
|
let window = viewport.window.as_ref().unwrap();
|
||||||
|
|
||||||
let egui_winit = viewport.egui_winit.as_mut().unwrap();
|
let egui_winit = viewport.egui_winit.as_mut().unwrap();
|
||||||
let raw_input = egui_winit.take_egui_input(window, viewport.id_pair);
|
let raw_input = egui_winit.take_egui_input(window, viewport.ids);
|
||||||
|
|
||||||
self.integration.pre_update(window);
|
self.integration.pre_update(window);
|
||||||
|
|
||||||
@@ -709,7 +709,7 @@ mod glow_integration {
|
|||||||
struct Viewport {
|
struct Viewport {
|
||||||
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
||||||
window: Option<Rc<Window>>,
|
window: Option<Rc<Window>>,
|
||||||
id_pair: ViewportIdPair,
|
ids: ViewportIdPair,
|
||||||
|
|
||||||
/// The user-callback that shows the ui.
|
/// The user-callback that shows the ui.
|
||||||
/// None for immediate viewports.
|
/// None for immediate viewports.
|
||||||
@@ -719,11 +719,11 @@ mod glow_integration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl Viewport {
|
impl Viewport {
|
||||||
pub fn new(id_pair: ViewportIdPair) -> Self {
|
pub fn new(ids: ViewportIdPair) -> Self {
|
||||||
Self {
|
Self {
|
||||||
gl_surface: None,
|
gl_surface: None,
|
||||||
window: None,
|
window: None,
|
||||||
id_pair,
|
ids,
|
||||||
viewport_ui_cb: None,
|
viewport_ui_cb: None,
|
||||||
egui_winit: None,
|
egui_winit: None,
|
||||||
}
|
}
|
||||||
@@ -887,7 +887,7 @@ mod glow_integration {
|
|||||||
window: window.map(Rc::new),
|
window: window.map(Rc::new),
|
||||||
egui_winit: None,
|
egui_winit: None,
|
||||||
viewport_ui_cb: None,
|
viewport_ui_cb: None,
|
||||||
id_pair: ViewportIdPair::ROOT,
|
ids: ViewportIdPair::ROOT,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -953,7 +953,7 @@ mod glow_integration {
|
|||||||
.get_mut(&viewport_id)
|
.get_mut(&viewport_id)
|
||||||
.expect("viewport doesn't exist");
|
.expect("viewport doesn't exist");
|
||||||
|
|
||||||
let builder = &self.builders[&viewport.id_pair.this];
|
let builder = &self.builders[&viewport.ids.this];
|
||||||
// make sure we have a window or create one.
|
// make sure we have a window or create one.
|
||||||
let window = viewport.window.take().unwrap_or_else(|| {
|
let window = viewport.window.take().unwrap_or_else(|| {
|
||||||
log::debug!("window doesn't exist yet. creating one now with finalize_window");
|
log::debug!("window doesn't exist yet. creating one now with finalize_window");
|
||||||
@@ -1015,9 +1015,8 @@ mod glow_integration {
|
|||||||
|
|
||||||
viewport.gl_surface = Some(gl_surface);
|
viewport.gl_surface = Some(gl_surface);
|
||||||
self.current_gl_context = Some(current_gl_context);
|
self.current_gl_context = Some(current_gl_context);
|
||||||
self.viewport_maps
|
self.viewport_maps.insert(window.id(), viewport.ids.this);
|
||||||
.insert(window.id(), viewport.id_pair.this);
|
self.window_maps.insert(viewport.ids.this, window.id());
|
||||||
self.window_maps.insert(viewport.id_pair.this, window.id());
|
|
||||||
}
|
}
|
||||||
viewport.window = Some(window);
|
viewport.window = Some(window);
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -1100,16 +1099,13 @@ mod glow_integration {
|
|||||||
viewports.retain_mut(
|
viewports.retain_mut(
|
||||||
|ViewportOutput {
|
|ViewportOutput {
|
||||||
builder: new_builder,
|
builder: new_builder,
|
||||||
id_pair,
|
ids,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
}| {
|
}| {
|
||||||
let builder = self
|
let builder = self.builders.entry(ids.this).or_insert(new_builder.clone());
|
||||||
.builders
|
|
||||||
.entry(id_pair.this)
|
|
||||||
.or_insert(new_builder.clone());
|
|
||||||
let (commands, recreate) = builder.patch(new_builder);
|
let (commands, recreate) = builder.patch(new_builder);
|
||||||
if let Some(viewport) = self.viewports.get_mut(&id_pair.this) {
|
if let Some(viewport) = self.viewports.get_mut(&ids.this) {
|
||||||
viewport.id_pair.parent = id_pair.parent;
|
viewport.ids.parent = ids.parent;
|
||||||
viewport.viewport_ui_cb = viewport_ui_cb.clone(); // always update the latest callback
|
viewport.viewport_ui_cb = viewport_ui_cb.clone(); // always update the latest callback
|
||||||
|
|
||||||
if recreate {
|
if recreate {
|
||||||
@@ -1119,7 +1115,7 @@ mod glow_integration {
|
|||||||
let is_viewport_focused = false; // TODO
|
let is_viewport_focused = false; // TODO
|
||||||
process_viewport_commands(commands, window, is_viewport_focused);
|
process_viewport_commands(commands, window, is_viewport_focused);
|
||||||
}
|
}
|
||||||
active_viewports_ids.insert(id_pair.this);
|
active_viewports_ids.insert(ids.this);
|
||||||
false
|
false
|
||||||
} else {
|
} else {
|
||||||
true
|
true
|
||||||
@@ -1130,31 +1126,28 @@ mod glow_integration {
|
|||||||
// Process new viewports:
|
// Process new viewports:
|
||||||
for ViewportOutput {
|
for ViewportOutput {
|
||||||
mut builder,
|
mut builder,
|
||||||
id_pair,
|
ids,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
} in viewports
|
} in viewports
|
||||||
{
|
{
|
||||||
if builder.icon.is_none() {
|
if builder.icon.is_none() {
|
||||||
// Inherit from parent as fallback.
|
// Inherit from parent as fallback.
|
||||||
builder.icon = self
|
builder.icon = self.builders.get(&ids.parent).and_then(|b| b.icon.clone());
|
||||||
.builders
|
|
||||||
.get(&id_pair.parent)
|
|
||||||
.and_then(|b| b.icon.clone());
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
self.viewports.insert(
|
self.viewports.insert(
|
||||||
id_pair.this,
|
ids.this,
|
||||||
Viewport {
|
Viewport {
|
||||||
gl_surface: None,
|
gl_surface: None,
|
||||||
window: None,
|
window: None,
|
||||||
egui_winit: None,
|
egui_winit: None,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
id_pair,
|
ids,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
self.builders.insert(id_pair.this, builder);
|
self.builders.insert(ids.this, builder);
|
||||||
}
|
}
|
||||||
active_viewports_ids.insert(id_pair.this);
|
active_viewports_ids.insert(ids.this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// GC old viewports
|
// GC old viewports
|
||||||
@@ -1369,7 +1362,7 @@ mod glow_integration {
|
|||||||
let event_loop: *const EventLoopWindowTarget<UserEvent> = event_loop;
|
let event_loop: *const EventLoopWindowTarget<UserEvent> = event_loop;
|
||||||
|
|
||||||
egui::Context::set_immediate_viewport_renderer(
|
egui::Context::set_immediate_viewport_renderer(
|
||||||
move |egui_ctx, viewport_builder, id_pair, viewport_ui_cb| {
|
move |egui_ctx, viewport_builder, ids, viewport_ui_cb| {
|
||||||
if let (Some(glutin), Some(painter)) = (glutin.upgrade(), painter.upgrade())
|
if let (Some(glutin), Some(painter)) = (glutin.upgrade(), painter.upgrade())
|
||||||
{
|
{
|
||||||
// SAFETY: the event loop lives longer than
|
// SAFETY: the event loop lives longer than
|
||||||
@@ -1381,7 +1374,7 @@ mod glow_integration {
|
|||||||
event_loop,
|
event_loop,
|
||||||
egui_ctx,
|
egui_ctx,
|
||||||
viewport_builder,
|
viewport_builder,
|
||||||
id_pair,
|
ids,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
&glutin,
|
&glutin,
|
||||||
&painter,
|
&painter,
|
||||||
@@ -1413,7 +1406,7 @@ mod glow_integration {
|
|||||||
event_loop: &EventLoopWindowTarget<UserEvent>,
|
event_loop: &EventLoopWindowTarget<UserEvent>,
|
||||||
egui_ctx: &egui::Context,
|
egui_ctx: &egui::Context,
|
||||||
mut viewport_builder: ViewportBuilder,
|
mut viewport_builder: ViewportBuilder,
|
||||||
id_pair: ViewportIdPair,
|
ids: ViewportIdPair,
|
||||||
viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>,
|
viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>,
|
||||||
glutin: &RefCell<GlutinWindowContext>,
|
glutin: &RefCell<GlutinWindowContext>,
|
||||||
painter: &RefCell<egui_glow::Painter>,
|
painter: &RefCell<egui_glow::Painter>,
|
||||||
@@ -1421,38 +1414,35 @@ mod glow_integration {
|
|||||||
) {
|
) {
|
||||||
crate::profile_function!();
|
crate::profile_function!();
|
||||||
|
|
||||||
if !glutin.borrow().viewports.contains_key(&id_pair.this) {
|
if !glutin.borrow().viewports.contains_key(&ids.this) {
|
||||||
// A new viewport - create a window for it!
|
// A new viewport - create a window for it!
|
||||||
|
|
||||||
let mut glutin = glutin.borrow_mut();
|
let mut glutin = glutin.borrow_mut();
|
||||||
|
|
||||||
// Inherit parent icon if none
|
// Inherit parent icon if none
|
||||||
if viewport_builder.icon.is_none() && glutin.builders.get(&id_pair.this).is_none() {
|
if viewport_builder.icon.is_none() && glutin.builders.get(&ids.this).is_none() {
|
||||||
viewport_builder.icon = glutin
|
viewport_builder.icon = glutin
|
||||||
.builders
|
.builders
|
||||||
.get(&id_pair.parent)
|
.get(&ids.parent)
|
||||||
.and_then(|b| b.icon.clone());
|
.and_then(|b| b.icon.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
glutin
|
glutin
|
||||||
.viewports
|
.viewports
|
||||||
.entry(id_pair.this)
|
.entry(ids.this)
|
||||||
.or_insert(Viewport::new(id_pair));
|
.or_insert(Viewport::new(ids));
|
||||||
|
|
||||||
|
glutin.builders.entry(ids.this).or_insert(viewport_builder);
|
||||||
|
|
||||||
glutin
|
glutin
|
||||||
.builders
|
.init_viewport(ids.this, event_loop)
|
||||||
.entry(id_pair.this)
|
|
||||||
.or_insert(viewport_builder);
|
|
||||||
|
|
||||||
glutin
|
|
||||||
.init_viewport(id_pair.this, event_loop)
|
|
||||||
.expect("Failed to initialize window in egui::Context::show_viewport_immediate");
|
.expect("Failed to initialize window in egui::Context::show_viewport_immediate");
|
||||||
}
|
}
|
||||||
|
|
||||||
let input = {
|
let input = {
|
||||||
let mut glutin = glutin.borrow_mut();
|
let mut glutin = glutin.borrow_mut();
|
||||||
|
|
||||||
let Some(viewport) = glutin.viewports.get_mut(&id_pair.this) else {
|
let Some(viewport) = glutin.viewports.get_mut(&ids.this) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1463,7 +1453,7 @@ mod glow_integration {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut input = winit_state.take_egui_input(window, id_pair);
|
let mut input = winit_state.take_egui_input(window, ids);
|
||||||
input.time = Some(beginning.elapsed().as_secs_f64());
|
input.time = Some(beginning.elapsed().as_secs_f64());
|
||||||
input
|
input
|
||||||
};
|
};
|
||||||
@@ -1487,7 +1477,7 @@ mod glow_integration {
|
|||||||
..
|
..
|
||||||
} = &mut *glutin;
|
} = &mut *glutin;
|
||||||
|
|
||||||
let Some(viewport) = viewports.get_mut(&id_pair.this) else {
|
let Some(viewport) = viewports.get_mut(&ids.this) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1522,14 +1512,14 @@ mod glow_integration {
|
|||||||
.unwrap()
|
.unwrap()
|
||||||
.is_current(current_gl_context)
|
.is_current(current_gl_context)
|
||||||
{
|
{
|
||||||
let builder = &builders[&viewport.id_pair.this];
|
let builder = &builders[&viewport.ids.this];
|
||||||
log::error!("egui::show_viewport_immediate with title: `{:?}` is not created in main thread, try to use wgpu!", builder.title.clone().unwrap_or_default());
|
log::error!("egui::show_viewport_immediate with title: `{:?}` is not created in main thread, try to use wgpu!", builder.title.clone().unwrap_or_default());
|
||||||
}
|
}
|
||||||
|
|
||||||
let gl = &painter.gl().clone();
|
let gl = &painter.gl().clone();
|
||||||
egui_glow::painter::clear(gl, screen_size_in_pixels, [0.0, 0.0, 0.0, 0.0]);
|
egui_glow::painter::clear(gl, screen_size_in_pixels, [0.0, 0.0, 0.0, 0.0]);
|
||||||
|
|
||||||
let pixels_per_point = egui_ctx.input_for(id_pair.this, |i| i.pixels_per_point());
|
let pixels_per_point = egui_ctx.input_for(ids.this, |i| i.pixels_per_point());
|
||||||
painter.paint_and_update_textures(
|
painter.paint_and_update_textures(
|
||||||
screen_size_in_pixels,
|
screen_size_in_pixels,
|
||||||
pixels_per_point,
|
pixels_per_point,
|
||||||
@@ -1549,7 +1539,7 @@ mod glow_integration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
winit_state.handle_platform_output(window, id_pair.this, egui_ctx, output.platform_output);
|
winit_state.handle_platform_output(window, ids.this, egui_ctx, output.platform_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WinitApp for GlowWinitApp {
|
impl WinitApp for GlowWinitApp {
|
||||||
@@ -1745,7 +1735,7 @@ mod glow_integration {
|
|||||||
running.app.as_mut(),
|
running.app.as_mut(),
|
||||||
event,
|
event,
|
||||||
viewport.egui_winit.as_mut().unwrap(),
|
viewport.egui_winit.as_mut().unwrap(),
|
||||||
viewport.id_pair.this,
|
viewport.ids.this,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2085,7 +2075,7 @@ mod wgpu_integration {
|
|||||||
let event_loop: *const EventLoopWindowTarget<UserEvent> = event_loop;
|
let event_loop: *const EventLoopWindowTarget<UserEvent> = event_loop;
|
||||||
|
|
||||||
egui::Context::set_immediate_viewport_renderer(
|
egui::Context::set_immediate_viewport_renderer(
|
||||||
move |egui_ctx, viewport_builder, id_pair, viewport_ui_cb| {
|
move |egui_ctx, viewport_builder, ids, viewport_ui_cb| {
|
||||||
if let Some(shared) = shared.upgrade() {
|
if let Some(shared) = shared.upgrade() {
|
||||||
// SAFETY: the event loop lives longer than
|
// SAFETY: the event loop lives longer than
|
||||||
// the Rc:s we just upgraded above.
|
// the Rc:s we just upgraded above.
|
||||||
@@ -2096,7 +2086,7 @@ mod wgpu_integration {
|
|||||||
event_loop,
|
event_loop,
|
||||||
egui_ctx,
|
egui_ctx,
|
||||||
viewport_builder,
|
viewport_builder,
|
||||||
id_pair,
|
ids,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
beginning,
|
beginning,
|
||||||
&shared,
|
&shared,
|
||||||
@@ -2141,7 +2131,7 @@ mod wgpu_integration {
|
|||||||
event_loop: &EventLoopWindowTarget<UserEvent>,
|
event_loop: &EventLoopWindowTarget<UserEvent>,
|
||||||
egui_ctx: &egui::Context,
|
egui_ctx: &egui::Context,
|
||||||
mut viewport_builder: ViewportBuilder,
|
mut viewport_builder: ViewportBuilder,
|
||||||
id_pair: ViewportIdPair,
|
ids: ViewportIdPair,
|
||||||
viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>,
|
viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>,
|
||||||
beginning: Instant,
|
beginning: Instant,
|
||||||
shared: &RefCell<SharedState>,
|
shared: &RefCell<SharedState>,
|
||||||
@@ -2157,15 +2147,15 @@ mod wgpu_integration {
|
|||||||
} = &mut *shared;
|
} = &mut *shared;
|
||||||
|
|
||||||
// Creating a new native window if is needed
|
// Creating a new native window if is needed
|
||||||
if !viewports.contains_key(&id_pair.this) {
|
if !viewports.contains_key(&ids.this) {
|
||||||
if viewport_builder.icon.is_none() {
|
if viewport_builder.icon.is_none() {
|
||||||
viewport_builder.icon = viewports
|
viewport_builder.icon = viewports
|
||||||
.get(&id_pair.parent)
|
.get(&ids.parent)
|
||||||
.and_then(|vp| vp.builder.icon.clone());
|
.and_then(|vp| vp.builder.icon.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
let viewport = viewports.entry(id_pair.this).or_insert(Viewport {
|
let viewport = viewports.entry(ids.this).or_insert(Viewport {
|
||||||
ids: id_pair,
|
ids,
|
||||||
builder: viewport_builder,
|
builder: viewport_builder,
|
||||||
viewport_ui_cb: None,
|
viewport_ui_cb: None,
|
||||||
window: None,
|
window: None,
|
||||||
@@ -2176,7 +2166,7 @@ mod wgpu_integration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Render sync viewport:
|
// Render sync viewport:
|
||||||
let Some(viewport) = viewports.get_mut(&id_pair.this) else {
|
let Some(viewport) = viewports.get_mut(&ids.this) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let Some(winit_state) = &mut viewport.egui_winit else {
|
let Some(winit_state) = &mut viewport.egui_winit else {
|
||||||
@@ -2186,7 +2176,7 @@ mod wgpu_integration {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut input = winit_state.take_egui_input(window, id_pair);
|
let mut input = winit_state.take_egui_input(window, ids);
|
||||||
input.time = Some(beginning.elapsed().as_secs_f64());
|
input.time = Some(beginning.elapsed().as_secs_f64());
|
||||||
input
|
input
|
||||||
};
|
};
|
||||||
@@ -2205,7 +2195,7 @@ mod wgpu_integration {
|
|||||||
viewports, painter, ..
|
viewports, painter, ..
|
||||||
} = &mut *shared;
|
} = &mut *shared;
|
||||||
|
|
||||||
let Some(viewport) = viewports.get_mut(&id_pair.this) else {
|
let Some(viewport) = viewports.get_mut(&ids.this) else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let Some(winit_state) = &mut viewport.egui_winit else {
|
let Some(winit_state) = &mut viewport.egui_winit else {
|
||||||
@@ -2215,17 +2205,17 @@ mod wgpu_integration {
|
|||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Err(err) = pollster::block_on(painter.set_window(id_pair.this, Some(window))) {
|
if let Err(err) = pollster::block_on(painter.set_window(ids.this, Some(window))) {
|
||||||
log::error!(
|
log::error!(
|
||||||
"when rendering viewport_id={:?}, set_window Error {err}",
|
"when rendering viewport_id={:?}, set_window Error {err}",
|
||||||
id_pair.this
|
ids.this
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let pixels_per_point = egui_ctx.input_for(id_pair.this, |i| i.pixels_per_point());
|
let pixels_per_point = egui_ctx.input_for(ids.this, |i| i.pixels_per_point());
|
||||||
let clipped_primitives = egui_ctx.tessellate(output.shapes);
|
let clipped_primitives = egui_ctx.tessellate(output.shapes);
|
||||||
painter.paint_and_update_textures(
|
painter.paint_and_update_textures(
|
||||||
id_pair.this,
|
ids.this,
|
||||||
pixels_per_point,
|
pixels_per_point,
|
||||||
[0.0, 0.0, 0.0, 0.0],
|
[0.0, 0.0, 0.0, 0.0],
|
||||||
&clipped_primitives,
|
&clipped_primitives,
|
||||||
@@ -2233,7 +2223,7 @@ mod wgpu_integration {
|
|||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
winit_state.handle_platform_output(window, id_pair.this, egui_ctx, output.platform_output);
|
winit_state.handle_platform_output(window, ids.this, egui_ctx, output.platform_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WinitApp for WgpuWinitApp {
|
impl WinitApp for WgpuWinitApp {
|
||||||
@@ -2579,7 +2569,7 @@ mod wgpu_integration {
|
|||||||
// Update exisitng viewports:
|
// Update exisitng viewports:
|
||||||
out_viewports.retain_mut(
|
out_viewports.retain_mut(
|
||||||
|ViewportOutput {
|
|ViewportOutput {
|
||||||
id_pair: ViewportIdPair { this, parent },
|
ids: ViewportIdPair { this, parent },
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
..
|
..
|
||||||
}| {
|
}| {
|
||||||
@@ -2597,24 +2587,24 @@ mod wgpu_integration {
|
|||||||
// Add new viewports, and update existing ones:
|
// Add new viewports, and update existing ones:
|
||||||
for ViewportOutput {
|
for ViewportOutput {
|
||||||
builder: mut new_builder,
|
builder: mut new_builder,
|
||||||
id_pair,
|
ids,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
} in out_viewports
|
} in out_viewports
|
||||||
{
|
{
|
||||||
active_viewports_ids.insert(id_pair.this);
|
active_viewports_ids.insert(ids.this);
|
||||||
|
|
||||||
if new_builder.icon.is_none() {
|
if new_builder.icon.is_none() {
|
||||||
// Inherit icon from parent
|
// Inherit icon from parent
|
||||||
new_builder.icon = viewports
|
new_builder.icon = viewports
|
||||||
.get_mut(&id_pair.parent)
|
.get_mut(&ids.parent)
|
||||||
.and_then(|vp| vp.builder.icon.clone());
|
.and_then(|vp| vp.builder.icon.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
match viewports.entry(id_pair.this) {
|
match viewports.entry(ids.this) {
|
||||||
std::collections::hash_map::Entry::Vacant(entry) => {
|
std::collections::hash_map::Entry::Vacant(entry) => {
|
||||||
// New viewport:
|
// New viewport:
|
||||||
entry.insert(Viewport {
|
entry.insert(Viewport {
|
||||||
ids: id_pair,
|
ids,
|
||||||
builder: new_builder,
|
builder: new_builder,
|
||||||
viewport_ui_cb,
|
viewport_ui_cb,
|
||||||
window: None,
|
window: None,
|
||||||
@@ -2626,14 +2616,17 @@ mod wgpu_integration {
|
|||||||
// Patch an existing viewport:
|
// Patch an existing viewport:
|
||||||
let viewport = entry.get_mut();
|
let viewport = entry.get_mut();
|
||||||
|
|
||||||
|
viewport.ids.parent = ids.parent;
|
||||||
|
viewport.viewport_ui_cb = viewport_ui_cb;
|
||||||
|
|
||||||
let (commands, recreate) = viewport.builder.patch(&new_builder);
|
let (commands, recreate) = viewport.builder.patch(&new_builder);
|
||||||
|
|
||||||
if recreate {
|
if recreate {
|
||||||
if let Some(viewport) = viewports.get_mut(&id_pair.this) {
|
if let Some(viewport) = viewports.get_mut(&ids.this) {
|
||||||
viewport.window = None;
|
viewport.window = None;
|
||||||
viewport.egui_winit = None;
|
viewport.egui_winit = None;
|
||||||
}
|
}
|
||||||
} else if let Some(viewport) = viewports.get(&id_pair.this) {
|
} else if let Some(viewport) = viewports.get(&ids.this) {
|
||||||
if let Some(window) = &viewport.window {
|
if let Some(window) = &viewport.window {
|
||||||
let is_viewport_focused = focused_viewport == Some(viewport_id);
|
let is_viewport_focused = focused_viewport == Some(viewport_id);
|
||||||
process_viewport_commands(commands, window, is_viewport_focused);
|
process_viewport_commands(commands, window, is_viewport_focused);
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ impl State {
|
|||||||
pub fn take_egui_input(
|
pub fn take_egui_input(
|
||||||
&mut self,
|
&mut self,
|
||||||
window: &winit::window::Window,
|
window: &winit::window::Window,
|
||||||
id_pair: ViewportIdPair,
|
ids: ViewportIdPair,
|
||||||
) -> egui::RawInput {
|
) -> egui::RawInput {
|
||||||
crate::profile_function!();
|
crate::profile_function!();
|
||||||
|
|
||||||
@@ -243,7 +243,7 @@ impl State {
|
|||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
self.egui_input.viewport.id_pair = id_pair;
|
self.egui_input.viewport.ids = ids;
|
||||||
self.egui_input.viewport.inner_rect_px =
|
self.egui_input.viewport.inner_rect_px =
|
||||||
if let (Some(pos), Some(size)) = (inner_pos_px, inner_size_px) {
|
if let (Some(pos), Some(size)) = (inner_pos_px, inner_size_px) {
|
||||||
Some(Rect::from_min_size(pos, size))
|
Some(Rect::from_min_size(pos, size))
|
||||||
|
|||||||
@@ -194,10 +194,10 @@ struct ContextImpl {
|
|||||||
|
|
||||||
impl ContextImpl {
|
impl ContextImpl {
|
||||||
fn begin_frame_mut(&mut self, mut new_raw_input: RawInput) {
|
fn begin_frame_mut(&mut self, mut new_raw_input: RawInput) {
|
||||||
let id_pair = new_raw_input.viewport.id_pair;
|
let ids = new_raw_input.viewport.ids;
|
||||||
|
|
||||||
let viewport_id = id_pair.this;
|
let viewport_id = ids.this;
|
||||||
self.viewport_stack.push(id_pair);
|
self.viewport_stack.push(ids);
|
||||||
self.output.entry(self.viewport_id()).or_default();
|
self.output.entry(self.viewport_id()).or_default();
|
||||||
self.repaint.start_frame(self.viewport_id());
|
self.repaint.start_frame(self.viewport_id());
|
||||||
|
|
||||||
@@ -1318,7 +1318,7 @@ impl Context {
|
|||||||
if pixels_per_point != self.pixels_per_point() {
|
if pixels_per_point != self.pixels_per_point() {
|
||||||
self.write(|ctx| {
|
self.write(|ctx| {
|
||||||
for viewport in ctx.viewports.values() {
|
for viewport in ctx.viewports.values() {
|
||||||
ctx.repaint.request_repaint_settle(viewport.id_pair.this);
|
ctx.repaint.request_repaint_settle(viewport.ids.this);
|
||||||
}
|
}
|
||||||
ctx.repaint.request_repaint_settle(ViewportId::ROOT);
|
ctx.repaint.request_repaint_settle(ViewportId::ROOT);
|
||||||
ctx.memory.override_pixels_per_point = Some(pixels_per_point);
|
ctx.memory.override_pixels_per_point = Some(pixels_per_point);
|
||||||
@@ -1471,7 +1471,7 @@ impl Context {
|
|||||||
.remove(&ctx.viewport_id())
|
.remove(&ctx.viewport_id())
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
);
|
);
|
||||||
ctx.viewports.values().map(|vp| vp.id_pair.this).collect()
|
ctx.viewports.values().map(|vp| vp.ids.this).collect()
|
||||||
});
|
});
|
||||||
viewports.insert(ViewportId::ROOT);
|
viewports.insert(ViewportId::ROOT);
|
||||||
|
|
||||||
@@ -1545,14 +1545,14 @@ impl Context {
|
|||||||
ctx.viewports.retain(|_, viewport| {
|
ctx.viewports.retain(|_, viewport| {
|
||||||
let was_used = viewport.used;
|
let was_used = viewport.used;
|
||||||
|
|
||||||
if viewport_id == viewport.id_pair.parent {
|
if viewport_id == viewport.ids.parent {
|
||||||
viewport.used = false; // reset so we can check again next frame
|
viewport.used = false; // reset so we can check again next frame
|
||||||
}
|
}
|
||||||
|
|
||||||
if all_viewport_ids.contains(&viewport.id_pair.parent) {
|
if all_viewport_ids.contains(&viewport.ids.parent) {
|
||||||
viewports.push(ViewportOutput {
|
viewports.push(ViewportOutput {
|
||||||
builder: viewport.builder.clone(),
|
builder: viewport.builder.clone(),
|
||||||
id_pair: viewport.id_pair,
|
ids: viewport.ids,
|
||||||
viewport_ui_cb: viewport.viewport_ui_cb.clone(),
|
viewport_ui_cb: viewport.viewport_ui_cb.clone(),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
@@ -1560,7 +1560,7 @@ impl Context {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
let is_child = viewport_id == viewport.id_pair.parent;
|
let is_child = viewport_id == viewport.ids.parent;
|
||||||
|
|
||||||
let result = 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
|
||||||
@@ -1571,7 +1571,7 @@ impl Context {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if result {
|
if result {
|
||||||
all_viewport_ids.insert(viewport.id_pair.this);
|
all_viewport_ids.insert(viewport.ids.this);
|
||||||
}
|
}
|
||||||
|
|
||||||
result
|
result
|
||||||
@@ -2587,14 +2587,14 @@ impl Context {
|
|||||||
let viewport_id = ctx.viewport_id();
|
let viewport_id = ctx.viewport_id();
|
||||||
if let Some(window) = ctx.viewports.get_mut(&viewport_builder.id) {
|
if let Some(window) = ctx.viewports.get_mut(&viewport_builder.id) {
|
||||||
window.builder = viewport_builder.clone();
|
window.builder = viewport_builder.clone();
|
||||||
window.id_pair.parent = viewport_id;
|
window.ids.parent = viewport_id;
|
||||||
window.used = true;
|
window.used = true;
|
||||||
window.viewport_ui_cb = Some(Arc::new(Box::new(viewport_ui_cb)));
|
window.viewport_ui_cb = Some(Arc::new(Box::new(viewport_ui_cb)));
|
||||||
} else {
|
} else {
|
||||||
ctx.viewports.insert(
|
ctx.viewports.insert(
|
||||||
viewport_builder.id,
|
viewport_builder.id,
|
||||||
ViewportState {
|
ViewportState {
|
||||||
id_pair: ViewportIdPair {
|
ids: ViewportIdPair {
|
||||||
this: viewport_builder.id,
|
this: viewport_builder.id,
|
||||||
parent: viewport_id,
|
parent: viewport_id,
|
||||||
},
|
},
|
||||||
@@ -2644,19 +2644,19 @@ impl Context {
|
|||||||
return viewport_ui_cb(self);
|
return viewport_ui_cb(self);
|
||||||
};
|
};
|
||||||
|
|
||||||
let id_pair = self.write(|ctx| {
|
let ids = self.write(|ctx| {
|
||||||
let parent = ctx.viewport_id();
|
let parent = ctx.viewport_id();
|
||||||
|
|
||||||
if let Some(window) = ctx.viewports.get_mut(&viewport_builder.id) {
|
if let Some(window) = ctx.viewports.get_mut(&viewport_builder.id) {
|
||||||
// Existing
|
// Existing
|
||||||
window.builder = viewport_builder.clone();
|
window.builder = viewport_builder.clone();
|
||||||
window.id_pair.parent = parent;
|
window.ids.parent = parent;
|
||||||
window.used = true;
|
window.used = true;
|
||||||
window.viewport_ui_cb = None;
|
window.viewport_ui_cb = None;
|
||||||
window.id_pair
|
window.ids
|
||||||
} else {
|
} else {
|
||||||
// New
|
// New
|
||||||
let id_pair = ViewportIdPair {
|
let ids = ViewportIdPair {
|
||||||
this: viewport_builder.id,
|
this: viewport_builder.id,
|
||||||
parent,
|
parent,
|
||||||
};
|
};
|
||||||
@@ -2664,12 +2664,12 @@ impl Context {
|
|||||||
viewport_builder.id,
|
viewport_builder.id,
|
||||||
ViewportState {
|
ViewportState {
|
||||||
builder: viewport_builder.clone(),
|
builder: viewport_builder.clone(),
|
||||||
id_pair,
|
ids,
|
||||||
used: true,
|
used: true,
|
||||||
viewport_ui_cb: None,
|
viewport_ui_cb: None,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
id_pair
|
ids
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -2680,7 +2680,7 @@ impl Context {
|
|||||||
immediate_viewport_renderer(
|
immediate_viewport_renderer(
|
||||||
self,
|
self,
|
||||||
viewport_builder.clone(),
|
viewport_builder.clone(),
|
||||||
id_pair,
|
ids,
|
||||||
Box::new(move |context| *out = Some(viewport_ui_cb(context))),
|
Box::new(move |context| *out = Some(viewport_ui_cb(context))),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ impl RawInput {
|
|||||||
#[derive(Clone, Debug, Default, PartialEq, Eq)]
|
#[derive(Clone, Debug, Default, PartialEq, Eq)]
|
||||||
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
|
||||||
pub struct ViewportInfo {
|
pub struct ViewportInfo {
|
||||||
pub id_pair: ViewportIdPair,
|
pub ids: ViewportIdPair,
|
||||||
|
|
||||||
/// Viewport inner position and size, only the drowable area
|
/// Viewport inner position and size, only the drowable area
|
||||||
/// unit = physical pixels
|
/// unit = physical pixels
|
||||||
@@ -164,12 +164,12 @@ impl ViewportInfo {
|
|||||||
|
|
||||||
pub fn ui(&self, ui: &mut crate::Ui) {
|
pub fn ui(&self, ui: &mut crate::Ui) {
|
||||||
let Self {
|
let Self {
|
||||||
id_pair,
|
ids,
|
||||||
inner_rect_px,
|
inner_rect_px,
|
||||||
outer_rect_px,
|
outer_rect_px,
|
||||||
close_requested,
|
close_requested,
|
||||||
} = self;
|
} = self;
|
||||||
ui.label(format!("id_pair: {id_pair:?}"));
|
ui.label(format!("ids: {ids:?}"));
|
||||||
ui.label(format!("inner_rect_px: {inner_rect_px:?}"));
|
ui.label(format!("inner_rect_px: {inner_rect_px:?}"));
|
||||||
ui.label(format!("outer_rect_px: {outer_rect_px:?}"));
|
ui.label(format!("outer_rect_px: {outer_rect_px:?}"));
|
||||||
ui.label(format!("close_requested: {close_requested:?}"));
|
ui.label(format!("close_requested: {close_requested:?}"));
|
||||||
|
|||||||
@@ -560,7 +560,7 @@ impl Memory {
|
|||||||
self.window_interactions
|
self.window_interactions
|
||||||
.retain(|id, _| viewports.contains(id));
|
.retain(|id, _| viewports.contains(id));
|
||||||
|
|
||||||
self.viewport_id = new_input.viewport.id_pair.this;
|
self.viewport_id = new_input.viewport.ids.this;
|
||||||
self.interactions
|
self.interactions
|
||||||
.entry(self.viewport_id)
|
.entry(self.viewport_id)
|
||||||
.or_default()
|
.or_default()
|
||||||
|
|||||||
@@ -704,7 +704,7 @@ pub(crate) struct ViewportState {
|
|||||||
pub(crate) builder: ViewportBuilder,
|
pub(crate) builder: ViewportBuilder,
|
||||||
|
|
||||||
/// Id of us and our parent.
|
/// Id of us and our parent.
|
||||||
pub(crate) id_pair: ViewportIdPair,
|
pub(crate) ids: ViewportIdPair,
|
||||||
|
|
||||||
/// Has this viewport been updated this frame?
|
/// Has this viewport been updated this frame?
|
||||||
pub(crate) used: bool,
|
pub(crate) used: bool,
|
||||||
@@ -719,7 +719,7 @@ pub(crate) struct ViewportState {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct ViewportOutput {
|
pub struct ViewportOutput {
|
||||||
/// Id of us and our parent.
|
/// Id of us and our parent.
|
||||||
pub id_pair: ViewportIdPair,
|
pub ids: ViewportIdPair,
|
||||||
|
|
||||||
pub builder: ViewportBuilder,
|
pub builder: ViewportBuilder,
|
||||||
|
|
||||||
@@ -731,6 +731,6 @@ pub struct ViewportOutput {
|
|||||||
|
|
||||||
impl ViewportOutput {
|
impl ViewportOutput {
|
||||||
pub fn id(&self) -> ViewportId {
|
pub fn id(&self) -> ViewportId {
|
||||||
self.id_pair.this
|
self.ids.this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user