pub use self::Event::{Closed, Resized, LostFocus, GainedFocus, TextEntered,
KeyPressed, KeyReleased, MouseWheelMoved,
MouseButtonPressed, MouseButtonReleased, MouseMoved,
MouseEntered, MouseLeft, JoystickButtonPressed,
JoystickButtonReleased, JoystickMoved, JoystickConnected,
JoystickDisconnected, NoEvent};
use window::keyboard::Key;
use window::mouse::MouseButton;
use window::joystick::Axis;
#[derive(Clone, PartialEq, PartialOrd, Debug, Copy)]
pub enum Event {
Closed,
Resized {
width: u32,
height: u32
},
LostFocus,
GainedFocus,
TextEntered {
code: char
},
KeyPressed {
code: Key,
alt: bool,
ctrl: bool,
shift: bool,
system: bool
},
KeyReleased {
code: Key,
alt: bool,
ctrl: bool,
shift: bool,
system: bool
},
MouseWheelMoved {
delta: i32,
x: i32,
y: i32
},
MouseButtonPressed {
button: MouseButton,
x: i32,
y: i32
},
MouseButtonReleased {
button: MouseButton,
x: i32,
y: i32
},
MouseMoved {
x: i32,
y: i32
},
MouseEntered,
MouseLeft,
JoystickButtonPressed {
joystickid: u32,
button: u32
},
JoystickButtonReleased {
joystickid: u32,
button: u32
},
JoystickMoved {
joystickid: u32,
axis: Axis,
position: f32
},
JoystickConnected {
joystickid: u32
},
JoystickDisconnected {
joystickid: u32
},
NoEvent
}
#[doc(hidden)]
#[allow(non_upper_case_globals, non_camel_case_types)]
pub mod raw {
use csfml_window_sys::*;
trait sfEventExt {
fn type_(&mut self) -> *mut sfEventType;
fn size(&mut self) -> super::Event;
fn key(&mut self, type_: sfEventType) -> super::Event;
fn text(&mut self) -> super::Event;
fn mouse_move(&mut self) -> super::Event;
fn mouse_button(&mut self, type_: sfEventType) -> super::Event;
fn mouse_wheel(&mut self) -> super::Event;
fn joystick_move(&mut self) -> super::Event;
fn joystick_button(&mut self, type_: sfEventType) -> super::Event;
fn joystick_connect(&mut self, type_: sfEventType) -> super::Event;
}
impl sfEventExt for sfEvent {
fn type_(&mut self) -> *mut sfEventType {
unsafe { ::std::mem::transmute(self) }
}
fn size(&mut self) -> super::Event {
let e: *mut sfSizeEvent = unsafe { ::std::mem::transmute(self) };
unsafe { super::Resized { width: (*e).width, height: (*e).height } }
}
fn key(&mut self, type_: sfEventType) -> super::Event {
let e: *mut sfKeyEvent = unsafe { ::std::mem::transmute(self) };
let code = unsafe { ::std::mem::transmute((*e).code as i64) };
let alt = unsafe { (*e).alt.to_bool() };
let ctrl = unsafe { (*e).control.to_bool() };
let shift = unsafe { (*e).shift.to_bool() };
let system = unsafe { (*e).system.to_bool() };
match type_ {
sfEvtKeyPressed => {
super::KeyPressed {
code: code,
alt: alt,
ctrl: ctrl,
shift: shift,
system: system
}
},
sfEvtKeyReleased => {
super::KeyReleased {
code: code,
alt: alt,
ctrl: ctrl,
shift: shift,
system: system
}
},
_ => unreachable!()
}
}
fn text(&mut self) -> super::Event {
let e: *mut sfTextEvent = unsafe { ::std::mem::transmute(self) };
unsafe { super::TextEntered { code: ((*e).unicode as u8) as char } }
}
fn mouse_move(&mut self) -> super::Event {
let e: *mut sfMouseMoveEvent = unsafe { ::std::mem::transmute(self) };
unsafe { super::MouseMoved {x: (*e).x, y: (*e).y } }
}
fn mouse_button(&mut self, type_: sfEventType) -> super::Event {
let e: *mut sfMouseButtonEvent = unsafe { ::std::mem::transmute(self) };
let button = unsafe { ::std::mem::transmute((*e).button as u8) };
let x = unsafe { (*e).x };
let y = unsafe { (*e).y };
match type_ {
sfEvtMouseButtonReleased => super::MouseButtonReleased { button: button, x: x, y: y },
sfEvtMouseButtonPressed => super::MouseButtonPressed { button: button, x: x, y: y },
_ => unreachable!()
}
}
fn mouse_wheel(&mut self) -> super::Event {
let e: *mut sfMouseWheelEvent = unsafe { ::std::mem::transmute(self) };
unsafe { super::MouseWheelMoved { delta: (*e).delta, x: (*e).x, y: (*e).y } }
}
fn joystick_move(&mut self) -> super::Event {
let e: *mut sfJoystickMoveEvent = unsafe { ::std::mem::transmute(self) };
super::JoystickMoved {
joystickid: unsafe { (*e).joystickid },
axis: unsafe { ::std::mem::transmute((*e).axis as u8) },
position: unsafe { (*e).position }
}
}
fn joystick_button(&mut self, type_: sfEventType) -> super::Event {
let e: *mut sfJoystickButtonEvent = unsafe { ::std::mem::transmute(self) };
let jid = unsafe { (*e).joystickid };
let btn = unsafe { (*e).button };
match type_ {
sfEvtJoystickButtonPressed =>
super::JoystickButtonPressed { joystickid: jid, button: btn },
sfEvtJoystickButtonReleased =>
super::JoystickButtonReleased { joystickid: jid, button: btn },
_ => unreachable!()
}
}
fn joystick_connect(&mut self, type_: sfEventType) -> super::Event {
let e: *mut sfJoystickConnectEvent = unsafe { ::std::mem::transmute(self) };
let jid = unsafe { (*e).joystickid };
match type_ {
sfEvtJoystickConnected => super::JoystickConnected { joystickid: jid },
sfEvtJoystickDisconnected => super::JoystickDisconnected { joystickid: jid},
_ => unreachable!()
}
}
}
pub fn get_wrapped_event(event: &mut ::csfml_window_sys::sfEvent) -> super::Event {
let type_ = unsafe { *event.type_() };
match type_ {
sfEvtClosed => super::Closed,
sfEvtResized => event.size(),
sfEvtLostFocus => super::LostFocus,
sfEvtGainedFocus => super::GainedFocus,
sfEvtTextEntered => event.text(),
sfEvtKeyPressed => event.key(type_),
sfEvtKeyReleased => event.key(type_),
sfEvtMouseWheelMoved => event.mouse_wheel(),
sfEvtMouseButtonPressed => event.mouse_button(type_),
sfEvtMouseButtonReleased => event.mouse_button(type_),
sfEvtMouseMoved => event.mouse_move(),
sfEvtMouseEntered => super::MouseEntered,
sfEvtMouseLeft => super::MouseLeft,
sfEvtJoystickButtonPressed => event.joystick_button(type_),
sfEvtJoystickButtonReleased => event.joystick_button(type_),
sfEvtJoystickMoved => event.joystick_move(),
sfEvtJoystickConnected => event.joystick_connect(type_),
sfEvtJoystickDisconnected => event.joystick_connect(type_),
_ => super::NoEvent
}
}
}