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