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 "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_toggle_bridge.h"
17
18 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
19 #include "core/components_ng/base/frame_node.h"
20 #include "core/components_ng/pattern/toggle/toggle_model_ng.h"
21
22 namespace OHOS::Ace::NG {
23 namespace {
24 constexpr uint32_t INDEX_FRAME_NODE_0 = 0;
25 constexpr uint32_t INDEX_ARGUMENT_1 = 1;
26 constexpr uint32_t INDEX_ARGUMENT_2 = 2;
27 constexpr uint32_t INDEX_ARGUMENT_3 = 3;
28 constexpr uint32_t INDEX_ARGUMENT_4 = 4;
29 const char* TOGGLE_NODEPTR_OF_UINODE = "nodePtr_";
JsToggleChangeCallback(panda::JsiRuntimeCallInfo * runtimeCallInfo)30 panda::Local<panda::JSValueRef> JsToggleChangeCallback(panda::JsiRuntimeCallInfo* runtimeCallInfo)
31 {
32 auto vm = runtimeCallInfo->GetVM();
33 int32_t argc = static_cast<int32_t>(runtimeCallInfo->GetArgsNumber());
34 if (argc != 1) {
35 return panda::JSValueRef::Undefined(vm);
36 }
37 auto firstArg = runtimeCallInfo->GetCallArgRef(0);
38 if (!firstArg->IsBoolean()) {
39 return panda::JSValueRef::Undefined(vm);
40 }
41 bool value = firstArg->ToBoolean(vm)->Value();
42 auto ref = runtimeCallInfo->GetThisRef();
43 auto obj = ref->ToObject(vm);
44 if (obj->GetNativePointerFieldCount(vm) < 1) {
45 return panda::JSValueRef::Undefined(vm);
46 }
47 auto frameNode = static_cast<FrameNode*>(obj->GetNativePointerField(vm, 0));
48 CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
49 ToggleModelNG::SetChangeValue(frameNode, value);
50 return panda::JSValueRef::Undefined(vm);
51 }
52
SetHeightInner(const EcmaVM * vm,const Local<JSValueRef> & nodeArg,const Local<JSValueRef> & heightArg)53 void SetHeightInner(const EcmaVM* vm, const Local<JSValueRef>& nodeArg, const Local<JSValueRef>& heightArg)
54 {
55 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
56 CalcDimension height;
57 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, heightArg, height)) {
58 GetArkUINodeModifiers()->getToggleModifier()->resetToggleHeight(nativeNode);
59 } else {
60 if (height.IsNegative()) {
61 GetArkUINodeModifiers()->getToggleModifier()->resetToggleHeight(nativeNode);
62 } else {
63 GetArkUINodeModifiers()->getToggleModifier()->setToggleHeight(
64 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()));
65 }
66 }
67 }
68
PushDimensionVector(const std::optional<Dimension> & valueDimen,std::vector<ArkUI_Float32> & dimensions)69 void PushDimensionVector(const std::optional<Dimension>& valueDimen, std::vector<ArkUI_Float32>& dimensions)
70 {
71 dimensions.push_back(static_cast<double>(valueDimen.has_value()));
72 if (valueDimen.has_value()) {
73 dimensions.push_back(static_cast<double>(valueDimen.value().Value()));
74 dimensions.push_back(static_cast<double>(valueDimen.value().Unit()));
75 } else {
76 dimensions.push_back(0);
77 dimensions.push_back(0);
78 }
79 }
80
PushToggleDimension(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<ArkUI_Float32> & fontSizesVector,int32_t argIndex)81 void PushToggleDimension(
82 ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm, std::vector<ArkUI_Float32>& fontSizesVector, int32_t argIndex)
83 {
84 Local<JSValueRef> arg = runtimeCallInfo->GetCallArgRef(argIndex);
85 std::optional<CalcDimension> dimensionOptional = std::nullopt;
86 CalcDimension parsedDimension;
87 if (ArkTSUtils::ParseJsDimensionVp(vm, arg, parsedDimension)) {
88 dimensionOptional = parsedDimension;
89 }
90 PushDimensionVector(dimensionOptional, fontSizesVector);
91 }
92
PutToggleDimensionParameters(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<ArkUI_Float32> & lengthVector)93 void PutToggleDimensionParameters(
94 ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm, std::vector<ArkUI_Float32>& lengthVector)
95 {
96 std::vector<int32_t> indexVector = { INDEX_ARGUMENT_1, INDEX_ARGUMENT_2, INDEX_ARGUMENT_3, INDEX_ARGUMENT_4 };
97 for (size_t index = 0; index < indexVector.size(); index++) {
98 PushToggleDimension(runtimeCallInfo, vm, lengthVector, indexVector[index]);
99 }
100 }
101 } // namespace
102
SetContentModifierBuilder(ArkUIRuntimeCallInfo * runtimeCallInfo)103 ArkUINativeModuleValue ToggleBridge::SetContentModifierBuilder(ArkUIRuntimeCallInfo* runtimeCallInfo)
104 {
105 EcmaVM* vm = runtimeCallInfo->GetVM();
106 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
107 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
108 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
109 void* nativeNode = firstArg->ToNativePointer(vm)->Value();
110 auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
111 if (!secondArg->IsObject(vm)) {
112 ToggleModelNG::SetBuilderFunc(frameNode, nullptr);
113 return panda::JSValueRef::Undefined(vm);
114 }
115 panda::CopyableGlobal<panda::ObjectRef> obj(vm, secondArg);
116 auto containerId = Container::CurrentId();
117 ToggleModelNG::SetBuilderFunc(frameNode, [vm, frameNode, obj = std::move(obj), containerId](
118 ToggleConfiguration config) -> RefPtr<FrameNode> {
119 ContainerScope scope(containerId);
120 auto context = ArkTSUtils::GetContext(vm);
121 CHECK_EQUAL_RETURN(context->IsUndefined(), true, nullptr);
122 const char* keysOfToggle[] = { "isOn", "enabled", "triggerChange"};
123 Local<JSValueRef> valuesOfToggle[] = { panda::BooleanRef::New(vm, config.isOn_),
124 panda::BooleanRef::New(vm, config.enabled_),
125 panda::FunctionRef::New(vm, JsToggleChangeCallback)};
126 auto toggle = panda::ObjectRef::NewWithNamedProperties(vm,
127 ArraySize(keysOfToggle), keysOfToggle, valuesOfToggle);
128 toggle->SetNativePointerFieldCount(vm, 1);
129 toggle->SetNativePointerField(vm, 0, static_cast<void*>(frameNode));
130 panda::Local<panda::JSValueRef> params[INDEX_ARGUMENT_2] = { context, toggle };
131 LocalScope pandaScope(vm);
132 panda::TryCatch trycatch(vm);
133 auto jsObject = obj.ToLocal();
134 auto makeFunc = jsObject->Get(vm, panda::StringRef::NewFromUtf8(vm, "makeContentModifierNode"));
135 CHECK_EQUAL_RETURN(makeFunc->IsFunction(vm), false, nullptr);
136 panda::Local<panda::FunctionRef> func = makeFunc;
137 auto result = func->Call(vm, jsObject, params, 2);
138 JSNApi::ExecutePendingJob(vm);
139 CHECK_EQUAL_RETURN(result.IsEmpty() || trycatch.HasCaught() || !result->IsObject(vm), true, nullptr);
140 auto resultObj = result->ToObject(vm);
141 panda::Local<panda::JSValueRef> nodeptr =
142 resultObj->Get(vm, panda::StringRef::NewFromUtf8(vm, TOGGLE_NODEPTR_OF_UINODE));
143 CHECK_EQUAL_RETURN(nodeptr.IsEmpty() || nodeptr->IsUndefined() || nodeptr->IsNull(), true, nullptr);
144 auto* node = nodeptr->ToNativePointer(vm)->Value();
145 auto* frameNode = reinterpret_cast<FrameNode*>(node);
146 CHECK_NULL_RETURN(frameNode, nullptr);
147 return AceType::Claim(frameNode);
148 });
149 return panda::JSValueRef::Undefined(vm);
150 }
151
SetSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)152 ArkUINativeModuleValue ToggleBridge::SetSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
153 {
154 EcmaVM* vm = runtimeCallInfo->GetVM();
155 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
156 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
157 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(1);
158 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
159
160 Color color;
161 if (colorArg->IsNull() || colorArg->IsUndefined() || !ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
162 GetArkUINodeModifiers()->getToggleModifier()->resetToggleSelectedColor(nativeNode);
163 } else {
164 GetArkUINodeModifiers()->getToggleModifier()->setToggleSelectedColor(nativeNode, color.GetValue());
165 }
166
167 return panda::JSValueRef::Undefined(vm);
168 }
169
ResetSelectedColor(ArkUIRuntimeCallInfo * runtimeCallInfo)170 ArkUINativeModuleValue ToggleBridge::ResetSelectedColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
171 {
172 EcmaVM* vm = runtimeCallInfo->GetVM();
173 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
174 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
175 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
176 GetArkUINodeModifiers()->getToggleModifier()->resetToggleSelectedColor(nativeNode);
177 return panda::JSValueRef::Undefined(vm);
178 }
179
SetSwitchPointColor(ArkUIRuntimeCallInfo * runtimeCallInfo)180 ArkUINativeModuleValue ToggleBridge::SetSwitchPointColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
181 {
182 EcmaVM* vm = runtimeCallInfo->GetVM();
183 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
184 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
185 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(1);
186 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
187
188 Color color;
189 if (colorArg->IsNull() || colorArg->IsUndefined() || !ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
190 GetArkUINodeModifiers()->getToggleModifier()->resetToggleSwitchPointColor(nativeNode);
191 } else {
192 GetArkUINodeModifiers()->getToggleModifier()->setToggleSwitchPointColor(nativeNode, color.GetValue());
193 }
194 return panda::JSValueRef::Undefined(vm);
195 }
196
ResetSwitchPointColor(ArkUIRuntimeCallInfo * runtimeCallInfo)197 ArkUINativeModuleValue ToggleBridge::ResetSwitchPointColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
198 {
199 EcmaVM* vm = runtimeCallInfo->GetVM();
200 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
201 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
202 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
203 GetArkUINodeModifiers()->getToggleModifier()->resetToggleSwitchPointColor(nativeNode);
204 return panda::JSValueRef::Undefined(vm);
205 }
206
SetSwitchStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)207 ArkUINativeModuleValue ToggleBridge::SetSwitchStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
208 {
209 EcmaVM* vm = runtimeCallInfo->GetVM();
210 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
211 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
212 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
213 Local<JSValueRef> pointRadiusArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_1);
214 Local<JSValueRef> unselectedColorArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_2);
215 Local<JSValueRef> pointColorArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_3);
216 Local<JSValueRef> trackRadiusArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_4);
217 CalcDimension pointRadius;
218 if (!pointRadiusArg->IsUndefined() &&
219 ArkTSUtils::ParseJsDimensionNG(vm, pointRadiusArg, pointRadius, DimensionUnit::VP) &&
220 !pointRadius.IsNegative()) {
221 GetArkUINodeModifiers()->getToggleModifier()->setTogglePointRadius(
222 nativeNode, pointRadius.Value(), static_cast<int>(pointRadius.Unit()));
223 } else {
224 GetArkUINodeModifiers()->getToggleModifier()->resetTogglePointRadius(nativeNode);
225 }
226 Color unselectedColor;
227 if (unselectedColorArg->IsNull() || unselectedColorArg->IsUndefined() ||
228 !ArkTSUtils::ParseJsColorAlpha(vm, unselectedColorArg, unselectedColor)) {
229 GetArkUINodeModifiers()->getToggleModifier()->resetToggleUnselectedColor(nativeNode);
230 } else {
231 GetArkUINodeModifiers()->getToggleModifier()->setToggleUnselectedColor(nativeNode, unselectedColor.GetValue());
232 }
233 Color pointColor;
234 if (pointColorArg->IsNull() || pointColorArg->IsUndefined() ||
235 !ArkTSUtils::ParseJsColorAlpha(vm, pointColorArg, pointColor)) {
236 GetArkUINodeModifiers()->getToggleModifier()->resetToggleSwitchPointColor(nativeNode);
237 } else {
238 GetArkUINodeModifiers()->getToggleModifier()->setToggleSwitchPointColor(nativeNode, pointColor.GetValue());
239 }
240 CalcDimension trackRadius;
241 if (!trackRadiusArg->IsUndefined() &&
242 ArkTSUtils::ParseJsDimensionNG(vm, trackRadiusArg, trackRadius, DimensionUnit::VP) &&
243 !trackRadius.IsNegative()) {
244 GetArkUINodeModifiers()->getToggleModifier()->setToggleTrackBorderRadius(
245 nativeNode, trackRadius.Value(), static_cast<int>(trackRadius.Unit()));
246 } else {
247 GetArkUINodeModifiers()->getToggleModifier()->resetToggleTrackBorderRadius(nativeNode);
248 }
249 return panda::JSValueRef::Undefined(vm);
250 }
251
ResetSwitchStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)252 ArkUINativeModuleValue ToggleBridge::ResetSwitchStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
253 {
254 EcmaVM* vm = runtimeCallInfo->GetVM();
255 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
256 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
257 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
258 GetArkUINodeModifiers()->getToggleModifier()->resetTogglePointRadius(nativeNode);
259 GetArkUINodeModifiers()->getToggleModifier()->resetToggleUnselectedColor(nativeNode);
260 GetArkUINodeModifiers()->getToggleModifier()->resetToggleSwitchPointColor(nativeNode);
261 GetArkUINodeModifiers()->getToggleModifier()->resetToggleTrackBorderRadius(nativeNode);
262 return panda::JSValueRef::Undefined(vm);
263 }
264
SetHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)265 ArkUINativeModuleValue ToggleBridge::SetHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
266 {
267 EcmaVM* vm = runtimeCallInfo->GetVM();
268 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
269 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
270 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_1);
271 SetHeightInner(vm, nodeArg, heightArg);
272 return panda::JSValueRef::Undefined(vm);
273 }
274
ResetHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)275 ArkUINativeModuleValue ToggleBridge::ResetHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
276 {
277 EcmaVM* vm = runtimeCallInfo->GetVM();
278 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
279 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
280 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
281 GetArkUINodeModifiers()->getToggleModifier()->resetToggleHeight(nativeNode);
282 return panda::JSValueRef::Undefined(vm);
283 }
284
SetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)285 ArkUINativeModuleValue ToggleBridge::SetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
286 {
287 EcmaVM* vm = runtimeCallInfo->GetVM();
288 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
289 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
290 Local<JSValueRef> regionArrayArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_1);
291 Local<JSValueRef> lengthArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_2);
292 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
293 uint32_t length = lengthArg->Uint32Value(vm);
294 ArkUI_Float32 regionValueArray[length];
295 int32_t regionUnitsArray[length];
296 if (!ArkTSUtils::ParseResponseRegion(vm, regionArrayArg, regionValueArray, regionUnitsArray, length)) {
297 GetArkUINodeModifiers()->getToggleModifier()->resetToggleResponseRegion(nativeNode);
298 return panda::JSValueRef::Undefined(vm);
299 }
300 GetArkUINodeModifiers()->getToggleModifier()->setToggleResponseRegion(
301 nativeNode, regionValueArray, regionUnitsArray, length);
302 return panda::JSValueRef::Undefined(vm);
303 }
304
ResetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)305 ArkUINativeModuleValue ToggleBridge::ResetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
306 {
307 EcmaVM* vm = runtimeCallInfo->GetVM();
308 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
309 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
310 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
311 GetArkUINodeModifiers()->getToggleModifier()->resetToggleResponseRegion(nativeNode);
312 return panda::JSValueRef::Undefined(vm);
313 }
314
SetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)315 ArkUINativeModuleValue ToggleBridge::SetPadding(ArkUIRuntimeCallInfo* runtimeCallInfo)
316 {
317 EcmaVM* vm = runtimeCallInfo->GetVM();
318 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
319 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
320 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
321 std::vector<ArkUI_Float32> lengthVector;
322 PutToggleDimensionParameters(runtimeCallInfo, vm, lengthVector);
323 GetArkUINodeModifiers()->getToggleModifier()->setTogglePadding(
324 nativeNode, lengthVector.data(), lengthVector.size());
325 return panda::JSValueRef::Undefined(vm);
326 }
327
ResetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)328 ArkUINativeModuleValue ToggleBridge::ResetPadding(ArkUIRuntimeCallInfo* runtimeCallInfo)
329 {
330 EcmaVM* vm = runtimeCallInfo->GetVM();
331 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
332 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
333 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
334 GetArkUINodeModifiers()->getToggleModifier()->resetTogglePadding(nativeNode);
335 return panda::JSValueRef::Undefined(vm);
336 }
337
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)338 ArkUINativeModuleValue ToggleBridge::SetBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
339 {
340 EcmaVM* vm = runtimeCallInfo->GetVM();
341 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
342 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
343 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_1);
344 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
345 Color color;
346 if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
347 GetArkUINodeModifiers()->getToggleModifier()->resetToggleBackgroundColor(nativeNode);
348 } else {
349 GetArkUINodeModifiers()->getToggleModifier()->setToggleBackgroundColor(nativeNode, color.GetValue());
350 }
351 return panda::JSValueRef::Undefined(vm);
352 }
353
ResetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)354 ArkUINativeModuleValue ToggleBridge::ResetBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
355 {
356 EcmaVM* vm = runtimeCallInfo->GetVM();
357 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
358 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
359 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
360 GetArkUINodeModifiers()->getToggleModifier()->resetToggleBackgroundColor(nativeNode);
361 return panda::JSValueRef::Undefined(vm);
362 }
363
SetHoverEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)364 ArkUINativeModuleValue ToggleBridge::SetHoverEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
365 {
366 EcmaVM* vm = runtimeCallInfo->GetVM();
367 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
368 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
369 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
370 Local<JSValueRef> hoverEffectArg = runtimeCallInfo->GetCallArgRef(INDEX_ARGUMENT_1);
371
372 if (hoverEffectArg->IsUndefined() || !hoverEffectArg->IsNumber()) {
373 GetArkUINodeModifiers()->getToggleModifier()->resetToggleHoverEffect(nativeNode);
374 return panda::JSValueRef::Undefined(vm);
375 }
376 int32_t hoverEffectValue = hoverEffectArg->Int32Value(vm);
377 GetArkUINodeModifiers()->getToggleModifier()->setToggleHoverEffect(nativeNode, hoverEffectValue);
378 return panda::JSValueRef::Undefined(vm);
379 }
380
ResetHoverEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)381 ArkUINativeModuleValue ToggleBridge::ResetHoverEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
382 {
383 EcmaVM* vm = runtimeCallInfo->GetVM();
384 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
385 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(INDEX_FRAME_NODE_0);
386 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
387 GetArkUINodeModifiers()->getToggleModifier()->resetToggleHoverEffect(nativeNode);
388 return panda::JSValueRef::Undefined(vm);
389 }
390 } // namespace OHOS::Ace::NG
391