1
0
mirror of https://github.com/emilk/egui.git synced 2026-08-30 05:10:03 -04:00

rename pair to id_pair

This commit is contained in:
Emil Ernerfeldt
2023-11-03 13:45:44 +01:00
parent 682db9cef6
commit f14fa1663e
4 changed files with 93 additions and 79 deletions

View File

@@ -481,7 +481,7 @@ impl EpiIntegration {
window: &winit::window::Window, window: &winit::window::Window,
egui_winit: &mut egui_winit::State, egui_winit: &mut egui_winit::State,
viewport_ui_cb: &Option<Arc<Box<ViewportUiCallback>>>, viewport_ui_cb: &Option<Arc<Box<ViewportUiCallback>>>,
pair: ViewportIdPair, id_pair: ViewportIdPair,
) -> egui::FullOutput { ) -> egui::FullOutput {
let frame_start = std::time::Instant::now(); let frame_start = std::time::Instant::now();
@@ -493,7 +493,7 @@ impl EpiIntegration {
raw_input.time = Some(self.beginning.elapsed().as_secs_f64()); raw_input.time = Some(self.beginning.elapsed().as_secs_f64());
// Run user code: // Run user code:
let full_output = self.egui_ctx.run(raw_input, pair, |egui_ctx| { let full_output = self.egui_ctx.run(raw_input, id_pair, |egui_ctx| {
crate::profile_scope!("App::update"); crate::profile_scope!("App::update");
if let Some(viewport_ui_cb) = viewport_ui_cb { if let Some(viewport_ui_cb) = viewport_ui_cb {
// Child viewport // Child viewport

View File

@@ -502,7 +502,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<RefCell<winit::window::Window>>>, window: Option<Rc<RefCell<winit::window::Window>>>,
pair: ViewportIdPair, id_pair: ViewportIdPair,
/// The user-callback that shows the ui. /// The user-callback that shows the ui.
viewport_ui_cb: Option<Arc<Box<ViewportUiCallback>>>, viewport_ui_cb: Option<Arc<Box<ViewportUiCallback>>>,
@@ -673,7 +673,7 @@ mod glow_integration {
window: window.map(|w| Rc::new(RefCell::new(w))), window: window.map(|w| Rc::new(RefCell::new(w))),
egui_winit: None, egui_winit: None,
viewport_ui_cb: None, viewport_ui_cb: None,
pair: ViewportIdPair::MAIN, id_pair: ViewportIdPair::MAIN,
})), })),
); );
@@ -729,7 +729,7 @@ mod glow_integration {
win: &Rc<RefCell<Viewport>>, win: &Rc<RefCell<Viewport>>,
event_loop: &EventLoopWindowTarget<UserEvent>, event_loop: &EventLoopWindowTarget<UserEvent>,
) -> Result<()> { ) -> Result<()> {
let builder = &self.builders[&win.borrow().pair.this]; let builder = &self.builders[&win.borrow().id_pair.this];
let mut win = win.borrow_mut(); let mut win = win.borrow_mut();
// make sure we have a window or create one. // make sure we have a window or create one.
let window = win.window.take().unwrap_or_else(|| { let window = win.window.take().unwrap_or_else(|| {
@@ -797,8 +797,8 @@ 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.viewport_maps.insert(window.id(), win.pair.this); self.viewport_maps.insert(window.id(), win.id_pair.this);
self.window_maps.insert(win.pair.this, window.id()); self.window_maps.insert(win.id_pair.this, window.id());
} }
win.window = Some(window); win.window = Some(window);
Ok(()) Ok(())
@@ -1082,14 +1082,14 @@ mod glow_integration {
let beginning = integration.beginning; let beginning = integration.beginning;
integration.egui_ctx.set_render_sync_callback( integration.egui_ctx.set_render_sync_callback(
move |egui_ctx, viewport_builder, pair, viewport_ui_cb| { move |egui_ctx, viewport_builder, id_pair, viewport_ui_cb| {
if let (Some(glutin), Some(gl), Some(painter)) = if let (Some(glutin), Some(gl), Some(painter)) =
(glutin.upgrade(), gl.upgrade(), painter.upgrade()) (glutin.upgrade(), gl.upgrade(), painter.upgrade())
{ {
Self::render_sync_viewport( Self::render_sync_viewport(
egui_ctx, egui_ctx,
viewport_builder, viewport_builder,
pair, id_pair,
viewport_ui_cb, viewport_ui_cb,
&glutin, &glutin,
&gl, &gl,
@@ -1119,7 +1119,7 @@ mod glow_integration {
fn render_sync_viewport( fn render_sync_viewport(
egui_ctx: &egui::Context, egui_ctx: &egui::Context,
mut viewport_builder: ViewportBuilder, mut viewport_builder: ViewportBuilder,
pair: ViewportIdPair, id_pair: ViewportIdPair,
viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>, viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>,
glutin: &RefCell<GlutinWindowContext>, glutin: &RefCell<GlutinWindowContext>,
gl: &glow::Context, gl: &glow::Context,
@@ -1128,7 +1128,7 @@ mod glow_integration {
) { ) {
crate::profile_function!(); crate::profile_function!();
let has_window = glutin.borrow().viewports.get(&pair.this).is_some(); let has_window = glutin.borrow().viewports.get(&id_pair.this).is_some();
// This will create a new native window if is needed // This will create a new native window if is needed
if !has_window { if !has_window {
@@ -1136,11 +1136,12 @@ mod glow_integration {
// Inherit parent icon if none // Inherit parent icon if none
{ {
if viewport_builder.icon.is_none() && glutin.builders.get(&pair.this).is_none() if viewport_builder.icon.is_none()
&& glutin.builders.get(&id_pair.this).is_none()
{ {
viewport_builder.icon = glutin viewport_builder.icon = glutin
.builders .builders
.get(&pair.parent) .get(&id_pair.parent)
.and_then(|b| b.icon.clone()); .and_then(|b| b.icon.clone());
} }
} }
@@ -1148,18 +1149,21 @@ mod glow_integration {
{ {
glutin glutin
.viewports .viewports
.entry(pair.this) .entry(id_pair.this)
.or_insert(Rc::new(RefCell::new(Viewport { .or_insert(Rc::new(RefCell::new(Viewport {
gl_surface: None, gl_surface: None,
window: None, window: None,
pair, id_pair,
viewport_ui_cb: None, viewport_ui_cb: None,
egui_winit: None, egui_winit: None,
}))); })));
glutin.builders.entry(pair.this).or_insert(viewport_builder); glutin
.builders
.entry(id_pair.this)
.or_insert(viewport_builder);
} }
let win = glutin.viewports[&pair.this].clone(); let win = glutin.viewports[&id_pair.this].clone();
#[allow(unsafe_code)] #[allow(unsafe_code)]
let event_loop = unsafe { let event_loop = unsafe {
@@ -1174,7 +1178,7 @@ mod glow_integration {
// Rendering the sync viewport // Rendering the sync viewport
let window = glutin.borrow().viewports.get(&pair.this).cloned(); let window = glutin.borrow().viewports.get(&id_pair.this).cloned();
let Some(window) = window else { return }; let Some(window) = window else { return };
let window = &mut *window.borrow_mut(); let window = &mut *window.borrow_mut();
@@ -1187,13 +1191,13 @@ mod glow_integration {
let win = win.borrow(); let win = win.borrow();
let mut input = winit_state.take_egui_input(&win); let mut input = winit_state.take_egui_input(&win);
input.time = Some(beginning.elapsed().as_secs_f64()); input.time = Some(beginning.elapsed().as_secs_f64());
let output = egui_ctx.run(input, pair, |ctx| { let output = egui_ctx.run(input, id_pair, |ctx| {
viewport_ui_cb(ctx); viewport_ui_cb(ctx);
}); });
let screen_size_in_pixels: [u32; 2] = win.inner_size().into(); let screen_size_in_pixels: [u32; 2] = win.inner_size().into();
let clipped_primitives = egui_ctx.tessellate(output.shapes, pair.this); let clipped_primitives = egui_ctx.tessellate(output.shapes, id_pair.this);
let mut glutin = glutin.borrow_mut(); let mut glutin = glutin.borrow_mut();
let mut painter = painter.borrow_mut(); let mut painter = painter.borrow_mut();
@@ -1215,13 +1219,13 @@ mod glow_integration {
.unwrap() .unwrap()
.is_current(glutin.current_gl_context.as_ref().unwrap()) .is_current(glutin.current_gl_context.as_ref().unwrap())
{ {
let builder = &&glutin.builders[&window.pair.this]; let builder = &&glutin.builders[&window.id_pair.this];
log::error!("egui::create_viewport_sync with title: `{}` is not created in main thread, try to use wgpu!", builder.title); log::error!("egui::create_viewport_sync with title: `{}` is not created in main thread, try to use wgpu!", builder.title);
} }
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(pair.this, |i| i.pixels_per_point()); let pixels_per_point = egui_ctx.input_for(id_pair.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,
@@ -1242,7 +1246,12 @@ mod glow_integration {
{ {
log::error!("swap_buffers failed: {err}"); log::error!("swap_buffers failed: {err}");
} }
winit_state.handle_platform_output(&win, pair.this, egui_ctx, output.platform_output); winit_state.handle_platform_output(
&win,
id_pair.this,
egui_ctx,
output.platform_output,
);
} }
fn process_viewport_builders( fn process_viewport_builders(
@@ -1254,7 +1263,7 @@ mod glow_integration {
viewports.retain_mut( viewports.retain_mut(
|ViewportOutput { |ViewportOutput {
builder, builder,
pair: ViewportIdPair { this: id, .. }, id_pair: ViewportIdPair { this: id, .. },
viewport_ui_cb, viewport_ui_cb,
}| { }| {
let mut glutin = glutin_ctx.borrow_mut(); let mut glutin = glutin_ctx.borrow_mut();
@@ -1267,7 +1276,7 @@ mod glow_integration {
viewport.window = None; viewport.window = None;
viewport.gl_surface = None; viewport.gl_surface = None;
viewport.viewport_ui_cb = viewport_ui_cb.clone(); viewport.viewport_ui_cb = viewport_ui_cb.clone();
viewport.pair.parent = *id; viewport.id_pair.parent = *id;
} }
if let Some(w) = viewport.window.clone() { if let Some(w) = viewport.window.clone() {
process_viewport_commands(commands, *id, None, &w.borrow()); process_viewport_commands(commands, *id, None, &w.borrow());
@@ -1282,7 +1291,7 @@ mod glow_integration {
for ViewportOutput { for ViewportOutput {
mut builder, mut builder,
pair, id_pair,
viewport_ui_cb, viewport_ui_cb,
} in viewports } in viewports
{ {
@@ -1291,24 +1300,24 @@ mod glow_integration {
builder.icon = glutin_ctx builder.icon = glutin_ctx
.borrow() .borrow()
.builders .builders
.get(&pair.parent) .get(&id_pair.parent)
.and_then(|b| b.icon.clone()); .and_then(|b| b.icon.clone());
} }
{ {
let mut glutin = glutin_ctx.borrow_mut(); let mut glutin = glutin_ctx.borrow_mut();
glutin.viewports.insert( glutin.viewports.insert(
pair.this, id_pair.this,
Rc::new(RefCell::new(Viewport { Rc::new(RefCell::new(Viewport {
gl_surface: None, gl_surface: None,
window: None, window: None,
egui_winit: None, egui_winit: None,
viewport_ui_cb, viewport_ui_cb,
pair, id_pair,
})), })),
); );
glutin.builders.insert(pair.this, builder); glutin.builders.insert(id_pair.this, builder);
} }
active_viewports_ids.push(pair.this); active_viewports_ids.push(id_pair.this);
} }
let mut glutin = glutin_ctx.borrow_mut(); let mut glutin = glutin_ctx.borrow_mut();
@@ -1436,7 +1445,7 @@ mod glow_integration {
if viewport.borrow().viewport_ui_cb.is_none() && viewport_id != ViewportId::MAIN if viewport.borrow().viewport_ui_cb.is_none() && viewport_id != ViewportId::MAIN
{ {
if let Some(parent_viewport) = if let Some(parent_viewport) =
glutin.viewports.get(&viewport.borrow().pair.parent) glutin.viewports.get(&viewport.borrow().id_pair.parent)
{ {
if let Some(window) = parent_viewport.borrow().window.as_ref() { if let Some(window) = parent_viewport.borrow().window.as_ref() {
return EventResult::RepaintNext(window.borrow().id()); return EventResult::RepaintNext(window.borrow().id());
@@ -1484,7 +1493,7 @@ mod glow_integration {
&window, &window,
egui_winit, egui_winit,
&viewport.viewport_ui_cb.clone(), &viewport.viewport_ui_cb.clone(),
viewport.pair, viewport.id_pair,
); );
integration.borrow_mut().handle_platform_output( integration.borrow_mut().handle_platform_output(
@@ -1795,7 +1804,7 @@ mod glow_integration {
running.app.borrow_mut().as_mut(), running.app.borrow_mut().as_mut(),
event, event,
viewport.egui_winit.as_mut().unwrap(), viewport.egui_winit.as_mut().unwrap(),
viewport.pair.this, viewport.id_pair.this,
); );
} }
} }
@@ -2183,7 +2192,7 @@ mod wgpu_integration {
let beginning = integration.beginning; let beginning = integration.beginning;
integration.egui_ctx.set_render_sync_callback( integration.egui_ctx.set_render_sync_callback(
move |egui_ctx, viewport_builder, pair, viewport_ui_cb| { move |egui_ctx, viewport_builder, id_pair, viewport_ui_cb| {
if let ( if let (
Some(viewports), Some(viewports),
Some(builders), Some(builders),
@@ -2198,7 +2207,7 @@ mod wgpu_integration {
Self::render_sync_viewport( Self::render_sync_viewport(
egui_ctx, egui_ctx,
viewport_builder, viewport_builder,
pair, id_pair,
viewport_ui_cb, viewport_ui_cb,
&viewports, &viewports,
&builders, &builders,
@@ -2230,7 +2239,7 @@ mod wgpu_integration {
fn render_sync_viewport( fn render_sync_viewport(
egui_ctx: &egui::Context, egui_ctx: &egui::Context,
mut viewport_builder: ViewportBuilder, mut viewport_builder: ViewportBuilder,
pair: ViewportIdPair, id_pair: ViewportIdPair,
viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>, viewport_ui_cb: Box<dyn FnOnce(&egui::Context) + '_>,
viewports: &RefCell<Viewports>, viewports: &RefCell<Viewports>,
builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>, builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>,
@@ -2241,27 +2250,27 @@ mod wgpu_integration {
crate::profile_function!(); crate::profile_function!();
// Creating a new native window if is needed // Creating a new native window if is needed
if viewports.borrow().get(&pair.this).is_none() { if viewports.borrow().get(&id_pair.this).is_none() {
let mut builders = builders.borrow_mut(); let mut builders = builders.borrow_mut();
{ {
if viewport_builder.icon.is_none() && builders.get(&pair.this).is_none() { if viewport_builder.icon.is_none() && builders.get(&id_pair.this).is_none() {
viewport_builder.icon = viewport_builder.icon =
builders.get(&pair.parent).and_then(|b| b.icon.clone()); builders.get(&id_pair.parent).and_then(|b| b.icon.clone());
} }
} }
let mut viewports = viewports.borrow_mut(); let mut viewports = viewports.borrow_mut();
let Viewport { window, state, .. } = let Viewport { window, state, .. } =
viewports.entry(pair.this).or_insert(Viewport { viewports.entry(id_pair.this).or_insert(Viewport {
window: None, window: None,
state: Rc::new(RefCell::new(None)), state: Rc::new(RefCell::new(None)),
viewport_ui_cb: None, viewport_ui_cb: None,
parent_id: pair.parent, parent_id: id_pair.parent,
}); });
builders builders
.entry(pair.this) .entry(id_pair.this)
.or_insert(viewport_builder.clone()); .or_insert(viewport_builder.clone());
#[allow(unsafe_code)] #[allow(unsafe_code)]
@@ -2272,7 +2281,7 @@ mod wgpu_integration {
}; };
Self::init_window( Self::init_window(
pair.this, id_pair.this,
&viewport_builder, &viewport_builder,
&mut viewport_maps.borrow_mut(), &mut viewport_maps.borrow_mut(),
&mut painter.borrow_mut(), &mut painter.borrow_mut(),
@@ -2283,7 +2292,7 @@ mod wgpu_integration {
} }
// Render sync viewport: // Render sync viewport:
let viewport = viewports.borrow().get(&pair.this).cloned(); let viewport = viewports.borrow().get(&id_pair.this).cloned();
let Some(viewport) = viewport else { return }; let Some(viewport) = viewport else { return };
let Some(winit_state) = &mut *viewport.state.borrow_mut() else { let Some(winit_state) = &mut *viewport.state.borrow_mut() else {
return; return;
@@ -2294,23 +2303,23 @@ mod wgpu_integration {
let win = window.borrow(); let win = window.borrow();
let mut input = winit_state.take_egui_input(&win); let mut input = winit_state.take_egui_input(&win);
input.time = Some(beginning.elapsed().as_secs_f64()); input.time = Some(beginning.elapsed().as_secs_f64());
let output = egui_ctx.run(input, pair, |ctx| { let output = egui_ctx.run(input, id_pair, |ctx| {
viewport_ui_cb(ctx); viewport_ui_cb(ctx);
}); });
let mut painter = painter.borrow_mut(); let mut painter = painter.borrow_mut();
if let Err(err) = pollster::block_on(painter.set_window(pair.this, Some(&win))) { if let Err(err) = pollster::block_on(painter.set_window(id_pair.this, Some(&win))) {
log::error!( log::error!(
"when rendering viewport_id: {}, set_window Error {err}", "when rendering viewport_id: {}, set_window Error {err}",
pair.this id_pair.this
); );
} }
let pixels_per_point = egui_ctx.input_for(pair.this, |i| i.pixels_per_point()); let pixels_per_point = egui_ctx.input_for(id_pair.this, |i| i.pixels_per_point());
let clipped_primitives = egui_ctx.tessellate(output.shapes, pair.this); let clipped_primitives = egui_ctx.tessellate(output.shapes, id_pair.this);
painter.paint_and_update_textures( painter.paint_and_update_textures(
pair.this, id_pair.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,
@@ -2318,7 +2327,12 @@ mod wgpu_integration {
false, false,
); );
winit_state.handle_platform_output(&win, pair.this, egui_ctx, output.platform_output); winit_state.handle_platform_output(
&win,
id_pair.this,
egui_ctx,
output.platform_output,
);
} }
} }
@@ -2500,7 +2514,7 @@ mod wgpu_integration {
out_viewports.retain_mut( out_viewports.retain_mut(
|ViewportOutput { |ViewportOutput {
pair: ViewportIdPair { this: id, parent }, id_pair: ViewportIdPair { this: id, parent },
viewport_ui_cb, viewport_ui_cb,
.. ..
}| { }| {
@@ -2517,7 +2531,7 @@ mod wgpu_integration {
for ViewportOutput { for ViewportOutput {
mut builder, mut builder,
pair: id_pair:
ViewportIdPair { ViewportIdPair {
this: id, this: id,
parent: parent_id, parent: parent_id,

View File

@@ -194,9 +194,9 @@ struct ContextImpl {
} }
impl ContextImpl { impl ContextImpl {
fn begin_frame_mut(&mut self, mut new_raw_input: RawInput, pair: ViewportIdPair) { fn begin_frame_mut(&mut self, mut new_raw_input: RawInput, id_pair: ViewportIdPair) {
if let Some(pair) = self.viewport_stack.last().copied() { if let Some(id_pair) = self.viewport_stack.last().copied() {
let previous_viewport_id = pair.this; let previous_viewport_id = id_pair.this;
// Pause the active viewport // Pause the active viewport
self.memory.pause_frame(previous_viewport_id); self.memory.pause_frame(previous_viewport_id);
@@ -210,8 +210,8 @@ impl ContextImpl {
); );
} }
let viewport_id = pair.this; let viewport_id = id_pair.this;
self.viewport_stack.push(pair); self.viewport_stack.push(id_pair);
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());
@@ -485,12 +485,12 @@ impl Context {
pub fn run( pub fn run(
&self, &self,
new_input: RawInput, new_input: RawInput,
pair: ViewportIdPair, id_pair: ViewportIdPair,
run_ui: impl FnOnce(&Context), run_ui: impl FnOnce(&Context),
) -> FullOutput { ) -> FullOutput {
crate::profile_function!(); crate::profile_function!();
self.begin_frame(new_input, pair); self.begin_frame(new_input, id_pair);
run_ui(self); run_ui(self);
self.end_frame() self.end_frame()
} }
@@ -512,10 +512,10 @@ impl Context {
/// let full_output = ctx.end_frame(); /// let full_output = ctx.end_frame();
/// // handle full_output /// // handle full_output
/// ``` /// ```
pub fn begin_frame(&self, new_input: RawInput, pair: ViewportIdPair) { pub fn begin_frame(&self, new_input: RawInput, id_pair: ViewportIdPair) {
crate::profile_function!(); crate::profile_function!();
self.write(|ctx| ctx.begin_frame_mut(new_input, pair)); self.write(|ctx| ctx.begin_frame_mut(new_input, id_pair));
} }
/// Create a new Context and specify if is desktop /// Create a new Context and specify if is desktop
@@ -1340,7 +1340,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.pair.this); ctx.repaint.request_repaint_settle(viewport.id_pair.this);
} }
ctx.repaint.request_repaint_settle(ViewportId::MAIN); ctx.repaint.request_repaint_settle(ViewportId::MAIN);
ctx.memory.override_pixels_per_point = Some(pixels_per_point); ctx.memory.override_pixels_per_point = Some(pixels_per_point);
@@ -1491,7 +1491,7 @@ impl Context {
ctx.viewport_id(), ctx.viewport_id(),
std::mem::take(&mut ctx.layer_rects_this_frame), std::mem::take(&mut ctx.layer_rects_this_frame),
); );
ctx.viewports.values().map(|vp| vp.pair.this).collect() ctx.viewports.values().map(|vp| vp.id_pair.this).collect()
}); });
viewports.push(ViewportId::MAIN); viewports.push(ViewportId::MAIN);
@@ -1559,7 +1559,7 @@ impl Context {
let available_viewports = self.read(|ctx| { let available_viewports = self.read(|ctx| {
let mut available_viewports = vec![ViewportId::MAIN]; let mut available_viewports = vec![ViewportId::MAIN];
for vp in ctx.viewports.values() { for vp in ctx.viewports.values() {
available_viewports.push(vp.pair.this); available_viewports.push(vp.id_pair.this);
} }
available_viewports available_viewports
}); });
@@ -1572,23 +1572,23 @@ impl Context {
|_, |_,
Viewport { Viewport {
builder, builder,
pair, id_pair,
used, used,
viewport_ui_cb, viewport_ui_cb,
}| { }| {
let retain = *used; let retain = *used;
if viewport_id == pair.parent { if viewport_id == id_pair.parent {
*used = false; *used = false;
} }
viewports.push(ViewportOutput { viewports.push(ViewportOutput {
builder: builder.clone(), builder: builder.clone(),
pair: *pair, id_pair: *id_pair,
viewport_ui_cb: viewport_ui_cb.clone(), viewport_ui_cb: viewport_ui_cb.clone(),
}); });
(retain || viewport_id != pair.parent) (retain || viewport_id != id_pair.parent)
&& available_viewports.contains(&pair.parent) && available_viewports.contains(&id_pair.parent)
}, },
); );
}); });
@@ -2525,7 +2525,7 @@ impl Context {
/// This will return the `ViewportIdPair` of the specified id /// This will return the `ViewportIdPair` of the specified id
pub fn viewport_id_pair(&self, id: impl Into<Id>) -> Option<ViewportIdPair> { pub fn viewport_id_pair(&self, id: impl Into<Id>) -> Option<ViewportIdPair> {
self.read(|ctx| ctx.viewports.get(&id.into()).map(|v| v.pair)) self.read(|ctx| ctx.viewports.get(&id.into()).map(|v| v.id_pair))
} }
/// For integrations: Is used to render a sync viewport. /// For integrations: Is used to render a sync viewport.
@@ -2598,7 +2598,7 @@ 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; window.builder = viewport_builder;
window.pair.parent = viewport_id; window.id_pair.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 {
@@ -2608,7 +2608,7 @@ impl Context {
viewport_builder.id, viewport_builder.id,
Viewport { Viewport {
builder: viewport_builder, builder: viewport_builder,
pair: ViewportIdPair { id_pair: ViewportIdPair {
this: id, this: id,
parent: viewport_id, parent: viewport_id,
}, },
@@ -2663,10 +2663,10 @@ impl Context {
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.pair.parent = parent; window.id_pair.parent = parent;
window.used = true; window.used = true;
window.viewport_ui_cb = None; window.viewport_ui_cb = None;
window.pair window.id_pair
} else { } else {
// New // New
ctx.viewport_id_generator += 1; ctx.viewport_id_generator += 1;
@@ -2676,7 +2676,7 @@ impl Context {
viewport_builder.id, viewport_builder.id,
Viewport { Viewport {
builder: viewport_builder.clone(), builder: viewport_builder.clone(),
pair: id_pair, id_pair,
used: true, used: true,
viewport_ui_cb: None, viewport_ui_cb: None,
}, },

View File

@@ -425,7 +425,7 @@ pub(crate) struct Viewport {
pub(crate) builder: ViewportBuilder, pub(crate) builder: ViewportBuilder,
/// Id of us and our parent. /// Id of us and our parent.
pub(crate) pair: ViewportIdPair, pub(crate) id_pair: ViewportIdPair,
pub(crate) used: bool, pub(crate) used: bool,
@@ -440,7 +440,7 @@ pub struct ViewportOutput {
pub builder: ViewportBuilder, pub builder: ViewportBuilder,
/// Id of us and our parent. /// Id of us and our parent.
pub pair: ViewportIdPair, pub id_pair: ViewportIdPair,
/// The user-code that shows the GUI, used for "async" viewports. /// The user-code that shows the GUI, used for "async" viewports.
/// ///