mirror of
https://github.com/emilk/egui.git
synced 2026-09-01 22:30:03 -04:00
Move Rc<RefCell<……>> outside of struct Viewports
This commit is contained in:
@@ -1867,17 +1867,23 @@ mod wgpu_integration {
|
|||||||
parent_id: ViewportId,
|
parent_id: ViewportId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Default)]
|
||||||
pub struct Viewports(Rc<RefCell<HashMap<ViewportId, Viewport>>>);
|
pub struct Viewports(HashMap<ViewportId, Viewport>);
|
||||||
|
|
||||||
impl std::ops::Deref for Viewports {
|
impl std::ops::Deref for Viewports {
|
||||||
type Target = Rc<RefCell<HashMap<ViewportId, Viewport>>>;
|
type Target = HashMap<ViewportId, Viewport>;
|
||||||
|
|
||||||
fn deref(&self) -> &Self::Target {
|
fn deref(&self) -> &Self::Target {
|
||||||
&self.0
|
&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
|
/// 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
|
/// a Resumed event. On Android this ensures that any graphics state is only
|
||||||
/// initialized once the application has an associated `SurfaceView`.
|
/// initialized once the application has an associated `SurfaceView`.
|
||||||
@@ -1885,7 +1891,7 @@ mod wgpu_integration {
|
|||||||
painter: Rc<RefCell<egui_wgpu::winit::Painter>>,
|
painter: Rc<RefCell<egui_wgpu::winit::Painter>>,
|
||||||
integration: Rc<RefCell<epi_integration::EpiIntegration>>,
|
integration: Rc<RefCell<epi_integration::EpiIntegration>>,
|
||||||
app: Box<dyn epi::App>,
|
app: Box<dyn epi::App>,
|
||||||
viewports: Viewports,
|
viewports: Rc<RefCell<Viewports>>,
|
||||||
builders: Rc<RefCell<HashMap<ViewportId, ViewportBuilder>>>,
|
builders: Rc<RefCell<HashMap<ViewportId, ViewportBuilder>>>,
|
||||||
viewport_maps: Rc<RefCell<HashMap<winit::window::WindowId, ViewportId>>>,
|
viewport_maps: Rc<RefCell<HashMap<winit::window::WindowId, ViewportId>>>,
|
||||||
}
|
}
|
||||||
@@ -2120,7 +2126,7 @@ mod wgpu_integration {
|
|||||||
viewport_maps.insert(window.id(), ViewportId::MAIN);
|
viewport_maps.insert(window.id(), ViewportId::MAIN);
|
||||||
let viewport_maps = Rc::new(RefCell::new(viewport_maps));
|
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(
|
viewports.borrow_mut().insert(
|
||||||
ViewportId::MAIN,
|
ViewportId::MAIN,
|
||||||
Viewport {
|
Viewport {
|
||||||
@@ -2151,7 +2157,7 @@ mod wgpu_integration {
|
|||||||
viewport_builder,
|
viewport_builder,
|
||||||
pair,
|
pair,
|
||||||
render,
|
render,
|
||||||
&c_viewports,
|
&mut c_viewports.borrow_mut(),
|
||||||
&c_builders,
|
&c_builders,
|
||||||
c_time,
|
c_time,
|
||||||
&c_painter,
|
&c_painter,
|
||||||
@@ -2179,16 +2185,15 @@ mod wgpu_integration {
|
|||||||
mut viewport_builder: ViewportBuilder,
|
mut viewport_builder: ViewportBuilder,
|
||||||
pair: ViewportIdPair,
|
pair: ViewportIdPair,
|
||||||
render: Box<dyn FnOnce(&egui::Context) + '_>,
|
render: Box<dyn FnOnce(&egui::Context) + '_>,
|
||||||
viewports: &Viewports,
|
viewports: &mut Viewports,
|
||||||
builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>,
|
builders: &RefCell<HashMap<ViewportId, ViewportBuilder>>,
|
||||||
time: Instant,
|
time: Instant,
|
||||||
painter: &RefCell<egui_wgpu::winit::Painter>,
|
painter: &RefCell<egui_wgpu::winit::Painter>,
|
||||||
viewport_maps: &RefCell<HashMap<winit::window::WindowId, ViewportId>>,
|
viewport_maps: &RefCell<HashMap<winit::window::WindowId, ViewportId>>,
|
||||||
) {
|
) {
|
||||||
// Creating a new native window if is needed
|
// 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 builders = builders.borrow_mut();
|
||||||
let mut viewports = viewports.borrow_mut();
|
|
||||||
|
|
||||||
{
|
{
|
||||||
if viewport_builder.icon.is_none() && builders.get(&pair).is_none() {
|
if viewport_builder.icon.is_none() && builders.get(&pair).is_none() {
|
||||||
@@ -2230,7 +2235,7 @@ mod wgpu_integration {
|
|||||||
|
|
||||||
// render sync viewport
|
// render sync viewport
|
||||||
|
|
||||||
let window = viewports.borrow().get(&pair).cloned();
|
let window = viewports.get(&pair).cloned();
|
||||||
let Some(window) = window else { return };
|
let Some(window) = window else { return };
|
||||||
let output;
|
let output;
|
||||||
let Some(winit_state) = &mut *window.state.borrow_mut() else { return };
|
let Some(winit_state) = &mut *window.state.borrow_mut() else { return };
|
||||||
|
|||||||
Reference in New Issue
Block a user