From 80ecbb9011baf08ae4e567f40e635cedd3f2f3ce Mon Sep 17 00:00:00 2001 From: Jim Grandpre Date: Sat, 29 May 2010 02:09:16 -0400 Subject: [PATCH] Added pressure support for touch events. --- include/SDL_events.h | 1 + src/events/SDL_touch.c | 1 + src/video/x11/SDL_x11events.c | 23 +++++++++++++++-------- touchTest/touchPong | Bin 29203 -> 29219 bytes touchTest/touchSimp | Bin 29012 -> 29024 bytes touchTest/touchTest.c | 31 +++++++++++++++++++++---------- 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/include/SDL_events.h b/include/SDL_events.h index 150f3305c..0e19359b0 100644 --- a/include/SDL_events.h +++ b/include/SDL_events.h @@ -312,6 +312,7 @@ typedef struct SDL_TouchFingerEvent Uint8 padding1; int x; int y; + int pressure; } SDL_TouchFingerEvent; diff --git a/src/events/SDL_touch.c b/src/events/SDL_touch.c index abab0b435..af78ac1ea 100644 --- a/src/events/SDL_touch.c +++ b/src/events/SDL_touch.c @@ -424,6 +424,7 @@ SDL_SendTouchMotion(int id, int fingerid, int relative, event.tfinger.fingerId = (Uint8) fingerid; event.tfinger.x = x; event.tfinger.y = y; + event.tfinger.pressure = pressure; event.tfinger.state = touch->buttonstate; event.tfinger.windowID = touch->focus ? touch->focus->id : 0; posted = (SDL_PushEvent(&event) > 0); diff --git a/src/video/x11/SDL_x11events.c b/src/video/x11/SDL_x11events.c index 01a944b40..4e5934a98 100644 --- a/src/video/x11/SDL_x11events.c +++ b/src/video/x11/SDL_x11events.c @@ -448,14 +448,21 @@ X11_PumpEvents(_THIS) switch (ev[i].type) { case EV_ABS: //printf("Got position x: %i!\n",data->x); - if(ev[i].code == ABS_X) - data->x = ev[i].value; - else if (ev[i].code == ABS_Y) - data->y = ev[i].value; - else if (ev[i].code == ABS_MISC) { - data->up = SDL_TRUE; - data->finger = ev[i].value; - } + switch (ev[i].code) { + case ABS_X: + data->x = ev[i].value; + break; + case ABS_Y: + data->y = 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; case EV_MSC: if(ev[i].code == MSC_SERIAL) diff --git a/touchTest/touchPong b/touchTest/touchPong index d2f1862cc97da9ed0cf7c9e26d5fd98846589489..f969adce99dec05d063dee650e79933de5a6813b 100755 GIT binary patch delta 1506 zcmX|BZERCz6h5aPaM$(S?rnRwt{rY=ks4z#G6wCoxMg&FCkCf60b$nBudVBr_QFOs zEx`>X8D#Sn6@iTb$w-jMT+|s&jNylb7-L2>5{Z5AezZoUBK6KJW^9emZ_nU(W8?bZ5@>_^VjsP;IE~lZ6Qk)a4z10BAaWq69y`&_BDJaasXehB*O*>KeVK!I6ls}yjpihF7O6x1jJg%OnC3~V95gN@ z_TY6c`Y~afcoADyi*}WYg2qnq64sH=^{)lMBlhF$YT$uVVBvJHuAXk*Nofa*O)Bc2 zlpzk`7?|~)>OG}vIR?FMUbhREPIgk7Cx_6UY_&d#%Ew3M!%;Gw=zoRh6E#W#!8PP^ggJg%_L zzID8t6F6e(u;ZD2 z&L!NwU{)@}f>|4B*vMHsuce_)Tk-#pX=7qA+)6@L>=5KoUwYs*=EjymJC@;(Y~1IGmY>y_4=jtNmY@wd< z367(jl{115T5H0;=0W zw5v!J^*Yrfy72+SYgJ$1!`q9rLcQoEx}!*K>St7sc)Ca{!NGaNE76sNQ zOB{n0B7w_pbz`yCqbV*PrdRiQ3~9Ym%j!5 z__bUc+HChzxdn4)UJish&@WGhTI~GB7tGu9@~hCGljZ(-#k!lm*Jx4i*2yQ@gT4U0 zz#bd*8HbH+J_ep1gR#S;*VjiT023W@v3bofcI&C$<*ywc&%@ZU@mTmM67G|{lonIRKe%x9Ms zYvT~L30-_8vdodicArA=Uyu=sGzU42_tS#rgB8+jrke3VK1Z6P9OV$*scgxT1<-*H zRkhnKzXLsrIbB}#mJb_J(g{yS{0Y5-0 zp6TsRWTB1l!9+GYnBAWkN#`L&JeSBHOpm~Ig1y=Ja7Q}Z)1QE?0f0`TJA1N;LhIlJ3C$sxk1;8OX(BlPAr_JQ(#4vIo zs9r14t_roNKT<2=NqoTYD(Wr{-dv$Jb-teHmI}42?^0)CE7JmL)qsl&iS4++Mb8qp zh;D3MD!Q{;6kO~SPh%tb+<%(@yka-bEd}nW29{6v{L<;pJ1A{$rAbBog)+oGJO)O6 zhx$A7{mkh&D!5o#9KbDPcKLjSd+=kzPR8ioL%k`Y4{wpFJeB@xUC%%+31Yx-nL-v= zW_gD-I74Lc6TS^I|n!9pj-Msm#ezp5oC8wStRtMFH=#&h`f0%@~dv zI_!90+FYfoWe71!gDNi8clQ&w7V23&KUPV8>E)SjInC%GKxSg}OjYap; z3B?@Fa_%kO+PrabwJW^*3&y~;&Siuz8bbpY^=}2SfD>}@iKdR*lw$jV8g%+*jEev^ z9*NUGMGjL)vGFBx2FlECTWu#+d)n|hz^`CH_~n|&D!eUsL;~0*Q;{&H=PRO(mL1o7o@`A5qU?E-biX*GQmyb0_l=&xIj#Wr~PThqwa{}5LE zNs~wSA^Byj!7oUMzc)q-`S!6~aG`iVcF$bAw@GcrtJ0>2&@Ug+!+1&V(!(Z8n>?yF l<8SgjneNDM^ssf+0f1-ZI^823NtH&}kPPFsVpq~>{~sFi2S@+_ delta 1402 zcmX|BduUr_6h9}A?Iz9F+&pd)``E03#xiu4Oih}?WNF=~Oqpd!-PVz9Ng9);Be`oc zbw;~RrEJ*l^RY+QtpgRtz>R=T91JO9g@Gcz>0qr75J7N%$ncNOb8eCblKg((`F`hp z@9ky$ZW*WU$K2Jn=g=FrEj_YuZ0?WWC;Fex9{usv&wu!|yK)@c)|YQI0oeQiLy7!> zT(SV2gbyYQg^|MEWGSP=0P$i{KbR@O*8~p~5@Yd9VSg?OT>*d|qW${|$z&d`5zXW? zdX3&8I-JPlAx;5?M-CNBu(O5^Ly1r}dAO)2*6A=wWFJBOP!TQ@PG$0GN`yb3Rr=c8 z9;;V$;*?Bm8Y_b<+5jM8*ysUp|E2&q#1^!80o2oGGQ=^20Hz?QUMta_8nvjuQ0}4^ z*BDks-N~1qtWleKv6<-B8nvq*QSM?}jW&Rb>xS2P?!dULox6 zHPkO+hgMg=R9CCxWp3)rwZ>SgT|82wR&cRayn=tTpQl=RHm_lB)z5g{k7o?T(OR(< z&k%@-dgb6^nK*`zlFIuHx$72h;V6}*8RIQa89uZY4m6Eh1b~nB2*gRePFPcU$`T)J zB>V|4%G-F6aXZiV9lYWsY|Q#y+@umt^PTtb8sh~X`YHU_MR+6Q(-?6R-p=?8o?~2| zV@GGvMBAtRLpQ~Yu?N}+l`PH~qt>po(^*`mBke4ga~}KH=^n~ZT)-*T{>4+9GZt6- zl866+(QvJ2E#VK1rh$v=7niU^y|8{kBX9J}rN{m8TcovpPn9}-v&M#ijho~2kCTDc z$Hv>_3{;uj)?p`h-wDI!0KbBP6`zbn9>802FcQE{ITi`wfIJ@wIp)b}(=7SI4fFEb zNEpA8Yod=i!qkE4adcj8i^ec4C!#?IKk(J#_`Iw{Q*M@9Pgs z{VOElH;o}7+aSAZnW;Fs@0zK4s92s*+wq3fQbAN?G!??jGLZ_I?rxTosdikHSLtY3 W{!G6= 0 && finger[i].y >= 0) - drawCircle(screen,finger[i].x,finger[i].y,20,0xFF6600); + if(finger[i].p.x >= 0 && finger[i].p.y >= 0) + drawCircle(screen,finger[i].p.x,finger[i].p.y,20,0xFF6600-finger[i].pressure); 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, // event.tfinger.x,event.tfinger.y); - finger[event.tfinger.fingerId].x = event.tfinger.x; - finger[event.tfinger.fingerId].y = event.tfinger.y; + finger[event.tfinger.fingerId].p.x = event.tfinger.x; + 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; case SDL_FINGERDOWN: printf("Figner: %i down - x: %i, y: %i\n",event.tfinger.fingerId, event.tfinger.x,event.tfinger.y); - finger[event.tfinger.fingerId].x = event.tfinger.x; - finger[event.tfinger.fingerId].y = event.tfinger.y; + finger[event.tfinger.fingerId].p.x = event.tfinger.x; + finger[event.tfinger.fingerId].p.y = event.tfinger.y; break; case SDL_FINGERUP: printf("Figner: %i up - x: %i, y: %i\n",event.tfinger.fingerId, event.tfinger.x,event.tfinger.y); - finger[event.tfinger.fingerId].x = -1; - finger[event.tfinger.fingerId].y = -1; + finger[event.tfinger.fingerId].p.x = -1; + finger[event.tfinger.fingerId].p.y = -1; break; } }