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