1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include <stdio.h>
4 #include "gx_api.h"
5 #include "all_widgets_4bpp_resources.h"
6 #include "all_widgets_4bpp_specifications.h"
7
8 extern VOID memory_free(VOID *mem);
9
10 GX_PIXELMAP pixelmap_memory[2];
11 GX_PIXELMAP *png_to_4bit_gray_map = GX_NULL;
12 GX_PIXELMAP *jpeg_to_4bit_gray_map = GX_NULL;
13
14 GX_IMAGE_READER image_reader;
15 GX_UBYTE image_reader_mode = GX_IMAGE_READER_MODE_ALPHA | GX_IMAGE_READER_MODE_COMPRESS | GX_IMAGE_READER_MODE_DITHER;
16
17 /* Convert png/jpeg 4444argb format pixelmap. */
png_jpeg_to_4bit_gray_convert()18 void png_jpeg_to_4bit_gray_convert()
19 {
20 GX_PIXELMAP *pixelmap;
21
22 png_to_4bit_gray_map = &pixelmap_memory[0];
23 jpeg_to_4bit_gray_map = &pixelmap_memory[1];
24
25 gx_widget_pixelmap_get((GX_WIDGET *)&image_convert_screen.image_convert_screen_png_to_4bit_gray_win,
26 GX_PIXELMAP_ID_RED_APPLE_PNG, &pixelmap);
27
28 gx_image_reader_create(&image_reader,
29 pixelmap->gx_pixelmap_data,
30 pixelmap->gx_pixelmap_data_size,
31 GX_COLOR_FORMAT_4BIT_GRAY, image_reader_mode);
32
33 if (gx_image_reader_start(&image_reader, png_to_4bit_gray_map) != GX_SUCCESS)
34 {
35 png_to_4bit_gray_map = GX_NULL;
36 }
37
38 gx_widget_pixelmap_get((GX_WIDGET *)&image_convert_screen.image_convert_screen_jpeg_to_4bit_gray_win,
39 GX_PIXELMAP_ID_ICON_FOOT_JPEG, &pixelmap);
40
41 gx_image_reader_create(&image_reader,
42 pixelmap->gx_pixelmap_data,
43 pixelmap->gx_pixelmap_data_size,
44 GX_COLOR_FORMAT_4BIT_GRAY, image_reader_mode);
45
46 if (gx_image_reader_start(&image_reader, jpeg_to_4bit_gray_map) != GX_SUCCESS)
47 {
48 jpeg_to_4bit_gray_map = GX_NULL;
49 }
50 }
51
52 /* Cleanup converted pixlemap. */
cleanup_output_pixelmaps()53 void cleanup_output_pixelmaps()
54 {
55 if (png_to_4bit_gray_map)
56 {
57 if (png_to_4bit_gray_map->gx_pixelmap_data)
58 {
59 memory_free((VOID *)png_to_4bit_gray_map->gx_pixelmap_data);
60 png_to_4bit_gray_map->gx_pixelmap_data = GX_NULL;
61 }
62
63 if (png_to_4bit_gray_map->gx_pixelmap_aux_data)
64 {
65 memory_free((VOID *)png_to_4bit_gray_map->gx_pixelmap_aux_data);
66 png_to_4bit_gray_map->gx_pixelmap_aux_data = GX_NULL;
67 }
68 png_to_4bit_gray_map = GX_NULL;
69 }
70
71 if (jpeg_to_4bit_gray_map)
72 {
73 if (jpeg_to_4bit_gray_map->gx_pixelmap_data)
74 {
75 memory_free((VOID *)jpeg_to_4bit_gray_map->gx_pixelmap_data);
76 jpeg_to_4bit_gray_map->gx_pixelmap_data = GX_NULL;
77 }
78
79 if (jpeg_to_4bit_gray_map->gx_pixelmap_aux_data)
80 {
81 memory_free((VOID *)jpeg_to_4bit_gray_map->gx_pixelmap_aux_data);
82 jpeg_to_4bit_gray_map->gx_pixelmap_aux_data = GX_NULL;
83 }
84 jpeg_to_4bit_gray_map = GX_NULL;
85 }
86 }
87
convert_start()88 void convert_start()
89 {
90 cleanup_output_pixelmaps();
91 png_jpeg_to_4bit_gray_convert();
92 gx_system_dirty_mark((GX_WIDGET *)&image_convert_screen.image_convert_screen_png_to_4bit_gray_win);
93 gx_system_dirty_mark((GX_WIDGET *)&image_convert_screen.image_convert_screen_jpeg_to_4bit_gray_win);
94 }
95
image_convert_screen_handler(GX_WINDOW * window,GX_EVENT * event_ptr)96 UINT image_convert_screen_handler(GX_WINDOW *window, GX_EVENT *event_ptr)
97 {
98 switch (event_ptr->gx_event_type)
99 {
100 case GX_EVENT_SHOW:
101 gx_window_event_process(window, event_ptr);
102 png_jpeg_to_4bit_gray_convert();
103 break;
104
105 case GX_EVENT_HIDE:
106 gx_window_event_process(window, event_ptr);
107 cleanup_output_pixelmaps();
108 break;
109
110 case GX_SIGNAL(ID_ALPHA, GX_EVENT_TOGGLE_ON):
111 image_reader_mode |= GX_IMAGE_READER_MODE_ALPHA;
112 convert_start();
113 break;
114
115 case GX_SIGNAL(ID_ALPHA, GX_EVENT_TOGGLE_OFF):
116 image_reader_mode &= ~GX_IMAGE_READER_MODE_ALPHA;
117 convert_start();
118 break;
119
120 case GX_SIGNAL(ID_COMPRESSED, GX_EVENT_TOGGLE_ON):
121 image_reader_mode |= GX_IMAGE_READER_MODE_COMPRESS;
122 convert_start();
123 break;
124
125 case GX_SIGNAL(ID_COMPRESSED, GX_EVENT_TOGGLE_OFF):
126 image_reader_mode &= ~GX_IMAGE_READER_MODE_COMPRESS;
127 convert_start();
128 break;
129
130 case GX_SIGNAL(ID_DITHER, GX_EVENT_TOGGLE_ON):
131 image_reader_mode |= GX_IMAGE_READER_MODE_DITHER;
132 convert_start();
133 break;
134
135 case GX_SIGNAL(ID_DITHER, GX_EVENT_TOGGLE_OFF):
136 image_reader_mode &= ~GX_IMAGE_READER_MODE_DITHER;
137 convert_start();
138 break;
139
140 default:
141 return next_button_handler(window, event_ptr);
142 }
143
144 return GX_SUCCESS;
145 }
146
png_to_4bit_gray_win_draw(GX_WINDOW * window)147 VOID png_to_4bit_gray_win_draw(GX_WINDOW *window)
148 {
149 int xpos;
150 int ypos;
151
152 gx_widget_background_draw(window);
153
154 if (png_to_4bit_gray_map)
155 {
156 xpos = window->gx_window_client.gx_rectangle_left + 10;
157 ypos = window->gx_widget_clip.gx_rectangle_top + 10;
158
159 gx_canvas_pixelmap_draw(xpos, ypos, png_to_4bit_gray_map);
160 }
161 }
162
jpeg_to_4bit_gray_win_draw(GX_WINDOW * window)163 VOID jpeg_to_4bit_gray_win_draw(GX_WINDOW *window)
164 {
165 int xpos;
166 int ypos;
167
168 gx_widget_background_draw(window);
169
170 if (jpeg_to_4bit_gray_map)
171 {
172 xpos = window->gx_window_client.gx_rectangle_left + 10;
173 ypos = window->gx_widget_clip.gx_rectangle_top + 10;
174
175 gx_canvas_pixelmap_draw(xpos, ypos, jpeg_to_4bit_gray_map);
176 }
177 }
178