Added pressure support for touch events.
This commit is contained in:
parent
11b6823d3f
commit
3dcae4341c
6 changed files with 38 additions and 18 deletions
|
@ -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,
|
||||||
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)
|
||||||
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)
|
||||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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[])
|
||||||
|
|
||||||
//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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue