1
0
mirror of https://github.com/emilk/egui.git synced 2026-09-02 23:00:04 -04:00

Use less RwLocks and Arcs in public interfaces

This commit is contained in:
Emil Ernerfeldt
2023-11-01 18:43:13 +01:00
parent 521678b5d9
commit ec39563183
2 changed files with 30 additions and 34 deletions

View File

@@ -1583,17 +1583,21 @@ mod glow_integration {
Self::process_viewport_builders(&glutin, viewports); Self::process_viewport_builders(&glutin, viewports);
egui_winit::process_viewports_commands( for (viewport_id, command) in viewport_commands {
viewport_commands, if let Some(window) = glutin
*self.is_focused.read(),
|viewport_id| {
glutin
.read() .read()
.viewports .viewports
.get(&viewport_id) .get(&viewport_id)
.and_then(|w| w.read().window.clone()) .and_then(|w| w.read().window.clone())
}, {
egui_winit::process_viewport_commands(
vec![command],
viewport_id,
*self.is_focused.read(),
&window.read(),
); );
}
}
control_flow control_flow
} else { } else {
@@ -2431,16 +2435,20 @@ mod wgpu_integration {
active_viewports_ids.push(id); active_viewports_ids.push(id);
} }
egui_winit::process_viewports_commands( for (viewport_id, command) in viewport_commands {
viewport_commands, if let Some(window) = windows
*self.is_focused.read(),
|viewport_id| {
windows
.read() .read()
.get(&viewport_id) .get(&viewport_id)
.and_then(|w| w.window.clone()) .and_then(|w| w.window.clone())
}, {
egui_winit::process_viewport_commands(
vec![command],
viewport_id,
*self.is_focused.read(),
&window.read(),
); );
}
}
windows windows
.write() .write()

View File

@@ -16,7 +16,7 @@ pub use accesskit_winit;
pub use egui; pub use egui;
#[cfg(feature = "accesskit")] #[cfg(feature = "accesskit")]
use egui::accesskit; use egui::accesskit;
use egui::{mutex::RwLock, Pos2, Rect, Vec2, ViewportBuilder, ViewportCommand, ViewportId}; use egui::{Pos2, Rect, Vec2, ViewportBuilder, ViewportCommand, ViewportId};
pub use winit; pub use winit;
pub mod clipboard; pub mod clipboard;
@@ -1113,18 +1113,6 @@ pub fn process_viewport_commands(
} }
} }
pub fn process_viewports_commands(
commands: Vec<(ViewportId, ViewportCommand)>,
focused: Option<ViewportId>,
get_window: impl Fn(ViewportId) -> Option<Arc<RwLock<winit::window::Window>>>,
) {
for (viewport_id, command) in commands {
if let Some(window) = get_window(viewport_id) {
process_viewport_commands(vec![command], viewport_id, focused, &window.read());
}
}
}
pub fn create_winit_window_builder(builder: &ViewportBuilder) -> winit::window::WindowBuilder { pub fn create_winit_window_builder(builder: &ViewportBuilder) -> winit::window::WindowBuilder {
let mut window_builder = winit::window::WindowBuilder::new() let mut window_builder = winit::window::WindowBuilder::new()
.with_title(builder.title.clone()) .with_title(builder.title.clone())