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 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_plugin_bridge.h"
16 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
17
18 namespace OHOS::Ace::NG {
19
SetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)20 ArkUINativeModuleValue PluginBridge::SetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
21 {
22 EcmaVM* vm = runtimeCallInfo->GetVM();
23 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
24 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0); // 0: index of parameter frameNode
25 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1); // 1: index of parameter width
26 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter height
27 if (!nodeArg->IsNativePointer(vm)) {
28 return panda::JSValueRef::Undefined(vm);
29 }
30 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
31
32 CalcDimension width = 0.0_vp;
33 CalcDimension height = 0.0_vp;
34 if (!(ArkTSUtils::ParseJsDimensionVp(vm, widthArg, width, false)) ||
35 !(ArkTSUtils::ParseJsDimensionVp(vm, heightArg, height, false))) {
36 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
37 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
38 pluginModifier->resetPluginSize(nativeNode);
39 return panda::JSValueRef::Undefined(vm);
40 }
41 if (LessNotEqual(width.Value(), 0.0)) {
42 width.SetValue(0.0);
43 }
44 if (LessNotEqual(height.Value(), 0.0)) {
45 height.SetValue(0.0);
46 }
47
48 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
49 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
50 pluginModifier->setPluginSize(nativeNode, width.Value(), height.Value(),
51 static_cast<int32_t>(width.Unit()), static_cast<int32_t>(height.Unit()));
52 return panda::JSValueRef::Undefined(vm);
53 }
54
SetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)55 ArkUINativeModuleValue PluginBridge::SetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
56 {
57 EcmaVM* vm = runtimeCallInfo->GetVM();
58 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
59 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
60 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(1);
61 if (!nodeArg->IsNativePointer(vm)) {
62 return panda::JSValueRef::Undefined(vm);
63 }
64 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
65
66 CalcDimension width = 0.0_vp;
67 if (!ArkTSUtils::ParseJsDimensionVp(vm, widthArg, width)) {
68 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
69 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
70 pluginModifier->resetPluginWidth(nativeNode);
71 }
72 if (LessNotEqual(width.Value(), 0.0)) {
73 width.SetValue(0.0);
74 }
75
76 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
77 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
78 pluginModifier->setPluginWidth(nativeNode, width.Value(), static_cast<int32_t>(width.Unit()));
79 return panda::JSValueRef::Undefined(vm);
80 }
81
SetHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)82 ArkUINativeModuleValue PluginBridge::SetHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
83 {
84 EcmaVM* vm = runtimeCallInfo->GetVM();
85 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
86 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
87 Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(1);
88 if (!nodeArg->IsNativePointer(vm)) {
89 return panda::JSValueRef::Undefined(vm);
90 }
91 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
92
93 CalcDimension height = 0.0_vp;
94 if (!ArkTSUtils::ParseJsDimensionVp(vm, heightArg, height)) {
95 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
96 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
97 pluginModifier->resetPluginHeight(nativeNode);
98 }
99 if (LessNotEqual(height.Value(), 0.0)) {
100 height.SetValue(0.0);
101 }
102
103 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
104 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
105 pluginModifier->setPluginHeight(nativeNode, height.Value(), static_cast<int32_t>(height.Unit()));
106 return panda::JSValueRef::Undefined(vm);
107 }
108
ResetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)109 ArkUINativeModuleValue PluginBridge::ResetSize(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 if (!nodeArg->IsNativePointer(vm)) {
115 return panda::JSValueRef::Undefined(vm);
116 }
117 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
118 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
119 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
120 pluginModifier->resetPluginSize(nativeNode);
121 return panda::JSValueRef::Undefined(vm);
122 }
123
ResetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)124 ArkUINativeModuleValue PluginBridge::ResetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
125 {
126 EcmaVM* vm = runtimeCallInfo->GetVM();
127 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
128 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
129 if (!nodeArg->IsNativePointer(vm)) {
130 return panda::JSValueRef::Undefined(vm);
131 }
132 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
133 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
134 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
135 pluginModifier->resetPluginWidth(nativeNode);
136 return panda::JSValueRef::Undefined(vm);
137 }
138
ResetHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)139 ArkUINativeModuleValue PluginBridge::ResetHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
140 {
141 EcmaVM* vm = runtimeCallInfo->GetVM();
142 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
143 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
144 if (!nodeArg->IsNativePointer(vm)) {
145 return panda::JSValueRef::Undefined(vm);
146 }
147 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
148 auto pluginModifier = GetArkUINodeModifiers()->getPluginModifier();
149 CHECK_NULL_RETURN(pluginModifier, panda::JSValueRef::Undefined(vm));
150 pluginModifier->resetPluginHeight(nativeNode);
151 return panda::JSValueRef::Undefined(vm);
152 }
153 } // namespace OHOS::Ace::NG