Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
231 lines (194 loc) · 5.32 KB

touchTest.c

File metadata and controls

231 lines (194 loc) · 5.32 KB
 
1
2
3
#include <stdio.h>
#include <SDL.h>
#include <math.h>
Jun 1, 2010
Jun 1, 2010
4
#include <SDL_touch.h>
Jun 5, 2010
Jun 5, 2010
6
7
8
9
10
11
12
13
#define PI 3.1415926535897
#define WIDTH 640
#define HEIGHT 480
#define BPP 4
#define DEPTH 32
May 29, 2010
May 29, 2010
14
15
#define MAXFINGERS 3
16
17
18
19
20
21
22
23
int mousx,mousy;
int keystat[512];
int bstatus;
typedef struct {
Jun 1, 2010
Jun 1, 2010
24
float x,y;
25
26
} Point;
May 29, 2010
May 29, 2010
27
28
typedef struct {
Point p;
Jun 1, 2010
Jun 1, 2010
29
float pressure;
May 29, 2010
May 29, 2010
30
31
} Finger;
May 29, 2010
May 29, 2010
32
May 29, 2010
May 29, 2010
33
Finger finger[MAXFINGERS];
May 29, 2010
May 29, 2010
34
35
36
void handler (int sig)
{
Jun 5, 2010
Jun 5, 2010
37
printf ("exiting...(%d)\n", sig);
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
exit (0);
}
void perror_exit (char *error)
{
perror (error);
handler (9);
}
void setpix(SDL_Surface *screen, int x, int y, int col)
{
Uint32 *pixmem32;
Uint32 colour;
if((unsigned)x > screen->w) return;
if((unsigned)y > screen->h) return;
colour = SDL_MapRGB( screen->format, (col>>16)&0xFF, (col>>8)&0xFF, col&0xFF);
pixmem32 = (Uint32*) screen->pixels + y*screen->pitch/BPP + x;
*pixmem32 = colour;
}
void drawCircle(SDL_Surface* screen,int x,int y,int r,int c)
{
float a;
Jun 1, 2010
Jun 1, 2010
66
67
int tx;
for(a=0;a<PI/2;a+=1.f/(float)abs(r))
68
{
Jun 1, 2010
Jun 1, 2010
69
70
71
72
73
74
75
76
if(r > 0) { //r<0 ==> unfilled circle
for(tx=x-r*cos(a);tx<x+r*cos(a);tx++) {
setpix(screen,tx,(int)(y+r*sin(a)),c);
setpix(screen,tx,(int)(y-r*sin(a)),c);
}
}
//Always Draw Outline
77
setpix(screen,(int)(x+r*cos(a)),(int)(y+r*sin(a)),c);
May 29, 2010
May 29, 2010
78
79
80
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);
81
82
83
84
85
}
}
void DrawScreen(SDL_Surface* screen, int h)
{
Jun 5, 2010
Jun 5, 2010
86
int x, y, xm,ym,c,i;
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
if(SDL_MUSTLOCK(screen))
{
if(SDL_LockSurface(screen) < 0) return;
}
for(y = 0; y < screen->h; y++ )
{
for( x = 0; x < screen->w; x++ )
{
//setpixel(screen, x, y, (x*x)/256+3*y+h, (y*y)/256+x+h, h);
//xm = (x+h)%screen->w;
//ym = (y+h)%screen->w;
//c = sin(h/256*2*PI)*x*y/screen->w/screen->h;
//setpix(screen,x,y,255*sin(xm/screen->w*2*PI),sin(h/255*2*PI)*255*y/screen->h,c);
setpix(screen,x,y,((x%255)<<16) + ((y%255)<<8) + (x+y)%255);
}
}
Jun 5, 2010
Jun 5, 2010
103
Jun 1, 2010
Jun 1, 2010
104
drawCircle(screen,mousx,mousy,-30,0xFFFFFF);
105
Jun 5, 2010
Jun 5, 2010
106
May 29, 2010
May 29, 2010
107
for(i=0;i<MAXFINGERS;i++)
May 29, 2010
May 29, 2010
108
if(finger[i].p.x >= 0 && finger[i].p.y >= 0)
Jun 1, 2010
Jun 1, 2010
109
110
111
112
113
114
if(finger[i].pressure > 0)
drawCircle(screen,finger[i].p.x*screen->w,finger[i].p.y*screen->h
,20,0xFF*finger[i].pressure);
else
drawCircle(screen,finger[i].p.x*screen->w,finger[i].p.y*screen->h
,20,0xFF);
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
if(SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen);
SDL_Flip(screen);
}
SDL_Surface* initScreen(int width,int height)
{
return SDL_SetVideoMode(width, height, DEPTH,
SDL_HWSURFACE | SDL_RESIZABLE);
}
int main(int argc, char* argv[])
{
SDL_Surface *screen;
SDL_Event event;
int keypress = 0;
int h=0,s=1,i,j;
memset(keystat,0,512*sizeof(keystat[0]));
if (SDL_Init(SDL_INIT_VIDEO) < 0 ) return 1;
Jun 5, 2010
Jun 5, 2010
137
138
screen = initScreen(WIDTH,HEIGHT);
if (!screen)
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
{
SDL_Quit();
return 1;
}
while(!keystat[27]) {
//Poll SDL
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_QUIT:
keystat[27] = 1;
break;
case SDL_KEYDOWN:
//printf("%i\n",event.key.keysym.sym);
keystat[event.key.keysym.sym] = 1;
//keypress = 1;
break;
case SDL_KEYUP:
//printf("%i\n",event.key.keysym.sym);
keystat[event.key.keysym.sym] = 0;
//keypress = 1;
break;
case SDL_VIDEORESIZE:
if (!(screen = initScreen(event.resize.w,
event.resize.h)))
{
SDL_Quit();
return 1;
}
break;
case SDL_MOUSEMOTION:
mousx = event.motion.x;
mousy = event.motion.y;
break;
case SDL_MOUSEBUTTONDOWN:
bstatus |= (1<<(event.button.button-1));
break;
case SDL_MOUSEBUTTONUP:
bstatus &= ~(1<<(event.button.button-1));
break;
May 29, 2010
May 29, 2010
181
case SDL_FINGERMOTION:
Jun 1, 2010
Jun 1, 2010
182
;
May 29, 2010
May 29, 2010
183
184
//printf("Finger: %i,x: %i, y: %i\n",event.tfinger.fingerId,
// event.tfinger.x,event.tfinger.y);
Jun 5, 2010
Jun 5, 2010
185
186
187
//SDL_Touch *inTouch = SDL_GetTouch(event.tfinger.touchId);
//SDL_Finger *inFinger = SDL_GetFinger(inTouch,event.tfinger.fingerId);
/*
Jun 1, 2010
Jun 1, 2010
188
189
190
191
192
193
finger[event.tfinger.fingerId].p.x = ((float)event.tfinger.x)/
inTouch->xres;
finger[event.tfinger.fingerId].p.y = ((float)event.tfinger.y)/
inTouch->yres;
finger[event.tfinger.fingerId].pressure =
Jun 5, 2010
Jun 5, 2010
194
195
((float)event.tfinger.pressure)/inTouch->pressureres;*/
/*
Jun 1, 2010
Jun 1, 2010
196
197
198
199
printf("Finger: %i, Pressure: %f Pressureres: %i\n",
event.tfinger.fingerId,
finger[event.tfinger.fingerId].pressure,
inTouch->pressureres);
Jun 5, 2010
Jun 5, 2010
200
*/
Jun 1, 2010
Jun 1, 2010
201
202
203
204
//printf("Finger: %i, pressure: %f\n",event.tfinger.fingerId,
// finger[event.tfinger.fingerId].pressure);
205
break;
May 29, 2010
May 29, 2010
206
207
208
case SDL_FINGERDOWN:
printf("Figner: %i down - x: %i, y: %i\n",event.tfinger.fingerId,
event.tfinger.x,event.tfinger.y);
May 29, 2010
May 29, 2010
209
210
finger[event.tfinger.fingerId].p.x = event.tfinger.x;
finger[event.tfinger.fingerId].p.y = event.tfinger.y;
May 29, 2010
May 29, 2010
211
212
213
214
break;
case SDL_FINGERUP:
printf("Figner: %i up - x: %i, y: %i\n",event.tfinger.fingerId,
event.tfinger.x,event.tfinger.y);
May 29, 2010
May 29, 2010
215
216
finger[event.tfinger.fingerId].p.x = -1;
finger[event.tfinger.fingerId].p.y = -1;
May 29, 2010
May 29, 2010
217
break;
218
219
220
221
222
223
224
225
226
227
228
229
230
231
}
}
//And draw
DrawScreen(screen,h);
/*
for(i=0;i<512;i++)
if(keystat[i]) printf("%i\n",i);
printf("Buttons:%i\n",bstatus);
*/
}
SDL_Quit();
return 0;
}