1 use std::collections::HashMap;
2 use winit::{
3     event::{ElementState, Event, KeyboardInput, WindowEvent},
4     event_loop::{ControlFlow, EventLoop},
5     window::Window,
6 };
7 
main()8 fn main() {
9     simple_logger::init().unwrap();
10     let event_loop = EventLoop::new();
11 
12     let mut windows = HashMap::new();
13     for _ in 0..3 {
14         let window = Window::new(&event_loop).unwrap();
15         windows.insert(window.id(), window);
16     }
17 
18     event_loop.run(move |event, event_loop, control_flow| {
19         *control_flow = ControlFlow::Wait;
20 
21         match event {
22             Event::WindowEvent { event, window_id } => {
23                 match event {
24                     WindowEvent::CloseRequested => {
25                         println!("Window {:?} has received the signal to close", window_id);
26 
27                         // This drops the window, causing it to close.
28                         windows.remove(&window_id);
29 
30                         if windows.is_empty() {
31                             *control_flow = ControlFlow::Exit;
32                         }
33                     }
34                     WindowEvent::KeyboardInput {
35                         input:
36                             KeyboardInput {
37                                 state: ElementState::Pressed,
38                                 ..
39                             },
40                         ..
41                     } => {
42                         let window = Window::new(&event_loop).unwrap();
43                         windows.insert(window.id(), window);
44                     }
45                     _ => (),
46                 }
47             }
48             _ => (),
49         }
50     })
51 }
52