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