1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-27 15:13:12 -04:00

Fix cyclical reference

Removed the last fix because there is not need for it now!
This commit is contained in:
Konkitoman
2023-09-11 18:50:17 +03:00
parent 956c1c3527
commit fc90a7e7c8
3 changed files with 14 additions and 22 deletions

View File

@@ -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);

View File

@@ -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<dyn FnOnce(&Context) + 'a>)
+ Send
callback: impl for<'a> Fn(
&Context,
ViewportBuilder,
ViewportId,
ViewportId,
Box<dyn FnOnce(&Context) + 'a>,
) + Send
+ Sync
+ 'static,
) {
@@ -2585,6 +2589,7 @@ impl Context {
{
let out = &mut out;
render_sync.unwrap()(
self,
viewport_builder,
viewport_id,
parent_viewport_id,

View File

@@ -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<dyn FnOnce(&Context) + 'a>)
pub type ViewportRenderSyncCallback = dyn for<'a> Fn(&Context, ViewportBuilder, ViewportId, ViewportId, Box<dyn FnOnce(&Context) + 'a>)
+ Send
+ Sync;