Move ControlFlow to EventLoopWindowTarget

Fixes #3042.
This commit is contained in:
daxpedda 2023-09-07 08:25:04 +02:00 committed by GitHub
parent 8fdd81ecef
commit e648169861
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
60 changed files with 800 additions and 860 deletions

View file

@ -3,7 +3,7 @@ use std::sync::mpsc::{self, Receiver, Sender};
use crate::error::EventLoopError;
use crate::event::Event;
use crate::event_loop::{ControlFlow, EventLoopWindowTarget as RootEventLoopWindowTarget};
use crate::event_loop::EventLoopWindowTarget as RootEventLoopWindowTarget;
use super::{backend, device, window};
@ -39,7 +39,7 @@ impl<T> EventLoop<T> {
pub fn run<F>(self, mut event_handler: F) -> !
where
F: FnMut(Event<T>, &RootEventLoopWindowTarget<T>, &mut ControlFlow),
F: FnMut(Event<T>, &RootEventLoopWindowTarget<T>),
{
let target = RootEventLoopWindowTarget {
p: self.elw.p.clone(),
@ -47,7 +47,7 @@ impl<T> EventLoop<T> {
};
// SAFETY: Don't use `move` to make sure we leak the `event_handler` and `target`.
let handler: Box<dyn FnMut(Event<()>, _)> = Box::new(|event, flow| {
let handler: Box<dyn FnMut(Event<()>)> = Box::new(|event| {
let event = match event.map_nonuser_event() {
Ok(event) => event,
Err(Event::UserEvent(())) => Event::UserEvent(
@ -57,7 +57,7 @@ impl<T> EventLoop<T> {
),
Err(_) => unreachable!(),
};
event_handler(event, &target, flow)
event_handler(event, &target)
});
// SAFETY: The `transmute` is necessary because `run()` requires `'static`. This is safe
// because this function will never return and all resources not cleaned up by the point we
@ -76,7 +76,7 @@ impl<T> EventLoop<T> {
pub fn spawn<F>(self, mut event_handler: F)
where
F: 'static + FnMut(Event<T>, &RootEventLoopWindowTarget<T>, &mut ControlFlow),
F: 'static + FnMut(Event<T>, &RootEventLoopWindowTarget<T>),
{
let target = RootEventLoopWindowTarget {
p: self.elw.p.clone(),
@ -84,7 +84,7 @@ impl<T> EventLoop<T> {
};
self.elw.p.run(
Box::new(move |event, flow| {
Box::new(move |event| {
let event = match event.map_nonuser_event() {
Ok(event) => event,
Err(Event::UserEvent(())) => Event::UserEvent(
@ -94,7 +94,7 @@ impl<T> EventLoop<T> {
),
Err(_) => unreachable!(),
};
event_handler(event, &target, flow)
event_handler(event, &target)
}),
true,
);