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 #include "gx_menu.h"
8 #include "gx_system.h"
9 #include "tx_thread.h"
10
11 TEST_PARAM test_parameter = {
12 "guix_window_execute", /* Test name */
13 0, 0, 639, 479 /* Define the coordinates of the capture area.
14 In this test, we only need to capture the line
15 drawing area. */
16 };
17
18 static VOID control_thread_entry(ULONG);
main(int argc,char ** argv)19 int main(int argc, char ** argv)
20 {
21 /* Parse the command line argument. */
22 gx_validation_setup(argc, argv);
23
24 /* Start ThreadX system */
25 tx_kernel_enter();
26 return(0);
27 }
28
tx_application_define(void * first_unused_memory)29 VOID tx_application_define(void *first_unused_memory)
30 {
31
32 /* Create a dedicated thread to perform various operations
33 on the line drawing example. These operations simulate
34 user input. */
35 gx_validation_control_thread_create(control_thread_entry);
36
37 /* Termiante the test if it runs for more than 100 ticks */
38 /* This function is not implemented yet. */
39 gx_validation_watchdog_create(100);
40
41 /* Call the actual line example routine. */
42 gx_validation_application_define(first_unused_memory);
43
44 }
45
46
47 /* Replace the default graphics driver with the validation driver. */
48 #ifdef win32_graphics_driver_setup_24xrgb
49 #undef win32_graphics_driver_setup_24xrgb
50 #endif
51 #define win32_graphics_driver_setup_24xrgb gx_validation_graphics_driver_setup_24xrgb
52
53
54 #ifdef WIN32
55 #undef WIN32
56 #endif
57
58 #include "gx_validation_wrapper.h"
59 #include "demo_guix_all_widgets_execute.c"
60
61 typedef struct TEST_STRUCT{
62 INT event_type;
63 INT xpos;
64 INT ypos;
65 char *comment;
66 }TEST;
67
68 #define USER_EVENT_EXECUTE_WINDOW GX_FIRST_USER_EVENT
69 #define TEST_TIMER_ID 1024
70 TEST test_list[]={
71 {USER_EVENT_EXECUTE_WINDOW, 0, 0, "execute window"},
72 {GX_EVENT_TIMER, 0, 0, "start a timer and return 1"},
73 {USER_EVENT_EXECUTE_WINDOW, 0, 0, "execute window"},
74 {GX_EVENT_HIDE, 0, 0, "send hide event"},
75 {USER_EVENT_EXECUTE_WINDOW, 0, 0, "execute window"},
76 {GX_EVENT_CLOSE, 0, 0, "send close event"},
77 {USER_EVENT_EXECUTE_WINDOW, 0, 0, "execute window"},
78 {0, 0, 0, "send event 0"},
79 {GX_EVENT_PEN_DOWN, 0, 0, "pen down on (0, 0)"},
80 {GX_EVENT_PEN_DRAG, 0, 0, "pen drag on (0, 0)"},
81 {GX_EVENT_PEN_UP, 0, 0, "pen up on (0, 0)"},
82 {GX_EVENT_PEN_DOWN, 370, 310, "pen down on (370, 310)"},
83 {GX_EVENT_PEN_DRAG, 370, 310, "pen drag on (370, 310)"},
84 {GX_EVENT_PEN_UP, 370, 370, "pen up on (370, 310)"},
85 {0, 0, 0, 0}
86 };
87
88 GX_BOOL set_return_code = GX_TRUE;
89 GX_BOOL initiate_tx_queue = GX_FALSE;
90
test_popup_modal_draw(GX_WINDOW * window)91 VOID test_popup_modal_draw(GX_WINDOW *window)
92 {
93 gx_window_draw(window);
94
95 if(initiate_tx_queue)
96 {
97 /* Delete the event queue. */
98 _tx_thread_preempt_disable = 1;
99 initiate_tx_queue = GX_FALSE;
100 }
101 }
102
popup_modal_event_process(GX_WINDOW * window,GX_EVENT * event_ptr)103 UINT popup_modal_event_process(GX_WINDOW *window, GX_EVENT *event_ptr)
104 {
105 ULONG return_code;
106
107 switch(event_ptr->gx_event_type)
108 {
109 case GX_EVENT_TIMER:
110 if(event_ptr->gx_event_payload.gx_event_timer_id == TEST_TIMER_ID)
111 {
112 gx_system_timer_stop((GX_WIDGET *)window, TEST_TIMER_ID);
113 return 1;
114 }
115 break;
116
117 case USER_EVENT_EXECUTE_WINDOW:
118 gx_widget_attach(&button_screen, &popup_modal);
119 if(set_return_code)
120 {
121 gx_window_execute((GX_WINDOW *)&popup_modal, &return_code);
122 }
123 else
124 {
125 gx_window_execute((GX_WINDOW *)&popup_modal, GX_NULL);
126 }
127 _tx_thread_preempt_disable = 0;
128 break;
129
130 default:
131 return gx_window_event_process(window, event_ptr);
132 }
133 return 0;
134 }
135
control_thread_entry(ULONG input)136 static VOID control_thread_entry(ULONG input)
137 {
138 INT frame_id = 1;
139 GX_EVENT my_event;
140 TEST *entry = test_list;
141
142 gx_widget_event_process_set((GX_WIDGET *)&popup_modal, popup_modal_event_process);
143 gx_widget_draw_set(&popup_modal, test_popup_modal_draw);
144
145 memset(&my_event, 0, sizeof(GX_EVENT));
146 my_event.gx_event_display_handle = 1;
147
148 while(entry->comment)
149 {
150 /* Simulate click on text button to execute window. */
151 switch(entry->event_type)
152 {
153 case GX_EVENT_TIMER:
154 gx_system_timer_start((GX_WIDGET *)&popup_modal, TEST_TIMER_ID, 1, 1);
155 tx_thread_sleep(2);
156 break;
157
158 case GX_EVENT_PEN_DOWN:
159 case GX_EVENT_PEN_UP:
160 case GX_EVENT_PEN_DRAG:
161 my_event.gx_event_type = entry->event_type;
162 my_event.gx_event_target = GX_NULL;
163 my_event.gx_event_sender = 0;
164 my_event.gx_event_payload.gx_event_pointdata.gx_point_x = entry->xpos;
165 my_event.gx_event_payload.gx_event_pointdata.gx_point_y = entry->ypos;
166 gx_system_event_send(&my_event);
167 break;
168
169 default:
170 my_event.gx_event_type = entry->event_type;
171 my_event.gx_event_target = (GX_WIDGET *)&popup_modal;
172 my_event.gx_event_sender = 0;
173 gx_system_event_send(&my_event);
174 break;
175 }
176
177 gx_validation_set_frame_id(frame_id++);
178 gx_validation_set_frame_comment(entry->comment);
179 gx_validation_screen_refresh();
180 entry++;
181 }
182
183 initiate_tx_queue = GX_TRUE;
184
185 gx_validation_screen_refresh();
186 if(_gx_system_last_error != GX_SYSTEM_EVENT_RECEIVE_ERROR)
187 {
188 exit(1);
189 }
190
191 initiate_tx_queue = GX_TRUE;
192 set_return_code = GX_FALSE;
193
194 /* Execute window. */
195 my_event.gx_event_type = USER_EVENT_EXECUTE_WINDOW;
196 my_event.gx_event_target = (GX_WIDGET *)&popup_modal;
197 my_event.gx_event_sender = 0;
198 gx_system_event_send(&my_event);
199
200 gx_validation_screen_refresh();
201 if(_gx_system_last_error != GX_SYSTEM_EVENT_RECEIVE_ERROR)
202 {
203 exit(2);
204 }
205
206 /* execute window. */
207 my_event.gx_event_type = USER_EVENT_EXECUTE_WINDOW;
208 my_event.gx_event_target = (GX_WIDGET *)&popup_modal;
209 my_event.gx_event_sender = 0;
210 gx_system_event_send(&my_event);
211 gx_system_event_send(&my_event);
212
213 /* terminate executetion. */
214 my_event.gx_event_type = GX_EVENT_TERMINATE;
215 my_event.gx_event_target = (GX_WIDGET *)&popup_modal;
216 my_event.gx_event_sender = 0;
217 gx_system_event_send(&my_event);
218
219 tx_thread_sleep(5);
220
221 gx_validation_end();
222
223 exit(0);
224 }
225
226