comparison test/testime.c @ 3137:311c678f3b2e gsoc2009_IME

Update testime program to accept font parameter.
author Jiang Jiang <gzjjgod@gmail.com>
date Thu, 06 Aug 2009 09:01:03 +0000
parents 962357f325e1
children
comparison
equal deleted inserted replaced
3136:962357f325e1 3137:311c678f3b2e
6 6
7 #include "SDL.h" 7 #include "SDL.h"
8 #include <SDL/SDL_ttf.h> 8 #include <SDL/SDL_ttf.h>
9 9
10 #define DEFAULT_PTSIZE 30 10 #define DEFAULT_PTSIZE 30
11 #define DEFAULT_FONT "DroidSansFallback.ttf" 11 #define DEFAULT_FONT "/System/Library/Fonts/华文细黑.ttf"
12 #define MAX_TEXT_LENGTH 256 12 #define MAX_TEXT_LENGTH 256
13 13
14 SDL_Surface *screen; 14 SDL_Surface *screen;
15 TTF_Font *font; 15 TTF_Font *font;
16 SDL_Rect textRect, markedRect; 16 SDL_Rect textRect, markedRect;
17 Uint32 lineColor, backColor; 17 Uint32 lineColor, backColor;
18 SDL_Color textColor = { 0, 0, 0 }; 18 SDL_Color textColor = { 0, 0, 0 };
19 char text[MAX_TEXT_LENGTH], *markedText; 19 char text[MAX_TEXT_LENGTH], *markedText;
20 20
21 void usage()
22 {
23 printf("usage: testime [--font fontfile] [--fullscreen]\n");
24 exit(0);
25 }
26
21 void InitVideo(int argc, char *argv[]) 27 void InitVideo(int argc, char *argv[])
22 { 28 {
23 int width = 500, height = 250; 29 int width = 500, height = 250;
30 int flags = SDL_HWSURFACE;
31 const char *fontname = DEFAULT_FONT;
32 int fullscreen = 0;
33
34 for (argc--, argv++; argc > 0; argc--, argv++)
35 {
36 if (strcmp(argv[0], "--help") == 0)
37 usage();
38
39 else if (strcmp(argv[0], "--fullscreen") == 0)
40 fullscreen = 1;
41
42 else if (strcmp(argv[0], "--font") == 0)
43 {
44 argc--;
45 argv++;
46
47 if (argc > 0)
48 fontname = argv[0];
49 else
50 usage();
51 }
52 }
24 53
25 SDL_putenv("SDL_VIDEO_WINDOW_POS=center"); 54 SDL_putenv("SDL_VIDEO_WINDOW_POS=center");
26 if (SDL_Init(SDL_INIT_VIDEO) < 0) 55 if (SDL_Init(SDL_INIT_VIDEO) < 0)
27 { 56 {
28 fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); 57 fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
30 } 59 }
31 60
32 /* Initialize fonts */ 61 /* Initialize fonts */
33 TTF_Init(); 62 TTF_Init();
34 63
35 font = TTF_OpenFont(DEFAULT_FONT, DEFAULT_PTSIZE); 64 font = TTF_OpenFont(fontname, DEFAULT_PTSIZE);
36 if (! font) 65 if (! font)
37 { 66 {
38 fprintf(stderr, "Failed to find font: %s\n", SDL_GetError()); 67 fprintf(stderr, "Failed to find font: %s\n", SDL_GetError());
39 exit(-1); 68 exit(-1);
40 } 69 }
41 70
71 printf("Using font: %s\n", fontname);
42 atexit(SDL_Quit); 72 atexit(SDL_Quit);
43 73
44 int flags = SDL_HWSURFACE; 74 if (fullscreen)
45 if (argc > 1 && strcmp(argv[1], "--fullscreen") == 0)
46 { 75 {
47 SDL_DisplayMode mode; 76 SDL_DisplayMode mode;
48 SDL_GetDesktopDisplayMode(&mode); 77 SDL_GetDesktopDisplayMode(&mode);
49 78
50 width = mode.w; 79 width = mode.w;
121 // Stop text input because we cannot hold any more characters 150 // Stop text input because we cannot hold any more characters
122 SDL_StopTextInput(); 151 SDL_StopTextInput();
123 return; 152 return;
124 } 153 }
125 154
155 cursorRect = markedRect;
156 cursorRect.w = 2;
157 cursorRect.h = h;
158
126 SDL_FillRect(screen, &markedRect, backColor); 159 SDL_FillRect(screen, &markedRect, backColor);
127
128 if (markedText) 160 if (markedText)
129 { 161 {
130 RenderText(screen, font, markedText, markedRect.x, markedRect.y, textColor); 162 RenderText(screen, font, markedText, markedRect.x, markedRect.y, textColor);
131 TTF_SizeUTF8(font, markedText, &w, &h); 163 TTF_SizeUTF8(font, markedText, &w, &h);
132 164
133 underlineRect = markedRect; 165 underlineRect = markedRect;
134 underlineRect.y += (h - 2); 166 underlineRect.y += (h - 2);
135 underlineRect.h = 2; 167 underlineRect.h = 2;
136 underlineRect.w = w; 168 underlineRect.w = w;
169
170 cursorRect.x += w + 1;
171
137 SDL_FillRect(screen, &underlineRect, lineColor); 172 SDL_FillRect(screen, &underlineRect, lineColor);
138 } 173 }
139 174
140 cursorRect = markedRect;
141 cursorRect.w = 2;
142 cursorRect.h = h;
143 SDL_FillRect(screen, &cursorRect, lineColor); 175 SDL_FillRect(screen, &cursorRect, lineColor);
144 176
145 SDL_Flip(screen); 177 SDL_Flip(screen);
146 178
147 SDL_SetTextInputRect(&markedRect); 179 SDL_SetTextInputRect(&markedRect);