From 3dcae4341c955dc8fa5897db7ae5ea7f2033d697 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|BZD?C%6n;)}v)!h7+k2DTBuzTguDFQE#C6@$4{Yh$eF`$G2%B4tUB3E}mLywS zTFsd4w9t-ruT!U6yKaLH=CHM>6$O#~a14>rp*R$oIDd@w$NVJ-MLD-g@2~T`=bYy` z?>Xnb@&R3WK$8`uEmXcr?w?NHGgi_Ew%wj{KK?pd-CrJV{B&`gDuX$D0PuN%L?m^r zJDNt57wC(o)4l2T=s+@ygcry}vwg_{{O$#gr6c{jlIf1_DE9e)mUN`Qts@z#ExtBzruAyM7>+OvR&V z{KdzS?r!{(H%@@R4S~g@mAcF36VK6%%x>?`Y0tX=QBN-duvEFBw-y7Ufl6F}^RWsz z#4d8V0qwjM5G@oU4us~m0irbz745zk5W8uE=~cB?ICxJU7HQW4fY_UdcI|T?AoelL z!BSNWorS~!y3V4XsDL6~qK0+Rwt^^hc8ZrN=mwnsS^&2=M6>IGhYNvg)xEY}-GT!U zNAj0cwLjf}I7%Zh^&Q$n#_fz@snVb`vv{5Mx&hte0YnFV;t)Ni%TlFaqjG~eI76i9Tdum*%pRh!!9C5fXSk5Ao#LjxneUUb*2TB-&<34z zMUGaP=inxu%_$l(dD!uGfyUJjF_OQm;z~e_7H$rm)5K|NF#z`+D{^QMlQil943lHZ z_vx;mz)x5pHf z|FkAK6b?~BUI~XB%U-}gZ3SrSvivz*O}|Kc?G8t?uW;P3EMKUtr)K$XZIy$cg0<+~ z%ksUEpAMo2t0qQb;-YNJGnur~iYmfg2&E8i7e;5Guod&}n)PPykI15;_x70w50BB-VTI#jhiHvSbWcDSaXbA%CnaF6@zDzWl#$pgi zq!VTV-U$M!NFt4114s=FXUC8#SmVeWK!0>RYepV5an=C#X3dB>oW*4Wh$YhTXa+y= zaU_|Ac>&LD6>y2Ir1$`B#tw*W6e7S@ z2hHaIM0)`$+O+^6I_N&jt7^}4@b&^M(au)@Vn+cwwas{^cq6-i&(zD>+RqeVD5W8s7 zf-dbQ!`%#Xu+?dBGqc!3%|5{G_XA=tUGM?rY?G(g4yfV)U0JQ$U##m*W#bS@%Vn!m zutu3<4$crMn&+-Ntn8O)qh6fp!D6;Hk>jBrDhx(hnd0FBbimEI;$^zUJe^gn%`22# z<(Vk*ct;^#EnHUd_CZV*Zw@!7iPxw}2Ylb#fj03bjralGk~f#PIP^*`bdx~28o)TjY^mSaxPBHQ1x=qKrOH=sAM zJwss+pm(wT4$ZQiJI6%tlFbX~|F{8h%Gv{cfF+u>q}G?2bdG-U0s0xf&U>_zNfQDP zrzy|5zq4v*ti{!TWbr?=2ClcS0mM0LXmIoW#RVGE0mqj%pe!K&*b<QtcL~mb`Up2=(oZc|4sJo^W^$LJHLHSrq zIMieShO-=?erubL!sxURJ8WiUWpo6TYL&AsJ2pLS0Cw}5TJf_E(BSJ}_>Ed&H8sTr z?B=ps(Ifzx9+95b9#6mVd{yR^|rf){5ZCby5$eC5GnGnScneE+IWciV>Bz#(c#HEt!5k7M diff --git a/touchTest/touchSimp b/touchTest/touchSimp index 5186e8720912a25ddf469871a4cd6e9e84e973dd..aea7ab18dba127d4bab397363303b221a19637da 100755 GIT binary patch delta 1412 zcmX|BYiL|m5dLN#_HMc-dw2KVy_?O;bRlcCTKZ6TlR!fr_JtHutJvDdn%sSmWK(uG zO+suJV$=AemBiyKwoRJQ(n1iGfDc*_5p5K$B`6e;Qma3dmSX>C5vwvcyScySyEF66 zocZRQ?{CtLn>79)4SrDf9BI#A`0mSpt}ncr9S#@|-`TzR#o5O{n?FuUGO94>}{L^_i+ zv*7RR`E7MRzcVP-(X@b z2yq}(%?XJ1B6O%f8i06;9jP3)$b<-k3qz@_e9Snlqe8xVVohg8&GG(ha5 zqp<3`)!!NKXAE0dg_oJd0otMg-ar5lo%D$Yc-SW29y_3jZo0Kxx2IIs-5Dy6FHTRag5q@K)Y&30Zn3@MgxFuaZFeodKL4%MlAve zbelsEk}e5AS6SuP>7jB!|A-gm4Vq=Up7ni`-uD2yrS)61Q3doQ$GlA+v%SEgPtu28 zKwr!DI~4U50R3qOC+V~g&}W$F6xsZMe%A|#)7Bp7eXP)wCAEHuNvG+q2IwdGIA>@Z zlkOFOn4xLTy~V1{T8pb+X7SHk1J~PD0OEo*G+((@)b3%#4qLve$~**0t(U_Mn;&Zl0rvb2rSfMTpzdQ} z_>EF&H8sWs?D++ya^Oi9Inua6jtL5@9mrqlpMzl)DlUo1Mx61{%xISu!i#- z4|PVnPNl5a?)77HUAGQY7y~x~I&m#=xDqar)P6Oyq z3?9mwIkXzUVKbK-%I!Bt(*^VzK;A4IPLJYi12~jRjKtHqgIN=80iZLN80k5fGtEI< z4FKuEbfFAy2Y`V@dJyp-Ffeo^KZ@ODYYd}7AY+c@3yH=8CWF9%d?8UdlEqrrvSPdZBsn!R0e^UUL*iH@&P*2+d5vMQ#wh&aU3J{%T z=um$#0MSJoEU%*O=HSQ6(5YUi1H_IptX4k?0Agnu*1*GcL^sX)ih%dL0yxAjdSJci zGnJz7uv7GqssY~rY=9EwFgbCtlg?)I#A_r41dd+BL#?~3}X28ew$VL_MrC&NC5 zMc6_rJj^WiQ%nOqem@`%&_xY!vrXPTc0du&)6#m~Or@@GAfJNBS}t42fsKwi=HLu5 zK$p4eE-U*5YSAk*eX)|Qju&~TFO>)5SexR}GOU7!bH&T_H}gEvz}mb@*>#@r3Xg9D z;#m2z4qrdSMCIo2aGE$y59@&TjUDI^Z_=3v4&DzHifIH=tWuze8J9Ku>YZyL6T9MHc-Oee41BEo`5rs29+m zWcxij%XV>|iO!JC2k8HJ05NOrfj-0%owcOauQBNyt!RLLhOcvux|wvJ0K|Ek=G?zn zwRvlC^)Ffc53GUfof`r1p*1vk`2OM|jp{(v7dD{Qkjsx6@tc0Y`Mtq<&siG+ClAMM zjQg$iaq>2~18b<-*-{O-@0qfEE*J_0R{gR)dLP}CebE55%8_W8dgZxj*tK8)!8toX zn-}D_(FlDdH^d%sMFN%M*n->{Yo~~uh=pAI!>>ih7i1}x^m2ODltbAva3<- z=K}V^qEgo)0D5Cs-fcUopYj8oR+9m+4b>+A#N|wTMB`Ux6QABCH2&-1e= 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; } }