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