Add touch/gesture events

This commit is contained in:
Travis Watkins
2013-09-13 08:38:59 -05:00
parent 23932f445a
commit 7cf9440e75
2 changed files with 88 additions and 22 deletions
+77 -12
View File
@@ -480,12 +480,12 @@ pub enum EventType {
ControllerDeviceRemovedEventType = ll::SDL_CONTROLLERDEVICEREMOVED,
ControllerDeviceRemappedEventType = ll::SDL_CONTROLLERDEVICEREMAPPED,
// TODO: FingerDownEventType = ll:SDL_FINGERDOWN,
// TODO: FingerUpEventType = ll::SDL_FINGERUP,
// TODO: FingerMotionEventType = ll::SDL_FINGERMOTION,
// TODO: DollarGestureEventType = ll::SDL_DOLLARGESTURE,
// TODO: DollarRecordEventType = ll::SDL_DOLLARRECORD,
// TODO: MultiGestureEventType = ll::SDL_MULTIGESTURE,
FingerDownEventType = ll::SDL_FINGERDOWN,
FingerUpEventType = ll::SDL_FINGERUP,
FingerMotionEventType = ll::SDL_FINGERMOTION,
DollarGestureEventType = ll::SDL_DOLLARGESTURE,
DollarRecordEventType = ll::SDL_DOLLARRECORD,
MultiGestureEventType = ll::SDL_MULTIGESTURE,
// TODO: ClipboardUpdateEventType = ll::SDL_CLIPBOARDUPDATE,
// TODO: DropFileEventType = ll::SDL_DROPFILE,
@@ -552,12 +552,12 @@ pub enum Event {
ControllerDeviceRemovedEvent(uint, int),
ControllerDeviceRemappedEvent(uint, int),
// TODO: FingerDownEvent
// TODO: FingerUpEvent
// TODO: FingerMotionEvent
// TODO: DollarGestureEvent
// TODO: DollarRecordEvent
// TODO: MultiGestureEvent
FingerDownEvent(uint, i64, i64, float, float, float, float, float),
FingerUpEvent(uint, i64, i64, float, float, float, float, float),
FingerMotionEvent(uint, i64, i64, float, float, float, float, float),
DollarGestureEvent(uint, i64, i64, uint, float, float, float),
DollarRecordEvent(uint, i64, i64, uint, float, float, float),
MultiGestureEvent(uint, i64, float, float, float, float, uint),
// TODO: ClipboardUpdateEvent
// TODO: DropFileEvent
@@ -900,6 +900,71 @@ fn wrap_event(raw: ll::SDL_Event) -> Event {
event.which as int)
}
FingerDownEventType => {
let event = raw.tfinger();
let event = if event.is_null() { return NoEvent; }
else { *event };
FingerDownEvent(event.timestamp as uint, event.touchId as i64,
event.fingerId as i64, event.x as float,
event.y as float, event.dx as float,
event.dy as float, event.pressure as float)
}
FingerUpEventType => {
let event = raw.tfinger();
let event = if event.is_null() { return NoEvent; }
else { *event };
FingerUpEvent(event.timestamp as uint, event.touchId as i64,
event.fingerId as i64, event.x as float,
event.y as float, event.dx as float,
event.dy as float, event.pressure as float)
}
FingerMotionEventType => {
let event = raw.tfinger();
let event = if event.is_null() { return NoEvent; }
else { *event };
FingerMotionEvent(event.timestamp as uint,
event.touchId as i64, event.fingerId as i64,
event.x as float, event.y as float,
event.dx as float, event.dy as float,
event.pressure as float)
}
DollarGestureEventType => {
let event = raw.dgesture();
let event = if event.is_null() { return NoEvent; }
else { *event };
DollarGestureEvent(event.timestamp as uint,
event.touchId as i64,
event.gestureId as i64,
event.numFingers as uint,
event.error as float, event.x as float,
event.y as float)
}
DollarRecordEventType => {
let event = raw.dgesture();
let event = if event.is_null() { return NoEvent; }
else { *event };
DollarRecordEvent(event.timestamp as uint,
event.touchId as i64, event.gestureId as i64,
event.numFingers as uint,
event.error as float, event.x as float,
event.y as float)
}
MultiGestureEventType => {
let event = raw.mgesture();
let event = if event.is_null() { return NoEvent; }
else { *event };
MultiGestureEvent(event.timestamp as uint,
event.touchId as i64, event.dTheta as float,
event.dDist as float, event.x as float,
event.y as float, event.numFingers as uint)
}
// TODO: All the touch events
UserEventType => {
+11 -10
View File
@@ -1,15 +1,16 @@
pub mod ll {
use std::libc::{c_int, int64_t};
use rwops::ll::SDL_RWops;
use touch::ll::SDL_TouchID;
use std::libc::{c_int, int64_t};
use rwops::ll::SDL_RWops;
use touch::ll::SDL_TouchID;
pub type SDL_GestureID = int64_t;
pub type SDL_GestureID = int64_t;
externfn!(fn SDL_RecordGesture(touchId: SDL_TouchID) -> c_int)
externfn!(fn SDL_SaveAllDollarTemplates(src: *SDL_RWops) -> c_int)
externfn!(fn SDL_SaveDollarTemplate(gestureId: SDL_GestureID,
src: *SDL_RWops) -> c_int)
externfn!(fn SDL_LoadDollarTemplates(touchId: SDL_TouchID, src: *SDL_RWops)
-> c_int)
externfn!(fn SDL_RecordGesture(touchId: SDL_TouchID) -> c_int)
externfn!(fn SDL_SaveAllDollarTemplates(src: *SDL_RWops) -> c_int)
externfn!(fn SDL_SaveDollarTemplate(gestureId: SDL_GestureID,
src: *SDL_RWops) -> c_int)
externfn!(fn SDL_LoadDollarTemplates(touchId: SDL_TouchID, src: *SDL_RWops)
-> c_int)
}