rusty-keys/src/event/mod.rs

79 lines
1.5 KiB
Rust
Raw Normal View History

2016-04-24 22:32:24 -04:00
use libc::c_int;
2016-04-25 11:57:45 -04:00
/// Trait for event type.
2016-04-24 22:32:24 -04:00
pub trait Kind {
2016-04-25 11:57:45 -04:00
/// Get the event type.
2016-04-24 22:32:24 -04:00
fn kind(&self) -> c_int;
}
2016-04-25 11:57:45 -04:00
/// Trait for event code.
2016-04-24 22:32:24 -04:00
pub trait Code {
2016-04-25 11:57:45 -04:00
/// Get the event code.
2016-04-24 22:32:24 -04:00
fn code(&self) -> c_int;
}
2016-04-25 11:57:45 -04:00
/// Trait for events that support pressing (namely keys).
2016-04-24 22:32:24 -04:00
pub trait Press: Kind + Code { }
2016-04-25 11:57:45 -04:00
/// Trait for events that support releasing (namely keys).
2016-04-24 22:32:24 -04:00
pub trait Release: Kind + Code { }
2016-04-25 11:57:45 -04:00
/// Trait for events that support absolute or relative positioning.
2016-04-24 22:32:24 -04:00
pub trait Position: Kind + Code { }
2016-04-25 11:57:45 -04:00
/// All supported events.
2016-04-24 22:32:24 -04:00
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub enum Event {
All,
2016-04-25 11:57:45 -04:00
/// Keyboard event.
2016-04-24 22:32:24 -04:00
Keyboard(Keyboard),
2016-04-25 11:57:45 -04:00
/// Controller event.
2016-04-24 22:32:24 -04:00
Controller(Controller),
2016-04-25 11:57:45 -04:00
/// Relative movement event.
2016-04-24 22:32:24 -04:00
Relative(Relative),
2016-04-25 11:57:45 -04:00
/// Absolute movement event.
2016-04-24 22:32:24 -04:00
Absolute(Absolute),
}
impl Kind for Event {
fn kind(&self) -> c_int {
match self {
&Event::All => unreachable!(),
&Event::Keyboard(ref v) => v.kind(),
&Event::Controller(ref v) => v.kind(),
&Event::Relative(ref v) => v.kind(),
&Event::Absolute(ref v) => v.kind(),
}
}
}
impl Code for Event {
fn code(&self) -> c_int {
match self {
&Event::All => unreachable!(),
&Event::Keyboard(ref v) => v.code(),
&Event::Controller(ref v) => v.code(),
&Event::Relative(ref v) => v.code(),
&Event::Absolute(ref v) => v.code(),
}
}
}
pub mod keyboard;
pub use self::keyboard::Keyboard;
pub mod controller;
pub use self::controller::Controller;
pub mod relative;
pub use self::relative::Relative;
pub mod absolute;
pub use self::absolute::Absolute;