1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
use bevy_window::{Window, WindowId}; use std::collections::HashMap; #[derive(Default)] pub struct WinitWindows { pub windows: HashMap<winit::window::WindowId, winit::window::Window>, pub window_id_to_winit: HashMap<WindowId, winit::window::WindowId>, pub winit_to_window_id: HashMap<winit::window::WindowId, WindowId>, } impl WinitWindows { pub fn create_window( &mut self, event_loop: &winit::event_loop::EventLoopWindowTarget<()>, window: &Window, ) { #[cfg(target_os = "windows")] let winit_window = { use winit::platform::windows::WindowBuilderExtWindows; winit::window::WindowBuilder::new() .with_drag_and_drop(false) .build(&event_loop) .unwrap() }; #[cfg(not(target_os = "windows"))] let winit_window = winit::window::Window::new(&event_loop).unwrap(); self.window_id_to_winit.insert(window.id, winit_window.id()); self.winit_to_window_id.insert(winit_window.id(), window.id); winit_window.set_title(&window.title); winit_window.set_inner_size(winit::dpi::PhysicalSize::new(window.width, window.height)); self.windows.insert(winit_window.id(), winit_window); } pub fn get_window(&self, id: WindowId) -> Option<&winit::window::Window> { self.window_id_to_winit .get(&id) .and_then(|id| self.windows.get(id)) } pub fn get_window_id(&self, id: winit::window::WindowId) -> Option<WindowId> { self.winit_to_window_id.get(&id).cloned() } }