use super::bindings;
use bitflags::bitflags;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[repr(u32)]
pub enum EventType {
Key = 0,
Motion = 1,
Window = 2,
Resize = 3,
PromptSessionStateChange = 4,
Orientation = 5,
CloseWindow = 6,
Input = 7,
InputConfiguration = 8,
WindowOutput = 9,
InputDeviceState = 10,
WindowPlacement = 11,
}
impl From<EventType> for bindings::MirEventType {
fn from(value: EventType) -> Self {
value as bindings::MirEventType
}
}
impl TryFrom<bindings::MirEventType> for EventType {
type Error = ();
fn try_from(value: bindings::MirEventType) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Key),
1 => Ok(Self::Motion),
2 => Ok(Self::Window),
3 => Ok(Self::Resize),
4 => Ok(Self::PromptSessionStateChange),
5 => Ok(Self::Orientation),
6 => Ok(Self::CloseWindow),
7 => Ok(Self::Input),
8 => Ok(Self::InputConfiguration),
9 => Ok(Self::WindowOutput),
10 => Ok(Self::InputDeviceState),
11 => Ok(Self::WindowPlacement),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum InputEventType {
#[default]
Key = 0,
Touch = 1,
Pointer = 2,
KeyboardResync = 3,
}
impl From<InputEventType> for bindings::MirInputEventType {
fn from(value: InputEventType) -> Self {
value as bindings::MirInputEventType
}
}
impl TryFrom<bindings::MirInputEventType> for InputEventType {
type Error = ();
fn try_from(value: bindings::MirInputEventType) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Key),
1 => Ok(Self::Touch),
2 => Ok(Self::Pointer),
3 => Ok(Self::KeyboardResync),
_ => Err(()),
}
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct InputEventModifiers: u32 {
const NONE = 1 << 0;
const ALT = 1 << 1;
const ALT_LEFT = 1 << 2;
const ALT_RIGHT = 1 << 3;
const SHIFT = 1 << 4;
const SHIFT_LEFT = 1 << 5;
const SHIFT_RIGHT = 1 << 6;
const SYM = 1 << 7;
const FUNCTION = 1 << 8;
const CTRL = 1 << 9;
const CTRL_LEFT = 1 << 10;
const CTRL_RIGHT = 1 << 11;
const META = 1 << 12;
const META_LEFT = 1 << 13;
const META_RIGHT = 1 << 14;
const CAPS_LOCK = 1 << 15;
const NUM_LOCK = 1 << 16;
const SCROLL_LOCK = 1 << 17;
}
}
impl From<InputEventModifiers> for bindings::MirInputEventModifiers {
fn from(value: InputEventModifiers) -> Self {
value.bits()
}
}
impl From<bindings::MirInputEventModifiers> for InputEventModifiers {
fn from(value: bindings::MirInputEventModifiers) -> Self {
InputEventModifiers::from_bits_truncate(value)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum KeyboardAction {
#[default]
Up = 0,
Down = 1,
Repeat = 2,
Modifiers = 3,
}
impl From<KeyboardAction> for bindings::MirKeyboardAction {
fn from(value: KeyboardAction) -> Self {
value as bindings::MirKeyboardAction
}
}
impl TryFrom<bindings::MirKeyboardAction> for KeyboardAction {
type Error = ();
fn try_from(value: bindings::MirKeyboardAction) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Up),
1 => Ok(Self::Down),
2 => Ok(Self::Repeat),
3 => Ok(Self::Modifiers),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum TouchAction {
#[default]
Up = 0,
Down = 1,
Change = 2,
}
impl From<TouchAction> for bindings::MirTouchAction {
fn from(value: TouchAction) -> Self {
value as bindings::MirTouchAction
}
}
impl TryFrom<bindings::MirTouchAction> for TouchAction {
type Error = ();
fn try_from(value: bindings::MirTouchAction) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Up),
1 => Ok(Self::Down),
2 => Ok(Self::Change),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum TouchAxis {
#[default]
X = 0,
Y = 1,
Pressure = 2,
TouchMajor = 3,
TouchMinor = 4,
Size = 5,
}
impl From<TouchAxis> for bindings::MirTouchAxis {
fn from(value: TouchAxis) -> Self {
value as bindings::MirTouchAxis
}
}
impl TryFrom<bindings::MirTouchAxis> for TouchAxis {
type Error = ();
fn try_from(value: bindings::MirTouchAxis) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::X),
1 => Ok(Self::Y),
2 => Ok(Self::Pressure),
3 => Ok(Self::TouchMajor),
4 => Ok(Self::TouchMinor),
5 => Ok(Self::Size),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum TouchTooltype {
#[default]
Unknown = 0,
Finger = 1,
Stylus = 2,
}
impl From<TouchTooltype> for bindings::MirTouchTooltype {
fn from(value: TouchTooltype) -> Self {
value as bindings::MirTouchTooltype
}
}
impl TryFrom<bindings::MirTouchTooltype> for TouchTooltype {
type Error = ();
fn try_from(value: bindings::MirTouchTooltype) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Unknown),
1 => Ok(Self::Finger),
2 => Ok(Self::Stylus),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum PointerAction {
#[default]
ButtonUp = 0,
ButtonDown = 1,
Enter = 2,
Leave = 3,
Motion = 4,
}
impl From<PointerAction> for bindings::MirPointerAction {
fn from(value: PointerAction) -> Self {
value as bindings::MirPointerAction
}
}
impl TryFrom<bindings::MirPointerAction> for PointerAction {
type Error = ();
fn try_from(value: bindings::MirPointerAction) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::ButtonUp),
1 => Ok(Self::ButtonDown),
2 => Ok(Self::Enter),
3 => Ok(Self::Leave),
4 => Ok(Self::Motion),
_ => Err(()),
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum PointerAxis {
#[default]
X = 0,
Y = 1,
VScroll = 2,
HScroll = 3,
RelativeX = 4,
RelativeY = 5,
VScrollDiscrete = 6,
HScrollDiscrete = 7,
VScrollValue120 = 8,
HScrollValue120 = 9,
}
impl From<PointerAxis> for bindings::MirPointerAxis {
fn from(value: PointerAxis) -> Self {
value as bindings::MirPointerAxis
}
}
impl TryFrom<bindings::MirPointerAxis> for PointerAxis {
type Error = ();
fn try_from(value: bindings::MirPointerAxis) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::X),
1 => Ok(Self::Y),
2 => Ok(Self::VScroll),
3 => Ok(Self::HScroll),
4 => Ok(Self::RelativeX),
5 => Ok(Self::RelativeY),
6 => Ok(Self::VScrollDiscrete),
7 => Ok(Self::HScrollDiscrete),
8 => Ok(Self::VScrollValue120),
9 => Ok(Self::HScrollValue120),
_ => Err(()),
}
}
}
bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct PointerButtons: u32 {
const PRIMARY = 1 << 0;
const SECONDARY = 1 << 1;
const TERTIARY = 1 << 2;
const BACK = 1 << 3;
const FORWARD = 1 << 4;
const SIDE = 1 << 5;
const EXTRA = 1 << 6;
const TASK = 1 << 7;
}
}
impl From<PointerButtons> for bindings::MirPointerButtons {
fn from(value: PointerButtons) -> Self {
value.bits()
}
}
impl From<bindings::MirPointerButtons> for PointerButtons {
fn from(value: bindings::MirPointerButtons) -> Self {
PointerButtons::from_bits_truncate(value)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[repr(u32)]
pub enum PointerAxisSource {
#[default]
None = 0,
Wheel = 1,
Finger = 2,
Continuous = 3,
WheelTilt = 4,
}
impl From<PointerAxisSource> for bindings::MirPointerAxisSource {
fn from(value: PointerAxisSource) -> Self {
value as bindings::MirPointerAxisSource
}
}
impl TryFrom<bindings::MirPointerAxisSource> for PointerAxisSource {
type Error = ();
fn try_from(value: bindings::MirPointerAxisSource) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::None),
1 => Ok(Self::Wheel),
2 => Ok(Self::Finger),
3 => Ok(Self::Continuous),
4 => Ok(Self::WheelTilt),
_ => Err(()),
}
}
}
pub struct KeyboardEvent {
pub action: KeyboardAction,
pub keysym: u32,
pub scan_code: i32,
pub modifiers: InputEventModifiers,
}
pub struct PointerEvent {
pub x: f32,
pub y: f32,
pub action: PointerAction,
pub modifiers: InputEventModifiers,
pub buttons: PointerButtons,
}