winit-sonoma-fix/examples/custom_events.rs

67 lines
1.8 KiB
Rust
Raw Normal View History

2022-06-10 20:43:33 +10:00
#![allow(clippy::single_match)]
#[cfg(not(wasm_platform))]
fn main() -> Result<(), impl std::error::Error> {
use simple_logger::SimpleLogger;
2019-09-25 09:44:43 +10:00
use winit::{
event::{Event, WindowEvent},
event_loop::EventLoopBuilder,
2019-09-25 09:44:43 +10:00
window::WindowBuilder,
};
#[path = "util/fill.rs"]
mod fill;
2019-09-25 09:44:43 +10:00
#[derive(Debug, Clone, Copy)]
enum CustomEvent {
Timer,
}
SimpleLogger::new().init().unwrap();
let event_loop = EventLoopBuilder::<CustomEvent>::with_user_event()
.build()
.unwrap();
let window = WindowBuilder::new()
.with_title("A fantastic window!")
.build(&event_loop)
.unwrap();
// `EventLoopProxy` allows you to dispatch custom events to the main Winit event
// loop from any thread.
let event_loop_proxy = event_loop.create_proxy();
std::thread::spawn(move || {
// Wake up the `event_loop` once every second and dispatch a custom event
// from a different thread.
loop {
std::thread::sleep(std::time::Duration::from_secs(1));
event_loop_proxy.send_event(CustomEvent::Timer).ok();
}
});
event_loop.run(move |event, _, control_flow| {
control_flow.set_wait();
match event {
2023-01-27 15:18:58 +11:00
Event::UserEvent(event) => println!("user event: {event:?}"),
Event::WindowEvent {
event: WindowEvent::CloseRequested,
..
} => control_flow.set_exit(),
Event::WindowEvent {
event: WindowEvent::RedrawRequested,
..
} => {
fill::fill_window(&window);
}
_ => (),
}
})
}
2019-09-25 09:44:43 +10:00
#[cfg(wasm_platform)]
2019-09-25 09:44:43 +10:00
fn main() {
panic!("This example is not supported on web.");
}