mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-25 14:51:30 +11:00
eadd9a19b2
* Replace Closed event with CloseRequested and Destroyed Implements #434 The existing Closed event had ambiguous meaning, both in name and in cross-platform behavior. Closed is now split into two more precise events: * CloseRequested - the window has been requested to close, most commonly by having clicked the window's close button. Whether or not you respond by closing the window is up to you. * Destroyed - the window has been destroyed, and can no longer be safely used. Most notably, now you can reliably implement classic patterns like prompting the user to save their work before closing, and have the opportunity to perform any necessary cleanup. Migrating to the new API is straightforward. In most cases, you can simply replace all existing usages of Closed with CloseRequested. For more information, see the example programs, particularly handling_close and multiwindow. iOS applications must replace all usages of Closed with Destroyed, and require no other changes.
80 lines
2.7 KiB
Rust
80 lines
2.7 KiB
Rust
extern crate winit;
|
|
|
|
use std::io::{self, Write};
|
|
use winit::{ControlFlow, Event, WindowEvent};
|
|
|
|
fn main() {
|
|
let mut events_loop = winit::EventsLoop::new();
|
|
|
|
// enumerating monitors
|
|
let monitor = {
|
|
for (num, monitor) in events_loop.get_available_monitors().enumerate() {
|
|
println!("Monitor #{}: {:?}", num, monitor.get_name());
|
|
}
|
|
|
|
print!("Please write the number of the monitor to use: ");
|
|
io::stdout().flush().unwrap();
|
|
|
|
let mut num = String::new();
|
|
io::stdin().read_line(&mut num).unwrap();
|
|
let num = num.trim().parse().ok().expect("Please enter a number");
|
|
let monitor = events_loop.get_available_monitors().nth(num).expect("Please enter a valid ID");
|
|
|
|
println!("Using {:?}", monitor.get_name());
|
|
|
|
monitor
|
|
};
|
|
|
|
let window = winit::WindowBuilder::new()
|
|
.with_title("Hello world!")
|
|
.with_fullscreen(Some(monitor))
|
|
.build(&events_loop)
|
|
.unwrap();
|
|
|
|
let mut is_fullscreen = true;
|
|
let mut is_maximized = false;
|
|
let mut decorations = true;
|
|
|
|
events_loop.run_forever(|event| {
|
|
println!("{:?}", event);
|
|
|
|
match event {
|
|
Event::WindowEvent { event, .. } => match event {
|
|
WindowEvent::CloseRequested => return ControlFlow::Break,
|
|
WindowEvent::KeyboardInput {
|
|
input:
|
|
winit::KeyboardInput {
|
|
virtual_keycode: Some(virtual_code),
|
|
state,
|
|
..
|
|
},
|
|
..
|
|
} => match (virtual_code, state) {
|
|
(winit::VirtualKeyCode::Escape, _) => return ControlFlow::Break,
|
|
(winit::VirtualKeyCode::F, winit::ElementState::Pressed) => {
|
|
is_fullscreen = !is_fullscreen;
|
|
if !is_fullscreen {
|
|
window.set_fullscreen(None);
|
|
} else {
|
|
window.set_fullscreen(Some(window.get_current_monitor()));
|
|
}
|
|
}
|
|
(winit::VirtualKeyCode::M, winit::ElementState::Pressed) => {
|
|
is_maximized = !is_maximized;
|
|
window.set_maximized(is_maximized);
|
|
}
|
|
(winit::VirtualKeyCode::D, winit::ElementState::Pressed) => {
|
|
decorations = !decorations;
|
|
window.set_decorations(decorations);
|
|
}
|
|
_ => (),
|
|
},
|
|
_ => (),
|
|
},
|
|
_ => {}
|
|
}
|
|
|
|
ControlFlow::Continue
|
|
});
|
|
}
|