use crate::{KeyState, is};
#[doc = crate::_tags!(event web uid)]
#[doc = crate::_doc_meta!{
location("sys/os/browser/web"),
test_size_of(WebEventKind = 4|32; niche Option),
}]
#[repr(C)]
#[non_exhaustive]
#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Hash)]
pub enum WebEventKind {
#[default]
Unknown = 0,
Click = 1,
KeyDown = 2,
KeyUp = 3,
MouseDown = 4,
MouseUp = 5,
MouseMove = 6,
PointerDown = 7,
PointerUp = 8,
PointerMove = 9,
Wheel = 10,
GamepadPoll = 11,
Resize = 12,
}
impl WebEventKind {
pub const fn from_repr(from: u8) -> Self {
use WebEventKind as E;
match from {
1 => E::Click,
2 => E::KeyDown,
3 => E::KeyUp,
4 => E::MouseDown,
5 => E::MouseUp,
6 => E::MouseMove,
7 => E::PointerDown,
8 => E::PointerUp,
9 => E::PointerMove,
10 => E::Wheel,
11 => E::GamepadPoll,
12 => E::Resize,
_ => E::Unknown,
}
}
pub const fn as_str(self) -> &'static str {
use WebEventKind as E;
match self {
E::Click => "click",
E::KeyDown => "keydown",
E::KeyUp => "keyup",
E::MouseDown => "mousedown",
E::MouseUp => "mouseup",
E::MouseMove => "mousemove",
E::PointerDown => "pointerdown",
E::PointerUp => "pointerup",
E::PointerMove => "pointermove",
E::Wheel => "wheel",
E::GamepadPoll => "gamepadpoll",
E::Resize => "resize",
E::Unknown => "none",
}
}
}
#[rustfmt::skip]
impl WebEventKind {
#[must_use]
pub const fn to_key_state(self, repeat: bool) -> Option<KeyState> {
match self {
WebEventKind::KeyDown => Some(is![repeat, KeyState::Repeat, KeyState::Press]),
WebEventKind::KeyUp => Some(KeyState::Release),
_ => None,
}
}
#[must_use]
pub const fn from_key_state(from: KeyState) -> WebEventKind {
match from {
KeyState::Press => WebEventKind::KeyDown,
KeyState::Release => WebEventKind::KeyUp,
KeyState::Repeat => WebEventKind::KeyDown,
}
}
}