1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-27 15:13:12 -04:00

Move Rc<RefCell<……>> outside of struct Viewports

This commit is contained in:
Emil Ernerfeldt
2023-11-02 09:05:19 +01:00
parent 76d3873b47
commit 9749e1ea6d

View File

@@ -1867,17 +1867,23 @@ mod wgpu_integration {
parent_id: ViewportId,
}
#[derive(Clone)]
pub struct Viewports(Rc<RefCell<HashMap<ViewportId, Viewport>>>);
#[derive(Clone, Default)]
pub struct Viewports(HashMap<ViewportId, Viewport>);
impl std::ops::Deref for Viewports {
type Target = Rc<RefCell<HashMap<ViewportId, Viewport>>>;
type Target = HashMap<ViewportId, Viewport>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl std::ops::DerefMut for Viewports {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
/// State that is initialized when the application is first starts running via
/// a Resumed event. On Android this ensures that any graphics state is only
/// initialized once the application has an associated `SurfaceView`.
@@ -1885,7 +1891,7 @@ mod wgpu_integration {
painter: Rc<RefCell<egui_wgpu::winit::Painter>>,
integration: Rc<RefCell<epi_integration::EpiIntegration>>,
app: Box<dyn epi::App>,
viewports: Viewports,
viewports: Rc<RefCell<Viewports>>,
builders: Rc<RefCell<HashMap<ViewportId, ViewportBuilder>>>,
viewport_maps: Rc<RefCell<HashMap<winit::window::WindowId, ViewportId>>>,
}
@@ -2120,7 +2126,7 @@ mod wgpu_integration {
viewport_maps.insert(window.id(), ViewportId::MAIN);
let viewport_maps = Rc::new(RefCell::new(viewport_maps));
let viewports = Viewports(Rc::new(RefCell::new(HashMap::default())));
let viewports = Rc::new(RefCell::new(Viewports::default()));
viewports.borrow_mut().insert(
ViewportId::MAIN,
Viewport {
@@ -2151,7 +2157,7 @@ mod wgpu_integration {
viewport_builder,
pair,
render,
&c_viewports,
&mut c_viewports.borrow_mut(),
&c_builders,
c_time,
&c_painter,
@@ -2179,16 +2185,15 @@ mod wgpu_integration {
mut viewport_builder: ViewportBuilder,
pair: ViewportIdPair,
render: Box<dyn FnOnce(&egui::Context) + '_>,
viewports: &Viewports,
viewports: &mut Viewports,
builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>,
time: Instant,
painter: &RefCell<egui_wgpu::winit::Painter>,
viewport_maps: &RefCell<HashMap<winit::window::WindowId, ViewportId>>,
) {
// Creating a new native window if is needed
if viewports.borrow().get(&pair).is_none() {
if viewports.get(&pair).is_none() {
let mut builders = builders.borrow_mut();
let mut viewports = viewports.borrow_mut();
{
if viewport_builder.icon.is_none() && builders.get(&pair).is_none() {
@@ -2230,7 +2235,7 @@ mod wgpu_integration {
// render sync viewport
let window = viewports.borrow().get(&pair).cloned();
let window = viewports.get(&pair).cloned();
let Some(window) = window else { return };
let output;
let Some(winit_state) = &mut *window.state.borrow_mut() else { return };