1 /* This is a demo of the high-performance GUIX graphics framework. */
2 
3 #include <stdio.h>
4 #include "gx_api.h"
5 #include "guix_widget_types_resources.h"
6 #include "guix_widget_types_specifications.h"
7 
8 #define MAX_TEXT_LENGTH 10
9 
10 extern GX_WINDOW_ROOT    *root;
11 
12 static GX_CHAR prompt_text_animated[MAX_TEXT_LENGTH + 1];
13 static GX_CHAR prompt_text_not_animated[MAX_TEXT_LENGTH + 1];
14 extern UINT string_length_get(GX_CONST GX_CHAR* input_string, UINT max_string_length);
15 
16 /******************************************************************************************/
set_speed_value(int id,int value)17 void set_speed_value(int id, int value)
18 {
19     GX_PROMPT *prompt;
20     GX_STRING string;
21 
22     if (id == 1)
23     {
24         prompt = &(&Gauge_Screen)->Gauge_Screen_prompt_animated;
25         string.gx_string_ptr = prompt_text_animated;
26     }
27     else
28     {
29         prompt = &(&Gauge_Screen)->Gauge_Screen_prompt_not_animated;
30         string.gx_string_ptr = prompt_text_not_animated;
31     }
32 
33     gx_utility_ltoa(value, (GX_CHAR *)string.gx_string_ptr, MAX_TEXT_LENGTH + 1);
34 
35     string.gx_string_length = string_length_get(string.gx_string_ptr, MAX_TEXT_LENGTH);
36     gx_prompt_text_set_ext(prompt, &string);
37 }
38 
39 /******************************************************************************************/
gauge_window_event_handler(GX_WINDOW * win,GX_EVENT * event_ptr)40 UINT gauge_window_event_handler(GX_WINDOW *win, GX_EVENT *event_ptr)
41 {
42     int pos;
43     GX_CIRCULAR_GAUGE *gauge;
44 
45     switch (event_ptr->gx_event_type)
46     {
47     case GX_SIGNAL(ID_SLIDER_ANIMATED, GX_EVENT_SLIDER_VALUE):
48         /* Change needle position. */
49         pos = event_ptr->gx_event_payload.gx_event_longdata;
50         set_speed_value(1, pos);
51         gx_widget_find(win, ID_GAUGE_ANIMATED, GX_SEARCH_DEPTH_INFINITE, &gauge);
52         pos = pos * 22 / 10 - 109;
53         gx_circular_gauge_angle_set(gauge, pos);
54         break;
55 
56     case GX_SIGNAL(ID_SLIDER_NOT_ANIMATED, GX_EVENT_SLIDER_VALUE):
57         /* Change needle position of gauge 1*/
58         pos = event_ptr->gx_event_payload.gx_event_longdata;
59         set_speed_value(2, pos);
60         gx_widget_find(win, ID_GAUGE_NOT_ANIMATED, GX_SEARCH_DEPTH_INFINITE, &gauge);
61         pos =  pos * 22 / 10 - 109;
62         gx_circular_gauge_angle_set(gauge, pos);
63         break;
64 
65     default:
66         return gx_window_event_process(win, event_ptr);
67     }
68     return 0;
69 }
70