diff --git a/crates/eframe/src/native/run.rs b/crates/eframe/src/native/run.rs index a8f0b851e..f27efca28 100644 --- a/crates/eframe/src/native/run.rs +++ b/crates/eframe/src/native/run.rs @@ -1237,16 +1237,16 @@ mod glow_integration { let last_builder = glutin.builders.entry(*id).or_insert(builder.clone()); let (commands, recreate) = changes_between_builders(builder, last_builder); drop(glutin); - if let Some(w) = glutin_ctx.read().viewports.get(id) { - let mut w = w.write(); + if let Some(window) = glutin_ctx.read().viewports.get(id) { + let mut window = window.write(); if recreate { - w.window = None; - w.gl_surface = None; - w.render = render.clone(); - w.pair.parent = *id; + window.window = None; + window.gl_surface = None; + window.render = render.clone(); + window.pair.parent = *id; } - if let Some(w) = w.window.clone() { - process_viewport_commands(commands, *id, None, &w); + if let Some(w) = window.window.clone() { + process_viewport_commands(commands, *id, None, &w.read()); } active_viewports_ids.push(*id); false @@ -2317,8 +2317,8 @@ mod wgpu_integration { // This is used to not render a viewport if is sync if viewport_id != ViewportId::MAIN && render.is_none() { if let Some(window) = running.viewports.read().get(&parent_id) { - if let Some(w) = window.window.as_ref() { - return EventResult::RepaintNext(w.read().id()); + if let Some(window) = window.window.as_ref() { + return EventResult::RepaintNext(window.read().id()); } } return EventResult::Wait; @@ -2386,9 +2386,9 @@ mod wgpu_integration { render, .. }| { - if let Some(w) = windows.write().get_mut(id) { - w.render = render.clone(); - w.parent_id = *parent; + if let Some(window) = windows.write().get_mut(id) { + window.render = render.clone(); + window.parent_id = *parent; active_viewports_ids.push(*id); false } else { diff --git a/crates/egui-winit/src/lib.rs b/crates/egui-winit/src/lib.rs index 9105f6713..7d120a004 100644 --- a/crates/egui-winit/src/lib.rs +++ b/crates/egui-winit/src/lib.rs @@ -976,10 +976,9 @@ pub fn process_viewport_commands( commands: Vec, viewport_id: ViewportId, focused: Option, - window: &Arc>, + window: &winit::window::Window, ) { use winit::window::ResizeDirection; - let win = window.read(); for command in commands { match command { @@ -988,18 +987,18 @@ pub fn process_viewport_commands( if let Some(focus) = focused { if focus == viewport_id { // TODO possible return the error to `egui::Context` - let _ = win.drag_window(); + let _ = window.drag_window(); } } } egui::ViewportCommand::InnerSize(size) => { let width = size.x.max(1.0); let height = size.y.max(1.0); - win.set_inner_size(LogicalSize::new(width, height)); + window.set_inner_size(LogicalSize::new(width, height)); } egui::ViewportCommand::Resize(top, bottom, right, left) => { // TODO posibile return the error to `egui::Context` - let _ = win.drag_resize_window(match (top, bottom, right, left) { + let _ = window.drag_resize_window(match (top, bottom, right, left) { (true, false, false, false) => ResizeDirection::North, (false, true, false, false) => ResizeDirection::South, (false, false, false, true) => ResizeDirection::West, @@ -1010,27 +1009,27 @@ pub fn process_viewport_commands( _ => ResizeDirection::East, }); } - ViewportCommand::Title(title) => win.set_title(&title), - ViewportCommand::Transparent(v) => win.set_transparent(v), - ViewportCommand::Visible(v) => win.set_visible(v), + ViewportCommand::Title(title) => window.set_title(&title), + ViewportCommand::Transparent(v) => window.set_transparent(v), + ViewportCommand::Visible(v) => window.set_visible(v), ViewportCommand::OuterPosition(pos) => { - win.set_outer_position(LogicalPosition::new(pos.x, pos.y)); + window.set_outer_position(LogicalPosition::new(pos.x, pos.y)); } ViewportCommand::MinInnerSize(s) => { - win.set_min_inner_size(s.map(|s| LogicalSize::new(s.x, s.y))); + window.set_min_inner_size(s.map(|s| LogicalSize::new(s.x, s.y))); } ViewportCommand::MaxInnerSize(s) => { - win.set_max_inner_size(s.map(|s| LogicalSize::new(s.x, s.y))); + window.set_max_inner_size(s.map(|s| LogicalSize::new(s.x, s.y))); } ViewportCommand::ResizeIncrements(s) => { - win.set_resize_increments(s.map(|s| LogicalSize::new(s.x, s.y))); + window.set_resize_increments(s.map(|s| LogicalSize::new(s.x, s.y))); } - ViewportCommand::Resizable(v) => win.set_resizable(v), + ViewportCommand::Resizable(v) => window.set_resizable(v), ViewportCommand::EnableButtons { close, minimized, maximize, - } => win.set_enabled_buttons( + } => window.set_enabled_buttons( if close { WindowButtons::CLOSE } else { @@ -1045,19 +1044,19 @@ pub fn process_viewport_commands( WindowButtons::empty() }, ), - ViewportCommand::Minimized(v) => win.set_minimized(v), - ViewportCommand::Maximized(v) => win.set_maximized(v), + ViewportCommand::Minimized(v) => window.set_minimized(v), + ViewportCommand::Maximized(v) => window.set_maximized(v), ViewportCommand::Fullscreen(v) => { - win.set_fullscreen(v.then_some(winit::window::Fullscreen::Borderless(None))); + window.set_fullscreen(v.then_some(winit::window::Fullscreen::Borderless(None))); } - ViewportCommand::Decorations(v) => win.set_decorations(v), - ViewportCommand::WindowLevel(o) => win.set_window_level(match o { + ViewportCommand::Decorations(v) => window.set_decorations(v), + ViewportCommand::WindowLevel(o) => window.set_window_level(match o { 1 => WindowLevel::AlwaysOnBottom, 2 => WindowLevel::AlwaysOnTop, _ => WindowLevel::Normal, }), ViewportCommand::WindowIcon(icon) => { - win.set_window_icon(icon.map(|icon| { + window.set_window_icon(icon.map(|icon| { winit::window::Icon::from_rgba( icon.as_raw().to_owned(), icon.width() as u32, @@ -1067,36 +1066,36 @@ pub fn process_viewport_commands( })); } ViewportCommand::IMEPosition(pos) => { - win.set_ime_position(LogicalPosition::new(pos.x, pos.y)); + window.set_ime_position(LogicalPosition::new(pos.x, pos.y)); } - ViewportCommand::IMEAllowed(v) => win.set_ime_allowed(v), - ViewportCommand::IMEPurpose(o) => win.set_ime_purpose(match o { + ViewportCommand::IMEAllowed(v) => window.set_ime_allowed(v), + ViewportCommand::IMEPurpose(o) => window.set_ime_purpose(match o { 1 => winit::window::ImePurpose::Password, 2 => winit::window::ImePurpose::Terminal, _ => winit::window::ImePurpose::Normal, }), - ViewportCommand::RequestUserAttention(o) => win.request_user_attention(o.map(|o| { + ViewportCommand::RequestUserAttention(o) => window.request_user_attention(o.map(|o| { if o == 1 { winit::window::UserAttentionType::Critical } else { winit::window::UserAttentionType::Informational } })), - ViewportCommand::SetTheme(o) => win.set_theme(o.map(|o| { + ViewportCommand::SetTheme(o) => window.set_theme(o.map(|o| { if o == 1 { winit::window::Theme::Dark } else { winit::window::Theme::Light } })), - ViewportCommand::ContentProtected(v) => win.set_content_protected(v), + ViewportCommand::ContentProtected(v) => window.set_content_protected(v), ViewportCommand::CursorPosition(pos) => { - if let Err(err) = win.set_cursor_position(LogicalPosition::new(pos.x, pos.y)) { + if let Err(err) = window.set_cursor_position(LogicalPosition::new(pos.x, pos.y)) { log::error!("{err}"); } } ViewportCommand::CursorGrab(o) => { - if let Err(err) = win.set_cursor_grab(match o { + if let Err(err) = window.set_cursor_grab(match o { 1 => CursorGrabMode::Confined, 2 => CursorGrabMode::Locked, _ => CursorGrabMode::None, @@ -1104,9 +1103,9 @@ pub fn process_viewport_commands( log::error!("{err}"); } } - ViewportCommand::CursorVisible(v) => win.set_cursor_visible(v), + ViewportCommand::CursorVisible(v) => window.set_cursor_visible(v), ViewportCommand::CursorHitTest(v) => { - if let Err(err) = win.set_cursor_hittest(v) { + if let Err(err) = window.set_cursor_hittest(v) { log::error!("Setting viewport CursorHitTest: {err}"); } } @@ -1121,7 +1120,7 @@ pub fn process_viewports_commands( ) { for (viewport_id, command) in commands { if let Some(window) = get_window(viewport_id) { - process_viewport_commands(vec![command], viewport_id, focused, &window); + process_viewport_commands(vec![command], viewport_id, focused, &window.read()); } } }