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

Remove another Rc-RefMut

This commit is contained in:
Emil Ernerfeldt
2023-11-13 15:46:25 +01:00
parent 39ccffbaf9
commit b179ddce86

View File

@@ -1866,7 +1866,7 @@ mod wgpu_integration {
pub struct Viewport { pub struct Viewport {
window: Option<Rc<Window>>, window: Option<Rc<Window>>,
egui_winit: Rc<RefCell<Option<egui_winit::State>>>, egui_winit: Option<egui_winit::State>,
/// `None` for sync viewports. /// `None` for sync viewports.
viewport_ui_cb: Option<Arc<ViewportUiCallback>>, viewport_ui_cb: Option<Arc<ViewportUiCallback>>,
@@ -1955,7 +1955,7 @@ mod wgpu_integration {
viewport_maps, viewport_maps,
painter, painter,
&mut viewport.window, &mut viewport.window,
&mut viewport.egui_winit.borrow_mut(), &mut viewport.egui_winit,
event_loop, event_loop,
); );
} }
@@ -2085,7 +2085,7 @@ mod wgpu_integration {
ViewportId::ROOT, ViewportId::ROOT,
Viewport { Viewport {
window: Some(Rc::new(window)), window: Some(Rc::new(window)),
egui_winit: Rc::new(RefCell::new(Some(egui_winit))), egui_winit: Some(egui_winit),
viewport_ui_cb: None, viewport_ui_cb: None,
parent_id: ViewportId::ROOT, parent_id: ViewportId::ROOT,
}, },
@@ -2224,7 +2224,7 @@ mod wgpu_integration {
window, egui_winit, .. window, egui_winit, ..
} = viewports.entry(id_pair.this).or_insert(Viewport { } = viewports.entry(id_pair.this).or_insert(Viewport {
window: None, window: None,
egui_winit: Rc::new(RefCell::new(None)), egui_winit: None,
viewport_ui_cb: None, viewport_ui_cb: None,
parent_id: id_pair.parent, parent_id: id_pair.parent,
}); });
@@ -2238,16 +2238,16 @@ mod wgpu_integration {
viewport_maps, viewport_maps,
painter, painter,
window, window,
&mut egui_winit.borrow_mut(), egui_winit,
event_loop, event_loop,
); );
} }
// Render sync viewport: // Render sync viewport:
let Some(viewport) = viewports.get(&id_pair.this) else { let Some(viewport) = viewports.get_mut(&id_pair.this) else {
return; return;
}; };
let Some(winit_state) = &mut *viewport.egui_winit.borrow_mut() else { let Some(winit_state) = &mut viewport.egui_winit else {
return; return;
}; };
let Some(window) = &viewport.window else { let Some(window) = &viewport.window else {
@@ -2273,10 +2273,10 @@ mod wgpu_integration {
viewports, painter, .. viewports, painter, ..
} = &mut *shared; } = &mut *shared;
let Some(viewport) = viewports.get(&id_pair.this) else { let Some(viewport) = viewports.get_mut(&id_pair.this) else {
return; return;
}; };
let Some(winit_state) = &mut *viewport.egui_winit.borrow_mut() else { let Some(winit_state) = &mut viewport.egui_winit else {
return; return;
}; };
let Some(window) = &viewport.window else { let Some(window) = &viewport.window else {
@@ -2401,6 +2401,20 @@ mod wgpu_integration {
return EventResult::Wait; return EventResult::Wait;
}; };
// This is used to not render a viewport if is sync
if viewport_id != ViewportId::ROOT && viewport.viewport_ui_cb.is_none() {
if let Some(viewport) = viewports.get(&viewport.parent_id) {
if let Some(window) = viewport.window.as_ref() {
return EventResult::RepaintNext(window.id());
}
}
return EventResult::Wait;
}
let Some(viewport) = viewports.get_mut(&viewport_id) else {
return EventResult::Wait;
};
let Viewport { let Viewport {
window, window,
egui_winit, egui_winit,
@@ -2412,19 +2426,9 @@ mod wgpu_integration {
return EventResult::Wait; return EventResult::Wait;
}; };
// This is used to not render a viewport if is sync
if viewport_id != ViewportId::ROOT && viewport_ui_cb.is_none() {
if let Some(viewport) = viewports.get(parent_id) {
if let Some(window) = viewport.window.as_ref() {
return EventResult::RepaintNext(window.id());
}
}
return EventResult::Wait;
}
let _ = pollster::block_on(painter.set_window(viewport_id, Some(window))); let _ = pollster::block_on(painter.set_window(viewport_id, Some(window)));
let raw_input = egui_winit.borrow_mut().as_mut().unwrap().take_egui_input( let raw_input = egui_winit.as_mut().unwrap().take_egui_input(
window, window,
ViewportIdPair { ViewportIdPair {
this: viewport_id, this: viewport_id,
@@ -2452,7 +2456,7 @@ mod wgpu_integration {
return EventResult::Wait; return EventResult::Wait;
}; };
let Some(viewport) = shared_lock.viewports.get(&viewport_id) else { let Some(viewport) = shared_lock.viewports.get_mut(&viewport_id) else {
return EventResult::Wait; return EventResult::Wait;
}; };
@@ -2478,7 +2482,7 @@ mod wgpu_integration {
window, window,
viewport_id, viewport_id,
platform_output, platform_output,
egui_winit.borrow_mut().as_mut().unwrap(), egui_winit.as_mut().unwrap(),
); );
let clipped_primitives = integration.egui_ctx.tessellate(shapes); let clipped_primitives = integration.egui_ctx.tessellate(shapes);
@@ -2548,7 +2552,7 @@ mod wgpu_integration {
if recreate { if recreate {
if let Some(viewport) = viewports.get_mut(&id_pair.this) { if let Some(viewport) = viewports.get_mut(&id_pair.this) {
viewport.window = None; viewport.window = None;
viewport.egui_winit.replace(None); viewport.egui_winit = None;
} }
} else if let Some(Viewport { } else if let Some(Viewport {
window: Some(window), window: Some(window),
@@ -2563,7 +2567,7 @@ mod wgpu_integration {
id_pair.this, id_pair.this,
Viewport { Viewport {
window: None, window: None,
egui_winit: Rc::new(RefCell::new(None)), egui_winit: None,
viewport_ui_cb, viewport_ui_cb,
parent_id: id_pair.parent, parent_id: id_pair.parent,
}, },
@@ -2744,12 +2748,13 @@ mod wgpu_integration {
_ => {} _ => {}
}; };
let shared = running.shared.borrow(); let mut shared = running.shared.borrow_mut();
let event_response = if let Some((id, viewport)) = viewport_id let event_response = if let Some((id, viewport)) =
.and_then(|id| shared.viewports.get(&id).map(|viewport| (id, viewport))) viewport_id.and_then(|id| {
{ shared.viewports.get_mut(&id).map(|viewport| (id, viewport))
if let Some(egui_winit) = &mut *viewport.egui_winit.borrow_mut() { }) {
if let Some(egui_winit) = &mut viewport.egui_winit {
Some(running.integration.on_event( Some(running.integration.on_event(
running.app.as_mut(), running.app.as_mut(),
event, event,
@@ -2787,13 +2792,17 @@ mod wgpu_integration {
accesskit_winit::ActionRequestEvent { request, window_id }, accesskit_winit::ActionRequestEvent { request, window_id },
)) => { )) => {
if let Some(running) = &mut self.running { if let Some(running) = &mut self.running {
let shared = running.shared.borrow(); let mut shared_lock = running.shared.borrow_mut();
if let Some(viewport) = shared let SharedState {
.viewport_maps viewport_maps,
viewports,
..
} = &mut *shared_lock;
if let Some(viewport) = viewport_maps
.get(window_id) .get(window_id)
.and_then(|id| shared.viewports.get(id)) .and_then(|id| viewports.get_mut(id))
{ {
if let Some(egui_winit) = &mut *viewport.egui_winit.borrow_mut() { if let Some(egui_winit) = &mut viewport.egui_winit {
egui_winit.on_accesskit_action_request(request.clone()); egui_winit.on_accesskit_action_request(request.clone());
} }
} }