mirror of
https://github.com/emilk/egui.git
synced 2026-08-30 13:20:05 -04:00
No need to clone viewports
This commit is contained in:
@@ -1863,7 +1863,6 @@ mod wgpu_integration {
|
|||||||
|
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
pub struct Viewport {
|
pub struct Viewport {
|
||||||
window: Option<Rc<Window>>,
|
window: Option<Rc<Window>>,
|
||||||
|
|
||||||
@@ -2387,11 +2386,18 @@ mod wgpu_integration {
|
|||||||
let (viewport_ui_cb, raw_input) = {
|
let (viewport_ui_cb, raw_input) = {
|
||||||
let mut shared_lock = shared.borrow_mut();
|
let mut shared_lock = shared.borrow_mut();
|
||||||
|
|
||||||
let Some(viewport_id) = shared_lock.viewport_maps.get(&window_id).copied() else {
|
let SharedState {
|
||||||
|
viewports,
|
||||||
|
painter,
|
||||||
|
viewport_maps,
|
||||||
|
..
|
||||||
|
} = &mut *shared_lock;
|
||||||
|
|
||||||
|
let Some(viewport_id) = viewport_maps.get(&window_id).copied() else {
|
||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(viewport) = shared_lock.viewports.get(&viewport_id).cloned() else {
|
let Some(viewport) = viewports.get(&viewport_id) else {
|
||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2408,7 +2414,7 @@ mod wgpu_integration {
|
|||||||
|
|
||||||
// This is used to not render a viewport if is sync
|
// This is used to not render a viewport if is sync
|
||||||
if viewport_id != ViewportId::ROOT && viewport_ui_cb.is_none() {
|
if viewport_id != ViewportId::ROOT && viewport_ui_cb.is_none() {
|
||||||
if let Some(viewport) = shared_lock.viewports.get(&parent_id) {
|
if let Some(viewport) = viewports.get(parent_id) {
|
||||||
if let Some(window) = viewport.window.as_ref() {
|
if let Some(window) = viewport.window.as_ref() {
|
||||||
return EventResult::RepaintNext(window.id());
|
return EventResult::RepaintNext(window.id());
|
||||||
}
|
}
|
||||||
@@ -2416,20 +2422,17 @@ mod wgpu_integration {
|
|||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ =
|
let _ = pollster::block_on(painter.set_window(viewport_id, Some(window)));
|
||||||
pollster::block_on(shared_lock.painter.set_window(viewport_id, Some(&window)));
|
|
||||||
|
|
||||||
drop(shared_lock); // Release lock!
|
|
||||||
|
|
||||||
let raw_input = egui_winit.borrow_mut().as_mut().unwrap().take_egui_input(
|
let raw_input = egui_winit.borrow_mut().as_mut().unwrap().take_egui_input(
|
||||||
&window,
|
window,
|
||||||
ViewportIdPair {
|
ViewportIdPair {
|
||||||
this: viewport_id,
|
this: viewport_id,
|
||||||
parent: parent_id,
|
parent: *parent_id,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
integration.pre_update(&window);
|
integration.pre_update(window);
|
||||||
|
|
||||||
(viewport_ui_cb.clone(), raw_input)
|
(viewport_ui_cb.clone(), raw_input)
|
||||||
};
|
};
|
||||||
@@ -2449,7 +2452,7 @@ mod wgpu_integration {
|
|||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
};
|
};
|
||||||
|
|
||||||
let Some(viewport) = shared_lock.viewports.get(&viewport_id).cloned() else {
|
let Some(viewport) = shared_lock.viewports.get(&viewport_id) else {
|
||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2461,7 +2464,7 @@ mod wgpu_integration {
|
|||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
};
|
};
|
||||||
|
|
||||||
integration.post_update(app.as_mut(), &window);
|
integration.post_update(app.as_mut(), window);
|
||||||
|
|
||||||
let FullOutput {
|
let FullOutput {
|
||||||
platform_output,
|
platform_output,
|
||||||
@@ -2472,7 +2475,7 @@ mod wgpu_integration {
|
|||||||
} = full_output;
|
} = full_output;
|
||||||
|
|
||||||
integration.handle_platform_output(
|
integration.handle_platform_output(
|
||||||
&window,
|
window,
|
||||||
viewport_id,
|
viewport_id,
|
||||||
platform_output,
|
platform_output,
|
||||||
egui_winit.borrow_mut().as_mut().unwrap(),
|
egui_winit.borrow_mut().as_mut().unwrap(),
|
||||||
@@ -2497,8 +2500,8 @@ mod wgpu_integration {
|
|||||||
*screenshot_requested = false;
|
*screenshot_requested = false;
|
||||||
integration.frame.screenshot.set(screenshot);
|
integration.frame.screenshot.set(screenshot);
|
||||||
|
|
||||||
integration.post_rendering(app.as_mut(), &window);
|
integration.post_rendering(app.as_mut(), window);
|
||||||
integration.post_present(&window);
|
integration.post_present(window);
|
||||||
|
|
||||||
let SharedState {
|
let SharedState {
|
||||||
viewports,
|
viewports,
|
||||||
@@ -2741,15 +2744,11 @@ mod wgpu_integration {
|
|||||||
_ => {}
|
_ => {}
|
||||||
};
|
};
|
||||||
|
|
||||||
let event_response = if let Some((id, viewport)) =
|
let shared = running.shared.borrow();
|
||||||
viewport_id.and_then(|id| {
|
|
||||||
running
|
let event_response = if let Some((id, viewport)) = viewport_id
|
||||||
.shared
|
.and_then(|id| shared.viewports.get(&id).map(|viewport| (id, viewport)))
|
||||||
.borrow()
|
{
|
||||||
.viewports
|
|
||||||
.get(&id)
|
|
||||||
.map(|w| (id, w.clone()))
|
|
||||||
}) {
|
|
||||||
if let Some(egui_winit) = &mut *viewport.egui_winit.borrow_mut() {
|
if let Some(egui_winit) = &mut *viewport.egui_winit.borrow_mut() {
|
||||||
Some(running.integration.on_event(
|
Some(running.integration.on_event(
|
||||||
running.app.as_mut(),
|
running.app.as_mut(),
|
||||||
|
|||||||
Reference in New Issue
Block a user