1 /* This is a small demo of the high-performance GUIX graphics framework. */
2 
3 #include <stdio.h>
4 #include <string.h>
5 #include "gx_api.h"
6 
7 #include "pixelmaps_565rgb_resources.h"
8 #include "pixelmaps_565rgb_specifications.h"
9 
10 MAIN_WINDOW_CONTROL_BLOCK *pMainWin;
11 GX_WINDOW *pic_window;
12 
13 /* Define the ThreadX demo thread control block and stack.  */
14 
15 TX_THREAD          demo_thread;
16 UCHAR              demo_thread_stack[4096];
17 
18 GX_WINDOW_ROOT    *root;
19 INT                alpha = 1;
20 INT                compress = 2;
21 INT                style_index = 3;
22 INT                depth_inex = 0;
23 GX_UBYTE           brush_alpha = 0xff;
24 
25 /* maps[depth_inex][style_index] */
26 GX_RESOURCE_ID   maps[3][4] = { { GX_PIXELMAP_ID_RAW_565RGB, GX_PIXELMAP_ID_ALPHA_565RGB, GX_PIXELMAP_ID_COMPRESS_565RGB, GX_PIXELMAP_ID_COMPRESS_ALPHA_565RGB },
27                                 { GX_PIXELMAP_ID_RAW_4444ARGB, GX_PIXELMAP_ID_ALPHA_4444ARGB, GX_PIXELMAP_ID_COMPRESS_4444ARGB, GX_PIXELMAP_ID_COMPRESS_ALPHA_4444ARGB },
28                                 { GX_PIXELMAP_ID_RAW_PALETTE, GX_PIXELMAP_ID_TRANSPARENT_PALETTE, GX_PIXELMAP_ID_COMPRESS_PALETTE, GX_PIXELMAP_ID_COMPRESS_TRANSPARENT_PALETTE } };
29 
30 /* Define prototypes.   */
31 VOID  demo_thread_entry(ULONG thread_input);
32 extern UINT win32_graphics_driver_setup_565rgb(GX_DISPLAY *display);
33 
34 
main(int argc,char ** argv)35 int main(int argc, char ** argv)
36 {
37   tx_kernel_enter();
38   return(0);
39 }
40 
41 
tx_application_define(void * first_unused_memory)42 VOID tx_application_define(void *first_unused_memory)
43 {
44 
45     /* Create the main demo thread.  */
46     tx_thread_create(&demo_thread, "GUIX Demo Thread", demo_thread_entry,
47                      0,  demo_thread_stack, sizeof(demo_thread_stack),
48                      1, 1, TX_NO_TIME_SLICE, TX_AUTO_START);
49 }
50 
51 
demo_thread_entry(ULONG thread_input)52 VOID  demo_thread_entry(ULONG thread_input)
53 {
54     /* Initialize GUIX.  */
55     gx_system_initialize();
56 
57 
58     gx_studio_display_configure(DISPLAY_1, win32_graphics_driver_setup_565rgb,
59                                 LANGUAGE_ENGLISH, DISPLAY_1_DEFAULT_THEME, &root);
60 
61     /* create the main screen */
62     gx_studio_named_widget_create("main_window", (GX_WIDGET *) root, (GX_WIDGET **) &pMainWin);
63     pic_window = &pMainWin ->main_window_pic_window;
64 
65     /* Show the root window to make it and patients screen visible.  */
66     gx_widget_show(root);
67 
68     /* let GUIX run */
69     gx_system_start();
70 }
71 
update_prompt_value(GX_PROMPT * pp,INT value)72 VOID update_prompt_value(GX_PROMPT *pp, INT value)
73 {
74     static GX_CHAR str_buf[10];
75     GX_STRING str;
76 
77     if (pp)
78     {
79         gx_utility_ltoa(value, str_buf, 10);
80         str.gx_string_ptr = str_buf;
81         str.gx_string_length = strnlen(str_buf, sizeof(str_buf) - 1);
82         gx_prompt_text_set_ext(pp, &str);
83     }
84 }
85 
main_event_handler(GX_WINDOW * window,GX_EVENT * myevent)86 UINT main_event_handler(GX_WINDOW *window, GX_EVENT *myevent)
87 {
88     GX_PROMPT *prompt;
89 
90     switch (myevent->gx_event_type)
91     {
92     case GX_SIGNAL(ID_BRUSH_ALPHA_SLIDER, GX_EVENT_SLIDER_VALUE):
93         brush_alpha = (GX_UBYTE)myevent->gx_event_payload.gx_event_longdata;
94         prompt = &pMainWin -> main_window_prompt_12_1;
95         update_prompt_value(prompt, brush_alpha);
96         break;
97 
98     case GX_SIGNAL(ID_ALPHA, GX_EVENT_TOGGLE_ON):
99         alpha = 1;
100         break;
101 
102     case GX_SIGNAL(ID_ALPHA, GX_EVENT_TOGGLE_OFF):
103         alpha = 0;
104         break;
105 
106     case GX_SIGNAL(ID_COMPRESSED, GX_EVENT_TOGGLE_ON):
107         compress = 2;
108         break;
109 
110     case GX_SIGNAL(ID_COMPRESSED, GX_EVENT_TOGGLE_OFF):
111         compress = 0;
112         break;
113 
114     case GX_SIGNAL(ID_565RGB_MAPS, GX_EVENT_RADIO_SELECT):
115         depth_inex = 0;
116         break;
117 
118     case GX_SIGNAL(ID_4444ARGB_MAPS, GX_EVENT_RADIO_SELECT):
119         depth_inex = 1;
120         break;
121 
122     case GX_SIGNAL(ID_PALETTE_MAPS, GX_EVENT_RADIO_SELECT):
123         depth_inex = 2;
124         break;
125 
126     default:
127         return gx_window_event_process(window, myevent);
128     }
129 
130     style_index = alpha + compress;
131     gx_window_wallpaper_set(pic_window, maps[depth_inex][style_index], GX_FALSE);
132     return 0;
133 }
134 
pic_win_draw(GX_WINDOW * window)135 VOID pic_win_draw(GX_WINDOW *window)
136 {
137 GX_BRUSH *brush;
138 
139     gx_context_brush_get(&brush);
140     brush -> gx_brush_alpha = brush_alpha;
141 
142     gx_window_draw((GX_WINDOW*) window);
143 }
144