Emulate AboutToWait event on Windows while resizing

More details: https://github.com/rust-windowing/winit/issues/3272
This commit is contained in:
dtzxporter 2024-01-25 15:23:30 -05:00 committed by Héctor Ramón Jiménez
parent b4dcf4ecf7
commit 66823e9a65
No known key found for this signature in database
GPG key ID: 7CC46565708259A7

View file

@ -213,7 +213,9 @@ where
let mut context = task::Context::from_waker(task::noop_waker_ref()); let mut context = task::Context::from_waker(task::noop_waker_ref());
let _ = event_loop.run(move |event, event_loop| { #[allow(unused_mut)]
let mut process_event =
move |event, event_loop: &winit::event_loop::EventLoopWindowTarget<_>| {
if event_loop.exiting() { if event_loop.exiting() {
return; return;
} }
@ -231,7 +233,30 @@ where
task::Poll::Ready(_) => { task::Poll::Ready(_) => {
event_loop.exit(); event_loop.exit();
} }
}
}; };
#[cfg(not(target_os = "windows"))]
let _ = event_loop.run(process_event);
// TODO: Remove when unnecessary
// On Windows, we emulate an `AboutToWait` event after every `Resized` event
// since the event loop does not resume during resize interaction.
// More details: https://github.com/rust-windowing/winit/issues/3272
#[cfg(target_os = "windows")]
let _ = event_loop.run(move |event, event_loop| {
if matches!(
event,
winit::event::Event::WindowEvent {
event: winit::event::WindowEvent::Resized(_),
..
}
) {
process_event(event, event_loop);
process_event(winit::event::Event::AboutToWait, event_loop);
} else {
process_event(event, event_loop);
}
}); });
Ok(()) Ok(())