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 }