From fc90a7e7c8f65be5e95157176957581876330b5f Mon Sep 17 00:00:00 2001 From: Konkitoman Date: Mon, 11 Sep 2023 18:50:17 +0300 Subject: [PATCH] Fix cyclical reference Removed the last fix because there is not need for it now! --- crates/eframe/src/native/run.rs | 21 ++++----------------- crates/egui/src/context.rs | 13 +++++++++---- crates/egui/src/viewport.rs | 2 +- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 4a4eb06a1..361c08bb5 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -1027,7 +1027,6 @@ mod glow_integration { let glutin_ctx = Arc::new(RwLock::new(gl_window)); - let egui_ctx = integration.egui_ctx.clone(); let glutin = glutin_ctx.clone(); let _gl = gl.clone(); let painter = Arc::new(RwLock::new(painter)); @@ -1036,7 +1035,7 @@ mod glow_integration { // ## Sync Rendering integration.egui_ctx.set_render_sync_callback( - move |mut viewport_builder, viewport_id, parent_id, render| { + move |egui_ctx, mut viewport_builder, viewport_id, parent_id, render| { if viewport_builder.icon.is_none(){ viewport_builder.icon = glutin.read().builders.get(&parent_id).and_then(|b|b.icon.clone()); } @@ -1129,7 +1128,7 @@ mod glow_integration { ); winit_state.handle_platform_output( &win, - &egui_ctx, + egui_ctx, output.platform_output, ); } else { @@ -1298,11 +1297,6 @@ mod glow_integration { .window .clone(), ); - running - .integration - .read() - .egui_ctx - .set_render_sync_callback(|_, _, _, _| {}); running.app.write().on_exit(Some(&running.gl)); running.painter.write().destroy(); } @@ -2064,7 +2058,6 @@ mod wgpu_integration { ); let _windows = windows.clone(); - let egui_ctx = integration.egui_ctx.clone(); let time = integration.beginning; let painter = Arc::new(RwLock::new(painter)); let _painter = painter.clone(); @@ -2072,7 +2065,7 @@ mod wgpu_integration { // ## Sync Rendering integration.egui_ctx.set_render_sync_callback( - move |viewport_builder, viewport_id, parent_viewport_id, render| { + move |egui_ctx, viewport_builder, viewport_id, parent_viewport_id, render| { // TODO: If the `viewport_builder` do not have a icon set the icon to be the icon of the parent viewport if _windows.read().get(&viewport_id).is_none(){ @@ -2124,7 +2117,7 @@ mod wgpu_integration { winit_state.handle_platform_output( &win, - &egui_ctx, + egui_ctx, output.platform_output, ); } else { @@ -2203,12 +2196,6 @@ mod wgpu_integration { .save(running.app.as_mut(), window.clone()); } - running - .integration - .read() - .egui_ctx - .set_render_sync_callback(|_, _, _, _| {}); - #[cfg(feature = "glow")] running.app.on_exit(None); diff --git a/crates/egui/src/context.rs b/crates/egui/src/context.rs index 6857964ae..40e9737da 100644 --- a/crates/egui/src/context.rs +++ b/crates/egui/src/context.rs @@ -477,12 +477,11 @@ impl std::cmp::PartialEq for Context { impl Default for Context { fn default() -> Self { let s = Self(Arc::new(RwLock::new(ContextImpl::default()))); - let clone = s.clone(); s.write(|ctx| { ctx.force_embedding = true; ctx.render_sync = Some(Arc::new(Box::new( - move |_builder, _viewport_id, _parent_viewport_id, render| render(&clone), + move |ctx, _builder, _viewport_id, _parent_viewport_id, render| render(ctx), ))); }); @@ -2472,8 +2471,13 @@ impl Context { /// Look in `crates/eframe/native/run.rs` and search for ``set_render_sync_callback`` to see for what is used! pub fn set_render_sync_callback( &self, - callback: impl for<'a> Fn(ViewportBuilder, ViewportId, ViewportId, Box) - + Send + callback: impl for<'a> Fn( + &Context, + ViewportBuilder, + ViewportId, + ViewportId, + Box, + ) + Send + Sync + 'static, ) { @@ -2585,6 +2589,7 @@ impl Context { { let out = &mut out; render_sync.unwrap()( + self, viewport_builder, viewport_id, parent_viewport_id, diff --git a/crates/egui/src/viewport.rs b/crates/egui/src/viewport.rs index 2dfdae6fc..abe9c8ba4 100644 --- a/crates/egui/src/viewport.rs +++ b/crates/egui/src/viewport.rs @@ -24,7 +24,7 @@ impl ViewportId { /// This is used to render an async viewport pub type ViewportRender = dyn Fn(&Context) + Sync + Send; -pub type ViewportRenderSyncCallback = dyn for<'a> Fn(ViewportBuilder, ViewportId, ViewportId, Box) +pub type ViewportRenderSyncCallback = dyn for<'a> Fn(&Context, ViewportBuilder, ViewportId, ViewportId, Box) + Send + Sync;