1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include "demo_guix_car_infotainment.h"
4
5 #if (MAIN_DISPLAY_X_RESOLUTION == 640)
6 #define SCREEN_WEATHER_WIN_OFF_SHIFT 84
7 #endif
8
9 static GX_RESOURCE_ID main_weather_icon_ids[] = { GX_PIXELMAP_ID_WEATHER_ICON_PARTLY_CLOUDY_OFF, GX_PIXELMAP_ID_WEATHER_ICON_PARTLY_CLOUDY };
10 static GX_RESOURCE_ID screen_weather_icon_ids[] = { GX_PIXELMAP_ID_WEATHER_ICON_PARTLY_CLOUDY_SMALL_OFF, GX_PIXELMAP_ID_WEATHER_ICON_PARTLY_CLOUDY_SMALL };
11 static GX_RESOURCE_ID logo_ids[] = { GX_PIXELMAP_ID_MICROSOFT_LOGO_OFF, GX_PIXELMAP_ID_MICROSOFT_AZURE_LOGO };
12 extern INT bottom_button_alpha;
13
14 /******************************************************************************************/
15 /* Deselect buttons in main screen. */
16 /******************************************************************************************/
screen_btn_deselect()17 VOID screen_btn_deselect()
18 {
19 GX_WIDGET *child = main_screen.main_screen_btn_window.gx_widget_first_child;
20
21 while (child)
22 {
23 if ((child->gx_widget_type == GX_TYPE_PIXELMAP_BUTTON) &&
24 (child->gx_widget_style & GX_STYLE_BUTTON_PUSHED))
25 {
26 ((GX_BUTTON *)child)->gx_button_deselect_handler(child, GX_FALSE);
27
28 return;
29 }
30
31 child = child->gx_widget_next;
32
33 }
34 }
35
36 /******************************************************************************************/
37 /* Enable/Disable child widgets. */
38 /******************************************************************************************/
enable_disable_widget(GX_WIDGET * parent,GX_BOOL enable)39 VOID enable_disable_widget(GX_WIDGET *parent, GX_BOOL enable)
40 {
41 GX_WIDGET* child = parent->gx_widget_first_child;
42
43 if (enable)
44 {
45 gx_widget_style_add(parent, GX_STYLE_ENABLED);
46 }
47 else
48 {
49 gx_widget_style_remove(parent, GX_STYLE_ENABLED);
50 }
51
52 while (child)
53 {
54 enable_disable_widget(child, enable);
55
56 child = child->gx_widget_next;
57 }
58 }
59
60 /******************************************************************************************/
61 /* Show/Hide screen contents. */
62 /******************************************************************************************/
show_hide_screen_contents(GX_WINDOW * parent,GX_BOOL show)63 VOID show_hide_screen_contents(GX_WINDOW* parent, GX_BOOL show)
64 {
65 GX_WIDGET *child = parent->gx_widget_first_child;
66 INT shift;
67
68 while (child)
69 {
70 switch (child->gx_widget_id)
71 {
72 case ID_MAIN_WEATHER_WIN:
73 enable_disable_widget(child, show);
74 gx_icon_pixelmap_set(&main_screen.main_screen_weather_icon, main_weather_icon_ids[show], main_weather_icon_ids[show]);
75 break;
76
77 case ID_SCREEN_WEATHER_WIN:
78 enable_disable_widget(child, show);
79 gx_icon_pixelmap_set(&((SCREEN_BASE_CONTROL_BLOCK *)parent)->screen_base_weather_icon, screen_weather_icon_ids[show], screen_weather_icon_ids[show]);
80
81 if (show)
82 {
83 shift = -SCREEN_WEATHER_WIN_OFF_SHIFT;
84 }
85 else
86 {
87 shift = SCREEN_WEATHER_WIN_OFF_SHIFT;
88 }
89 gx_widget_shift(child, shift, 0, GX_TRUE);
90 break;
91
92 case ID_BTN_WIN:
93 enable_disable_widget(child, show);
94
95 if (show)
96 {
97 bottom_button_alpha = 255;
98 }
99 else
100 {
101 bottom_button_alpha = 50;
102 }
103 break;
104
105 case ID_LOGO:
106 gx_icon_pixelmap_set((GX_ICON*)child, logo_ids[show] , logo_ids[show]);
107 break;
108
109 case ID_ON_OFF_BTN:
110 break;
111
112 default:
113 if (show)
114 {
115 gx_widget_show(child);
116 }
117 else
118 {
119 gx_widget_hide(child);
120 }
121 break;
122 }
123
124 child = child->gx_widget_next;
125 }
126 }
127
128 /******************************************************************************************/
129 /* Override the default event processing of "base" to handle signals from my child */
130 /* widgets. */
131 /******************************************************************************************/
base_event_process(GX_WINDOW * window,GX_EVENT * event_ptr)132 UINT base_event_process(GX_WINDOW* window, GX_EVENT* event_ptr)
133 {
134 switch (event_ptr->gx_event_type)
135 {
136 case GX_SIGNAL(ID_VEHICLE_BTN, GX_EVENT_RADIO_SELECT):
137 ToggleScreen((GX_WINDOW*)&vehicle_screen);
138 break;
139
140 case GX_SIGNAL(ID_CLIMATE_BTN, GX_EVENT_RADIO_SELECT):
141 ToggleScreen((GX_WINDOW*)&climate_screen);
142 break;
143
144 case GX_SIGNAL(ID_PHONE_BTN, GX_EVENT_RADIO_SELECT):
145 ToggleScreen((GX_WINDOW*)&phone_screen);
146 break;
147
148 case GX_SIGNAL(ID_AUDIO_BTN, GX_EVENT_RADIO_SELECT):
149 ToggleScreen((GX_WINDOW*)&audio_screen);
150 break;
151
152 case GX_SIGNAL(ID_VIDEO_BTN, GX_EVENT_RADIO_SELECT):
153 ToggleScreen((GX_WINDOW*)&video_screen);
154 break;
155
156 case GX_SIGNAL(ID_ON_OFF_BTN, GX_EVENT_CLICKED):
157 if (main_screen.main_screen_on_off_text.gx_prompt_text_id == GX_STRING_ID_OFF)
158 {
159 gx_window_wallpaper_set(window, GX_PIXELMAP_ID_BG_OFF, GX_PIXELMAP_ID_BG_OFF);
160 show_hide_screen_contents(window, GX_FALSE);
161 gx_prompt_text_id_set(&main_screen.main_screen_on_off_text, GX_STRING_ID_ON);
162 }
163 else
164 {
165 gx_window_wallpaper_set(window, GX_PIXELMAP_ID_BG_IMAGE, GX_PIXELMAP_ID_BG_IMAGE);
166 show_hide_screen_contents(window, GX_TRUE);
167 gx_prompt_text_id_set(&main_screen.main_screen_on_off_text, GX_STRING_ID_OFF);
168 }
169 break;
170
171 default:
172 return gx_window_event_process(window, event_ptr);
173 }
174
175 return 0;
176 }
177
178 /******************************************************************************************/
179 /* Override the default event processing of "screen_base" to handle signals from my */
180 /* child widgets. */
181 /******************************************************************************************/
screen_base_event_process(GX_WINDOW * window,GX_EVENT * event_ptr)182 UINT screen_base_event_process(GX_WINDOW *window, GX_EVENT *event_ptr)
183 {
184 switch (event_ptr->gx_event_type)
185 {
186 case GX_SIGNAL(ID_HOME_BTN, GX_EVENT_CLICKED):
187 ToggleScreen((GX_WINDOW *)&main_screen);
188 screen_btn_deselect();
189 break;
190
191 default:
192 return base_event_process(window, event_ptr);
193 }
194
195 return 0;
196 }