mirror of
https://github.com/emilk/egui.git
synced 2026-08-30 13:20:05 -04:00
No need to wrap winit::Window in RefCell - it is already Sync
This commit is contained in:
@@ -91,10 +91,7 @@ trait WinitApp {
|
|||||||
|
|
||||||
fn integration(&self) -> Option<&EpiIntegration>;
|
fn integration(&self) -> Option<&EpiIntegration>;
|
||||||
|
|
||||||
fn window(
|
fn window(&self, window_id: winit::window::WindowId) -> Option<Rc<winit::window::Window>>;
|
||||||
&self,
|
|
||||||
window_id: winit::window::WindowId,
|
|
||||||
) -> Option<Rc<RefCell<winit::window::Window>>>;
|
|
||||||
|
|
||||||
fn window_id_from_viewport_id(&self, id: ViewportId) -> Option<winit::window::WindowId>;
|
fn window_id_from_viewport_id(&self, id: ViewportId) -> Option<winit::window::WindowId>;
|
||||||
|
|
||||||
@@ -275,7 +272,7 @@ fn run_and_return(
|
|||||||
if *repaint_time <= Instant::now() {
|
if *repaint_time <= Instant::now() {
|
||||||
if let Some(window) = winit_app.window(*window_id) {
|
if let Some(window) = winit_app.window(*window_id) {
|
||||||
log::trace!("request_redraw");
|
log::trace!("request_redraw");
|
||||||
window.borrow().request_redraw();
|
window.request_redraw();
|
||||||
} else {
|
} else {
|
||||||
windows_next_repaint_times.remove(window_id);
|
windows_next_repaint_times.remove(window_id);
|
||||||
}
|
}
|
||||||
@@ -408,7 +405,7 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
|
|||||||
if *repaint_time <= Instant::now() {
|
if *repaint_time <= Instant::now() {
|
||||||
if let Some(window) = winit_app.window(*window_id) {
|
if let Some(window) = winit_app.window(*window_id) {
|
||||||
log::trace!("request_redraw");
|
log::trace!("request_redraw");
|
||||||
window.borrow().request_redraw();
|
window.request_redraw();
|
||||||
} else {
|
} else {
|
||||||
windows_next_repaint_times.remove(window_id);
|
windows_next_repaint_times.remove(window_id);
|
||||||
}
|
}
|
||||||
@@ -434,7 +431,7 @@ fn run_and_exit(event_loop: EventLoop<UserEvent>, mut winit_app: impl WinitApp +
|
|||||||
.map(|window_id| {
|
.map(|window_id| {
|
||||||
winit_app
|
winit_app
|
||||||
.window(window_id)
|
.window(window_id)
|
||||||
.map(|window| window.borrow().request_redraw())
|
.map(|window| window.request_redraw())
|
||||||
});
|
});
|
||||||
|
|
||||||
control_flow.set_wait_until(next_repaint_time);
|
control_flow.set_wait_until(next_repaint_time);
|
||||||
@@ -488,7 +485,7 @@ mod glow_integration {
|
|||||||
|
|
||||||
struct Viewport {
|
struct Viewport {
|
||||||
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
gl_surface: Option<glutin::surface::Surface<glutin::surface::WindowSurface>>,
|
||||||
window: Option<Rc<RefCell<winit::window::Window>>>,
|
window: Option<Rc<winit::window::Window>>,
|
||||||
id_pair: ViewportIdPair,
|
id_pair: ViewportIdPair,
|
||||||
|
|
||||||
/// The user-callback that shows the ui.
|
/// The user-callback that shows the ui.
|
||||||
@@ -670,7 +667,7 @@ mod glow_integration {
|
|||||||
ViewportId::ROOT,
|
ViewportId::ROOT,
|
||||||
Rc::new(RefCell::new(Viewport {
|
Rc::new(RefCell::new(Viewport {
|
||||||
gl_surface: None,
|
gl_surface: None,
|
||||||
window: window.map(|w| Rc::new(RefCell::new(w))),
|
window: window.map(Rc::new),
|
||||||
egui_winit: None,
|
egui_winit: None,
|
||||||
viewport_ui_cb: None,
|
viewport_ui_cb: None,
|
||||||
id_pair: ViewportIdPair::ROOT,
|
id_pair: ViewportIdPair::ROOT,
|
||||||
@@ -745,17 +742,16 @@ mod glow_integration {
|
|||||||
// make sure we have a window or create one.
|
// make sure we have a window or create one.
|
||||||
let window = viewport.window.take().unwrap_or_else(|| {
|
let window = viewport.window.take().unwrap_or_else(|| {
|
||||||
log::debug!("window doesn't exist yet. creating one now with finalize_window");
|
log::debug!("window doesn't exist yet. creating one now with finalize_window");
|
||||||
Rc::new(RefCell::new(
|
Rc::new(
|
||||||
glutin_winit::finalize_window(
|
glutin_winit::finalize_window(
|
||||||
event_loop,
|
event_loop,
|
||||||
create_winit_window_builder(builder),
|
create_winit_window_builder(builder),
|
||||||
&self.gl_config,
|
&self.gl_config,
|
||||||
)
|
)
|
||||||
.expect("failed to finalize glutin window"),
|
.expect("failed to finalize glutin window"),
|
||||||
))
|
)
|
||||||
});
|
});
|
||||||
{
|
{
|
||||||
let window = window.borrow();
|
|
||||||
// surface attributes
|
// surface attributes
|
||||||
let (width_px, height_px): (u32, u32) = window.inner_size().into();
|
let (width_px, height_px): (u32, u32) = window.inner_size().into();
|
||||||
let width_px = std::num::NonZeroU32::new(width_px.at_least(1)).unwrap();
|
let width_px = std::num::NonZeroU32::new(width_px.at_least(1)).unwrap();
|
||||||
@@ -836,7 +832,7 @@ mod glow_integration {
|
|||||||
.expect("viewport doesn't exist")
|
.expect("viewport doesn't exist")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn window(&self, viewport_id: ViewportId) -> Rc<RefCell<winit::window::Window>> {
|
fn window(&self, viewport_id: ViewportId) -> Rc<winit::window::Window> {
|
||||||
self.viewport(viewport_id)
|
self.viewport(viewport_id)
|
||||||
.borrow()
|
.borrow()
|
||||||
.window
|
.window
|
||||||
@@ -920,11 +916,7 @@ mod glow_integration {
|
|||||||
viewport.gl_surface = None;
|
viewport.gl_surface = None;
|
||||||
} else if let Some(window) = &viewport.window {
|
} else if let Some(window) = &viewport.window {
|
||||||
let is_viewport_focused = false; // TODO
|
let is_viewport_focused = false; // TODO
|
||||||
process_viewport_commands(
|
process_viewport_commands(commands, window, is_viewport_focused);
|
||||||
commands,
|
|
||||||
&window.borrow(),
|
|
||||||
is_viewport_focused,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
active_viewports_ids.insert(id_pair.this);
|
active_viewports_ids.insert(id_pair.this);
|
||||||
false
|
false
|
||||||
@@ -1033,7 +1025,7 @@ mod glow_integration {
|
|||||||
let viewport = viewport.borrow();
|
let viewport = viewport.borrow();
|
||||||
if let Some(window) = &viewport.window {
|
if let Some(window) = &viewport.window {
|
||||||
epi_integration::apply_native_options_to_window(
|
epi_integration::apply_native_options_to_window(
|
||||||
&window.borrow(),
|
window,
|
||||||
native_options,
|
native_options,
|
||||||
window_settings,
|
window_settings,
|
||||||
);
|
);
|
||||||
@@ -1082,12 +1074,10 @@ mod glow_integration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let system_theme = system_theme(
|
let system_theme =
|
||||||
&glutin_ctx.window(ViewportId::ROOT).borrow(),
|
system_theme(&glutin_ctx.window(ViewportId::ROOT), &self.native_options);
|
||||||
&self.native_options,
|
|
||||||
);
|
|
||||||
let mut integration = epi_integration::EpiIntegration::new(
|
let mut integration = epi_integration::EpiIntegration::new(
|
||||||
&glutin_ctx.window(ViewportId::ROOT).borrow(),
|
&glutin_ctx.window(ViewportId::ROOT),
|
||||||
system_theme,
|
system_theme,
|
||||||
&self.app_name,
|
&self.app_name,
|
||||||
&self.native_options,
|
&self.native_options,
|
||||||
@@ -1127,7 +1117,7 @@ mod glow_integration {
|
|||||||
..
|
..
|
||||||
} = &mut *viewport.borrow_mut()
|
} = &mut *viewport.borrow_mut()
|
||||||
{
|
{
|
||||||
integration.init_accesskit(egui_winit, &window.borrow(), event_loop_proxy);
|
integration.init_accesskit(egui_winit, window, event_loop_proxy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let theme = system_theme.unwrap_or(self.native_options.default_theme);
|
let theme = system_theme.unwrap_or(self.native_options.default_theme);
|
||||||
@@ -1136,7 +1126,6 @@ mod glow_integration {
|
|||||||
if self.native_options.mouse_passthrough {
|
if self.native_options.mouse_passthrough {
|
||||||
if let Err(err) = glutin_ctx
|
if let Err(err) = glutin_ctx
|
||||||
.window(ViewportId::ROOT)
|
.window(ViewportId::ROOT)
|
||||||
.borrow()
|
|
||||||
.set_cursor_hittest(false)
|
.set_cursor_hittest(false)
|
||||||
{
|
{
|
||||||
log::warn!("set_cursor_hittest(false) failed: {err}");
|
log::warn!("set_cursor_hittest(false) failed: {err}");
|
||||||
@@ -1148,7 +1137,6 @@ mod glow_integration {
|
|||||||
|
|
||||||
let app = {
|
let app = {
|
||||||
let window = glutin_ctx.window(ViewportId::ROOT);
|
let window = glutin_ctx.window(ViewportId::ROOT);
|
||||||
let window = &mut *window.borrow_mut();
|
|
||||||
let mut app = app_creator(&epi::CreationContext {
|
let mut app = app_creator(&epi::CreationContext {
|
||||||
egui_ctx: integration.egui_ctx.clone(),
|
egui_ctx: integration.egui_ctx.clone(),
|
||||||
integration_info: integration.frame.info().clone(),
|
integration_info: integration.frame.info().clone(),
|
||||||
@@ -1165,7 +1153,7 @@ mod glow_integration {
|
|||||||
let viewport = &mut *viewport.borrow_mut();
|
let viewport = &mut *viewport.borrow_mut();
|
||||||
integration.warm_up(
|
integration.warm_up(
|
||||||
app.as_mut(),
|
app.as_mut(),
|
||||||
window,
|
&window,
|
||||||
viewport.egui_winit.as_mut().unwrap(),
|
viewport.egui_winit.as_mut().unwrap(),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1281,9 +1269,8 @@ mod glow_integration {
|
|||||||
let Some(window) = &viewport.window else {
|
let Some(window) = &viewport.window else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let window = window.borrow();
|
|
||||||
|
|
||||||
let mut input = winit_state.take_egui_input(&window, id_pair);
|
let mut input = winit_state.take_egui_input(window, id_pair);
|
||||||
input.time = Some(beginning.elapsed().as_secs_f64());
|
input.time = Some(beginning.elapsed().as_secs_f64());
|
||||||
|
|
||||||
// ---------------------------------------------------
|
// ---------------------------------------------------
|
||||||
@@ -1351,7 +1338,7 @@ mod glow_integration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
winit_state.handle_platform_output(&window, id_pair.this, egui_ctx, output.platform_output);
|
winit_state.handle_platform_output(window, id_pair.this, egui_ctx, output.platform_output);
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WinitApp for GlowWinitApp {
|
impl WinitApp for GlowWinitApp {
|
||||||
@@ -1378,7 +1365,7 @@ mod glow_integration {
|
|||||||
self.running.as_ref().map(|r| &r.integration)
|
self.running.as_ref().map(|r| &r.integration)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn window(&self, window_id: WindowId) -> Option<Rc<RefCell<winit::window::Window>>> {
|
fn window(&self, window_id: WindowId) -> Option<Rc<winit::window::Window>> {
|
||||||
let running = self.running.as_ref()?;
|
let running = self.running.as_ref()?;
|
||||||
let glutin_ctx = running.glutin_ctx.borrow();
|
let glutin_ctx = running.glutin_ctx.borrow();
|
||||||
let viewport_id = *glutin_ctx.viewport_maps.get(&window_id)?;
|
let viewport_id = *glutin_ctx.viewport_maps.get(&window_id)?;
|
||||||
@@ -1407,13 +1394,7 @@ mod glow_integration {
|
|||||||
|
|
||||||
running.integration.save(
|
running.integration.save(
|
||||||
running.app.as_mut(),
|
running.app.as_mut(),
|
||||||
Some(
|
Some(&running.glutin_ctx.borrow().window(ViewportId::ROOT)),
|
||||||
&running
|
|
||||||
.glutin_ctx
|
|
||||||
.borrow()
|
|
||||||
.window(ViewportId::ROOT)
|
|
||||||
.borrow(),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
running.app.on_exit(Some(&running.gl));
|
running.app.on_exit(Some(&running.gl));
|
||||||
running.painter.borrow_mut().destroy();
|
running.painter.borrow_mut().destroy();
|
||||||
@@ -1452,7 +1433,7 @@ mod glow_integration {
|
|||||||
if viewport.viewport_ui_cb.is_none() && viewport_id != ViewportId::ROOT {
|
if viewport.viewport_ui_cb.is_none() && viewport_id != ViewportId::ROOT {
|
||||||
if let Some(parent_viewport) = glutin.viewports.get(&viewport.id_pair.parent) {
|
if let Some(parent_viewport) = glutin.viewports.get(&viewport.id_pair.parent) {
|
||||||
if let Some(window) = parent_viewport.borrow().window.as_ref() {
|
if let Some(window) = parent_viewport.borrow().window.as_ref() {
|
||||||
return EventResult::RepaintNext(window.borrow().id());
|
return EventResult::RepaintNext(window.id());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
@@ -1472,11 +1453,11 @@ mod glow_integration {
|
|||||||
let viewport = glutin.borrow().viewport(viewport_id);
|
let viewport = glutin.borrow().viewport(viewport_id);
|
||||||
let window = glutin.borrow().window(viewport_id);
|
let window = glutin.borrow().window(viewport_id);
|
||||||
|
|
||||||
let screen_size_in_pixels: [u32; 2] = window.borrow().inner_size().into();
|
let screen_size_in_pixels: [u32; 2] = window.inner_size().into();
|
||||||
|
|
||||||
{
|
{
|
||||||
let viewport = &mut *viewport.borrow_mut();
|
let viewport = &mut *viewport.borrow_mut();
|
||||||
let window = window.borrow();
|
|
||||||
let egui_winit = viewport.egui_winit.as_mut().unwrap();
|
let egui_winit = viewport.egui_winit.as_mut().unwrap();
|
||||||
let raw_input = egui_winit.take_egui_input(&window, viewport.id_pair);
|
let raw_input = egui_winit.take_egui_input(&window, viewport.id_pair);
|
||||||
|
|
||||||
@@ -1539,10 +1520,8 @@ mod glow_integration {
|
|||||||
integration.frame.screenshot.set(Some(screenshot));
|
integration.frame.screenshot.set(Some(screenshot));
|
||||||
}
|
}
|
||||||
|
|
||||||
integration.post_rendering(
|
integration
|
||||||
app.as_mut(),
|
.post_rendering(app.as_mut(), viewport.borrow().window.as_ref().unwrap());
|
||||||
&viewport.borrow().window.as_ref().unwrap().borrow(),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
@@ -1564,7 +1543,7 @@ mod glow_integration {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
integration.post_present(&viewport.borrow().window.as_ref().unwrap().borrow());
|
integration.post_present(viewport.borrow().window.as_ref().unwrap());
|
||||||
|
|
||||||
#[cfg(feature = "__screenshot")]
|
#[cfg(feature = "__screenshot")]
|
||||||
// give it time to settle:
|
// give it time to settle:
|
||||||
@@ -1596,9 +1575,9 @@ mod glow_integration {
|
|||||||
EventResult::Wait
|
EventResult::Wait
|
||||||
};
|
};
|
||||||
|
|
||||||
integration.maybe_autosave(app.as_mut(), Some(&window.borrow()));
|
integration.maybe_autosave(app.as_mut(), Some(&window));
|
||||||
|
|
||||||
if window.borrow().is_minimized() == Some(true) {
|
if window.is_minimized() == Some(true) {
|
||||||
// On Mac, a minimized Window uses up all CPU:
|
// On Mac, a minimized Window uses up all CPU:
|
||||||
// https://github.com/emilk/egui/issues/325
|
// https://github.com/emilk/egui/issues/325
|
||||||
crate::profile_scope!("minimized_sleep");
|
crate::profile_scope!("minimized_sleep");
|
||||||
@@ -1614,7 +1593,7 @@ mod glow_integration {
|
|||||||
let is_viewport_focused = self.focused_viewport == Some(viewport_id);
|
let is_viewport_focused = self.focused_viewport == Some(viewport_id);
|
||||||
egui_winit::process_viewport_commands(
|
egui_winit::process_viewport_commands(
|
||||||
std::iter::once(command),
|
std::iter::once(command),
|
||||||
&window.borrow(),
|
window,
|
||||||
is_viewport_focused,
|
is_viewport_focused,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1850,7 +1829,7 @@ mod wgpu_integration {
|
|||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct Viewport {
|
pub struct Viewport {
|
||||||
window: Option<Rc<RefCell<winit::window::Window>>>,
|
window: Option<Rc<winit::window::Window>>,
|
||||||
|
|
||||||
egui_winit: Rc<RefCell<Option<egui_winit::State>>>,
|
egui_winit: Rc<RefCell<Option<egui_winit::State>>>,
|
||||||
|
|
||||||
@@ -1953,13 +1932,7 @@ mod wgpu_integration {
|
|||||||
let mut shared = running.shared.borrow_mut();
|
let mut shared = running.shared.borrow_mut();
|
||||||
if let Some(Viewport { window, .. }) = shared.viewports.get(&id) {
|
if let Some(Viewport { window, .. }) = shared.viewports.get(&id) {
|
||||||
let window = window.clone();
|
let window = window.clone();
|
||||||
if let Some(window) = &window {
|
return pollster::block_on(shared.painter.set_window(id, window.as_deref()));
|
||||||
return pollster::block_on(
|
|
||||||
shared.painter.set_window(id, Some(&*window.borrow())),
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
return pollster::block_on(shared.painter.set_window(id, None));
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
@@ -2074,7 +2047,7 @@ mod wgpu_integration {
|
|||||||
viewports.insert(
|
viewports.insert(
|
||||||
ViewportId::ROOT,
|
ViewportId::ROOT,
|
||||||
Viewport {
|
Viewport {
|
||||||
window: Some(Rc::new(RefCell::new(window))),
|
window: Some(Rc::new(window)),
|
||||||
egui_winit: Rc::new(RefCell::new(Some(egui_winit))),
|
egui_winit: Rc::new(RefCell::new(Some(egui_winit))),
|
||||||
viewport_ui_cb: None,
|
viewport_ui_cb: None,
|
||||||
parent_id: ViewportId::ROOT,
|
parent_id: ViewportId::ROOT,
|
||||||
@@ -2156,7 +2129,7 @@ mod wgpu_integration {
|
|||||||
builder: &ViewportBuilder,
|
builder: &ViewportBuilder,
|
||||||
windows_id: &mut HashMap<winit::window::WindowId, ViewportId>,
|
windows_id: &mut HashMap<winit::window::WindowId, ViewportId>,
|
||||||
painter: &mut egui_wgpu::winit::Painter,
|
painter: &mut egui_wgpu::winit::Painter,
|
||||||
window: &mut Option<Rc<RefCell<winit::window::Window>>>,
|
window: &mut Option<Rc<winit::window::Window>>,
|
||||||
egui_winit: &mut Option<egui_winit::State>,
|
egui_winit: &mut Option<egui_winit::State>,
|
||||||
event_loop: &EventLoopWindowTarget<UserEvent>,
|
event_loop: &EventLoopWindowTarget<UserEvent>,
|
||||||
) {
|
) {
|
||||||
@@ -2175,7 +2148,7 @@ mod wgpu_integration {
|
|||||||
painter.max_texture_side(),
|
painter.max_texture_side(),
|
||||||
));
|
));
|
||||||
|
|
||||||
*window = Some(Rc::new(RefCell::new(new_window)));
|
*window = Some(Rc::new(new_window));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2244,7 +2217,7 @@ mod wgpu_integration {
|
|||||||
let Some(window) = viewport.window else {
|
let Some(window) = viewport.window else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let window = window.borrow();
|
|
||||||
let mut input = winit_state.take_egui_input(&window, id_pair);
|
let mut input = winit_state.take_egui_input(&window, id_pair);
|
||||||
input.time = Some(beginning.elapsed().as_secs_f64());
|
input.time = Some(beginning.elapsed().as_secs_f64());
|
||||||
input
|
input
|
||||||
@@ -2272,7 +2245,6 @@ mod wgpu_integration {
|
|||||||
let Some(window) = viewport.window else {
|
let Some(window) = viewport.window else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
let window = window.borrow();
|
|
||||||
|
|
||||||
if let Err(err) = pollster::block_on(painter.set_window(id_pair.this, Some(&window))) {
|
if let Err(err) = pollster::block_on(painter.set_window(id_pair.this, Some(&window))) {
|
||||||
log::error!(
|
log::error!(
|
||||||
@@ -2315,10 +2287,7 @@ mod wgpu_integration {
|
|||||||
self.running.as_ref().map(|r| &r.integration)
|
self.running.as_ref().map(|r| &r.integration)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn window(
|
fn window(&self, window_id: winit::window::WindowId) -> Option<Rc<winit::window::Window>> {
|
||||||
&self,
|
|
||||||
window_id: winit::window::WindowId,
|
|
||||||
) -> Option<Rc<RefCell<winit::window::Window>>> {
|
|
||||||
self.running
|
self.running
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.and_then(|r| {
|
.and_then(|r| {
|
||||||
@@ -2337,7 +2306,7 @@ mod wgpu_integration {
|
|||||||
.borrow()
|
.borrow()
|
||||||
.viewports
|
.viewports
|
||||||
.get(&id)
|
.get(&id)
|
||||||
.and_then(|w| w.window.as_ref().map(|w| w.borrow().id()))
|
.and_then(|w| w.window.as_ref().map(|w| w.id()))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2347,10 +2316,9 @@ mod wgpu_integration {
|
|||||||
|
|
||||||
let mut shared = running.shared.borrow_mut();
|
let mut shared = running.shared.borrow_mut();
|
||||||
if let Some(Viewport { window, .. }) = shared.viewports.get(&ViewportId::ROOT) {
|
if let Some(Viewport { window, .. }) = shared.viewports.get(&ViewportId::ROOT) {
|
||||||
running.integration.save(
|
running
|
||||||
running.app.as_mut(),
|
.integration
|
||||||
window.as_ref().map(|w| w.borrow()).as_deref(),
|
.save(running.app.as_mut(), window.as_deref());
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "glow")]
|
#[cfg(feature = "glow")]
|
||||||
@@ -2412,22 +2380,19 @@ mod wgpu_integration {
|
|||||||
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) = shared_lock.viewports.get(&parent_id) {
|
||||||
if let Some(window) = viewport.window.as_ref() {
|
if let Some(window) = viewport.window.as_ref() {
|
||||||
return EventResult::RepaintNext(window.borrow().id());
|
return EventResult::RepaintNext(window.id());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
}
|
}
|
||||||
|
|
||||||
let _ = pollster::block_on(
|
let _ =
|
||||||
shared_lock
|
pollster::block_on(shared_lock.painter.set_window(viewport_id, Some(&window)));
|
||||||
.painter
|
|
||||||
.set_window(viewport_id, Some(&window.borrow())),
|
|
||||||
);
|
|
||||||
|
|
||||||
drop(shared_lock); // Release lock!
|
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.borrow(),
|
&window,
|
||||||
ViewportIdPair {
|
ViewportIdPair {
|
||||||
this: viewport_id,
|
this: viewport_id,
|
||||||
parent: parent_id,
|
parent: parent_id,
|
||||||
@@ -2444,17 +2409,12 @@ mod wgpu_integration {
|
|||||||
shapes,
|
shapes,
|
||||||
viewports: out_viewports,
|
viewports: out_viewports,
|
||||||
viewport_commands,
|
viewport_commands,
|
||||||
} = integration.update(
|
} = integration.update(app.as_mut(), &window, viewport_ui_cb.as_deref(), raw_input);
|
||||||
app.as_mut(),
|
|
||||||
&window.borrow(),
|
|
||||||
viewport_ui_cb.as_deref(),
|
|
||||||
raw_input,
|
|
||||||
);
|
|
||||||
|
|
||||||
// ------------------------------------------------------------
|
// ------------------------------------------------------------
|
||||||
|
|
||||||
integration.handle_platform_output(
|
integration.handle_platform_output(
|
||||||
&window.borrow(),
|
&window,
|
||||||
viewport_id,
|
viewport_id,
|
||||||
platform_output,
|
platform_output,
|
||||||
egui_winit.borrow_mut().as_mut().unwrap(),
|
egui_winit.borrow_mut().as_mut().unwrap(),
|
||||||
@@ -2479,8 +2439,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.borrow());
|
integration.post_rendering(app.as_mut(), &window);
|
||||||
integration.post_present(&window.borrow());
|
integration.post_present(&window);
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut shared = shared.borrow_mut();
|
let mut shared = shared.borrow_mut();
|
||||||
@@ -2537,7 +2497,7 @@ mod wgpu_integration {
|
|||||||
}) = viewports.get(&id_pair.this)
|
}) = viewports.get(&id_pair.this)
|
||||||
{
|
{
|
||||||
let is_viewport_focused = false; // TODO
|
let is_viewport_focused = false; // TODO
|
||||||
process_viewport_commands(commands, &window.borrow(), is_viewport_focused);
|
process_viewport_commands(commands, window, is_viewport_focused);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
viewports.insert(
|
viewports.insert(
|
||||||
@@ -2560,7 +2520,7 @@ mod wgpu_integration {
|
|||||||
let is_viewport_focused = self.focused_viewport == Some(viewport_id);
|
let is_viewport_focused = self.focused_viewport == Some(viewport_id);
|
||||||
egui_winit::process_viewport_commands(
|
egui_winit::process_viewport_commands(
|
||||||
std::iter::once(command),
|
std::iter::once(command),
|
||||||
&window.borrow(),
|
&window,
|
||||||
is_viewport_focused,
|
is_viewport_focused,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2580,9 +2540,9 @@ mod wgpu_integration {
|
|||||||
else {
|
else {
|
||||||
return EventResult::Wait;
|
return EventResult::Wait;
|
||||||
};
|
};
|
||||||
integration.maybe_autosave(app.as_mut(), Some(&*window.borrow()));
|
integration.maybe_autosave(app.as_mut(), Some(&*window));
|
||||||
|
|
||||||
if window.borrow().is_minimized() == Some(true) {
|
if window.is_minimized() == Some(true) {
|
||||||
// On Mac, a minimized Window uses up all CPU:
|
// On Mac, a minimized Window uses up all CPU:
|
||||||
// https://github.com/emilk/egui/issues/325
|
// https://github.com/emilk/egui/issues/325
|
||||||
crate::profile_scope!("minimized_sleep");
|
crate::profile_scope!("minimized_sleep");
|
||||||
@@ -2642,7 +2602,6 @@ mod wgpu_integration {
|
|||||||
.window
|
.window
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.borrow()
|
|
||||||
.id(),
|
.id(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user