@@ -211,7 +211,7 @@ where
211211
212212 let mut context = task:: Context :: from_waker ( task:: noop_waker_ref ( ) ) ;
213213
214- let _ = event_loop . run ( move |event, event_loop| {
214+ let process_event = move |event, event_loop : & winit :: event_loop :: EventLoopWindowTarget < _ > | {
215215 if event_loop. exiting ( ) {
216216 return ;
217217 }
@@ -280,7 +280,35 @@ where
280280 }
281281 } ;
282282 }
283- } ) ;
283+ } ;
284+
285+ #[ cfg( not( target_os = "windows" ) ) ]
286+ let _ = event_loop. run ( process_event) ;
287+
288+ // TODO: Remove when unnecessary
289+ // On Windows, we emulate an `AboutToWait` event after every `Resized` event
290+ // since the event loop does not resume during resize interaction.
291+ // More details: https://github.com/rust-windowing/winit/issues/3272
292+ #[ cfg( target_os = "windows" ) ]
293+ {
294+ let mut process_event = process_event;
295+
296+ let _ = event_loop. run ( move |event, event_loop| {
297+ if matches ! (
298+ event,
299+ winit:: event:: Event :: WindowEvent {
300+ event: winit:: event:: WindowEvent :: Resized ( _)
301+ | winit:: event:: WindowEvent :: Moved ( _) ,
302+ ..
303+ }
304+ ) {
305+ process_event ( event, event_loop) ;
306+ process_event ( winit:: event:: Event :: AboutToWait , event_loop) ;
307+ } else {
308+ process_event ( event, event_loop) ;
309+ }
310+ } ) ;
311+ }
284312
285313 Ok ( ( ) )
286314}
0 commit comments