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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
mod event; mod system; mod window; mod windows; use bevy_ecs::system::IntoSystem; pub use event::*; pub use system::*; pub use window::*; pub use windows::*; pub mod prelude { pub use crate::{ CursorEntered, CursorLeft, CursorMoved, FileDragAndDrop, ReceivedCharacter, Window, WindowDescriptor, WindowMoved, Windows, }; } use bevy_app::{prelude::*, Events}; pub struct WindowPlugin { pub add_primary_window: bool, pub exit_on_close: bool, } impl Default for WindowPlugin { fn default() -> Self { WindowPlugin { add_primary_window: true, exit_on_close: true, } } } impl Plugin for WindowPlugin { fn build(&self, app: &mut AppBuilder) { app.add_event::<WindowResized>() .add_event::<CreateWindow>() .add_event::<WindowCreated>() .add_event::<WindowCloseRequested>() .add_event::<CloseWindow>() .add_event::<CursorMoved>() .add_event::<CursorEntered>() .add_event::<CursorLeft>() .add_event::<ReceivedCharacter>() .add_event::<WindowFocused>() .add_event::<WindowScaleFactorChanged>() .add_event::<WindowBackendScaleFactorChanged>() .add_event::<FileDragAndDrop>() .add_event::<WindowMoved>() .init_resource::<Windows>(); if self.add_primary_window { let world = app.world_mut(); let window_descriptor = world .get_resource::<WindowDescriptor>() .map(|descriptor| (*descriptor).clone()) .unwrap_or_else(WindowDescriptor::default); let mut create_window_event = world.get_resource_mut::<Events<CreateWindow>>().unwrap(); create_window_event.send(CreateWindow { id: WindowId::primary(), descriptor: window_descriptor, }); } if self.exit_on_close { app.add_system(exit_on_window_close_system.system()); } } }