1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include "demo_guix_car_infotainment.h"
4
5 static INT video_play_ticks = 0;
6 static INT video_play_total_seconds = 12;
7
8 /******************************************************************************************/
9 /* Play video. */
10 /******************************************************************************************/
video_play()11 VOID video_play()
12 {
13 gx_widget_detach(&video_screen.video_screen_play_btn_big_win);
14 gx_widget_style_add(&video_screen.video_screen_play_btn_small, GX_STYLE_BUTTON_PUSHED);
15 gx_system_timer_start(&video_screen, TIMER_ID_VIDEO_PLAY_PROGRESS_ANIMATION, 1, 1);
16 }
17
18 /******************************************************************************************/
19 /* Pause video play. */
20 /******************************************************************************************/
video_pause()21 VOID video_pause()
22 {
23 gx_widget_attach(&video_screen, &video_screen.video_screen_play_btn_big_win);
24 gx_system_timer_stop(&video_screen, 0);
25 }
26
27 /******************************************************************************************/
28 /* Update video play progress. */
29 /******************************************************************************************/
video_play_update()30 VOID video_play_update()
31 {
32 INT progress_val;
33 INT seconds;
34
35 video_play_ticks++;
36
37 seconds = video_play_ticks / GX_TICKS_SECOND;
38
39 if (seconds > video_play_total_seconds)
40 {
41 video_play_ticks = 0;
42 }
43
44 gx_numeric_prompt_value_set(&video_screen.video_screen_minute, seconds / 60);
45 gx_numeric_prompt_value_set(&video_screen.video_screen_second, seconds % 60);
46
47 progress_val = video_play_ticks * 100 / (video_play_total_seconds * GX_TICKS_SECOND);
48 gx_progress_bar_value_set(&video_screen.video_screen_video_play_progress_bar, progress_val);
49 }
50
51 /******************************************************************************************/
52 /* Override the default event processing of "video_screen" to handle signals from my */
53 /* child widgets. */
54 /******************************************************************************************/
video_screen_event_process(GX_WINDOW * window,GX_EVENT * event_ptr)55 UINT video_screen_event_process(GX_WINDOW *window, GX_EVENT *event_ptr)
56 {
57 switch (event_ptr->gx_event_type)
58 {
59 case GX_EVENT_SHOW:
60 gx_numeric_prompt_value_set(&video_screen.video_screen_minute, 0);
61 gx_numeric_prompt_value_set(&video_screen.video_screen_second, 0);
62 gx_progress_bar_value_set(&video_screen.video_screen_video_play_progress_bar, 0);
63 screen_base_event_process(window, event_ptr);
64 break;
65
66 case GX_SIGNAL(ID_PLAY_BTN_BIG, GX_EVENT_CLICKED):
67 case GX_SIGNAL(ID_PLAY_BTN_SMALL, GX_EVENT_TOGGLE_ON):
68 /* Play. */
69 video_play();
70 break;
71
72 case GX_SIGNAL(ID_PLAY_BTN_SMALL, GX_EVENT_TOGGLE_OFF):
73 /* Pause. */
74 video_pause();
75 break;
76
77 case GX_EVENT_TIMER:
78 if (event_ptr->gx_event_payload.gx_event_timer_id == TIMER_ID_VIDEO_PLAY_PROGRESS_ANIMATION)
79 {
80 video_play_update();
81 }
82 else
83 {
84 screen_base_event_process(window, event_ptr);
85 }
86 break;
87
88 default:
89 return screen_base_event_process(window, event_ptr);
90 }
91
92 return 0;
93 }
94
95 /******************************************************************************************/
96 /* Define custom pixelmap button draw function. */
97 /******************************************************************************************/
video_screen_pixelmap_button_draw(GX_PIXELMAP_BUTTON * button)98 VOID video_screen_pixelmap_button_draw(GX_PIXELMAP_BUTTON *button)
99 {
100 if (button->gx_widget_style & GX_STYLE_BUTTON_PUSHED)
101 {
102 gx_widget_fill_color_set(button, GX_COLOR_ID_LIGHT_GREEN, GX_COLOR_ID_LIGHT_GREEN, GX_COLOR_ID_LIGHT_GREEN);
103 }
104 else
105 {
106 gx_widget_fill_color_set(button, GX_COLOR_ID_GRAY, GX_COLOR_ID_GRAY, GX_COLOR_ID_GRAY);
107 }
108
109 gx_pixelmap_button_draw(button);
110 }