• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_LOADING_PROGRESS_LOADING_PROGRESS_UTILLL_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_LOADING_PROGRESS_LOADING_PROGRESS_UTILLL_H
18 
19 #include "base/geometry/dimension.h"
20 #include "base/utils/utils.h"
21 #include "core/components_ng/pattern/loading_progress/loading_progress_base.h"
22 namespace OHOS::Ace::NG {
23 namespace {
24 constexpr int32_t DEFAULT_INDEX = 3;
25 constexpr uint32_t SIZE = 6;
26 const Dimension RING_STROKE_WIDTH[] = { 1.12_vp, 1.5_vp, 1.76_vp, 1.9_vp, 2.16_vp, 2.28_vp };
27 const Dimension COMET_RADIUS[] = { 1.2_vp, 1.8_vp, 2.4_vp, 3.0_vp, 3.36_vp, 4.18_vp };
28 const Dimension DIAMETER[] = { 16.0_vp, 24.0_vp, 32.0_vp, 40.0_vp, 48.0_vp, 76.0_vp};
29 const Dimension MODE_16 = 16.0_vp;
30 const Dimension MODE_24 = 24.0_vp;
31 const Dimension MODE_32 = 32.0_vp;
32 const Dimension MODE_40 = 40.0_vp;
33 const Dimension MODE_48 = 48.0_vp;
34 const Dimension MODE_76 = 76.0_vp;
35 
36 constexpr Dimension RING_RADIUS_BASE40 = 10.5_vp;
37 constexpr Dimension ORBIT_RADIUS_BASE40 = 17.0_vp;
38 } // namespace
39 class LoadingProgressUtill {
40 public:
41     LoadingProgressUtill() = default;
42     ~LoadingProgressUtill() = default;
43 
GetRingRadius(float diameter)44     static float GetRingRadius(float diameter)
45     {
46         return RING_RADIUS_BASE40.ConvertToPx() * diameter / MODE_40.ConvertToPx();
47     }
48 
GetOrbitRadius(float diameter)49     static float GetOrbitRadius(float diameter)
50     {
51         return ORBIT_RADIUS_BASE40.ConvertToPx() * diameter / MODE_40.ConvertToPx();
52     }
53 
GetRingStrokeWidth(float diameter)54     static float GetRingStrokeWidth(float diameter)
55     {
56         if (LessOrEqual(diameter, MODE_16.ConvertToPx())) {
57             return diameter / MODE_16.ConvertToPx() * RING_STROKE_WIDTH[0].ConvertToPx();
58         } else if (GreatOrEqual(diameter, MODE_76.ConvertToPx())) {
59             return GetMostStrokeWidth(diameter);
60         } else {
61             for (uint32_t index = 1; index < SIZE; index++) {
62                 if (LessOrEqual(diameter, DIAMETER[index].ConvertToPx())) {
63                     return CalculateValue(diameter, DIAMETER[index - 1].ConvertToPx(), DIAMETER[index].ConvertToPx(),
64                         RING_STROKE_WIDTH[index - 1].ConvertToPx(), RING_STROKE_WIDTH[index].ConvertToPx());
65                 }
66             }
67         }
68         return RING_STROKE_WIDTH[DEFAULT_INDEX].ConvertToPx();
69     }
70 
GetCometRadius(float diameter)71     static float GetCometRadius(float diameter)
72     {
73         if (LessOrEqual(diameter, MODE_16.ConvertToPx())) {
74             return diameter / MODE_16.ConvertToPx() * COMET_RADIUS[0].ConvertToPx();
75         } else if (GreatOrEqual(diameter, MODE_76.ConvertToPx())) {
76             return GetMostCometRadius(diameter);
77         } else {
78             for (uint32_t index = 1; index < SIZE; index++) {
79                 if (LessOrEqual(diameter, DIAMETER[index].ConvertToPx())) {
80                     return CalculateValue(diameter, DIAMETER[index - 1].ConvertToPx(), DIAMETER[index].ConvertToPx(),
81                         COMET_RADIUS[index - 1].ConvertToPx(), COMET_RADIUS[index].ConvertToPx());
82                 }
83             }
84         }
85         return COMET_RADIUS[DEFAULT_INDEX].ConvertToPx();
86     }
87 
GetMostStrokeWidth(float diameter)88     static float GetMostStrokeWidth(float diameter)
89     {
90         auto index_76 = static_cast<uint32_t>(LoadingProgressBase::BASE76);
91         auto strokeWidth_76 =
92             RING_STROKE_WIDTH[index_76].ConvertToPx() / (MODE_76.ConvertToPx() / MODE_40.ConvertToPx());
93         return strokeWidth_76 * (diameter / MODE_40.ConvertToPx());
94     }
95 
GetMostCometRadius(float diameter)96     static float GetMostCometRadius(float diameter)
97     {
98         auto index_76 = static_cast<uint32_t>(LoadingProgressBase::BASE76);
99         auto cometRadius_76 = COMET_RADIUS[index_76].ConvertToPx() / (MODE_76.ConvertToPx() / MODE_40.ConvertToPx());
100         return cometRadius_76 * (diameter / MODE_40.ConvertToPx());
101     }
102 
103 private:
CalculateValue(float inputValue,float minInput,float maxInput,float minOutPut,float maxOutput)104     static float CalculateValue(float inputValue, float minInput, float maxInput, float minOutPut, float maxOutput)
105     {
106         auto inputScale = (inputValue - minInput) / (maxInput - minInput);
107         return (maxOutput - minOutPut) * inputScale + minOutPut;
108     }
109 };
110 } // namespace OHOS::Ace::NG
111 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NG_PATTERNS_LOADING_PROGRESS_LOADING_PROGRESS_UTILLL_H
112