GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: gx_radial_slider_anchor_angle_calculate.c Lines: 24 24 100.0 %
Date: 2026-03-06 19:21:09 Branches: 18 18 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
/**   Radial Slider Management (Slider)                                   */
19
/**                                                                       */
20
/**************************************************************************/
21
22
#define GX_SOURCE_CODE
23
24
25
/* Include necessary system files.  */
26
27
#include "gx_api.h"
28
#include "gx_radial_slider.h"
29
30
/**************************************************************************/
31
/*                                                                        */
32
/*  FUNCTION                                               RELEASE        */
33
/*                                                                        */
34
/*    _gx_radial_slider_anchor_angle_calculate            PORTABLE C      */
35
/*                                                           6.1          */
36
/*  AUTHOR                                                                */
37
/*                                                                        */
38
/*    Kenneth Maxwell, Microsoft Corporation                              */
39
/*                                                                        */
40
/*  DESCRIPTION                                                           */
41
/*                                                                        */
42
/*    This service retrieves the nearest anchor angle for the specified   */
43
/*    angle value.                                                        */
44
/*                                                                        */
45
/*  INPUT                                                                 */
46
/*                                                                        */
47
/*    slider                                Radial slider control block   */
48
/*    angle_value                           Angle value whose neareast    */
49
/*                                            anchor angle is calculated  */
50
/*                                                                        */
51
/*  OUTPUT                                                                */
52
/*                                                                        */
53
/*    status                                Completion status             */
54
/*                                                                        */
55
/*  CALLS                                                                 */
56
/*                                                                        */
57
/*    None                                                                */
58
/*                                                                        */
59
/*  CALLED BY                                                             */
60
/*                                                                        */
61
/*    GUIX Internal Code                                                  */
62
/*                                                                        */
63
/**************************************************************************/
64
19
UINT _gx_radial_slider_anchor_angle_calculate(GX_RADIAL_SLIDER *slider, GX_VALUE *angle_value)
65
{
66
INT                    index;
67
GX_VALUE               min_value;
68
GX_VALUE               max_value;
69
GX_VALUE               neareast_anchor_value;
70
19
GX_RADIAL_SLIDER_INFO *info = &slider -> gx_radial_slider_info;
71
72
19
    index = 0;
73
74
    /* Range angle value inside min/max angles. */
75
19
    if (*angle_value <= info->gx_radial_slider_info_min_angle)
76
    {
77
2
        neareast_anchor_value = info->gx_radial_slider_info_min_angle;
78
    }
79
17
    else if (*angle_value >= info->gx_radial_slider_info_max_angle)
80
    {
81
2
        neareast_anchor_value = info->gx_radial_slider_info_max_angle;
82
    }
83
    else
84
    {
85
15
        neareast_anchor_value = *angle_value;
86
    }
87
88
19
    if (info -> gx_radial_slider_info_angle_list)
89
    {
90
        /* If an angle list is supplied, set the target value to one of the values
91
           in angle list that is nearest to the given value. */
92
70
        while (index < info -> gx_radial_slider_info_list_count)
93
        {
94
69
            if (index == 0)
95
            {
96
9
                min_value = info -> gx_radial_slider_info_angle_list[index];
97
            }
98
            else
99
            {
100
60
                min_value = (GX_VALUE)((info -> gx_radial_slider_info_angle_list[index] + info -> gx_radial_slider_info_angle_list[index - 1]) >> 1);
101
            }
102
103
69
            if (index == info -> gx_radial_slider_info_list_count - 1)
104
            {
105
2
                max_value = info -> gx_radial_slider_info_angle_list[index];
106
            }
107
            else
108
            {
109
67
                max_value = (GX_VALUE)((info -> gx_radial_slider_info_angle_list[index] + info -> gx_radial_slider_info_angle_list[index + 1]) >> 1);
110
            }
111
112
69
            if (min_value > max_value)
113
            {
114
59
                GX_SWAP_VALS(min_value, max_value);
115
            }
116
117

69
            if ((neareast_anchor_value >= min_value) && (neareast_anchor_value <= max_value))
118
            {
119
8
                neareast_anchor_value = info -> gx_radial_slider_info_angle_list[index];
120
8
                break;
121
            }
122
123
61
            index++;
124
        }
125
    }
126
127
19
    (*angle_value) = neareast_anchor_value;
128
129
19
    return(GX_SUCCESS);
130
}
131