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_form_component_bridge.h"
17
18 #include "core/interfaces/native/node/api.h"
19 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
20 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
21
22 namespace OHOS::Ace::NG {
SetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)23 ArkUINativeModuleValue FormComponentBridge::SetVisibility(ArkUIRuntimeCallInfo* runtimeCallInfo)
24 {
25 EcmaVM* vm = runtimeCallInfo->GetVM();
26 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
27 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
28 Local<JSValueRef> visibilityArg = runtimeCallInfo->GetCallArgRef(1);
29 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
30 int32_t visibility = visibilityArg->Int32Value(vm);
31 GetArkUIInternalNodeAPI()->GetFormComponentModifier().SetFormVisibility(nativeNode, visibility);
32 return panda::JSValueRef::Undefined(vm);
33 }
34
ResetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)35 ArkUINativeModuleValue FormComponentBridge::ResetVisibility(ArkUIRuntimeCallInfo* runtimeCallInfo)
36 {
37 EcmaVM* vm = runtimeCallInfo->GetVM();
38 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
39 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
40 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
41 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetFormVisibility(nativeNode);
42 return panda::JSValueRef::Undefined(vm);
43 }
44
AllowUpdate(ArkUIRuntimeCallInfo * runtimeCallInfo)45 ArkUINativeModuleValue FormComponentBridge::AllowUpdate(ArkUIRuntimeCallInfo* runtimeCallInfo)
46 {
47 EcmaVM* vm = runtimeCallInfo->GetVM();
48 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
49 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
50 Local<JSValueRef> allowUpdateArg = runtimeCallInfo->GetCallArgRef(1);
51 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
52 bool allowUpdate = allowUpdateArg->ToBoolean(vm)->Value();
53 GetArkUIInternalNodeAPI()->GetFormComponentModifier().AllowUpdate(nativeNode, allowUpdate);
54 return panda::JSValueRef::Undefined(vm);
55 }
56
DisallowUpdate(ArkUIRuntimeCallInfo * runtimeCallInfo)57 ArkUINativeModuleValue FormComponentBridge::DisallowUpdate(ArkUIRuntimeCallInfo* runtimeCallInfo)
58 {
59 EcmaVM* vm = runtimeCallInfo->GetVM();
60 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
61 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
62 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
63 GetArkUIInternalNodeAPI()->GetFormComponentModifier().DisallowUpdate(nativeNode);
64 return panda::JSValueRef::Undefined(vm);
65 }
66
SetDimension(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue FormComponentBridge::SetDimension(ArkUIRuntimeCallInfo* runtimeCallInfo)
68 {
69 EcmaVM* vm = runtimeCallInfo->GetVM();
70 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
72 Local<JSValueRef> dimensionArg = runtimeCallInfo->GetCallArgRef(1);
73 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
74 if (dimensionArg->IsNull() || dimensionArg->IsUndefined()) {
75 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetDimension(nativeNode);
76 } else {
77 int32_t dimension = dimensionArg->Int32Value(vm);
78 GetArkUIInternalNodeAPI()->GetFormComponentModifier().SetDimension(nativeNode, dimension);
79 }
80 return panda::JSValueRef::Undefined(vm);
81 }
82
ResetDimension(ArkUIRuntimeCallInfo * runtimeCallInfo)83 ArkUINativeModuleValue FormComponentBridge::ResetDimension(ArkUIRuntimeCallInfo* runtimeCallInfo)
84 {
85 EcmaVM* vm = runtimeCallInfo->GetVM();
86 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
87 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
88 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
89 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetDimension(nativeNode);
90 return panda::JSValueRef::Undefined(vm);
91 }
92
SetModuleName(ArkUIRuntimeCallInfo * runtimeCallInfo)93 ArkUINativeModuleValue FormComponentBridge::SetModuleName(ArkUIRuntimeCallInfo* runtimeCallInfo)
94 {
95 EcmaVM* vm = runtimeCallInfo->GetVM();
96 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
97 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
98 Local<JSValueRef> moduleNameArg = runtimeCallInfo->GetCallArgRef(1);
99 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
100 if (moduleNameArg->IsNull() || moduleNameArg->IsUndefined()) {
101 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetModuleName(nativeNode);
102 } else {
103 std::string moduleName = moduleNameArg->ToString(vm)->ToString();
104 GetArkUIInternalNodeAPI()->GetFormComponentModifier().SetModuleName(nativeNode, moduleName.c_str());
105 }
106 return panda::JSValueRef::Undefined(vm);
107 }
108
ResetModuleName(ArkUIRuntimeCallInfo * runtimeCallInfo)109 ArkUINativeModuleValue FormComponentBridge::ResetModuleName(ArkUIRuntimeCallInfo* runtimeCallInfo)
110 {
111 EcmaVM* vm = runtimeCallInfo->GetVM();
112 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
113 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
114 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
115 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetModuleName(nativeNode);
116 return panda::JSValueRef::Undefined(vm);
117 }
118
SetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)119 ArkUINativeModuleValue FormComponentBridge::SetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
120 {
121 EcmaVM* vm = runtimeCallInfo->GetVM();
122 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
123 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
124 Local<JSValueRef> widthValue = runtimeCallInfo->GetCallArgRef(1);
125 Local<JSValueRef> heightValue = runtimeCallInfo->GetCallArgRef(2);
126 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
127 CommonBridge::SetSize(runtimeCallInfo);
128 CalcDimension width = 0.0_vp;
129 CalcDimension height = 0.0_vp;
130 bool hasWidth = (!widthValue->IsNull() && !widthValue->IsUndefined() &&
131 ArkTSUtils::ParseJsDimensionVp(vm, widthValue, width));
132 bool hasHeight = (!heightValue->IsNull() && !heightValue->IsUndefined() &&
133 ArkTSUtils::ParseJsDimensionVp(vm, heightValue, height));
134 if (!hasWidth && !hasHeight) {
135 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetFormSize(nativeNode);
136 } else {
137 GetArkUIInternalNodeAPI()->GetFormComponentModifier().SetFormSize(nativeNode,
138 width.Value(), static_cast<int>(width.Unit()), height.Value(), static_cast<int>(height.Unit()));
139 }
140 return panda::JSValueRef::Undefined(vm);
141 }
142
ResetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)143 ArkUINativeModuleValue FormComponentBridge::ResetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
144 {
145 EcmaVM* vm = runtimeCallInfo->GetVM();
146 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
147 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
148 void* nativeNode = nodeArg->ToNativePointer(vm)->Value();
149 CommonBridge::ResetSize(runtimeCallInfo);
150 GetArkUIInternalNodeAPI()->GetFormComponentModifier().ResetFormSize(nativeNode);
151 return panda::JSValueRef::Undefined(vm);
152 }
153 }