Mercurial > sdl-ios-xcode
comparison test/testime.c @ 3478:f7541260e89c
Added support for QNX default font. Backspace and Return keys now handled.
author | Mike Gorchak <lestat@i.com.ua> |
---|---|
date | Sat, 21 Nov 2009 08:42:42 +0000 |
parents | 9de326b3099c |
children | 15eea7a1fa97 |
comparison
equal
deleted
inserted
replaced
3477:2c07bb579922 | 3478:f7541260e89c |
---|---|
8 #ifdef HAVE_SDL_TTF | 8 #ifdef HAVE_SDL_TTF |
9 #include "SDL_ttf.h" | 9 #include "SDL_ttf.h" |
10 #endif | 10 #endif |
11 | 11 |
12 #define DEFAULT_PTSIZE 30 | 12 #define DEFAULT_PTSIZE 30 |
13 #define DEFAULT_FONT "/System/Library/Fonts/华文细黑.ttf" | 13 #ifdef __QNXNTO__ |
14 #define DEFAULT_FONT "/usr/photon/font_repository/tt0003m_.ttf" | |
15 #else | |
16 #define DEFAULT_FONT "/System/Library/Fonts/华文细黑.ttf" | |
17 #endif | |
14 #define MAX_TEXT_LENGTH 256 | 18 #define MAX_TEXT_LENGTH 256 |
15 | 19 |
16 SDL_Surface *screen; | 20 SDL_Surface *screen; |
17 | 21 |
18 #ifdef HAVE_SDL_TTF | 22 #ifdef HAVE_SDL_TTF |
29 exit(0); | 33 exit(0); |
30 } | 34 } |
31 | 35 |
32 void InitVideo(int argc, char *argv[]) | 36 void InitVideo(int argc, char *argv[]) |
33 { | 37 { |
34 int width = 500, height = 250; | 38 int width = 640, height = 480; |
35 int flags = SDL_HWSURFACE; | 39 int flags = SDL_HWSURFACE; |
36 const char *fontname = DEFAULT_FONT; | 40 const char *fontname = DEFAULT_FONT; |
37 int fullscreen = 0; | 41 int fullscreen = 0; |
38 | 42 |
39 for (argc--, argv++; argc > 0; argc--, argv++) | 43 for (argc--, argv++; argc > 0; argc--, argv++) |
161 { | 165 { |
162 SDL_Flip(screen); | 166 SDL_Flip(screen); |
163 // Stop text input because we cannot hold any more characters | 167 // Stop text input because we cannot hold any more characters |
164 SDL_StopTextInput(); | 168 SDL_StopTextInput(); |
165 return; | 169 return; |
170 } | |
171 else | |
172 { | |
173 SDL_StartTextInput(); | |
166 } | 174 } |
167 | 175 |
168 cursorRect = markedRect; | 176 cursorRect = markedRect; |
169 cursorRect.w = 2; | 177 cursorRect.w = 2; |
170 cursorRect.h = h; | 178 cursorRect.h = h; |
220 while (! done && SDL_WaitEvent(&event)) | 228 while (! done && SDL_WaitEvent(&event)) |
221 { | 229 { |
222 switch (event.type) | 230 switch (event.type) |
223 { | 231 { |
224 case SDL_KEYDOWN: | 232 case SDL_KEYDOWN: |
225 if (event.key.keysym.sym == SDLK_ESCAPE) { | 233 switch (event.key.keysym.sym) |
226 done = 1; | 234 { |
235 case SDLK_ESCAPE: | |
236 done = 1; | |
237 break; | |
238 case SDLK_RETURN: | |
239 text[0]=0x00; | |
240 Redraw(); | |
241 break; | |
242 case SDLK_BACKSPACE: | |
243 { | |
244 int textlen=SDL_strlen(text); | |
245 | |
246 do { | |
247 if (textlen==0) | |
248 { | |
249 break; | |
250 } | |
251 if ((text[textlen-1] & 0x80) == 0x00) | |
252 { | |
253 /* One byte */ | |
254 text[textlen-1]=0x00; | |
255 break; | |
256 } | |
257 if ((text[textlen-1] & 0xC0) == 0x80) | |
258 { | |
259 /* Byte from the multibyte sequence */ | |
260 text[textlen-1]=0x00; | |
261 textlen--; | |
262 } | |
263 if ((text[textlen-1] & 0xC0) == 0xC0) | |
264 { | |
265 /* First byte of multibyte sequence */ | |
266 text[textlen-1]=0x00; | |
267 break; | |
268 } | |
269 } while(1); | |
270 | |
271 Redraw(); | |
272 } | |
273 break; | |
274 } | |
275 | |
276 if (done) | |
277 { | |
227 break; | 278 break; |
228 } | 279 } |
229 | 280 |
230 fprintf(stderr, | 281 fprintf(stderr, |
231 "Keyboard %d: scancode 0x%08X = %s, keycode 0x%08X = %s\n", | 282 "Keyboard %d: scancode 0x%08X = %s, keycode 0x%08X = %s\n", |
233 SDL_GetScancodeName(event.key.keysym.scancode), | 284 SDL_GetScancodeName(event.key.keysym.scancode), |
234 event.key.keysym.sym, SDL_GetKeyName(event.key.keysym.sym)); | 285 event.key.keysym.sym, SDL_GetKeyName(event.key.keysym.sym)); |
235 break; | 286 break; |
236 | 287 |
237 case SDL_TEXTINPUT: | 288 case SDL_TEXTINPUT: |
238 if (strlen(event.text.text) == 0 || event.text.text[0] == '\n' || | 289 if (SDL_strlen(event.text.text) == 0 || event.text.text[0] == '\n' || |
239 markedRect.w < 0) | 290 markedRect.w < 0) |
240 break; | 291 break; |
241 | 292 |
242 fprintf(stderr, "Keyboard %d: text input \"%s\"\n", | 293 fprintf(stderr, "Keyboard %d: text input \"%s\"\n", |
243 event.text.which, event.text.text); | 294 event.text.which, event.text.text); |
244 | 295 |
245 if (strlen(text) + strlen(event.text.text) < sizeof(text)) | 296 if (SDL_strlen(text) + SDL_strlen(event.text.text) < sizeof(text)) |
246 strcpy(text + strlen(text), event.text.text); | 297 strcpy(text + SDL_strlen(text), event.text.text); |
247 | 298 |
248 fprintf(stderr, "text inputed: %s\n", text); | 299 fprintf(stderr, "text inputed: %s\n", text); |
249 | 300 |
250 // After text inputed, we can clear up markedText because it | 301 // After text inputed, we can clear up markedText because it |
251 // is committed | 302 // is committed |