• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 #include "node_toggle_modifier.h"
16 
17 #include "core/components/checkable/checkable_theme.h"
18 #include "core/components_ng/pattern/toggle/toggle_model_ng.h"
19 #include "core/pipeline_ng/pipeline_context.h"
20 
21 namespace OHOS::Ace::NG {
22 const int32_t ERROR_UINT_CODE = -1;
23 namespace {
24 constexpr uint32_t RESPONSE_REGION_STEP = 4;
25 constexpr uint32_t OFFSET_0 = 0;
26 constexpr uint32_t OFFSET_1 = 1;
27 constexpr uint32_t OFFSET_2 = 2;
28 constexpr uint32_t OFFSET_3 = 3;
29 constexpr uint32_t INDEX_DIMENSION_TOP_0 = 0;
30 constexpr uint32_t INDEX_DIMENSION_RIGHT_1 = 1;
31 constexpr uint32_t INDEX_DIMENSION_BOTTOM_2 = 2;
32 constexpr uint32_t INDEX_DIMENSION_LEFT_3 = 3;
33 constexpr uint32_t DIMENSION_STEP = 3;
34 
SetToggleDimension(const ArkUI_Float32 * dimensionArray,ArkUI_Uint32 offset,const size_t dataCount,std::optional<CalcDimension> & optDimension)35 bool SetToggleDimension(
36     const ArkUI_Float32* dimensionArray, ArkUI_Uint32 offset, const size_t dataCount,
37     std::optional<CalcDimension>& optDimension)
38 {
39     CHECK_NULL_RETURN(dimensionArray, false);
40     auto hasValue = dimensionArray[offset];
41     if (!static_cast<bool>(hasValue)) {
42         return false;
43     }
44     uint32_t valueIndex = offset + 1;
45     uint32_t unitIndex = offset + 2;
46     if (unitIndex >= dataCount) {
47         return false;
48     }
49     auto value = dimensionArray[valueIndex];
50     auto unit = dimensionArray[unitIndex];
51     DimensionUnit unitValue = static_cast<DimensionUnit>(unit);
52     CalcDimension dimensionValue = CalcDimension(value, unitValue);
53     optDimension = dimensionValue;
54     return true;
55 }
56 
SetToggleSelectedColor(ArkUINodeHandle node,ArkUI_Uint32 selectedColor)57 void SetToggleSelectedColor(ArkUINodeHandle node, ArkUI_Uint32 selectedColor)
58 {
59     auto* frameNode = reinterpret_cast<FrameNode*>(node);
60     CHECK_NULL_VOID(frameNode);
61     ToggleModelNG::SetSelectedColor(frameNode, Color(selectedColor));
62 }
63 
ResetToggleSelectedColor(ArkUINodeHandle node)64 void ResetToggleSelectedColor(ArkUINodeHandle node)
65 {
66     auto* frameNode = reinterpret_cast<FrameNode*>(node);
67     CHECK_NULL_VOID(frameNode);
68     std::optional<Color> selectedColor;
69     ToggleModelNG::SetSelectedColor(frameNode, selectedColor);
70 }
71 
SetToggleSwitchPointColor(ArkUINodeHandle node,ArkUI_Uint32 switchPointColor)72 void SetToggleSwitchPointColor(ArkUINodeHandle node, ArkUI_Uint32 switchPointColor)
73 {
74     auto* frameNode = reinterpret_cast<FrameNode*>(node);
75     CHECK_NULL_VOID(frameNode);
76     ToggleModelNG::SetSwitchPointColor(frameNode, Color(switchPointColor));
77 }
78 
ResetToggleSwitchPointColor(ArkUINodeHandle node)79 void ResetToggleSwitchPointColor(ArkUINodeHandle node)
80 {
81     auto* frameNode = reinterpret_cast<FrameNode*>(node);
82     CHECK_NULL_VOID(frameNode);
83     auto context = frameNode->GetContext();
84     CHECK_NULL_VOID(context);
85     auto themeManager = context->GetThemeManager();
86     CHECK_NULL_VOID(themeManager);
87     auto theme = themeManager->GetTheme<SwitchTheme>();
88     Color color;
89     if (theme) {
90         color = theme->GetPointColor();
91     }
92     ToggleModelNG::SetSwitchPointColor(frameNode, Color(color));
93 }
94 
GetToggleSelectedColor(ArkUINodeHandle node)95 ArkUI_Uint32 GetToggleSelectedColor(ArkUINodeHandle node)
96 {
97     auto* frameNode = reinterpret_cast<FrameNode*>(node);
98     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
99     return ToggleModelNG::GetSelectedColor(frameNode).GetValue();
100 }
101 
GetToggleSwitchPointColor(ArkUINodeHandle node)102 ArkUI_Uint32 GetToggleSwitchPointColor(ArkUINodeHandle node)
103 {
104     auto* frameNode = reinterpret_cast<FrameNode*>(node);
105     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
106     return ToggleModelNG::GetSwitchPointColor(frameNode).GetValue();
107 }
108 
SetToggleHeight(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)109 void SetToggleHeight(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
110 {
111     auto* frameNode = reinterpret_cast<FrameNode*>(node);
112     CHECK_NULL_VOID(frameNode);
113     DimensionUnit unitValue = static_cast<DimensionUnit>(unit);
114     CalcDimension dimensionValue = CalcDimension(value, unitValue);
115     ToggleModelNG::SetHeight(frameNode, dimensionValue);
116 }
117 
ResetToggleHeight(ArkUINodeHandle node)118 void ResetToggleHeight(ArkUINodeHandle node)
119 {
120     auto* frameNode = reinterpret_cast<FrameNode*>(node);
121     CHECK_NULL_VOID(frameNode);
122     auto switchTheme = GetTheme<SwitchTheme>();
123     CHECK_NULL_VOID(switchTheme);
124     auto defaultHeight = switchTheme->GetHeight();
125     auto verticalPadding = switchTheme->GetHotZoneVerticalPadding();
126     auto height = defaultHeight - verticalPadding * 2;
127     CalcDimension value(height);
128     ToggleModelNG::SetHeight(frameNode, value);
129 }
130 
SetToggleResponseRegion(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Uint32 length)131 void SetToggleResponseRegion(ArkUINodeHandle node, const ArkUI_Float32* values,
132     const ArkUI_Int32* units, ArkUI_Uint32 length)
133 {
134     CHECK_NULL_VOID(values);
135     CHECK_NULL_VOID(units);
136     auto* frameNode = reinterpret_cast<FrameNode*>(node);
137     CHECK_NULL_VOID(frameNode);
138     std::vector<DimensionRect> region;
139     for (uint32_t i = 0; i + OFFSET_3 < length; i = i + RESPONSE_REGION_STEP) {
140         CalcDimension xDimen = CalcDimension(values[i + OFFSET_0], static_cast<DimensionUnit>(units[i + OFFSET_0]));
141         CalcDimension yDimen = CalcDimension(values[i + OFFSET_1], static_cast<DimensionUnit>(units[i + OFFSET_1]));
142         CalcDimension widthDimen = CalcDimension(values[i + OFFSET_2], static_cast<DimensionUnit>(units[i + OFFSET_2]));
143         CalcDimension heightDimen =
144             CalcDimension(values[i + OFFSET_3], static_cast<DimensionUnit>(units[i + OFFSET_3]));
145         DimensionOffset offsetDimen(xDimen, yDimen);
146         DimensionRect dimenRect(widthDimen, heightDimen, offsetDimen);
147         region.emplace_back(dimenRect);
148     }
149     ToggleModelNG::SetResponseRegion(frameNode, region);
150 }
151 
ResetToggleResponseRegion(ArkUINodeHandle node)152 void ResetToggleResponseRegion(ArkUINodeHandle node)
153 {
154     auto* frameNode = reinterpret_cast<FrameNode*>(node);
155     CHECK_NULL_VOID(frameNode);
156     std::vector<DimensionRect> region;
157     CalcDimension xDimen = CalcDimension(0.0, DimensionUnit::VP);
158     CalcDimension yDimen = CalcDimension(0.0, DimensionUnit::VP);
159     CalcDimension widthDimen = CalcDimension(1, DimensionUnit::PERCENT);
160     CalcDimension heightDimen = CalcDimension(1, DimensionUnit::PERCENT);
161     DimensionOffset offsetDimen(xDimen, yDimen);
162     DimensionRect dimenRect(widthDimen, heightDimen, offsetDimen);
163     region.emplace_back(dimenRect);
164     ToggleModelNG::SetResponseRegion(frameNode, region);
165 }
166 
SetTogglePadding(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Uint32 length)167 void SetTogglePadding(ArkUINodeHandle node, const ArkUI_Float32* values, const ArkUI_Uint32 length)
168 {
169     auto* frameNode = reinterpret_cast<FrameNode*>(node);
170     CHECK_NULL_VOID(frameNode);
171     CHECK_NULL_VOID(values);
172     CalcLength topDimen;
173     CalcLength rightDimen;
174     CalcLength bottomDimen;
175     CalcLength leftDimen;
176     uint32_t step = DIMENSION_STEP;
177     uint32_t topIndex = INDEX_DIMENSION_TOP_0;
178     std::optional<CalcDimension> topOptional = std::nullopt;
179     if (SetToggleDimension(values, topIndex, length, topOptional)) {
180         topDimen = CalcLength(
181             CalcDimension(topOptional.value().Value(), static_cast<DimensionUnit>(topOptional.value().Unit())));
182     }
183     uint32_t rightIndex = INDEX_DIMENSION_RIGHT_1 * step;
184     std::optional<CalcDimension> rightOptional = std::nullopt;
185     if (SetToggleDimension(values, rightIndex, length, rightOptional)) {
186         rightDimen = CalcLength(
187             CalcDimension(rightOptional.value().Value(), static_cast<DimensionUnit>(rightOptional.value().Unit())));
188     }
189     uint32_t bottomIndex = INDEX_DIMENSION_BOTTOM_2 * step;
190     std::optional<CalcDimension> bottomOptional = std::nullopt;
191     if (SetToggleDimension(values, bottomIndex, length, bottomOptional)) {
192         bottomDimen = CalcLength(
193             CalcDimension(bottomOptional.value().Value(), static_cast<DimensionUnit>(bottomOptional.value().Unit())));
194     }
195     uint32_t leftIndex = INDEX_DIMENSION_LEFT_3 * step;
196     std::optional<CalcDimension> leftOptional = std::nullopt;
197     if (SetToggleDimension(values, leftIndex, length, leftOptional)) {
198         leftDimen = CalcLength(
199             CalcDimension(leftOptional.value().Value(), static_cast<DimensionUnit>(leftOptional.value().Unit())));
200     }
201     NG::PaddingPropertyF oldPaddings;
202     NG::PaddingProperty paddings;
203     paddings.top = std::optional<CalcLength>(topDimen);
204     paddings.bottom = std::optional<CalcLength>(bottomDimen);
205     paddings.left = std::optional<CalcLength>(leftDimen);
206     paddings.right = std::optional<CalcLength>(rightDimen);
207     ToggleModelNG::SetPadding(frameNode, oldPaddings, paddings);
208 }
209 
ResetTogglePadding(ArkUINodeHandle node)210 void ResetTogglePadding(ArkUINodeHandle node)
211 {
212     auto* frameNode = reinterpret_cast<FrameNode*>(node);
213     CHECK_NULL_VOID(frameNode);
214     NG::PaddingPropertyF oldPaddings;
215     NG::PaddingProperty paddings;
216     paddings.top = std::optional<CalcLength>(CalcLength(0.0, DimensionUnit::VP));
217     paddings.bottom = std::optional<CalcLength>(CalcLength(0.0, DimensionUnit::VP));
218     paddings.left = std::optional<CalcLength>(CalcLength(0.0, DimensionUnit::VP));
219     paddings.right = std::optional<CalcLength>(CalcLength(0.0, DimensionUnit::VP));
220     ToggleModelNG::SetPadding(frameNode, oldPaddings, paddings);
221 }
222 
SetToggleBackgroundColor(ArkUINodeHandle node,ArkUI_Uint32 color)223 void SetToggleBackgroundColor(ArkUINodeHandle node, ArkUI_Uint32 color)
224 {
225     auto* frameNode = reinterpret_cast<FrameNode*>(node);
226     CHECK_NULL_VOID(frameNode);
227     ToggleModelNG::SetBackgroundColor(frameNode, Color(color));
228 }
229 
ResetToggleBackgroundColor(ArkUINodeHandle node)230 void ResetToggleBackgroundColor(ArkUINodeHandle node)
231 {
232     auto* frameNode = reinterpret_cast<FrameNode*>(node);
233     CHECK_NULL_VOID(frameNode);
234     ToggleModelNG::SetBackgroundColor(frameNode, Color(Color::TRANSPARENT));
235 }
236 
SetToggleHoverEffect(ArkUINodeHandle node,ArkUI_Int32 hoverEffectValue)237 void SetToggleHoverEffect(ArkUINodeHandle node, ArkUI_Int32 hoverEffectValue)
238 {
239     auto* frameNode = reinterpret_cast<FrameNode*>(node);
240     CHECK_NULL_VOID(frameNode);
241     OHOS::Ace::HoverEffectType hoverEffect = OHOS::Ace::HoverEffectType::AUTO;
242     hoverEffect = static_cast<OHOS::Ace::HoverEffectType>(hoverEffectValue);
243     ToggleModelNG::SetHoverEffect(frameNode, hoverEffect);
244 }
245 
ResetToggleHoverEffect(ArkUINodeHandle node)246 void ResetToggleHoverEffect(ArkUINodeHandle node)
247 {
248     auto* frameNode = reinterpret_cast<FrameNode*>(node);
249     CHECK_NULL_VOID(frameNode);
250     ToggleModelNG::SetHoverEffect(frameNode, OHOS::Ace::HoverEffectType::AUTO);
251 }
252 
SetTogglePointRadius(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)253 void SetTogglePointRadius(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
254 {
255     auto* frameNode = reinterpret_cast<FrameNode*>(node);
256     CHECK_NULL_VOID(frameNode);
257     DimensionUnit unitValue = static_cast<DimensionUnit>(unit);
258     CalcDimension switchPointRadius = CalcDimension(value, unitValue);
259     ToggleModelNG::SetPointRadius(frameNode, switchPointRadius);
260 }
261 
ResetTogglePointRadius(ArkUINodeHandle node)262 void ResetTogglePointRadius(ArkUINodeHandle node)
263 {
264     auto* frameNode = reinterpret_cast<FrameNode*>(node);
265     CHECK_NULL_VOID(frameNode);
266     ToggleModelNG::ResetPointRadius(frameNode);
267 }
268 
SetToggleUnselectedColor(ArkUINodeHandle node,ArkUI_Uint32 unselectedColor)269 void SetToggleUnselectedColor(ArkUINodeHandle node, ArkUI_Uint32 unselectedColor)
270 {
271     auto* frameNode = reinterpret_cast<FrameNode*>(node);
272     CHECK_NULL_VOID(frameNode);
273     ToggleModelNG::SetUnselectedColor(frameNode, Color(unselectedColor));
274 }
275 
ResetToggleUnselectedColor(ArkUINodeHandle node)276 void ResetToggleUnselectedColor(ArkUINodeHandle node)
277 {
278     auto* frameNode = reinterpret_cast<FrameNode*>(node);
279     CHECK_NULL_VOID(frameNode);
280     auto context = frameNode->GetContext();
281     CHECK_NULL_VOID(context);
282     auto themeManager = context->GetThemeManager();
283     CHECK_NULL_VOID(themeManager);
284     auto switchTheme = themeManager->GetTheme<SwitchTheme>();
285     CHECK_NULL_VOID(switchTheme);
286     Color unselectedColor;
287     if (switchTheme) {
288         unselectedColor = switchTheme->GetInactiveColor();
289     }
290     ToggleModelNG::SetUnselectedColor(frameNode, unselectedColor);
291 }
292 
SetToggleTrackBorderRadius(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)293 void SetToggleTrackBorderRadius(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
294 {
295     auto* frameNode = reinterpret_cast<FrameNode*>(node);
296     CHECK_NULL_VOID(frameNode);
297     DimensionUnit unitValue = static_cast<DimensionUnit>(unit);
298     CalcDimension borderRadius = CalcDimension(value, unitValue);
299     ToggleModelNG::SetTrackBorderRadius(frameNode, borderRadius);
300 }
301 
ResetToggleTrackBorderRadius(ArkUINodeHandle node)302 void ResetToggleTrackBorderRadius(ArkUINodeHandle node)
303 {
304     auto* frameNode = reinterpret_cast<FrameNode*>(node);
305     CHECK_NULL_VOID(frameNode);
306     ToggleModelNG::ResetTrackBorderRadius(frameNode);
307 }
308 
SetToggleIsOn(ArkUINodeHandle node,ArkUI_Bool switchPointColor)309 void SetToggleIsOn(ArkUINodeHandle node, ArkUI_Bool switchPointColor)
310 {
311     auto* frameNode = reinterpret_cast<FrameNode*>(node);
312     CHECK_NULL_VOID(frameNode);
313     ToggleModelNG::SetSwitchIsOn(frameNode, static_cast<bool>(switchPointColor));
314 }
315 
ResetToggleIsOn(ArkUINodeHandle node)316 void ResetToggleIsOn(ArkUINodeHandle node)
317 {
318     auto* frameNode = reinterpret_cast<FrameNode*>(node);
319     CHECK_NULL_VOID(frameNode);
320     ToggleModelNG::SetSwitchIsOn(frameNode, false);
321 }
322 
GetToggleIsOn(ArkUINodeHandle node)323 ArkUI_Bool GetToggleIsOn(ArkUINodeHandle node)
324 {
325     auto* frameNode = reinterpret_cast<FrameNode*>(node);
326     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
327     return static_cast<ArkUI_Bool>(ToggleModelNG::GetSwitchIsOn(frameNode));
328 }
329 
GetToggleUnselectedColor(ArkUINodeHandle node)330 ArkUI_Uint32 GetToggleUnselectedColor(ArkUINodeHandle node)
331 {
332     auto* frameNode = reinterpret_cast<FrameNode*>(node);
333     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
334     return ToggleModelNG::GetUnselectedColor(frameNode).GetValue();
335 }
336 
SetToggleState(ArkUINodeHandle node,ArkUI_Bool isOn)337 void SetToggleState(ArkUINodeHandle node, ArkUI_Bool isOn)
338 {
339     auto* frameNode = reinterpret_cast<FrameNode*>(node);
340     CHECK_NULL_VOID(frameNode);
341     ToggleModelNG::SetToggleState(frameNode, static_cast<bool>(isOn));
342 }
343 
SetToggleOnChange(ArkUINodeHandle node,void * callback)344 void SetToggleOnChange(ArkUINodeHandle node, void* callback)
345 {
346     auto* frameNode = reinterpret_cast<FrameNode*>(node);
347     CHECK_NULL_VOID(frameNode);
348     if (callback) {
349         auto onChange = reinterpret_cast<std::function<void(bool)>*>(callback);
350         ToggleModelNG::OnChange(frameNode, std::move(*onChange));
351     } else {
352         ToggleModelNG::OnChange(frameNode, nullptr);
353     }
354 }
355 
ResetToggleOnChange(ArkUINodeHandle node)356 void ResetToggleOnChange(ArkUINodeHandle node)
357 {
358     auto *frameNode = reinterpret_cast<FrameNode *>(node);
359     CHECK_NULL_VOID(frameNode);
360     ToggleModelNG::OnChange(frameNode, nullptr);
361 }
362 
363 } // namespace
364 namespace NodeModifier {
GetToggleModifier()365 const ArkUIToggleModifier* GetToggleModifier()
366 {
367     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
368     static const ArkUIToggleModifier modifier = {
369         .setToggleSelectedColor = SetToggleSelectedColor,
370         .resetToggleSelectedColor = ResetToggleSelectedColor,
371         .setToggleSwitchPointColor = SetToggleSwitchPointColor,
372         .resetToggleSwitchPointColor = ResetToggleSwitchPointColor,
373         .setToggleHeight = SetToggleHeight,
374         .resetToggleHeight = ResetToggleHeight,
375         .setToggleResponseRegion = SetToggleResponseRegion,
376         .resetToggleResponseRegion = ResetToggleResponseRegion,
377         .setTogglePadding = SetTogglePadding,
378         .resetTogglePadding = ResetTogglePadding,
379         .setToggleBackgroundColor = SetToggleBackgroundColor,
380         .resetToggleBackgroundColor = ResetToggleBackgroundColor,
381         .setToggleHoverEffect = SetToggleHoverEffect,
382         .resetToggleHoverEffect = ResetToggleHoverEffect,
383         .getToggleSelectedColor = GetToggleSelectedColor,
384         .getToggleSwitchPointColor = GetToggleSwitchPointColor,
385         .setToggleIsOn = SetToggleIsOn,
386         .resetToggleIsOn = ResetToggleIsOn,
387         .getToggleIsOn = GetToggleIsOn,
388         .setTogglePointRadius = SetTogglePointRadius,
389         .resetTogglePointRadius = ResetTogglePointRadius,
390         .setToggleUnselectedColor = SetToggleUnselectedColor,
391         .resetToggleUnselectedColor = ResetToggleUnselectedColor,
392         .setToggleTrackBorderRadius = SetToggleTrackBorderRadius,
393         .resetToggleTrackBorderRadius = ResetToggleTrackBorderRadius,
394         .getToggleUnselectedColor = GetToggleUnselectedColor,
395         .setToggleState = SetToggleState,
396         .setToggleOnChange = SetToggleOnChange,
397         .resetToggleOnChange = ResetToggleOnChange,
398     };
399     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
400 
401     return &modifier;
402 }
403 
GetCJUIToggleModifier()404 const CJUIToggleModifier* GetCJUIToggleModifier()
405 {
406     CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
407     static const CJUIToggleModifier modifier = {
408         .setToggleSelectedColor = SetToggleSelectedColor,
409         .resetToggleSelectedColor = ResetToggleSelectedColor,
410         .setToggleSwitchPointColor = SetToggleSwitchPointColor,
411         .resetToggleSwitchPointColor = ResetToggleSwitchPointColor,
412         .setToggleHeight = SetToggleHeight,
413         .resetToggleHeight = ResetToggleHeight,
414         .setToggleResponseRegion = SetToggleResponseRegion,
415         .resetToggleResponseRegion = ResetToggleResponseRegion,
416         .setTogglePadding = SetTogglePadding,
417         .resetTogglePadding = ResetTogglePadding,
418         .setToggleBackgroundColor = SetToggleBackgroundColor,
419         .resetToggleBackgroundColor = ResetToggleBackgroundColor,
420         .setToggleHoverEffect = SetToggleHoverEffect,
421         .resetToggleHoverEffect = ResetToggleHoverEffect,
422         .getToggleSelectedColor = GetToggleSelectedColor,
423         .getToggleSwitchPointColor = GetToggleSwitchPointColor,
424         .setToggleIsOn = SetToggleIsOn,
425         .resetToggleIsOn = ResetToggleIsOn,
426         .getToggleIsOn = GetToggleIsOn,
427         .setTogglePointRadius = SetTogglePointRadius,
428         .resetTogglePointRadius = ResetTogglePointRadius,
429         .setToggleUnselectedColor = SetToggleUnselectedColor,
430         .resetToggleUnselectedColor = ResetToggleUnselectedColor,
431         .setToggleTrackBorderRadius = SetToggleTrackBorderRadius,
432         .resetToggleTrackBorderRadius = ResetToggleTrackBorderRadius,
433         .getToggleUnselectedColor = GetToggleUnselectedColor,
434     };
435     CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
436 
437     return &modifier;
438 }
439 
SetOnToggleChange(ArkUINodeHandle node,void * extraParam)440 void SetOnToggleChange(ArkUINodeHandle node, void* extraParam)
441 {
442     auto* frameNode = reinterpret_cast<FrameNode*>(node);
443     CHECK_NULL_VOID(frameNode);
444     auto onChange = [node, extraParam](const bool isOn) {
445         ArkUINodeEvent event;
446         event.kind = COMPONENT_ASYNC_EVENT;
447         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
448         event.componentAsyncEvent.subKind = ON_TOGGLE_CHANGE;
449         event.componentAsyncEvent.data[0].u32 = isOn;
450         SendArkUISyncEvent(&event);
451     };
452     ToggleModelNG::OnChange(frameNode, std::move(onChange));
453 }
454 
ResetOnToggleChange(ArkUINodeHandle node)455 void ResetOnToggleChange(ArkUINodeHandle node)
456 {
457     auto* frameNode = reinterpret_cast<FrameNode*>(node);
458     CHECK_NULL_VOID(frameNode);
459     ToggleModelNG::OnChange(frameNode, nullptr);
460 }
461 } // namespace NodeModifier
462 } // namespace OHOS::Ace::NG
463