1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-01 06:10:06 -04:00

Now Context will say what viewport_id and parent_viewport_id when calling render_sync to the backend

This commit is contained in:
Konkitoman
2023-08-01 15:26:33 +03:00
parent 1e6c1b55d3
commit b75fe9bbc4

View File

@@ -208,7 +208,7 @@ struct ContextImpl {
render_sync: Option< render_sync: Option<
Arc< Arc<
Box< Box<
dyn for<'a> Fn(ViewportBuilder, Box<dyn FnOnce(&Context, u64, u64) + 'a>) dyn for<'a> Fn(ViewportBuilder, u64, u64, Box<dyn FnOnce(&Context, u64, u64) + 'a>)
+ Send + Send
+ Sync, + Sync,
>, >,
@@ -417,9 +417,9 @@ impl Default for Context {
let clone = s.clone(); let clone = s.clone();
s.write(|ctx| { s.write(|ctx| {
ctx.render_sync = Some(Arc::new(Box::new(move |_builder, render| { ctx.render_sync = Some(Arc::new(Box::new(
render(&clone, 0, 0) move |_builder, _viewport_id, _parent_viewport_id, render| render(&clone, 0, 0),
}))) )))
}); });
s s
@@ -2063,7 +2063,7 @@ impl Context {
pub fn set_render_sync_callback( pub fn set_render_sync_callback(
&self, &self,
callback: impl for<'a> Fn(ViewportBuilder, Box<dyn FnOnce(&Context, u64, u64) + 'a>) callback: impl for<'a> Fn(ViewportBuilder, u64, u64, Box<dyn FnOnce(&Context, u64, u64) + 'a>)
+ Send + Send
+ Sync + Sync
+ 'static, + 'static,
@@ -2122,12 +2122,16 @@ impl Context {
func: impl FnOnce(&Context, u64, u64) -> T, func: impl FnOnce(&Context, u64, u64) -> T,
) -> T { ) -> T {
if self.is_desktop() { if self.is_desktop() {
let mut viewport_id = 0;
let mut parent_viewport_id = 0;
let render_sync = self.write(|ctx| { let render_sync = self.write(|ctx| {
if let Some(window) = ctx.viewports.get_mut(&viewport_builder.title) { if let Some(window) = ctx.viewports.get_mut(&viewport_builder.title) {
window.0 = viewport_builder.clone(); window.0 = viewport_builder.clone();
window.2 = ctx.current_rendering_viewport; window.2 = ctx.current_rendering_viewport;
window.3 = true; window.3 = true;
window.4 = None; window.4 = None;
viewport_id = window.1;
parent_viewport_id = window.2;
} else { } else {
let id = ctx.viewport_counter + 1; let id = ctx.viewport_counter + 1;
ctx.viewport_counter = id; ctx.viewport_counter = id;
@@ -2141,6 +2145,8 @@ impl Context {
None, None,
), ),
); );
viewport_id = id;
parent_viewport_id = ctx.current_rendering_viewport;
} }
ctx.render_sync.clone() ctx.render_sync.clone()
@@ -2150,6 +2156,8 @@ impl Context {
let out = &mut out; let out = &mut out;
render_sync.unwrap()( render_sync.unwrap()(
viewport_builder, viewport_builder,
viewport_id,
parent_viewport_id,
Box::new(move |context, viewport_id, parent_viewport_id| { Box::new(move |context, viewport_id, parent_viewport_id| {
*out = Some(func(context, viewport_id, parent_viewport_id)) *out = Some(func(context, viewport_id, parent_viewport_id))
}), }),