Commit 3dcae434 authored by Jim Grandpre's avatar Jim Grandpre

Added pressure support for touch events.

parent 11b6823d
...@@ -312,6 +312,7 @@ typedef struct SDL_TouchFingerEvent ...@@ -312,6 +312,7 @@ typedef struct SDL_TouchFingerEvent
Uint8 padding1; Uint8 padding1;
int x; int x;
int y; int y;
int pressure;
} SDL_TouchFingerEvent; } SDL_TouchFingerEvent;
......
...@@ -424,6 +424,7 @@ SDL_SendTouchMotion(int id, int fingerid, int relative, ...@@ -424,6 +424,7 @@ SDL_SendTouchMotion(int id, int fingerid, int relative,
event.tfinger.fingerId = (Uint8) fingerid; event.tfinger.fingerId = (Uint8) fingerid;
event.tfinger.x = x; event.tfinger.x = x;
event.tfinger.y = y; event.tfinger.y = y;
event.tfinger.pressure = pressure;
event.tfinger.state = touch->buttonstate; event.tfinger.state = touch->buttonstate;
event.tfinger.windowID = touch->focus ? touch->focus->id : 0; event.tfinger.windowID = touch->focus ? touch->focus->id : 0;
posted = (SDL_PushEvent(&event) > 0); posted = (SDL_PushEvent(&event) > 0);
......
...@@ -448,14 +448,21 @@ X11_PumpEvents(_THIS) ...@@ -448,14 +448,21 @@ X11_PumpEvents(_THIS)
switch (ev[i].type) { switch (ev[i].type) {
case EV_ABS: case EV_ABS:
//printf("Got position x: %i!\n",data->x); //printf("Got position x: %i!\n",data->x);
if(ev[i].code == ABS_X) switch (ev[i].code) {
data->x = ev[i].value; case ABS_X:
else if (ev[i].code == ABS_Y) data->x = ev[i].value;
data->y = ev[i].value; break;
else if (ev[i].code == ABS_MISC) { case ABS_Y:
data->up = SDL_TRUE; data->y = ev[i].value;
data->finger = ev[i].value; break;
} case ABS_PRESSURE:
data->pressure = ev[i].value;
break;
case ABS_MISC:
data->up = SDL_TRUE;
data->finger = ev[i].value;
break;
}
break; break;
case EV_MSC: case EV_MSC:
if(ev[i].code == MSC_SERIAL) if(ev[i].code == MSC_SERIAL)
......
No preview for this file type
No preview for this file type
...@@ -22,8 +22,13 @@ typedef struct { ...@@ -22,8 +22,13 @@ typedef struct {
int x,y; int x,y;
} Point; } Point;
typedef struct {
Point p;
int pressure;
} Finger;
Point finger[MAXFINGERS]; Finger finger[MAXFINGERS];
void handler (int sig) void handler (int sig)
{ {
...@@ -56,9 +61,12 @@ void drawCircle(SDL_Surface* screen,int x,int y,int r,int c) ...@@ -56,9 +61,12 @@ void drawCircle(SDL_Surface* screen,int x,int y,int r,int c)
{ {
float a; float a;
for(a=0;a<2*PI;a+=1.f/(float)r) for(a=0;a<PI/2;a+=1.f/(float)r)
{ {
setpix(screen,(int)(x+r*cos(a)),(int)(y+r*sin(a)),c); setpix(screen,(int)(x+r*cos(a)),(int)(y+r*sin(a)),c);
setpix(screen,(int)(x-r*cos(a)),(int)(y+r*sin(a)),c);
setpix(screen,(int)(x+r*cos(a)),(int)(y-r*sin(a)),c);
setpix(screen,(int)(x-r*cos(a)),(int)(y-r*sin(a)),c);
} }
} }
...@@ -85,8 +93,8 @@ void DrawScreen(SDL_Surface* screen, int h) ...@@ -85,8 +93,8 @@ void DrawScreen(SDL_Surface* screen, int h)
int i; int i;
for(i=0;i<MAXFINGERS;i++) for(i=0;i<MAXFINGERS;i++)
if(finger[i].x >= 0 && finger[i].y >= 0) if(finger[i].p.x >= 0 && finger[i].p.y >= 0)
drawCircle(screen,finger[i].x,finger[i].y,20,0xFF6600); drawCircle(screen,finger[i].p.x,finger[i].p.y,20,0xFF6600-finger[i].pressure);
if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen);
...@@ -157,20 +165,23 @@ int main(int argc, char* argv[]) ...@@ -157,20 +165,23 @@ int main(int argc, char* argv[])
//printf("Finger: %i,x: %i, y: %i\n",event.tfinger.fingerId, //printf("Finger: %i,x: %i, y: %i\n",event.tfinger.fingerId,
// event.tfinger.x,event.tfinger.y); // event.tfinger.x,event.tfinger.y);
finger[event.tfinger.fingerId].x = event.tfinger.x; finger[event.tfinger.fingerId].p.x = event.tfinger.x;
finger[event.tfinger.fingerId].y = event.tfinger.y; finger[event.tfinger.fingerId].p.y = event.tfinger.y;
finger[event.tfinger.fingerId].pressure = event.tfinger.pressure;
printf("Finger: %i, pressure: %i\n",event.tfinger.fingerId,
event.tfinger.pressure);
break; break;
case SDL_FINGERDOWN: case SDL_FINGERDOWN:
printf("Figner: %i down - x: %i, y: %i\n",event.tfinger.fingerId, printf("Figner: %i down - x: %i, y: %i\n",event.tfinger.fingerId,
event.tfinger.x,event.tfinger.y); event.tfinger.x,event.tfinger.y);
finger[event.tfinger.fingerId].x = event.tfinger.x; finger[event.tfinger.fingerId].p.x = event.tfinger.x;
finger[event.tfinger.fingerId].y = event.tfinger.y; finger[event.tfinger.fingerId].p.y = event.tfinger.y;
break; break;
case SDL_FINGERUP: case SDL_FINGERUP:
printf("Figner: %i up - x: %i, y: %i\n",event.tfinger.fingerId, printf("Figner: %i up - x: %i, y: %i\n",event.tfinger.fingerId,
event.tfinger.x,event.tfinger.y); event.tfinger.x,event.tfinger.y);
finger[event.tfinger.fingerId].x = -1; finger[event.tfinger.fingerId].p.x = -1;
finger[event.tfinger.fingerId].y = -1; finger[event.tfinger.fingerId].p.y = -1;
break; break;
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment