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