use crate::error::PlatformError;
use crate::input::InputEvent;
use crate::window::Window;
pub trait EventLoop {
type Window: Window;
fn run<F>(self, handler: F) -> Result<(), PlatformError>
where
F: FnMut(Event, &Self::Window) -> ControlFlow + 'static;
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub enum ControlFlow {
#[default]
Continue,
Exit,
}
use crate::window::WindowId;
#[derive(Clone, Debug)]
pub enum Event {
Window(WindowId, WindowEvent),
Input(WindowId, InputEvent),
Lifecycle(LifecycleEvent),
Frame(WindowId),
}
#[derive(Clone, Debug)]
pub enum WindowEvent {
Resized {
width: u32,
height: u32,
},
Moved {
x: i32,
y: i32,
},
CloseRequested,
Focused(bool),
ScaleFactorChanged {
scale_factor: f64,
},
DroppedFileHovered {
paths: Vec<std::path::PathBuf>,
},
DroppedFile {
paths: Vec<std::path::PathBuf>,
},
DroppedFileCancelled,
}
#[derive(Clone, Debug)]
pub enum LifecycleEvent {
Resumed,
Suspended,
LowMemory,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_control_flow_default() {
assert_eq!(ControlFlow::default(), ControlFlow::Continue);
}
}