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 #include "core/interfaces/native/node/pattern_lock_modifier.h"
17 #include "core/components_v2/pattern_lock/pattern_lock_theme.h"
18 #include "core/components/common/layout/constants.h"
19 #include "core/components/common/properties/alignment.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/base/view_abstract.h"
22 #include "core/components_ng/pattern/patternlock/patternlock_model_ng.h"
23 #include "core/pipeline/base/element_register.h"
24 namespace OHOS::Ace::NG {
SetPatternLockActiveColor(ArkUINodeHandle node,uint32_t value)25 void SetPatternLockActiveColor(ArkUINodeHandle node, uint32_t value)
26 {
27     auto *frameNode = reinterpret_cast<FrameNode*>(node);
28     CHECK_NULL_VOID(frameNode);
29     PatternLockModelNG::SetActiveColor(frameNode, Color(value));
30 }
31 
ResetPatternLockActiveColor(ArkUINodeHandle node)32 void ResetPatternLockActiveColor(ArkUINodeHandle node)
33 {
34     auto *frameNode = reinterpret_cast<FrameNode*>(node);
35     CHECK_NULL_VOID(frameNode);
36     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
37     CHECK_NULL_VOID(patternLockTheme);
38     Color activeColor = patternLockTheme->GetActiveColor();
39     PatternLockModelNG::SetActiveColor(frameNode, activeColor);
40 }
41 
ResetPatternLockCircleRadius(ArkUINodeHandle node)42 void ResetPatternLockCircleRadius(ArkUINodeHandle node)
43 {
44     auto *frameNode = reinterpret_cast<FrameNode*>(node);
45     CHECK_NULL_VOID(frameNode);
46     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
47     CHECK_NULL_VOID(patternLockTheme);
48     CalcDimension radius = patternLockTheme->GetCircleRadius();
49     PatternLockModelNG::SetCircleRadius(frameNode, Dimension(radius.Value(), radius.Unit()));
50 }
51 
SetPatternLockCircleRadius(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)52 void SetPatternLockCircleRadius(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
53 {
54     auto *frameNode = reinterpret_cast<FrameNode*>(node);
55     CHECK_NULL_VOID(frameNode);
56     PatternLockModelNG::SetCircleRadius(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
57 }
58 
SetPatternLockSelectedColor(ArkUINodeHandle node,uint32_t value)59 void SetPatternLockSelectedColor(ArkUINodeHandle node, uint32_t value)
60 {
61     auto *frameNode = reinterpret_cast<FrameNode*>(node);
62     CHECK_NULL_VOID(frameNode);
63     PatternLockModelNG::SetSelectedColor(frameNode, Color(value));
64 }
65 
ResetPatternLockSelectedColor(ArkUINodeHandle node)66 void ResetPatternLockSelectedColor(ArkUINodeHandle node)
67 {
68     auto *frameNode = reinterpret_cast<FrameNode*>(node);
69     CHECK_NULL_VOID(frameNode);
70     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
71     CHECK_NULL_VOID(patternLockTheme);
72     Color selectedColor = patternLockTheme->GetSelectedColor();
73     PatternLockModelNG::SetSelectedColor(frameNode, selectedColor);
74 }
75 
SetPatternLockSideLength(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)76 void SetPatternLockSideLength(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
77 {
78     auto *frameNode = reinterpret_cast<FrameNode*>(node);
79     CHECK_NULL_VOID(frameNode);
80     PatternLockModelNG::SetSideLength(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
81 }
82 
ResetPatternLockSideLength(ArkUINodeHandle node)83 void ResetPatternLockSideLength(ArkUINodeHandle node)
84 {
85     auto *frameNode = reinterpret_cast<FrameNode*>(node);
86     CHECK_NULL_VOID(frameNode);
87     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
88     CHECK_NULL_VOID(patternLockTheme);
89     CalcDimension sideLength = patternLockTheme->GetSideLength();
90     PatternLockModelNG::SetSideLength(frameNode, Dimension(sideLength.Value(), sideLength.Unit()));
91 }
92 
SetPatternLockAutoReset(ArkUINodeHandle node,uint32_t value)93 void SetPatternLockAutoReset(ArkUINodeHandle node, uint32_t value)
94 {
95     auto *frameNode = reinterpret_cast<FrameNode*>(node);
96     CHECK_NULL_VOID(frameNode);
97     PatternLockModelNG::SetAutoReset(frameNode, static_cast<bool>(value));
98 }
99 
ResetPatternLockAutoReset(ArkUINodeHandle node)100 void ResetPatternLockAutoReset(ArkUINodeHandle node)
101 {
102     auto *frameNode = reinterpret_cast<FrameNode*>(node);
103     CHECK_NULL_VOID(frameNode);
104     PatternLockModelNG::SetAutoReset(frameNode, true);
105 }
106 
SetPatternLockPathStrokeWidth(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)107 void SetPatternLockPathStrokeWidth(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
108 {
109     auto *frameNode = reinterpret_cast<FrameNode*>(node);
110     CHECK_NULL_VOID(frameNode);
111     PatternLockModelNG::SetStrokeWidth(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
112 }
113 
ResetPatternLockPathStrokeWidth(ArkUINodeHandle node)114 void ResetPatternLockPathStrokeWidth(ArkUINodeHandle node)
115 {
116     auto *frameNode = reinterpret_cast<FrameNode*>(node);
117     CHECK_NULL_VOID(frameNode);
118     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
119     CHECK_NULL_VOID(patternLockTheme);
120     CalcDimension lineWidth = patternLockTheme->GetPathStrokeWidth();
121     PatternLockModelNG::SetStrokeWidth(frameNode, lineWidth);
122 }
123 
SetPatternLockRegularColor(ArkUINodeHandle node,uint32_t color)124 void SetPatternLockRegularColor(ArkUINodeHandle node, uint32_t color)
125 {
126     auto *frameNode = reinterpret_cast<FrameNode*>(node);
127     CHECK_NULL_VOID(frameNode);
128     PatternLockModelNG::SetRegularColor(frameNode, Color(color));
129 }
130 
ResetPatternLockRegularColor(ArkUINodeHandle node)131 void ResetPatternLockRegularColor(ArkUINodeHandle node)
132 {
133     auto *frameNode = reinterpret_cast<FrameNode*>(node);
134     CHECK_NULL_VOID(frameNode);
135     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
136     CHECK_NULL_VOID(patternLockTheme);
137     Color regularColor = patternLockTheme->GetRegularColor();
138     PatternLockModelNG::SetRegularColor(frameNode, regularColor);
139 }
140 
SetPatternLockPathColor(ArkUINodeHandle node,uint32_t color)141 void SetPatternLockPathColor(ArkUINodeHandle node, uint32_t color)
142 {
143     auto *frameNode = reinterpret_cast<FrameNode*>(node);
144     CHECK_NULL_VOID(frameNode);
145     PatternLockModelNG::SetPathColor(frameNode, Color(color));
146 }
147 
ResetPatternLockPathColor(ArkUINodeHandle node)148 void ResetPatternLockPathColor(ArkUINodeHandle node)
149 {
150     auto *frameNode = reinterpret_cast<FrameNode*>(node);
151     CHECK_NULL_VOID(frameNode);
152     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
153     CHECK_NULL_VOID(patternLockTheme);
154     Color pathColor = patternLockTheme->GetPathColor();
155     PatternLockModelNG::SetPathColor(frameNode, pathColor);
156 }
157 
SetPatternLockActiveCircleColor(ArkUINodeHandle node,uint32_t value)158 void SetPatternLockActiveCircleColor(ArkUINodeHandle node, uint32_t value)
159 {
160     auto *frameNode = reinterpret_cast<FrameNode*>(node);
161     CHECK_NULL_VOID(frameNode);
162     PatternLockModelNG::SetActiveCircleColor(frameNode, Color(value));
163 }
164 
ResetPatternLockActiveCircleColor(ArkUINodeHandle node)165 void ResetPatternLockActiveCircleColor(ArkUINodeHandle node)
166 {
167     auto *frameNode = reinterpret_cast<FrameNode*>(node);
168     CHECK_NULL_VOID(frameNode);
169     PatternLockModelNG::SetActiveCircleColor(frameNode, Color::TRANSPARENT);
170 }
171 
SetPatternLockActiveCircleRadius(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)172 void SetPatternLockActiveCircleRadius(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
173 {
174     auto *frameNode = reinterpret_cast<FrameNode*>(node);
175     CHECK_NULL_VOID(frameNode);
176     PatternLockModelNG::SetActiveCircleRadius(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
177 }
178 
ResetPatternLockActiveCircleRadius(ArkUINodeHandle node)179 void ResetPatternLockActiveCircleRadius(ArkUINodeHandle node)
180 {
181     auto *frameNode = reinterpret_cast<FrameNode*>(node);
182     CHECK_NULL_VOID(frameNode);
183     auto patternLockTheme = GetTheme<V2::PatternLockTheme>();
184     CHECK_NULL_VOID(patternLockTheme);
185     CalcDimension radius = patternLockTheme->GetCircleRadius();
186     PatternLockModelNG::SetActiveCircleRadius(frameNode, Dimension(0.0f, DimensionUnit::VP));
187 }
188 
SetPatternLockEnableWaveEffect(ArkUINodeHandle node,uint32_t value)189 void SetPatternLockEnableWaveEffect(ArkUINodeHandle node, uint32_t value)
190 {
191     auto *frameNode = reinterpret_cast<FrameNode*>(node);
192     CHECK_NULL_VOID(frameNode);
193     PatternLockModelNG::SetEnableWaveEffect(frameNode, static_cast<bool>(value));
194 }
195 
ResetPatternLockEnableWaveEffect(ArkUINodeHandle node)196 void ResetPatternLockEnableWaveEffect(ArkUINodeHandle node)
197 {
198     auto *frameNode = reinterpret_cast<FrameNode*>(node);
199     CHECK_NULL_VOID(frameNode);
200     PatternLockModelNG::SetEnableWaveEffect(frameNode, true);
201 }
202 
203 namespace NodeModifier {
GetPatternLockModifier()204 const ArkUIPatternLockModifier* GetPatternLockModifier()
205 {
206     static const ArkUIPatternLockModifier modifier = {
207         SetPatternLockActiveColor, ResetPatternLockActiveColor, SetPatternLockCircleRadius,
208         ResetPatternLockCircleRadius, SetPatternLockSelectedColor, ResetPatternLockSelectedColor,
209         SetPatternLockSideLength, ResetPatternLockSideLength, SetPatternLockAutoReset,
210         ResetPatternLockAutoReset, SetPatternLockPathStrokeWidth, ResetPatternLockPathStrokeWidth,
211         SetPatternLockRegularColor, ResetPatternLockRegularColor, SetPatternLockPathColor,
212         ResetPatternLockPathColor, SetPatternLockActiveCircleColor, ResetPatternLockActiveCircleColor,
213         SetPatternLockActiveCircleRadius, ResetPatternLockActiveCircleRadius, SetPatternLockEnableWaveEffect,
214         ResetPatternLockEnableWaveEffect
215     };
216     return &modifier;
217 }
218 
GetCJUIPatternLockModifier()219 const CJUIPatternLockModifier* GetCJUIPatternLockModifier()
220 {
221     static const CJUIPatternLockModifier modifier = {
222         SetPatternLockActiveColor, ResetPatternLockActiveColor, SetPatternLockCircleRadius,
223         ResetPatternLockCircleRadius, SetPatternLockSelectedColor, ResetPatternLockSelectedColor,
224         SetPatternLockSideLength, ResetPatternLockSideLength, SetPatternLockAutoReset,
225         ResetPatternLockAutoReset, SetPatternLockPathStrokeWidth, ResetPatternLockPathStrokeWidth,
226         SetPatternLockRegularColor, ResetPatternLockRegularColor, SetPatternLockPathColor,
227         ResetPatternLockPathColor, SetPatternLockActiveCircleColor, ResetPatternLockActiveCircleColor,
228         SetPatternLockActiveCircleRadius, ResetPatternLockActiveCircleRadius, SetPatternLockEnableWaveEffect,
229         ResetPatternLockEnableWaveEffect
230     };
231     return &modifier;
232 }
233 }
234 } // namespace OHOS::Ace::NG