Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

Updated README's

  • Loading branch information
jimtla committed Aug 19, 2010
1 parent ec45de3 commit c9cda1e13117a87fa231570c48dfe2c1331c3a29
Showing with 36 additions and 13 deletions.
  1. +2 −3 README.gesture
  2. +34 −10 README.touch
@@ -5,7 +5,7 @@ SDL Provides an implementation of the $1 gesture recognition system. This allows

Gestures can be performed with any number of fingers (the centroid of the fingers must follow the path of the gesture), but the number of fingers must be constant (a finger cannot go down in the middle of a gesture). The path of a gesture is considered the path from the time when the final finger went down, to the first time any finger comes up.

Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this simply re-recording on of the gestures should result in a different ID.
Dollar gestures are assigned an Id based on a hash function. This is guaranteed to remain constant for a given gesture. There is a (small) chance that two different gestures will be assigned the same ID. In this case, simply re-recording one of the gestures should result in a different ID.

Recording:
----------
@@ -19,7 +19,6 @@ event.dgesture.touchId - the Id of the touch used to record the gesture.
event.dgesture.gestureId - the unique id of the recoreded gesture.



Performing:
-----------
As long as there is a dollar gesture assigned to a touch, every finger-up event will also cause an SDL_DOLLARGESTURE event with the following fields:
@@ -53,7 +52,7 @@ SDL_LoadDollarTemplates returns the number of templates sucessfully loaded.
===========================================================================
Multi Gestures
===========================================================================
SDL provides simple support to pinch/rotate/swipe gestures.
SDL provides simple support for pinch/rotate/swipe gestures.
Every time a finger is moved an SDL_MULTIGESTURE event is sent with the following fields:

event.mgesture.touchId - the Id of the touch on which the gesture was performed.
@@ -1,3 +1,18 @@
===========================================================================
System Specific Notes
===========================================================================
Linux:
The linux touch system is currently based off event streams, and proc/bus/devices. The active user must be given permissions to read /dev/input/TOUCHDEVICE, where TOUCHDEVICE is the event stream for your device. Currently only Wacom tablets are supported. If you have an unsupported tablet contact me at jim.tla+sdl_touch@gmail.com and I will help you get support for it.

Mac:
The Mac and Iphone API's are pretty. If your touch device supports them then you'll be fine. If it doesn't, then there isn't much we can do.

iPhone:
Works out of box.

Winows:
Unfortunately there is no windows support as of yet. Support for Windows 7 is planned, but we currently have no way to test. If you have a Windows 7 WM_TOUCH supported device, and are willing to help test please contact me at jim.tla+sdl_touch@gmail.com

===========================================================================
Events
===========================================================================
@@ -14,8 +29,8 @@ SDL_FINGERMOTION:
Sent when a finger (or stylus) is moved on the touch device.
Fields:
Same as FINGERDOWN but with additional:
event.tfginer.dx - chagne in x coordinate during this motion event.
event.tfginer.dy - chagne in y coordinate during this motion event.
event.tfginer.dx - change in x coordinate during this motion event.
event.tfginer.dy - change in y coordinate during this motion event.

SDL_FINGERMOTION:
Sent when a finger (or stylus) is lifted from the touch device.
@@ -36,13 +51,13 @@ This returns an SDL_Touch*.
IMPORTANT: If the touch has been removed, or there is no touch with the given ID, SDL_GetTouch will return null. Be sure to check for this!

An SDL_Touch has the following fields:
>xres,yres,pressures:
The resolution at which x,y, and pressure values are reported. Currently these will always be equal to 2^15, but this may not always be the case.

>pressure_max, pressure_min, x_max, x_min, y_max, y_min
Which give, respectively, the maximum and minumum values that the touch digitizer can return for pressure, x coordiniate, and y coordinate AS REPORTED BY THE OPERATING SYSTEM.
On Mac/iPhone systems _max will always be 0, and _min will always be 1.

>xres,yres,pressures:
The resolution at which x,y, and pressure values are reported. Currently these will always be equal to 2^15, but this may not always be the case.

>native_xres,native_yres,native_pressureres:
The native resolution of the touch device AS REPORTED BY THE OPERATING SYSTEM.
On Mac/iPhone systems these will always be 1.
@@ -54,18 +69,19 @@ On Mac/iPhone systems these will always be 1.
An array of pointers to the fingers which are on the device.


The most common reason to get a touch device is to normalize inputs. This would look something like:
The most common reason to access a touch device is to normalize inputs. This would be accomplished by code like the following:

SDL_Touch* inTouch = SDL_GetTouch(event.tfinger.touchId);
if(inTouch == NULL) continue;
if(inTouch == NULL) continue; //The touch has been removed

float x = ((float)event.tfinger.x)/inTouch->xres;
float y = ((float)event.tfinger.y)/inTouch->yres;
float y = ((float)event.tfinger.y)/inTouch->yres;



To get an SDL_Finger, call SDL_GetFinger(touch,fingerId), where touch is a pointer to an SDL_Touch device, and fingerId is the id of the requested finger.
This returns an SDL_Finger*, or null if the finger does not exist, or has been removed.
An SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus BEFORE the FINGERUP event is seen.
An SDL_Finger is guaranteed to be persistent for the duration of a touch, but it will be de-allocated as soon as the finger is removed. This occurs when the SDL_FINGERUP event is _added_ to the event queue, and thus _before_ the FINGERUP event is polled.
As a result, be very careful to check for null return values.

An SDL_Finger has the following fields:
@@ -74,4 +90,12 @@ An SDL_Finger has the following fields:
>xdelta,ydelta:
The change in position resulting from the last finger motion.
>last_x, last_y, last_pressure:
The previous coordinates of the touch.
The previous coordinates of the touch.

===========================================================================
Notes
===========================================================================
For a complete example see test/testgesture.c

Please direct questions/comments to:
jim.tla+sdl_touch@gmail.com

0 comments on commit c9cda1e

Please sign in to comment.