@@ -26,14 +26,6 @@ use winit::{
26
26
} ;
27
27
28
28
use winit:: dpi:: LogicalSize ;
29
- #[ cfg( any(
30
- target_os = "linux" ,
31
- target_os = "dragonfly" ,
32
- target_os = "freebsd" ,
33
- target_os = "netbsd" ,
34
- target_os = "openbsd"
35
- ) ) ]
36
- use winit:: platform:: unix:: EventLoopExtUnix ;
37
29
38
30
#[ derive( Default ) ]
39
31
pub struct WinitPlugin ;
@@ -43,6 +35,9 @@ impl Plugin for WinitPlugin {
43
35
app. init_resource :: < WinitWindows > ( )
44
36
. set_runner ( winit_runner)
45
37
. add_system_to_stage ( CoreStage :: PostUpdate , change_window. exclusive_system ( ) ) ;
38
+ let event_loop = EventLoop :: new ( ) ;
39
+ handle_initial_window_events ( & mut app. world , & event_loop) ;
40
+ app. insert_non_send_resource ( event_loop) ;
46
41
}
47
42
}
48
43
@@ -207,21 +202,22 @@ where
207
202
}
208
203
209
204
pub fn winit_runner ( app : App ) {
210
- winit_runner_with ( app, EventLoop :: new ( ) ) ;
211
- }
212
-
213
- #[ cfg( any(
214
- target_os = "linux" ,
215
- target_os = "dragonfly" ,
216
- target_os = "freebsd" ,
217
- target_os = "netbsd" ,
218
- target_os = "openbsd"
219
- ) ) ]
220
- pub fn winit_runner_any_thread ( app : App ) {
221
- winit_runner_with ( app, EventLoop :: new_any_thread ( ) ) ;
205
+ winit_runner_with ( app) ;
222
206
}
223
207
224
- pub fn winit_runner_with ( mut app : App , mut event_loop : EventLoop < ( ) > ) {
208
+ // #[cfg(any(
209
+ // target_os = "linux",
210
+ // target_os = "dragonfly",
211
+ // target_os = "freebsd",
212
+ // target_os = "netbsd",
213
+ // target_os = "openbsd"
214
+ // ))]
215
+ // pub fn winit_runner_any_thread(app: App) {
216
+ // winit_runner_with(app, EventLoop::new_any_thread());
217
+ // }
218
+
219
+ pub fn winit_runner_with ( mut app : App ) {
220
+ let mut event_loop = app. world . remove_non_send :: < EventLoop < ( ) > > ( ) . unwrap ( ) ;
225
221
let mut create_window_event_reader = ManualEventReader :: < CreateWindow > :: default ( ) ;
226
222
let mut app_exit_event_reader = ManualEventReader :: < AppExit > :: default ( ) ;
227
223
app. world . insert_non_send ( event_loop. create_proxy ( ) ) ;
@@ -525,3 +521,22 @@ fn handle_create_window_events(
525
521
} ) ;
526
522
}
527
523
}
524
+
525
+ fn handle_initial_window_events ( world : & mut World , event_loop : & EventLoop < ( ) > ) {
526
+ let world = world. cell ( ) ;
527
+ let mut winit_windows = world. get_resource_mut :: < WinitWindows > ( ) . unwrap ( ) ;
528
+ let mut windows = world. get_resource_mut :: < Windows > ( ) . unwrap ( ) ;
529
+ let mut create_window_events = world. get_resource_mut :: < Events < CreateWindow > > ( ) . unwrap ( ) ;
530
+ let mut window_created_events = world. get_resource_mut :: < Events < WindowCreated > > ( ) . unwrap ( ) ;
531
+ for create_window_event in create_window_events. drain ( ) {
532
+ let window = winit_windows. create_window (
533
+ event_loop,
534
+ create_window_event. id ,
535
+ & create_window_event. descriptor ,
536
+ ) ;
537
+ windows. add ( window) ;
538
+ window_created_events. send ( WindowCreated {
539
+ id : create_window_event. id ,
540
+ } ) ;
541
+ }
542
+ }
0 commit comments