diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 783c3299b..0d09abc81 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -511,7 +511,7 @@ mod glow_integration { let viewport = &glutin.viewports[&viewport_id]; let is_immediate = viewport.viewport_ui_cb.is_none(); 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() { // 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. @@ -528,7 +528,7 @@ mod glow_integration { let window = viewport.window.as_ref().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); @@ -709,7 +709,7 @@ mod glow_integration { struct Viewport { gl_surface: Option>, window: Option>, - id_pair: ViewportIdPair, + ids: ViewportIdPair, /// The user-callback that shows the ui. /// None for immediate viewports. @@ -719,11 +719,11 @@ mod glow_integration { } impl Viewport { - pub fn new(id_pair: ViewportIdPair) -> Self { + pub fn new(ids: ViewportIdPair) -> Self { Self { gl_surface: None, window: None, - id_pair, + ids, viewport_ui_cb: None, egui_winit: None, } @@ -887,7 +887,7 @@ mod glow_integration { window: window.map(Rc::new), egui_winit: None, viewport_ui_cb: None, - id_pair: ViewportIdPair::ROOT, + ids: ViewportIdPair::ROOT, }, ); @@ -953,7 +953,7 @@ mod glow_integration { .get_mut(&viewport_id) .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. let window = viewport.window.take().unwrap_or_else(|| { 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); self.current_gl_context = Some(current_gl_context); - self.viewport_maps - .insert(window.id(), viewport.id_pair.this); - self.window_maps.insert(viewport.id_pair.this, window.id()); + self.viewport_maps.insert(window.id(), viewport.ids.this); + self.window_maps.insert(viewport.ids.this, window.id()); } viewport.window = Some(window); Ok(()) @@ -1100,16 +1099,13 @@ mod glow_integration { viewports.retain_mut( |ViewportOutput { builder: new_builder, - id_pair, + ids, viewport_ui_cb, }| { - let builder = self - .builders - .entry(id_pair.this) - .or_insert(new_builder.clone()); + let builder = self.builders.entry(ids.this).or_insert(new_builder.clone()); let (commands, recreate) = builder.patch(new_builder); - if let Some(viewport) = self.viewports.get_mut(&id_pair.this) { - viewport.id_pair.parent = id_pair.parent; + if let Some(viewport) = self.viewports.get_mut(&ids.this) { + viewport.ids.parent = ids.parent; viewport.viewport_ui_cb = viewport_ui_cb.clone(); // always update the latest callback if recreate { @@ -1119,7 +1115,7 @@ mod glow_integration { let is_viewport_focused = false; // TODO process_viewport_commands(commands, window, is_viewport_focused); } - active_viewports_ids.insert(id_pair.this); + active_viewports_ids.insert(ids.this); false } else { true @@ -1130,31 +1126,28 @@ mod glow_integration { // Process new viewports: for ViewportOutput { mut builder, - id_pair, + ids, viewport_ui_cb, } in viewports { if builder.icon.is_none() { // Inherit from parent as fallback. - builder.icon = self - .builders - .get(&id_pair.parent) - .and_then(|b| b.icon.clone()); + builder.icon = self.builders.get(&ids.parent).and_then(|b| b.icon.clone()); } { self.viewports.insert( - id_pair.this, + ids.this, Viewport { gl_surface: None, window: None, egui_winit: None, 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 @@ -1369,7 +1362,7 @@ mod glow_integration { let event_loop: *const EventLoopWindowTarget = event_loop; 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()) { // SAFETY: the event loop lives longer than @@ -1381,7 +1374,7 @@ mod glow_integration { event_loop, egui_ctx, viewport_builder, - id_pair, + ids, viewport_ui_cb, &glutin, &painter, @@ -1413,7 +1406,7 @@ mod glow_integration { event_loop: &EventLoopWindowTarget, egui_ctx: &egui::Context, mut viewport_builder: ViewportBuilder, - id_pair: ViewportIdPair, + ids: ViewportIdPair, viewport_ui_cb: Box, glutin: &RefCell, painter: &RefCell, @@ -1421,38 +1414,35 @@ mod glow_integration { ) { 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! let mut glutin = glutin.borrow_mut(); // 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 .builders - .get(&id_pair.parent) + .get(&ids.parent) .and_then(|b| b.icon.clone()); } glutin .viewports - .entry(id_pair.this) - .or_insert(Viewport::new(id_pair)); + .entry(ids.this) + .or_insert(Viewport::new(ids)); + + glutin.builders.entry(ids.this).or_insert(viewport_builder); glutin - .builders - .entry(id_pair.this) - .or_insert(viewport_builder); - - glutin - .init_viewport(id_pair.this, event_loop) + .init_viewport(ids.this, event_loop) .expect("Failed to initialize window in egui::Context::show_viewport_immediate"); } let input = { 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; }; @@ -1463,7 +1453,7 @@ mod glow_integration { 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 }; @@ -1487,7 +1477,7 @@ mod glow_integration { .. } = &mut *glutin; - let Some(viewport) = viewports.get_mut(&id_pair.this) else { + let Some(viewport) = viewports.get_mut(&ids.this) else { return; }; @@ -1522,14 +1512,14 @@ mod glow_integration { .unwrap() .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()); } let gl = &painter.gl().clone(); 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( screen_size_in_pixels, 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 { @@ -1745,7 +1735,7 @@ mod glow_integration { running.app.as_mut(), event, 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 = event_loop; 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() { // SAFETY: the event loop lives longer than // the Rc:s we just upgraded above. @@ -2096,7 +2086,7 @@ mod wgpu_integration { event_loop, egui_ctx, viewport_builder, - id_pair, + ids, viewport_ui_cb, beginning, &shared, @@ -2141,7 +2131,7 @@ mod wgpu_integration { event_loop: &EventLoopWindowTarget, egui_ctx: &egui::Context, mut viewport_builder: ViewportBuilder, - id_pair: ViewportIdPair, + ids: ViewportIdPair, viewport_ui_cb: Box, beginning: Instant, shared: &RefCell, @@ -2157,15 +2147,15 @@ mod wgpu_integration { } = &mut *shared; // 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() { viewport_builder.icon = viewports - .get(&id_pair.parent) + .get(&ids.parent) .and_then(|vp| vp.builder.icon.clone()); } - let viewport = viewports.entry(id_pair.this).or_insert(Viewport { - ids: id_pair, + let viewport = viewports.entry(ids.this).or_insert(Viewport { + ids, builder: viewport_builder, viewport_ui_cb: None, window: None, @@ -2176,7 +2166,7 @@ mod wgpu_integration { } // Render sync viewport: - let Some(viewport) = viewports.get_mut(&id_pair.this) else { + let Some(viewport) = viewports.get_mut(&ids.this) else { return; }; let Some(winit_state) = &mut viewport.egui_winit else { @@ -2186,7 +2176,7 @@ mod wgpu_integration { 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 }; @@ -2205,7 +2195,7 @@ mod wgpu_integration { viewports, painter, .. } = &mut *shared; - let Some(viewport) = viewports.get_mut(&id_pair.this) else { + let Some(viewport) = viewports.get_mut(&ids.this) else { return; }; let Some(winit_state) = &mut viewport.egui_winit else { @@ -2215,17 +2205,17 @@ mod wgpu_integration { 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!( "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); painter.paint_and_update_textures( - id_pair.this, + ids.this, pixels_per_point, [0.0, 0.0, 0.0, 0.0], &clipped_primitives, @@ -2233,7 +2223,7 @@ mod wgpu_integration { 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 { @@ -2579,7 +2569,7 @@ mod wgpu_integration { // Update exisitng viewports: out_viewports.retain_mut( |ViewportOutput { - id_pair: ViewportIdPair { this, parent }, + ids: ViewportIdPair { this, parent }, viewport_ui_cb, .. }| { @@ -2597,24 +2587,24 @@ mod wgpu_integration { // Add new viewports, and update existing ones: for ViewportOutput { builder: mut new_builder, - id_pair, + ids, viewport_ui_cb, } in out_viewports { - active_viewports_ids.insert(id_pair.this); + active_viewports_ids.insert(ids.this); if new_builder.icon.is_none() { // Inherit icon from parent new_builder.icon = viewports - .get_mut(&id_pair.parent) + .get_mut(&ids.parent) .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) => { // New viewport: entry.insert(Viewport { - ids: id_pair, + ids, builder: new_builder, viewport_ui_cb, window: None, @@ -2626,14 +2616,17 @@ mod wgpu_integration { // Patch an existing viewport: 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); 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.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 { let is_viewport_focused = focused_viewport == Some(viewport_id); process_viewport_commands(commands, window, is_viewport_focused); diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs index 7fc85be8e..451930362 100644 --- a/crates/egui-winit/src/lib.rs +++ b/crates/egui-winit/src/lib.rs @@ -180,7 +180,7 @@ impl State { pub fn take_egui_input( &mut self, window: &winit::window::Window, - id_pair: ViewportIdPair, + ids: ViewportIdPair, ) -> egui::RawInput { crate::profile_function!(); @@ -243,7 +243,7 @@ impl State { None }; - self.egui_input.viewport.id_pair = id_pair; + self.egui_input.viewport.ids = ids; self.egui_input.viewport.inner_rect_px = if let (Some(pos), Some(size)) = (inner_pos_px, inner_size_px) { Some(Rect::from_min_size(pos, size)) diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 38e60911d..54b493623 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -194,10 +194,10 @@ struct ContextImpl { impl ContextImpl { 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; - self.viewport_stack.push(id_pair); + let viewport_id = ids.this; + self.viewport_stack.push(ids); self.output.entry(self.viewport_id()).or_default(); self.repaint.start_frame(self.viewport_id()); @@ -1318,7 +1318,7 @@ impl Context { if pixels_per_point != self.pixels_per_point() { self.write(|ctx| { 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.memory.override_pixels_per_point = Some(pixels_per_point); @@ -1471,7 +1471,7 @@ impl Context { .remove(&ctx.viewport_id()) .unwrap(), ); - ctx.viewports.values().map(|vp| vp.id_pair.this).collect() + ctx.viewports.values().map(|vp| vp.ids.this).collect() }); viewports.insert(ViewportId::ROOT); @@ -1545,14 +1545,14 @@ impl Context { ctx.viewports.retain(|_, viewport| { 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 } - if all_viewport_ids.contains(&viewport.id_pair.parent) { + if all_viewport_ids.contains(&viewport.ids.parent) { viewports.push(ViewportOutput { builder: viewport.builder.clone(), - id_pair: viewport.id_pair, + ids: viewport.ids, viewport_ui_cb: viewport.viewport_ui_cb.clone(), }); } else { @@ -1560,7 +1560,7 @@ impl Context { return false; } - let is_child = viewport_id == viewport.id_pair.parent; + let is_child = viewport_id == viewport.ids.parent; let result = if is_child { // Keep all children that have been updated this frame @@ -1571,7 +1571,7 @@ impl Context { }; if result { - all_viewport_ids.insert(viewport.id_pair.this); + all_viewport_ids.insert(viewport.ids.this); } result @@ -2587,14 +2587,14 @@ impl Context { let viewport_id = ctx.viewport_id(); if let Some(window) = ctx.viewports.get_mut(&viewport_builder.id) { window.builder = viewport_builder.clone(); - window.id_pair.parent = viewport_id; + window.ids.parent = viewport_id; window.used = true; window.viewport_ui_cb = Some(Arc::new(Box::new(viewport_ui_cb))); } else { ctx.viewports.insert( viewport_builder.id, ViewportState { - id_pair: ViewportIdPair { + ids: ViewportIdPair { this: viewport_builder.id, parent: viewport_id, }, @@ -2644,19 +2644,19 @@ impl Context { return viewport_ui_cb(self); }; - let id_pair = self.write(|ctx| { + let ids = self.write(|ctx| { let parent = ctx.viewport_id(); if let Some(window) = ctx.viewports.get_mut(&viewport_builder.id) { // Existing window.builder = viewport_builder.clone(); - window.id_pair.parent = parent; + window.ids.parent = parent; window.used = true; window.viewport_ui_cb = None; - window.id_pair + window.ids } else { // New - let id_pair = ViewportIdPair { + let ids = ViewportIdPair { this: viewport_builder.id, parent, }; @@ -2664,12 +2664,12 @@ impl Context { viewport_builder.id, ViewportState { builder: viewport_builder.clone(), - id_pair, + ids, used: true, viewport_ui_cb: None, }, ); - id_pair + ids } }); @@ -2680,7 +2680,7 @@ impl Context { immediate_viewport_renderer( self, viewport_builder.clone(), - id_pair, + ids, Box::new(move |context| *out = Some(viewport_ui_cb(context))), ); } diff --git a/crates/egui/src/data/input.rs b/crates/egui/src/data/input.rs index e18b2a7b1..4b2cef408 100644 --- a/crates/egui/src/data/input.rs +++ b/crates/egui/src/data/input.rs @@ -143,7 +143,7 @@ impl RawInput { #[derive(Clone, Debug, Default, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))] pub struct ViewportInfo { - pub id_pair: ViewportIdPair, + pub ids: ViewportIdPair, /// Viewport inner position and size, only the drowable area /// unit = physical pixels @@ -164,12 +164,12 @@ impl ViewportInfo { pub fn ui(&self, ui: &mut crate::Ui) { let Self { - id_pair, + ids, inner_rect_px, outer_rect_px, close_requested, } = 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!("outer_rect_px: {outer_rect_px:?}")); ui.label(format!("close_requested: {close_requested:?}")); diff --git a/crates/egui/src/memory.rs b/crates/egui/src/memory.rs index 9b782d91f..528090806 100644 --- a/crates/egui/src/memory.rs +++ b/crates/egui/src/memory.rs @@ -560,7 +560,7 @@ impl Memory { self.window_interactions .retain(|id, _| viewports.contains(id)); - self.viewport_id = new_input.viewport.id_pair.this; + self.viewport_id = new_input.viewport.ids.this; self.interactions .entry(self.viewport_id) .or_default() diff --git a/crates/egui/src/viewport.rs b/crates/egui/src/viewport.rs index 5065f7cdf..a01fbeb07 100644 --- a/crates/egui/src/viewport.rs +++ b/crates/egui/src/viewport.rs @@ -704,7 +704,7 @@ pub(crate) struct ViewportState { pub(crate) builder: ViewportBuilder, /// Id of us and our parent. - pub(crate) id_pair: ViewportIdPair, + pub(crate) ids: ViewportIdPair, /// Has this viewport been updated this frame? pub(crate) used: bool, @@ -719,7 +719,7 @@ pub(crate) struct ViewportState { #[derive(Clone)] pub struct ViewportOutput { /// Id of us and our parent. - pub id_pair: ViewportIdPair, + pub ids: ViewportIdPair, pub builder: ViewportBuilder, @@ -731,6 +731,6 @@ pub struct ViewportOutput { impl ViewportOutput { pub fn id(&self) -> ViewportId { - self.id_pair.this + self.ids.this } }