1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 06:10:06 -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 glutin_ctx = Arc::new(RwLock::new(gl_window));
let egui_ctx = integration.egui_ctx.clone();
let glutin = glutin_ctx.clone(); let glutin = glutin_ctx.clone();
let _gl = gl.clone(); let _gl = gl.clone();
let painter = Arc::new(RwLock::new(painter)); let painter = Arc::new(RwLock::new(painter));
@@ -1036,7 +1035,7 @@ mod glow_integration {
// ## Sync Rendering // ## Sync Rendering
integration.egui_ctx.set_render_sync_callback( 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(){ if viewport_builder.icon.is_none(){
viewport_builder.icon = glutin.read().builders.get(&parent_id).and_then(|b|b.icon.clone()); 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( winit_state.handle_platform_output(
&win, &win,
&egui_ctx, egui_ctx,
output.platform_output, output.platform_output,
); );
} else { } else {
@@ -1298,11 +1297,6 @@ mod glow_integration {
.window .window
.clone(), .clone(),
); );
running
.integration
.read()
.egui_ctx
.set_render_sync_callback(|_, _, _, _| {});
running.app.write().on_exit(Some(&running.gl)); running.app.write().on_exit(Some(&running.gl));
running.painter.write().destroy(); running.painter.write().destroy();
} }
@@ -2064,7 +2058,6 @@ mod wgpu_integration {
); );
let _windows = windows.clone(); let _windows = windows.clone();
let egui_ctx = integration.egui_ctx.clone();
let time = integration.beginning; let time = integration.beginning;
let painter = Arc::new(RwLock::new(painter)); let painter = Arc::new(RwLock::new(painter));
let _painter = painter.clone(); let _painter = painter.clone();
@@ -2072,7 +2065,7 @@ mod wgpu_integration {
// ## Sync Rendering // ## Sync Rendering
integration.egui_ctx.set_render_sync_callback( 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 // 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(){ if _windows.read().get(&viewport_id).is_none(){
@@ -2124,7 +2117,7 @@ mod wgpu_integration {
winit_state.handle_platform_output( winit_state.handle_platform_output(
&win, &win,
&egui_ctx, egui_ctx,
output.platform_output, output.platform_output,
); );
} else { } else {
@@ -2203,12 +2196,6 @@ mod wgpu_integration {
.save(running.app.as_mut(), window.clone()); .save(running.app.as_mut(), window.clone());
} }
running
.integration
.read()
.egui_ctx
.set_render_sync_callback(|_, _, _, _| {});
#[cfg(feature = "glow")] #[cfg(feature = "glow")]
running.app.on_exit(None); running.app.on_exit(None);

View File

@@ -477,12 +477,11 @@ impl std::cmp::PartialEq for Context {
impl Default for Context { impl Default for Context {
fn default() -> Self { fn default() -> Self {
let s = Self(Arc::new(RwLock::new(ContextImpl::default()))); let s = Self(Arc::new(RwLock::new(ContextImpl::default())));
let clone = s.clone();
s.write(|ctx| { s.write(|ctx| {
ctx.force_embedding = true; ctx.force_embedding = true;
ctx.render_sync = Some(Arc::new(Box::new( 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! /// 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( pub fn set_render_sync_callback(
&self, &self,
callback: impl for<'a> Fn(ViewportBuilder, ViewportId, ViewportId, Box<dyn FnOnce(&Context) + 'a>) callback: impl for<'a> Fn(
+ Send &Context,
ViewportBuilder,
ViewportId,
ViewportId,
Box<dyn FnOnce(&Context) + 'a>,
) + Send
+ Sync + Sync
+ 'static, + 'static,
) { ) {
@@ -2585,6 +2589,7 @@ impl Context {
{ {
let out = &mut out; let out = &mut out;
render_sync.unwrap()( render_sync.unwrap()(
self,
viewport_builder, viewport_builder,
viewport_id, viewport_id,
parent_viewport_id, parent_viewport_id,

View File

@@ -24,7 +24,7 @@ impl ViewportId {
/// This is used to render an async viewport /// This is used to render an async viewport
pub type ViewportRender = dyn Fn(&Context) + Sync + Send; 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 + Send
+ Sync; + Sync;