1 /* This is a small demo of the high-performance GUIX graphics framework. */
2 
3 #include <stdio.h>
4 #include "gx_api.h"
5 
6 #include "pixelmaps_32bpp_resources.h"
7 #include "pixelmaps_32bpp_specifications.h"
8 
9 MAIN_WINDOW_CONTROL_BLOCK *pMainWin;
10 GX_WINDOW *pic_window;
11 
12 /* Define the ThreadX demo thread control block and stack.  */
13 
14 TX_THREAD          demo_thread;
15 UCHAR              demo_thread_stack[4096];
16 
17 GX_WINDOW_ROOT    *root;
18 INT                alpha = 1;
19 INT                compress = 2;
20 INT                style_index = 3;
21 INT                depth_inex = 0;
22 GX_UBYTE           brush_alpha = 0xff;
23 
24 /* maps[depth_inex][style_index] */
25 GX_RESOURCE_ID   maps[4][4] = { { GX_PIXELMAP_ID_RAW_32BPP, GX_PIXELMAP_ID_ALPHA_32BPP, GX_PIXELMAP_ID_COMPRESS_32BPP, GX_PIXELMAP_ID_COMPRESS_ALPHA_32BPP },
26                                 { 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_24xrgb(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_24xrgb,
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_32BPP_MAPS, GX_EVENT_RADIO_SELECT):
115         depth_inex = 0;
116         break;
117 
118     case GX_SIGNAL(ID_565RGB_MAPS, GX_EVENT_RADIO_SELECT):
119         depth_inex = 1;
120         break;
121 
122     case GX_SIGNAL(ID_4444ARGB_MAPS, GX_EVENT_RADIO_SELECT):
123         depth_inex = 2;
124         break;
125 
126     case GX_SIGNAL(ID_PALETTE_MAPS, GX_EVENT_RADIO_SELECT):
127         depth_inex = 3;
128         break;
129 
130     default:
131         return gx_window_event_process(window, myevent);
132     }
133 
134     style_index = alpha + compress;
135     gx_window_wallpaper_set(pic_window, maps[depth_inex][style_index], GX_FALSE);
136     return 0;
137 }
138 
pic_win_draw(GX_WINDOW * window)139 VOID pic_win_draw(GX_WINDOW *window)
140 {
141 GX_BRUSH *brush;
142 
143     gx_context_brush_get(&brush);
144     brush -> gx_brush_alpha = brush_alpha;
145 
146     gx_window_draw((GX_WINDOW*) window);
147 }
148