/[james]/archive/guilib/guitest.c
ViewVC logotype

Contents of /archive/guilib/guitest.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 16 - (show annotations) (download) (as text)
Mon Feb 10 22:56:40 2003 UTC (21 years, 10 months ago) by james
File MIME type: text/x-csrc
File size: 18766 byte(s)
Initial import.

1 /*
2 * guitest.c
3 *
4 * Test program for portable gui library
5 */
6
7
8 #include "gui.h"
9
10
11 #define MARGIN 16
12
13
14 const char *task_name = "guitest";
15
16 struct gui_ta *test_doc;
17 struct gui_ta_position test_pos;
18 struct gui_ta_selection test_sel;
19 unsigned int selection = 0;
20
21
22 void click(gui_window_id window_id, unsigned int x, unsigned int y, unsigned int z)
23 {
24 switch (z)
25 {
26 case gui_CLICK:
27 {
28 gui_ta_position_xy(test_doc, &test_pos, x < MARGIN ? 0 : x - MARGIN, y < MARGIN ? 0 : y - MARGIN);
29 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
30 if (selection)
31 {
32 selection = 0;
33 gui_refresh_window(window_id);
34 }
35 break;
36 }
37 case gui_CLICK_RIGHT:
38 {
39 struct gui_ta_position pos;
40
41 gui_ta_position_xy(test_doc, &pos, x - MARGIN, y - MARGIN);
42 if (pos.content < test_pos.content ||
43 (pos.content == test_pos.content && (pos.word < test_pos.word ||
44 (pos.word == test_pos.word && pos.offset < test_pos.offset))))
45 {
46 test_sel.start = pos;
47 test_sel.end = test_pos;
48 }
49 else
50 {
51 test_sel.start = test_pos;
52 test_sel.end = pos;
53 }
54
55 selection = 1;
56 gui_refresh_window(window_id);
57 break;
58 }
59 case gui_CLICK_MENU:
60 {
61 gui_ta_export(test_doc, "export");
62 }
63 }
64 }
65
66
67 void redraw(const gui_window_id window_id, unsigned int invalid[])
68 {
69 if (invalid[0] <= MARGIN) gui_fill(0xffffff, invalid[0], invalid[1], MARGIN, invalid[3]);
70 if (invalid[1] <= MARGIN) gui_fill(0xffffff, invalid[0], invalid[1], invalid[2], MARGIN);
71 if (invalid[2] >= test_doc->width + MARGIN)
72 gui_fill(0xffffff, test_doc->width + MARGIN, invalid[1], invalid[2], invalid[3]);
73 if (invalid[3] >= test_doc->height + MARGIN)
74 gui_fill(0xffffff, invalid[0], test_doc->height + MARGIN, invalid[2], invalid[3]);
75
76 if (!(invalid[2] < MARGIN || invalid[0] > test_doc->width + MARGIN ||
77 invalid[3] < MARGIN || invalid[1] > test_doc->height + MARGIN))
78 gui_ta_render(test_doc, MARGIN, MARGIN, invalid, selection ? &test_sel : NULL);
79 }
80
81
82 void resize(const gui_window_id window_id, unsigned int width, unsigned int height)
83 {
84 if (width != test_doc->width + 2 * MARGIN)
85 {
86 gui_ta_reformat(test_doc, width - 2 * MARGIN);
87 gui_window_extent(window_id, 0, test_doc->height + 2 * MARGIN);
88 gui_ta_position_cwo(test_doc, &test_pos);
89 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
90 gui_refresh_window(window_id);
91 }
92 }
93
94
95 void input(const gui_window_id window_id, wchar_t key)
96 {
97 const unsigned int height = test_doc->height;
98
99 printf("input: key = %04x\n", key);
100
101 if ((key > 31 || key == 8) && selection)
102 {
103 selection = 0;
104 gui_ta_delete(test_doc, &test_sel.start, &test_sel.end, window_id, MARGIN, MARGIN);
105 test_pos = test_sel.start;
106 }
107
108 if (key > 32 && key != 127)
109 {
110 gui_ta_insert_char(test_doc, &test_pos, key, window_id, MARGIN, MARGIN);
111 test_pos.offset++;
112 }
113 else if (key == 32)
114 {
115 gui_ta_insert_split(test_doc, &test_pos, window_id, MARGIN, MARGIN);
116 test_pos.word++;
117 test_pos.offset = 0;
118 }
119 else if (key == 13)
120 {
121 gui_ta_insert_newline(test_doc, &test_pos, window_id, MARGIN, MARGIN);
122 test_pos.content++;
123 test_pos.word = test_pos.offset = 0;
124 /* test_pos.word++;
125 test_pos.offset = 0;*/
126 }
127 else if (key == 8 && !selection)
128 {
129 struct gui_ta_position start = test_pos;
130
131 if (start.offset > 0)
132 start.offset--;
133 else if (start.word > 0)
134 {
135 start.word--;
136 start.offset = wcslen((*(*test_doc->content)[start.content]->word)[start.word]->text);
137 }
138 else if (start.content > 0)
139 {
140 start.content--;
141 start.word = (*test_doc->content)[start.content]->words - 1;
142 start.offset = wcslen((*(*test_doc->content)[start.content]->word)[start.word]->text);
143 }
144 else
145 return;
146
147 gui_ta_delete(test_doc, &start, &test_pos, window_id, MARGIN, MARGIN);
148 test_pos = start;
149 }
150 else if (key == 127 && !selection)
151 {
152 struct gui_ta_position end = test_pos;
153
154 if (end.offset < wcslen((*(*test_doc->content)[end.content]->word)[end.word]->text))
155 end.offset++;
156 else if (end.word < (*test_doc->content)[end.content]->words - 1)
157 {
158 end.word++;
159 end.offset = 0;
160 }
161 else if (end.content < test_doc->contents - 1)
162 {
163 end.content++;
164 end.word = 0;
165 end.offset = 0;
166 }
167 else
168 return;
169
170 gui_ta_delete(test_doc, &test_pos, &end, window_id, MARGIN, MARGIN);
171 }
172
173 gui_ta_position_cwo(test_doc, &test_pos);
174 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
175
176 if (height != test_doc->height)
177 gui_window_extent(window_id, 2000, test_doc->height + 2 * MARGIN);
178 }
179
180
181 void key(const gui_window_id window_id, unsigned int key)
182 {
183 const unsigned int height = test_doc->height;
184
185 if (key == KEY_LEFT)
186 {
187 if (test_pos.offset > 0)
188 test_pos.offset--;
189 else if (test_pos.word > 0)
190 {
191 test_pos.word--;
192 test_pos.offset = wcslen((*(*test_doc->content)[test_pos.content]->word)[test_pos.word]->text);
193 }
194 else if (test_pos.content > 0)
195 {
196 test_pos.content--;
197 test_pos.word = (*test_doc->content)[test_pos.content]->words - 1;
198 test_pos.offset = wcslen((*(*test_doc->content)[test_pos.content]->word)[test_pos.word]->text);
199 }
200 else
201 return;
202 }
203 else if (key == KEY_RIGHT)
204 {
205 if (test_pos.offset < wcslen((*(*test_doc->content)[test_pos.content]->word)[test_pos.word]->text))
206 test_pos.offset++;
207 else if (test_pos.word < (*test_doc->content)[test_pos.content]->words - 1)
208 {
209 test_pos.word++;
210 test_pos.offset = 0;
211 }
212 else if (test_pos.content < test_doc->contents - 1)
213 {
214 test_pos.content++;
215 test_pos.word = 0;
216 test_pos.offset = 0;
217 }
218 else
219 return;
220 }
221 else if (key == KEY_DOWN)
222 {
223 gui_ta_position_xy(test_doc, &test_pos, test_pos.x, test_pos.y + 1);
224 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
225 return;
226 }
227 else if (key == KEY_UP)
228 {
229 gui_ta_position_xy(test_doc, &test_pos, test_pos.x,
230 test_pos.y - (*test_doc->content)[test_pos.content]->leading);
231 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
232 return;
233 }
234
235 gui_ta_position_cwo(test_doc, &test_pos);
236 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
237
238 if (height != test_doc->height)
239 gui_window_extent(window_id, 2000, test_doc->height + 2 * MARGIN);
240 }
241
242
243 void menuf(const gui_window_id window_id, signed int items[])
244 {
245 static char length[40];
246 gui_window_id info;
247 unsigned int c, words = 0;
248
249 switch (items[0])
250 {
251 case 0:
252 switch (items[1])
253 {
254 case 0:
255 for (c = 0; c < test_doc->contents; c++)
256 words += (*test_doc->content)[c]->words;
257 sprintf(length, gui_message[35], test_doc->contents, words);
258 gui_start_dialog(gui_message[32], 600, 1, "help!");
259 gui_create_display_box(gui_message[33], "Untitled", gui_message[39]);
260 gui_create_display_box(gui_message[34], length, gui_message[40]);
261 gui_create_display_box(gui_message[36], "Unicode text", gui_message[41]);
262 gui_create_display_box(gui_message[37], "22:25:01 27 Mar 2001",
263 gui_message[42]);
264 info = gui_create_dialog();
265 break;
266 }
267 break;
268
269 case 2:
270 switch (items[1])
271 {
272 case 3:
273 gui_ta_align(test_doc, test_pos.content, ALIGN_LEFT, window_id, MARGIN, MARGIN);
274 gui_ta_position_cwo(test_doc, &test_pos);
275 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
276 break;
277 case 4:
278 gui_ta_align(test_doc, test_pos.content, ALIGN_CENTRE, window_id, MARGIN, MARGIN);
279 gui_ta_position_cwo(test_doc, &test_pos);
280 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
281 break;
282 case 5:
283 gui_ta_align(test_doc, test_pos.content, ALIGN_RIGHT, window_id, MARGIN, MARGIN);
284 gui_ta_position_cwo(test_doc, &test_pos);
285 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
286 break;
287 case 6:
288 gui_ta_align(test_doc, test_pos.content, ALIGN_FULL, window_id, MARGIN, MARGIN);
289 gui_ta_position_cwo(test_doc, &test_pos);
290 gui_ta_caret(window_id, test_doc, &test_pos, MARGIN, MARGIN);
291 break;
292 }
293 break;
294 }
295 }
296
297
298 void task_initialise(void)
299 {
300 unsigned int helvetica, times;
301 wchar_t par1[] = { 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0020,
302 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0020,
303 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0020,
304 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0020,
305 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0020,
306 0x00a0, 0x00b0, 0x00c0, 0x00d0, 0x00e0, 0x00f0, 0x0020,
307 0x00a8, 0x00b8, 0x00c8, 0x00d8, 0x00e8, 0x00f8, 0x0020,
308 0x0100, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170, 0x0020,
309 0x0108, 0x0118, 0x0128, 0x0138, 0x0148, 0x0158, 0x0168, 0x0178, 0x0020,
310 0x02bc, 0x0399, 0x03b1, 0x03c8, 0x0414, 0x0423, 0x043f, 0x044a, 0x0020,
311 0x2010, 0x2020, 0x2030, 0x2122, 0x2212, 0x2251, 0xfb01, 0xfb02,
312 ' ','C','u','r','a','b','i','t','u','r',' ','s','e','m','p','e','r',' ','v','e','l','i','t','.',' ','S','e','d',' ','u','t',' ','p','e','d','e',' ','s','e','d',' ','e','r','a','t',' ','c','o','n','s','e','c','t','e','t','u','e','r',' ','p','e','l','l','e','n','t','e','s','q','u','e','.',' ','C','u','r','a','b','i','t','u','r',' ','m','a','u','r','i','s','.',' ','D','o','n','e','c',' ','a',' ','j','u','s','t','o',' ','e','u',' ','l','o','r','e','m',' ','t','i','n','c','i','d','u','n','t',' ','n','o','n','u','m','m','y','.',' ','P','r','a','e','s','e','n','t',' ','c','o','n','s','e','q','u','a','t',' ','e','s','t',' ','n','o','n',' ','l','a','c','u','s','.',' ','C','u','r','a','b','i','t','u','r',' ','c','u','r','s','u','s','.',' ','M','o','r','b','i',' ','u','l','t','r','i','c','e','s',',',' ','v','e','l','i','t',' ','i','n',' ','l','u','c','t','u','s',' ','s','c','e','l','e','r','i','s','q','u','e',',',' ','n','u','l','l','a',' ','t','u','r','p','i','s',' ','v','i','v','e','r','r','a',' ','m','a','s','s','a',',',' ','a',' ','i','n','t','e','r','d','u','m',' ','p','e','d','e',' ','t','o','r','t','o','r',' ','v','e','l',' ','l','a','c','u','s','.',' ','Q','u','i','s','q','u','e',' ','p','o','r','t','a',' ','l','i','b','e','r','o',' ','e','t',' ','d','o','l','o','r','.',' ','M','a','u','r','i','s',' ','t','e','m','p','o','r','.',' ','S','e','d',' ','a','n','t','e','.',' ','S','e','d',' ','u','l','t','r','i','c','e','s',',',' ','p','e','d','e',' ','a','t',' ','s','o','d','a','l','e','s',' ','p','o','r','t','t','i','t','o','r',',',' ','i','p','s','u','m',' ','s','a','p','i','e','n',' ','f','e','r','m','e','n','t','u','m',' ','l','e','o',',',' ','e','u',' ','c','o','n','s','e','q','u','a','t',' ','a','r','c','u',' ','q','u','a','m',' ','e','u',' ','l','a','c','u','s','.',' ','P','h','a','s','e','l','l','u','s',' ','b','l','a','n','d','i','t','.',' ','M','o','r','b','i',' ','s','i','t',' ','a','m','e','t',' ','l','e','c','t','u','s',' ','a','c',' ','p','u','r','u','s',' ','v','e','n','e','n','a','t','i','s',' ','l','o','b','o','r','t','i','s','.',' ','F','u','s','c','e',' ','v','e','l',' ','e','r','o','s','.',' ','F','u','s','c','e',' ','a','d','i','p','i','s','c','i','n','g','.',' ','A','e','n','e','a','n',' ','s','i','t',' ','a','m','e','t',' ','l','e','c','t','u','s',' ','n','o','n',' ','e','s','t',' ','c','o','n','s','e','c','t','e','t','u','e','r',' ','f','e','u','g','i','a','t','.',' ','N','u','n','c',' ','n','e','c',' ','a','n','t','e',' ','v','i','t','a','e',' ','l','e','c','t','u','s',' ','m','a','l','e','s','u','a','d','a',' ','v','e','h','i','c','u','l','a','.',' ','E','t','i','a','m',' ','a','u','c','t','o','r','.',' ','I','n','t','e','g','e','r',' ','s','e','m','p','e','r',' ','p','h','a','r','e','t','r','a',' ','m','a','s','s','a','.',' ','V','e','s','t','i','b','u','l','u','m',' ','a','n','t','e',' ','i','p','s','u','m',' ','p','r','i','m','i','s',' ','i','n',' ','f','a','u','c','i','b','u','s',' ','o','r','c','i',' ','l','u','c','t','u','s',' ','e','t',' ','u','l','t','r','i','c','e','s',' ','p','o','s','u','e','r','e',' ','c','u','b','i','l','i','a',' ','C','u','r','a','e',';',' ','V','e','s','t','i','b','u','l','u','m',' ','n','e','c',' ','l','e','c','t','u','s',' ','e','g','e','t',' ','l','a','c','u','s',' ','m','o','l','l','i','s',' ','v','e','s','t','i','b','u','l','u','m','.',' ','F','u','s','c','e',' ','a','u','g','u','e','.', 0 };
313 wchar_t par2[] = { 0x00b0, 0x00c0, 0x00d0, 0x00e0, 0x00f0, 0x0020,
314 0x00a8, 0x00b8, 0x00c8, 0x00d8, 0x00e8, 0x00f8, 0x0020,
315 0x0100, 0x0110, 0x0120, 0x0130, 0x0140, 0x0150, 0x0160, 0x0170, 0x0020,
316 0x0108, 0x0118, 0x0128, 0x0138, 0x0148, 0x0158, 0x0168, 0x0178, 0x0020,
317 0x02bc, 0x0399, 0x03b1, 0x03c8, 0x0414, 0x0423, 0x043f, 0x044a, 0x0020,
318 0x2010, 0x2020, 0x2030, 0x2122, 0x2212, 0x2251, 0xfb01, 0xfb02, 0x0020,
319 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0020,
320 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0020,
321 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0020,
322 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0020,
323 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036,
324 ' ','C','u','r','a','b','i','t','u','r',' ','s','e','m','p','e','r',' ','v','e','l','i','t','.',' ','S','e','d',' ','u','t',' ','p','e','d','e',' ','s','e','d',' ','e','r','a','t',' ','c','o','n','s','e','c','t','e','t','u','e','r',' ','p','e','l','l','e','n','t','e','s','q','u','e','.',' ','C','u','r','a','b','i','t','u','r',' ','m','a','u','r','i','s','.',' ','D','o','n','e','c',' ','a',' ','j','u','s','t','o',' ','e','u',' ','l','o','r','e','m',' ','t','i','n','c','i','d','u','n','t',' ','n','o','n','u','m','m','y','.',' ','P','r','a','e','s','e','n','t',' ','c','o','n','s','e','q','u','a','t',' ','e','s','t',' ','n','o','n',' ','l','a','c','u','s','.',' ','C','u','r','a','b','i','t','u','r',' ','c','u','r','s','u','s','.',' ','M','o','r','b','i',' ','u','l','t','r','i','c','e','s',',',' ','v','e','l','i','t',' ','i','n',' ','l','u','c','t','u','s',' ','s','c','e','l','e','r','i','s','q','u','e',',',' ','n','u','l','l','a',' ','t','u','r','p','i','s',' ','v','i','v','e','r','r','a',' ','m','a','s','s','a',',',' ','a',' ','i','n','t','e','r','d','u','m',' ','p','e','d','e',' ','t','o','r','t','o','r',' ','v','e','l',' ','l','a','c','u','s','.',' ','Q','u','i','s','q','u','e',' ','p','o','r','t','a',' ','l','i','b','e','r','o',' ','e','t',' ','d','o','l','o','r','.',' ','M','a','u','r','i','s',' ','t','e','m','p','o','r','.',' ','S','e','d',' ','a','n','t','e','.',' ','S','e','d',' ','u','l','t','r','i','c','e','s',',',' ','p','e','d','e',' ','a','t',' ','s','o','d','a','l','e','s',' ','p','o','r','t','t','i','t','o','r',',',' ','i','p','s','u','m',' ','s','a','p','i','e','n',' ','f','e','r','m','e','n','t','u','m',' ','l','e','o',',',' ','e','u',' ','c','o','n','s','e','q','u','a','t',' ','a','r','c','u',' ','q','u','a','m',' ','e','u',' ','l','a','c','u','s','.',' ','P','h','a','s','e','l','l','u','s',' ','b','l','a','n','d','i','t','.',' ','M','o','r','b','i',' ','s','i','t',' ','a','m','e','t',' ','l','e','c','t','u','s',' ','a','c',' ','p','u','r','u','s',' ','v','e','n','e','n','a','t','i','s',' ','l','o','b','o','r','t','i','s','.',' ','F','u','s','c','e',' ','v','e','l',' ','e','r','o','s','.',' ','F','u','s','c','e',' ','a','d','i','p','i','s','c','i','n','g','.',' ','A','e','n','e','a','n',' ','s','i','t',' ','a','m','e','t',' ','l','e','c','t','u','s',' ','n','o','n',' ','e','s','t',' ','c','o','n','s','e','c','t','e','t','u','e','r',' ','f','e','u','g','i','a','t','.',' ','N','u','n','c',' ','n','e','c',' ','a','n','t','e',' ','v','i','t','a','e',' ','l','e','c','t','u','s',' ','m','a','l','e','s','u','a','d','a',' ','v','e','h','i','c','u','l','a','.',' ','E','t','i','a','m',' ','a','u','c','t','o','r','.',' ','I','n','t','e','g','e','r',' ','s','e','m','p','e','r',' ','p','h','a','r','e','t','r','a',' ','m','a','s','s','a','.',' ','V','e','s','t','i','b','u','l','u','m',' ','a','n','t','e',' ','i','p','s','u','m',' ','p','r','i','m','i','s',' ','i','n',' ','f','a','u','c','i','b','u','s',' ','o','r','c','i',' ','l','u','c','t','u','s',' ','e','t',' ','u','l','t','r','i','c','e','s',' ','p','o','s','u','e','r','e',' ','c','u','b','i','l','i','a',' ','C','u','r','a','e',';',' ','V','e','s','t','i','b','u','l','u','m',' ','n','e','c',' ','l','e','c','t','u','s',' ','e','g','e','t',' ','l','a','c','u','s',' ','m','o','l','l','i','s',' ','v','e','s','t','i','b','u','l','u','m','.',' ','F','u','s','c','e',' ','a','u','g','u','e','.',0 };
325 gui_window_id window, dialog;
326 gui_gadget_id magnitude, direction;
327 gui_menu_id menu;
328
329 test_doc = gui_ta(1400);
330
331 times = gui_ta_get_style(test_doc, 300, 300, 0x000000, 0xffffff, "Times");
332 helvetica = gui_ta_get_style(test_doc, 300, 300, 0xffffff, 0x0000ff, "Helvetica");
333
334 gui_ta_add_paragraph(test_doc, 60, 15, par1, times, ALIGN_LEFT);
335 /* gui_ta_add_space(test_doc, 100); */
336 gui_ta_add_paragraph(test_doc, 60, 15, par2, times, ALIGN_CENTRE);
337 gui_ta_add_paragraph(test_doc, 60, 15, par1, helvetica, ALIGN_RIGHT);
338 /* gui_ta_add_space(test_doc, 50); */
339 gui_ta_add_paragraph(test_doc, 60, 15, par2, helvetica, ALIGN_FULL);
340
341 menu = gui_menu(2, 4);
342 gui_menu_attach(menu, 0, gui_menu(8, 3));
343 gui_menu_attach(menu, 1, gui_menu(13, 5));
344 gui_menu_attach(menu, 2, gui_menu(20, 7));
345 gui_menu_attach(menu, 3, gui_menu(29, 1));
346
347 window = gui_create_window(gui_V_SCROLL_BAR, gui_message[0], test_doc->width + 2 * MARGIN,
348 test_doc->height + 2 * MARGIN, NULL, redraw, click, resize, key, input,
349 menuf, menu, NULL, "hi");
350
351 /* gui_start_dialog("guitest dialog");
352 gui_create_label("Resolve vector");
353 magnitude = gui_create_text_box("Magnitude", "0-9.");
354 direction = gui_create_text_box("Direction", "0-9.");
355 gui_create_button("Resolve!", NULL);
356 gui_create_button("Close", NULL);
357 dialog = gui_create_dialog();*/
358 }
359
360
361 void task_finalise(void)
362 {
363 gui_ta_remove(test_doc);
364 }

  ViewVC Help
Powered by ViewVC 1.1.26