From 9749e1ea6d85c20ffafab88963115899a5f3bc27 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Thu, 2 Nov 2023 09:05:19 +0100 Subject: [PATCH] =?UTF-8?q?Move=20Rc>=20outsid?= =?UTF-8?q?e=20of=20struct=20Viewports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- crates/eframe/src/native/run.rs | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index 5dcd3296e..79dac7b60 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -1867,17 +1867,23 @@ mod wgpu_integration { parent_id: ViewportId, } - #[derive(Clone)] - pub struct Viewports(Rc>>); + #[derive(Clone, Default)] + pub struct Viewports(HashMap); impl std::ops::Deref for Viewports { - type Target = Rc>>; + type Target = HashMap; 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>, integration: Rc>, app: Box, - viewports: Viewports, + viewports: Rc>, builders: Rc>>, viewport_maps: Rc>>, } @@ -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, - viewports: &Viewports, + viewports: &mut Viewports, builders: &RefCell>, time: Instant, painter: &RefCell, viewport_maps: &RefCell>, ) { // 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 };