use kozan_core::InputEvent;
use kozan_core::scroll::ScrollOffsets;
pub enum ViewEvent {
Input(InputEvent),
Lifecycle(LifecycleEvent),
Paint,
ScrollSync(ScrollOffsets),
Shutdown,
}
#[derive(Debug, Clone, Copy)]
pub enum LifecycleEvent {
Resized { width: u32, height: u32 },
Focused(bool),
ScaleFactorChanged {
scale_factor: f64,
refresh_rate_millihertz: Option<u32>,
},
}
#[cfg(test)]
mod tests {
use kozan_core::{Modifiers, input::MouseMoveEvent};
use super::*;
use std::time::Instant;
#[test]
fn view_event_is_send() {
fn assert_send<T: Send>() {}
assert_send::<ViewEvent>();
}
#[test]
fn lifecycle_event_is_copy() {
fn assert_copy<T: Copy>() {}
assert_copy::<LifecycleEvent>();
}
#[test]
fn hierarchical_matching() {
let evt = ViewEvent::Input(InputEvent::MouseMove(MouseMoveEvent {
x: 10.0,
y: 20.0,
modifiers: Modifiers::EMPTY,
timestamp: Instant::now(),
}));
match evt {
ViewEvent::Input(InputEvent::MouseMove(m)) => {
assert!((m.x - 10.0).abs() < f64::EPSILON);
assert!((m.y - 20.0).abs() < f64::EPSILON);
}
_ => panic!("wrong variant"),
}
}
#[test]
fn lifecycle_resize() {
let evt = ViewEvent::Lifecycle(LifecycleEvent::Resized {
width: 1920,
height: 1080,
});
match evt {
ViewEvent::Lifecycle(LifecycleEvent::Resized { width, height }) => {
assert_eq!(width, 1920);
assert_eq!(height, 1080);
}
_ => panic!("wrong variant"),
}
}
}