Mercurial > sdl-ios-xcode
annotate XCodeiPhoneOS/Demos/src/touch.c @ 2429:2c55b72ba46e gsoc2008_iphone
testdyngles is exactly what it sounds like -- a version of testdyngl that uses OpenGL ES calls instead of OpenGL. Was necessary to create because glOrtho is called glOrthof in OpenGL ES, and OpenGL ES doesn't have glBegin() type semantics for specifying geometry.
author | Holmes Futrell <hfutrell@umail.ucsb.edu> |
---|---|
date | Fri, 15 Aug 2008 00:52:52 +0000 |
parents | c5cbbba41c65 |
children |
rev | line source |
---|---|
2386
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
1 /* |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
2 * touch.c |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
3 * written by Holmes Futrell |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
4 * use however you want |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
5 */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
6 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
7 #include "SDL.h" |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
8 #include "math.h" |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
9 #include "common.h" |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
10 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
11 #define BRUSH_SIZE 32 /* width and height of the brush */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
12 #define PIXELS_PER_ITERATION 5 /* number of pixels between brush blots when forming a line */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
13 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
14 static SDL_TextureID brushID=0; /* texture for the brush */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
15 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
16 /* |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
17 draws a line from (startx, starty) to (startx + dx, starty + dy) |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
18 this is accomplished by drawing several blots spaced PIXELS_PER_ITERATION apart |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
19 */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
20 void drawLine(float startx, float starty, float dx, float dy) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
21 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
22 float distance = sqrt(dx*dx+dy*dy); /* length of line segment (pythagoras) */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
23 int iterations = distance / PIXELS_PER_ITERATION + 1; /* number of brush sprites to draw for the line */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
24 float dx_prime = dx / iterations; /* x-shift per iteration */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
25 float dy_prime = dy / iterations; /* y-shift per iteration */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
26 SDL_Rect dstRect; /* rect to draw brush sprite into */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
27 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
28 dstRect.w = BRUSH_SIZE; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
29 dstRect.h = BRUSH_SIZE; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
30 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
31 /* setup x and y for the location of the first sprite */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
32 float x = startx - BRUSH_SIZE / 2.0f; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
33 float y = starty - BRUSH_SIZE / 2.0f; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
34 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
35 int i; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
36 /* draw a series of blots to form the line */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
37 for (i=0; i<iterations; i++) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
38 dstRect.x = x; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
39 dstRect.y = y; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
40 /* shift x and y for next sprite location */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
41 x += dx_prime; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
42 y += dy_prime; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
43 /* draw brush blot */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
44 SDL_RenderCopy(brushID, NULL, &dstRect); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
45 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
46 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
47 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
48 /* |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
49 loads the brush texture |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
50 */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
51 void initializeTexture() { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
52 SDL_Surface *bmp_surface; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
53 bmp_surface = SDL_LoadBMP("stroke.bmp"); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
54 if (bmp_surface == NULL) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
55 fatalError("could not load stroke.bmp"); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
56 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
57 brushID = SDL_CreateTextureFromSurface(SDL_PIXELFORMAT_ABGR8888, bmp_surface); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
58 SDL_FreeSurface(bmp_surface); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
59 if (brushID == 0) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
60 fatalError("could not create brush texture"); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
61 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
62 /* additive blending -- laying strokes on top of eachother makes them brighter */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
63 SDL_SetTextureBlendMode(brushID, SDL_TEXTUREBLENDMODE_ADD); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
64 /* set brush color (red) */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
65 SDL_SetTextureColorMod(brushID, 255, 100, 100); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
66 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
67 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
68 int main(int argc, char *argv[]) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
69 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
70 int x, y, dx, dy; /* mouse location */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
71 Uint8 state; /* mouse (touch) state */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
72 SDL_Event event; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
73 SDL_WindowID windowID; /* main window */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
74 int done; /* does user want to quit? */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
75 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
76 /* initialize SDL */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
77 if (SDL_Init(SDL_INIT_VIDEO) < 0) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
78 fatalError("Could not initialize SDL"); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
79 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
80 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
81 /* create main window and renderer */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
82 windowID = SDL_CreateWindow(NULL, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT,\ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
83 SDL_WINDOW_OPENGL|SDL_WINDOW_SHOWN|SDL_WINDOW_BORDERLESS); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
84 SDL_CreateRenderer(windowID, 0, 0); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
85 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
86 /*load brush texture */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
87 initializeTexture(); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
88 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
89 /* fill canvass initially with all black */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
90 SDL_RenderFill(0, 0, 0, 255, NULL); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
91 SDL_RenderPresent(); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
92 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
93 done = 0; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
94 while (!done && SDL_WaitEvent(&event)) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
95 switch (event.type) { |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
96 case SDL_QUIT: |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
97 done = 1; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
98 break; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
99 case SDL_MOUSEMOTION: |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
100 SDL_SelectMouse(event.motion.which); /* select 'mouse' (touch) that moved */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
101 state = SDL_GetMouseState(&x, &y); /* get its location */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
102 SDL_GetRelativeMouseState(&dx, &dy); /* find how much the mouse moved */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
103 if (state & SDL_BUTTON_LMASK) { /* is the mouse (touch) down? */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
104 drawLine(x - dx, y - dy, dx, dy); /* draw line segment */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
105 SDL_RenderPresent(); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
106 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
107 break; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
108 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
109 } |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
110 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
111 /* cleanup */ |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
112 SDL_DestroyTexture(brushID); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
113 SDL_Quit(); |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
114 |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
115 return 0; |
c5cbbba41c65
Touch input demo (multitouch)
Holmes Futrell <hfutrell@umail.ucsb.edu>
parents:
diff
changeset
|
116 } |