author | Sam Lantinga <slouken@libsdl.org> |
Tue, 20 Jun 2006 04:04:25 +0000 | |
changeset 1862 | fe99535ac064 |
parent 1859 | 2fce7697adca |
child 1883 | 2780f547f5e7 |
permissions | -rw-r--r-- |
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
1 |
#include <stdio.h> |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
2 |
#include <stdlib.h> |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
3 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
4 |
#include "SDL.h" |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
5 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
6 |
/* This is an example 16x16 cursor |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
7 |
top left : black |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
8 |
top right : inverted color or black |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
9 |
bottom left: white |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
10 |
bottom right: transparent |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
11 |
(swap left and right for different endianness) |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
12 |
*/ |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
13 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
14 |
Uint16 cursor_data[16]={ |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
15 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
16 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
17 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
18 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
19 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
20 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
21 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
22 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
23 |
0xffff, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
24 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
25 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
26 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
27 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
28 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
29 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
30 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
31 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
32 |
0x0000, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
33 |
0x0000 |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
34 |
}; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
35 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
36 |
Uint16 cursor_mask[16]={ |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
37 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
38 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
39 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
40 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
41 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
42 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
43 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
44 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
45 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
46 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
47 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
48 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
49 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
50 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
51 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
52 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
53 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
54 |
0xff00, |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
55 |
0xff00 |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
56 |
}; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
57 |
|
1862 | 58 |
|
59 |
/* XPM */ |
|
60 |
static const char *arrow[] = { |
|
61 |
/* width height num_colors chars_per_pixel */ |
|
62 |
" 32 32 3 1", |
|
63 |
/* colors */ |
|
64 |
"X c #000000", |
|
65 |
". c #ffffff", |
|
66 |
" c None", |
|
67 |
/* pixels */ |
|
68 |
"X ", |
|
69 |
"XX ", |
|
70 |
"X.X ", |
|
71 |
"X..X ", |
|
72 |
"X...X ", |
|
73 |
"X....X ", |
|
74 |
"X.....X ", |
|
75 |
"X......X ", |
|
76 |
"X.......X ", |
|
77 |
"X........X ", |
|
78 |
"X.....XXXXX ", |
|
79 |
"X..X..X ", |
|
80 |
"X.X X..X ", |
|
81 |
"XX X..X ", |
|
82 |
"X X..X ", |
|
83 |
" X..X ", |
|
84 |
" X..X ", |
|
85 |
" X..X ", |
|
86 |
" XX ", |
|
87 |
" ", |
|
88 |
" ", |
|
89 |
" ", |
|
90 |
" ", |
|
91 |
" ", |
|
92 |
" ", |
|
93 |
" ", |
|
94 |
" ", |
|
95 |
" ", |
|
96 |
" ", |
|
97 |
" ", |
|
98 |
" ", |
|
99 |
" ", |
|
100 |
"0,0" |
|
101 |
}; |
|
102 |
||
103 |
static SDL_Cursor *create_arrow_cursor() |
|
104 |
{ |
|
105 |
int i, row, col; |
|
106 |
Uint8 data[4*32]; |
|
107 |
Uint8 mask[4*32]; |
|
108 |
int hot_x, hot_y; |
|
109 |
||
110 |
i = -1; |
|
111 |
for ( row=0; row<32; ++row ) { |
|
112 |
for ( col=0; col<32; ++col ) { |
|
113 |
if ( col % 8 ) { |
|
114 |
data[i] <<= 1; |
|
115 |
mask[i] <<= 1; |
|
116 |
} else { |
|
117 |
++i; |
|
118 |
data[i] = mask[i] = 0; |
|
119 |
} |
|
120 |
switch (arrow[4+row][col]) { |
|
121 |
case 'X': |
|
122 |
data[i] |= 0x01; |
|
123 |
mask[i] |= 0x01; |
|
124 |
break; |
|
125 |
case '.': |
|
126 |
mask[i] |= 0x01; |
|
127 |
break; |
|
128 |
case ' ': |
|
129 |
break; |
|
130 |
} |
|
131 |
} |
|
132 |
} |
|
133 |
sscanf(arrow[4+row], "%d,%d", &hot_x, &hot_y); |
|
134 |
return SDL_CreateCursor(data, mask, 32, 32, hot_x, hot_y); |
|
135 |
} |
|
136 |
||
137 |
||
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
138 |
int main(int argc, char *argv[]) |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
139 |
{ |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
140 |
SDL_Surface *screen; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
141 |
SDL_bool quit = SDL_FALSE, first_time = SDL_TRUE; |
1862 | 142 |
SDL_Cursor *cursor[2]; |
143 |
int current; |
|
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
144 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
145 |
/* Load the SDL library */ |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
146 |
if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
147 |
fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
148 |
return(1); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
149 |
} |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
150 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
151 |
screen = SDL_SetVideoMode(320,200,8,SDL_ANYFORMAT); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
152 |
if (screen==NULL) { |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
153 |
fprintf(stderr, "Couldn't initialize video mode: %s\n",SDL_GetError()); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
154 |
return(1); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
155 |
} |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
156 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
157 |
SDL_FillRect(screen, NULL, 0x664422); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
158 |
|
1862 | 159 |
cursor[0] = SDL_CreateCursor((Uint8 *)cursor_data, (Uint8 *)cursor_mask, |
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
160 |
16, 16, 8, 8); |
1862 | 161 |
if (cursor[0]==NULL) { |
162 |
fprintf(stderr, "Couldn't initialize test cursor: %s\n",SDL_GetError()); |
|
163 |
SDL_Quit(); |
|
164 |
return(1); |
|
165 |
} |
|
166 |
cursor[1] = create_arrow_cursor(); |
|
167 |
if (cursor[1]==NULL) { |
|
168 |
fprintf(stderr, "Couldn't initialize arrow cursor: %s\n",SDL_GetError()); |
|
169 |
SDL_FreeCursor(cursor[0]); |
|
170 |
SDL_Quit(); |
|
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
171 |
return(1); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
172 |
} |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
173 |
|
1862 | 174 |
current = 0; |
175 |
SDL_SetCursor(cursor[current]); |
|
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
176 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
177 |
while (!quit) { |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
178 |
SDL_Event event; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
179 |
while (SDL_PollEvent(&event)) { |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
180 |
switch(event.type) { |
1862 | 181 |
case SDL_MOUSEBUTTONDOWN: |
182 |
current = !current; |
|
183 |
SDL_SetCursor(cursor[current]); |
|
184 |
break; |
|
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
185 |
case SDL_KEYDOWN: |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
186 |
if (event.key.keysym.sym == SDLK_ESCAPE) { |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
187 |
quit = SDL_TRUE; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
188 |
} |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
189 |
break; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
190 |
case SDL_QUIT: |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
191 |
quit = SDL_TRUE; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
192 |
break; |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
193 |
} |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
194 |
} |
1862 | 195 |
SDL_Flip(screen); |
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
196 |
SDL_Delay(1); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
197 |
} |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
198 |
|
1862 | 199 |
SDL_FreeCursor(cursor[0]); |
200 |
SDL_FreeCursor(cursor[1]); |
|
1858
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
201 |
|
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
202 |
SDL_Quit(); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
203 |
return(0); |
d3ac464fb3c1
Add program to test mouse cursor change
Patrice Mandin <patmandin@gmail.com>
parents:
diff
changeset
|
204 |
} |