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:
@@ -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
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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.
|
||||||
///
|
///
|
||||||
|
|||||||
Reference in New Issue
Block a user