1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include <stdio.h>
4 #include "tx_api.h"
5 #include "gx_api.h"
6 #include "gx_validation_utility.h"
7
8 TEST_PARAM test_parameter = {
9 "guix_radial_progress_bar", /* Test name */
10 50, 100, 300, 350 /* Define the coordinates of the capture area.
11 In this test, we only need to capture the pixelmap
12 drawing area. */
13 };
14
15 static VOID control_thread_entry(ULONG);
main(int argc,char ** argv)16 int main(int argc, char ** argv)
17 {
18 /* Parse the command line argument. */
19 gx_validation_setup(argc, argv);
20
21 /* Start ThreadX system */
22 tx_kernel_enter();
23 return(0);
24 }
25
tx_application_define(void * first_unused_memory)26 VOID tx_application_define(void *first_unused_memory)
27 {
28
29 /* Create a dedicated thread to perform various operations
30 on the line drawing example. These operations simulate
31 user input. */
32 gx_validation_control_thread_create(control_thread_entry);
33
34 /* Termiante the test if it runs for more than 100 ticks */
35 /* This function is not implemented yet. */
36 gx_validation_watchdog_create(100);
37
38 /* Call the actual line example routine. */
39 gx_validation_application_define(first_unused_memory);
40
41 }
42
43 /* Replace the default graphics driver with the validation driver. */
44 #ifdef win32_graphics_driver_setup_24xrgb
45 #undef win32_graphics_driver_setup_24xrgb
46 #endif
47 #define win32_graphics_driver_setup_24xrgb gx_validation_graphics_driver_setup_24xrgb
48
49
50 #ifdef WIN32
51 #undef WIN32
52 #endif
53
54 #include "gx_validation_wrapper.h"
55 #include "demo_guix_radial_progress_bar.c"
56
57 char test_comment[255];
58
59 const char *direction[]={
60 "clockwise",
61 "anti-clockwise"};
62
63 GX_POINT points_on_track[] = { { 232, 149 }, { 247, 290 }, { 101, 300 }, { 89, 177 } };
64 GX_POINT points_off_track[] = { { 238, 174 }, { 235, 258 }, { 113, 268 }, { 108, 189 } };
65 GX_CONST GX_CHAR *on_track_text[] = { "p1", "p2", "p3", "p4" };
66 GX_CONST GX_CHAR *off_track_text[] = { "pp1", "pp2", "pp3", "pp4" };
67
test_radial_progress_bar_draw(GX_RADIAL_PROGRESS_BAR * progress_bar)68 VOID test_radial_progress_bar_draw(GX_RADIAL_PROGRESS_BAR *progress_bar)
69 {
70 GX_BRUSH *brush;
71 INT index;
72 GX_RECTANGLE rect;
73
74 gx_context_brush_get(&brush);
75 brush->gx_brush_alpha = radial_progress_bar_alpha;
76
77 gx_radial_progress_bar_draw(progress_bar);
78
79 for (index = 0; index < (INT)(sizeof(points_on_track) / sizeof(GX_POINT)); index++)
80 {
81 rect.gx_rectangle_left = points_on_track[index].gx_point_x;
82 rect.gx_rectangle_top = points_on_track[index].gx_point_y;
83 rect.gx_rectangle_right = rect.gx_rectangle_left + 2;
84 rect.gx_rectangle_bottom = rect.gx_rectangle_top + 2;
85
86 gx_context_brush_width_set(1);
87 gx_context_font_set(GX_FONT_ID_DEFAULT);
88
89 gx_context_fill_color_set(GX_COLOR_ID_RED);
90 gx_context_line_color_set(GX_COLOR_ID_RED);
91 gx_canvas_rectangle_draw(&rect);
92
93 gx_context_line_color_set(GX_COLOR_ID_GREEN);
94 gx_canvas_text_draw(rect.gx_rectangle_right + 2, rect.gx_rectangle_top, on_track_text[index], GX_STRLEN(on_track_text[index]));
95
96 rect.gx_rectangle_left = points_off_track[index].gx_point_x;
97 rect.gx_rectangle_top = points_off_track[index].gx_point_y;
98 rect.gx_rectangle_right = rect.gx_rectangle_left + 2;
99 rect.gx_rectangle_bottom = rect.gx_rectangle_top + 2;
100
101 gx_context_fill_color_set(GX_COLOR_ID_RED);
102 gx_context_line_color_set(GX_COLOR_ID_RED);
103 gx_canvas_rectangle_draw(&rect);
104
105 gx_context_line_color_set(GX_COLOR_ID_BTN_BORDER);
106 gx_context_font_set(GX_FONT_ID_DEFAULT);
107 gx_canvas_text_draw(rect.gx_rectangle_right + 2, rect.gx_rectangle_top, off_track_text[index], GX_STRLEN(off_track_text[index]));
108 }
109 }
110
111 /* This thread simulates user input. Its priority is lower
112 than the GUIX thread, so that GUIX finishes an operation
113 before this thread is able to issue the next command. */
control_thread_entry(ULONG input)114 static VOID control_thread_entry(ULONG input)
115 {
116 int frame_id = 1;
117 int anchor_value;
118 int value;
119 int normal_brush_width = 1;
120 int selected_brush_width = 28;
121 GX_EVENT my_event;
122 int enable_style;
123 int index;
124 int move_direction;
125
126 gx_widget_draw_set((GX_WIDGET *)progress_bar, test_radial_progress_bar_draw);
127 /* Test enbale style. */
128
129 /* Initialize event structure. */
130 memset(&my_event, 0, sizeof(GX_EVENT));
131 my_event.gx_event_display_handle = 1;
132
133 for(enable_style = 0; enable_style < 2; enable_style ++)
134 {
135 if(enable_style)
136 {
137 gx_widget_style_add((GX_WIDGET *)progress_bar, GX_STYLE_ENABLED);
138 }
139 else
140 {
141 gx_widget_style_remove((GX_WIDGET *)progress_bar, GX_STYLE_ENABLED);
142 }
143
144 for(move_direction = 0; move_direction < 2; move_direction++)
145 {
146 if(move_direction == 0)
147 {
148 /* Radial progress bar move clockwise. */
149 gx_radial_progress_bar_value_set(progress_bar, -180);
150 }
151 else
152 {
153 /* Radial progress bar move anti-clockwise. */
154 gx_radial_progress_bar_value_set(progress_bar, 180);
155 }
156
157 for(index = 0; index < (int)(sizeof(points_on_track)/sizeof(GX_POINT)); index++)
158 {
159 /* Click on track. */
160 my_event.gx_event_type = GX_EVENT_PEN_DOWN;
161 my_event.gx_event_payload.gx_event_pointdata.gx_point_x = points_on_track[index].gx_point_x;
162 my_event.gx_event_payload.gx_event_pointdata.gx_point_y = points_on_track[index].gx_point_y;
163 gx_system_event_send(&my_event);
164
165 my_event.gx_event_type = GX_EVENT_PEN_UP;
166 gx_system_event_send(&my_event);
167
168 gx_validation_set_frame_id(frame_id++);
169 sprintf(test_comment, "Enable style: %d, move %s, click at %s.",
170 enable_style, direction[move_direction], on_track_text[index]);
171 gx_validation_set_frame_comment(test_comment);
172 gx_validation_screen_refresh();
173 }
174
175 for(index = 0; index < (int)(sizeof(points_off_track)/sizeof(GX_POINT)); index++)
176 {
177 /* Click off track. */
178 my_event.gx_event_type = GX_EVENT_PEN_DOWN;
179 my_event.gx_event_payload.gx_event_pointdata.gx_point_x = points_off_track[index].gx_point_x;
180 my_event.gx_event_payload.gx_event_pointdata.gx_point_y = points_off_track[index].gx_point_y;
181 gx_system_event_send(&my_event);
182
183 my_event.gx_event_type = GX_EVENT_PEN_UP;
184 gx_system_event_send(&my_event);
185
186 gx_validation_set_frame_id(frame_id++);
187 sprintf(test_comment, "Enable style: %d, move %s, click at %s.",
188 enable_style, direction[move_direction], off_track_text[index]);
189 gx_validation_set_frame_comment(test_comment);
190 gx_validation_screen_refresh();
191 }
192
193 for(index = 0; index < (int)(sizeof(points_off_track)/sizeof(GX_POINT)); index++)
194 {
195 /* Send drag event. */
196 my_event.gx_event_type = GX_EVENT_PEN_DOWN;
197 my_event.gx_event_payload.gx_event_pointdata.gx_point_x = points_on_track[0].gx_point_x;
198 my_event.gx_event_payload.gx_event_pointdata.gx_point_y = points_on_track[0].gx_point_y;
199 gx_system_event_send(&my_event);
200
201
202 my_event.gx_event_type = GX_EVENT_PEN_DRAG;
203 my_event.gx_event_payload.gx_event_pointdata.gx_point_x = points_off_track[index].gx_point_x;
204 my_event.gx_event_payload.gx_event_pointdata.gx_point_y = points_off_track[index].gx_point_y;
205 gx_system_event_send(&my_event);
206
207 my_event.gx_event_type = GX_EVENT_PEN_UP;
208 gx_system_event_send(&my_event);
209
210 gx_validation_set_frame_id(frame_id++);
211 sprintf(test_comment, "Enable style: %d, move %s, drag from %s to %s.",
212 enable_style, direction[move_direction], on_track_text[0], off_track_text[index]);
213 gx_validation_set_frame_comment(test_comment);
214 gx_validation_screen_refresh();
215 }
216 }
217 }
218
219 /* Test properties. */
220
221 for(index = 0; index < 8; index++)
222 {
223
224 switch(index)
225 {
226 case 0:
227 /* Set text color. */
228 gx_radial_progress_bar_text_color_set(progress_bar, GX_COLOR_ID_SLIDER_NEEDLE_LINE2, GX_COLOR_ID_GREEN, GX_COLOR_ID_SLIDER_NEEDLE_LINE2);
229 sprintf(test_comment, "Set text color");
230 break;
231
232 case 1:
233 /* Set brush color. */
234 info->gx_radial_progress_bar_info_normal_brush_color = GX_COLOR_ID_WINDOW_BORDER;
235 info->gx_radial_progress_bar_info_selected_brush_color = GX_COLOR_ID_BTN_BORDER;
236 info->gx_radial_progress_bar_info_anchor_val = -1;
237 gx_radial_progress_bar_info_set(progress_bar, info);
238 sprintf(test_comment, "Set brush color, set anchor value to -1");
239 break;
240 case 2:
241 info->gx_radial_progress_bar_info_anchor_val = 400;
242 gx_radial_progress_bar_info_set(progress_bar, info);
243 sprintf(test_comment, "Set anchor value to 400");
244 break;
245
246 case 3:
247 /* Set text font. */
248 gx_radial_progress_bar_font_set(progress_bar, GX_FONT_ID_SYSTEM);
249 sprintf(test_comment, "Set font");
250 break;
251
252 case 4:
253 /* Hide text. */
254 gx_widget_style_remove((GX_WIDGET *)progress_bar, GX_STYLE_PROGRESS_TEXT_DRAW);
255 sprintf(test_comment, "Hide text");
256 break;
257
258 case 5:
259 /* Show text. */
260 gx_widget_style_add((GX_WIDGET *)progress_bar, GX_STYLE_PROGRESS_TEXT_DRAW);
261 sprintf(test_comment, "Show text");
262 break;
263
264 case 6:
265 /* Show text without percent flag. */
266 gx_widget_style_remove((GX_WIDGET *)progress_bar, GX_STYLE_PROGRESS_PERCENT);
267 sprintf(test_comment, "Disable percent flag");
268 break;
269
270 case 7:
271 /* Show text with percent flag. */
272 gx_widget_style_add((GX_WIDGET *)progress_bar, GX_STYLE_PROGRESS_PERCENT);
273 sprintf(test_comment, "Enable percent flag");
274 break;
275 }
276
277 gx_validation_set_frame_id(frame_id++);
278 gx_validation_set_frame_comment(test_comment);
279 gx_validation_screen_refresh();
280 }
281
282
283 for(anchor_value = 0; anchor_value < 360; anchor_value += 20)
284 {
285
286 if(anchor_value > 180)
287 {
288 gx_widget_style_remove((GX_WIDGET *)progress_bar, GX_STYLE_RADIAL_PROGRESS_ALIAS);
289 gx_widget_style_remove((GX_WIDGET *)progress_bar, GX_STYLE_RADIAL_PROGRESS_ROUND);
290
291 gx_validation_set_frame_id(frame_id++);
292 sprintf(test_comment, "Draw without aliasing, draw with round end");
293 gx_validation_set_frame_comment(test_comment);
294 gx_validation_screen_refresh();
295 }
296
297 for (value = anchor_value - 380; value <= anchor_value + 360; value += 20)
298 {
299 normal_brush_width ++;
300 if(normal_brush_width > 30)
301 {
302 normal_brush_width = 1;
303 }
304
305 selected_brush_width --;
306 if(selected_brush_width < 1)
307 {
308 selected_brush_width = 20;
309 }
310
311 /* Set anchor value. */
312 gx_radial_progress_bar_anchor_set(progress_bar, anchor_value);
313
314 /* Set radial progress bar value. */
315 gx_radial_progress_bar_value_set(progress_bar, value);
316
317 /* Set brush width. */
318 info->gx_radial_progress_bar_info_selected_brush_width = selected_brush_width;
319 info->gx_radial_progress_bar_info_normal_brush_width = normal_brush_width;
320 gx_radial_progress_bar_info_set(progress_bar, info);
321
322 gx_validation_set_frame_id(frame_id++);
323 sprintf(test_comment, "anchor value:%d, value:%d, normal brush width:%d, selected brush width:%d",
324 anchor_value, value, normal_brush_width, selected_brush_width);
325 gx_validation_set_frame_comment(test_comment);
326 gx_validation_screen_refresh();
327 }
328 }
329
330 gx_widget_hide(progress_bar);
331 gx_radial_progress_bar_text_color_set(progress_bar, 0, 0, 0);
332 gx_widget_show(progress_bar);
333 gx_validation_set_frame_id(frame_id++);
334 gx_validation_set_frame_comment("Set text_color for a hidden progress bar.");
335 gx_validation_screen_refresh();
336
337 gx_widget_hide(progress_bar);
338 gx_radial_progress_bar_font_set(progress_bar, 0);
339 gx_widget_show(progress_bar);
340 gx_validation_set_frame_id(frame_id++);
341 gx_validation_set_frame_comment("Set font for a hidden progress bar.");
342 gx_validation_screen_refresh();
343
344 gx_widget_hide(progress_bar);
345 gx_radial_progress_bar_anchor_set(progress_bar, 0);
346 gx_widget_show(progress_bar);
347 gx_validation_set_frame_id(frame_id++);
348 gx_validation_set_frame_comment("Set anchor for a hidden progress bar.");
349 gx_validation_screen_refresh();
350
351 gx_widget_hide(progress_bar);
352 gx_radial_progress_bar_value_set(progress_bar, 0);
353 gx_widget_show(progress_bar);
354 gx_validation_set_frame_id(frame_id++);
355 gx_validation_set_frame_comment("Set value for a hidden progress bar.");
356 gx_validation_screen_refresh();
357
358 gx_widget_style_remove((GX_WIDGET *)progress_bar, GX_STYLE_ENABLED);
359 memset(&my_event, 0, sizeof(my_event));
360 my_event.gx_event_type = GX_EVENT_PEN_DOWN;
361 my_event.gx_event_target = (GX_WIDGET *)progress_bar;
362 gx_system_event_send(&my_event);
363 gx_validation_set_frame_id(frame_id++);
364 gx_validation_set_frame_comment("Set PEN_DOWN event to a progress bar without GX_STYLE_ENABLED.");
365 gx_validation_screen_refresh();
366
367 gx_widget_status_remove((GX_WIDGET *)progress_bar, GX_STATUS_OWNS_INPUT);
368 memset(&my_event, 0, sizeof(my_event));
369 my_event.gx_event_type = GX_EVENT_PEN_UP;
370 my_event.gx_event_target = (GX_WIDGET *)progress_bar;
371 gx_system_event_send(&my_event);
372 gx_validation_set_frame_id(frame_id++);
373 gx_validation_set_frame_comment("Set PEN_UP event to a progress bar without GX_STATUS_OWNS_INPUT.");
374 gx_validation_screen_refresh();
375
376 gx_widget_status_remove((GX_WIDGET *)progress_bar, GX_STATUS_OWNS_INPUT);
377 memset(&my_event, 0, sizeof(my_event));
378 my_event.gx_event_type = GX_EVENT_PEN_DRAG;
379 my_event.gx_event_target = (GX_WIDGET *)progress_bar;
380 gx_system_event_send(&my_event);
381 gx_validation_set_frame_id(frame_id++);
382 gx_validation_set_frame_comment("Set PEN_DRAG event to a progress bar without GX_STATUS_OWNS_INPUT.");
383 gx_validation_screen_refresh();
384
385 /* Signal the end of the test case. Verify the output. */
386 gx_validation_end();
387
388 exit(0);
389 }
390