GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: gx_radial_progress_bar_event_process.c Lines: 42 42 100.0 %
Date: 2026-03-06 19:21:09 Branches: 21 21 100.0 %

Line Branch Exec Source
1
/***************************************************************************
2
 * Copyright (c) 2024 Microsoft Corporation
3
 * Copyright (c) 2026-present Eclipse ThreadX contributors
4
 *
5
 * This program and the accompanying materials are made available under the
6
 * terms of the MIT License which is available at
7
 * https://opensource.org/licenses/MIT.
8
 *
9
 * SPDX-License-Identifier: MIT
10
 **************************************************************************/
11
12
13
/**************************************************************************/
14
/**************************************************************************/
15
/**                                                                       */
16
/** GUIX Component                                                        */
17
/**                                                                       */
18
/**   Progress Bar Management (Radial Progress Bar)                       */
19
/**                                                                       */
20
/**************************************************************************/
21
22
#define GX_SOURCE_CODE
23
24
25
/* Include necessary system files.  */
26
27
#include "gx_api.h"
28
#include "gx_widget.h"
29
#include "gx_radial_progress_bar.h"
30
#include "gx_utility.h"
31
#include "gx_system.h"
32
#include "gx_canvas.h"
33
34
/**************************************************************************/
35
/*                                                                        */
36
/*  FUNCTION                                               RELEASE        */
37
/*                                                                        */
38
/*    _gx_radial_progress_bar_event_process               PORTABLE C      */
39
/*                                                           6.1.8        */
40
/*  AUTHOR                                                                */
41
/*                                                                        */
42
/*    Kenneth Maxwell, Microsoft Corporation                              */
43
/*                                                                        */
44
/*  DESCRIPTION                                                           */
45
/*                                                                        */
46
/*    This service processes a radial progress bar event.                 */
47
/*                                                                        */
48
/*  INPUT                                                                 */
49
/*                                                                        */
50
/*    radial_progress_bar                   Radial Progress Bar control   */
51
/*                                            block                       */
52
/*    event_ptr                             Pointer to event process      */
53
/*                                                                        */
54
/*  OUTPUT                                                                */
55
/*                                                                        */
56
/*    status                                Completion status             */
57
/*                                                                        */
58
/*  CALLS                                                                 */
59
/*                                                                        */
60
/*    _gx_widget_event_process              Default widget event process  */
61
/*    _gx_radial_progress_bar_resize        Resize the progress bar       */
62
/*    _gx_radial_progress_bar_value_calculate                             */
63
/*                                          Calculate the value of the    */
64
/*                                            progress bar                */
65
/*                                                                        */
66
/*  CALLED BY                                                             */
67
/*                                                                        */
68
/*    Application Code                                                    */
69
/*    GUIX Internal Code                                                  */
70
/*                                                                        */
71
/**************************************************************************/
72
965
UINT  _gx_radial_progress_bar_event_process(GX_RADIAL_PROGRESS_BAR *progress_bar, GX_EVENT *event_ptr)
73
{
74
UINT                         status;
75
INT                          x_dist;
76
INT                          y_dist;
77
INT                          dist;
78
GX_POINT                    *click;
79
GX_RADIAL_PROGRESS_BAR_INFO *info;
80
81
82
    /* Default status to success.  */
83
965
    status =  GX_SUCCESS;
84
85
    /* Process relative to the type of event.  */
86

965
    switch (event_ptr -> gx_event_type)
87
    {
88
158
    case GX_EVENT_SHOW:
89
158
        _gx_widget_event_process((GX_WIDGET *)progress_bar, event_ptr);
90
158
        break;
91
92
#if defined(GX_BRUSH_ALPHA_SUPPORT)
93
120
    case GX_EVENT_HIDE:
94
120
        _gx_widget_event_process((GX_WIDGET *)progress_bar, event_ptr);
95

120
        if ((progress_bar -> gx_radial_progress_bar_canvas.gx_canvas_memory) &&
96
            _gx_system_memory_free)
97
        {
98
4
            _gx_system_memory_free((VOID *)progress_bar -> gx_radial_progress_bar_canvas.gx_canvas_memory);
99
4
            _gx_canvas_delete(&progress_bar -> gx_radial_progress_bar_canvas);
100
        }
101
120
        break;
102
#endif
103
104
585
    case GX_EVENT_RESIZED:
105
585
        _gx_radial_progress_bar_resize(progress_bar);
106
585
        break;
107
108
27
    case GX_EVENT_PEN_DOWN:
109
27
        if (progress_bar -> gx_widget_style & GX_STYLE_ENABLED)
110
        {
111
26
            _gx_system_input_capture((GX_WIDGET *)progress_bar);
112
113
26
            info = &progress_bar -> gx_radial_progress_bar_info;
114
26
            click = &event_ptr -> gx_event_payload.gx_event_pointdata;
115
116
26
            x_dist = (INT)(click -> gx_point_x - info -> gx_radial_progress_bar_info_xcenter);
117
26
            y_dist = (INT)(click -> gx_point_y - info -> gx_radial_progress_bar_info_ycenter);
118
119
26
            dist = (x_dist * x_dist) + (y_dist * y_dist);
120
26
            dist = (INT)_gx_utility_math_sqrt((UINT)dist);
121
122
26
            if ((dist <= (INT)(info -> gx_radial_progress_bar_info_radius + (info -> gx_radial_progress_bar_info_selected_brush_width >> 1))) &&
123
25
                (dist >= (INT)(info -> gx_radial_progress_bar_info_radius - (info -> gx_radial_progress_bar_info_selected_brush_width >> 1))))
124
            {
125
                /* Calculate radial progress bar value.  */
126
17
                _gx_radial_progress_bar_value_calculate(progress_bar, event_ptr -> gx_event_payload.gx_event_pointdata);
127
            }
128
        }
129
        else
130
        {
131
1
            _gx_widget_event_to_parent((GX_WIDGET *)progress_bar, event_ptr);
132
        }
133
27
        break;
134
135
26
    case GX_EVENT_PEN_UP:
136
26
        if (progress_bar -> gx_widget_status & GX_STATUS_OWNS_INPUT)
137
        {
138
25
            _gx_system_input_release((GX_WIDGET *)progress_bar);
139
        }
140
        else
141
        {
142
1
            _gx_widget_event_to_parent((GX_WIDGET *)progress_bar, event_ptr);
143
        }
144
26
        break;
145
146
9
    case GX_EVENT_PEN_DRAG:
147
9
        if (progress_bar -> gx_widget_status & GX_STATUS_OWNS_INPUT)
148
        {
149
8
            _gx_radial_progress_bar_value_calculate(progress_bar, event_ptr -> gx_event_payload.gx_event_pointdata);
150
        }
151
        else
152
        {
153
1
            _gx_widget_event_to_parent((GX_WIDGET *)progress_bar, event_ptr);
154
        }
155
9
        break;
156
157
40
    default:
158
159
        /* Call the widget default processing.  */
160
40
        status = _gx_widget_event_process((GX_WIDGET *)progress_bar, event_ptr);
161
    }
162
163
    /* Return completion status.  */
164
965
    return(status);
165
}
166