• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_common_bridge.h"
16 
17 #include "base/utils/string_utils.h"
18 #include "base/utils/utils.h"
19 #include "bridge/declarative_frontend/engine/js_ref_ptr.h"
20 #include "bridge/declarative_frontend/engine/jsi/jsi_types.h"
21 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
22 #include "bridge/declarative_frontend/jsview/js_view_context.h"
23 #include "core/components/common/properties/blend_mode.h"
24 #include "core/interfaces/native/node/api.h"
25 #include "frameworks/base/geometry/calc_dimension.h"
26 #include "frameworks/base/geometry/dimension.h"
27 #include "frameworks/bridge/declarative_frontend/engine/js_types.h"
28 #include "frameworks/bridge/declarative_frontend/engine/jsi/jsi_value_conversions.h"
29 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
30 #include "frameworks/bridge/declarative_frontend/jsview/js_shape_abstract.h"
31 #include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h"
32 using namespace OHOS::Ace::Framework;
33 
34 namespace OHOS::Ace::NG {
35 namespace {
36 constexpr uint32_t COLOR_ALPHA_VALUE = 0xFF000000;
37 constexpr uint32_t ALIGNMENT_CENTER = 4;
38 constexpr float DEFAULT_PROGRESS_TOTAL = 100.0f;
39 constexpr int NUM_0 = 0;
40 constexpr int NUM_1 = 1;
41 constexpr int NUM_2 = 2;
42 constexpr int NUM_3 = 3;
43 constexpr int NUM_4 = 4;
44 constexpr int NUM_5 = 5;
45 constexpr int NUM_6 = 6;
46 constexpr int NUM_7 = 7;
47 constexpr int NUM_8 = 8;
48 constexpr int NUM_9 = 9;
49 constexpr int NUM_10 = 10;
50 constexpr int NUM_13 = 13;
51 constexpr int SIZE_OF_TWO = 2;
52 constexpr int SIZE_OF_THREE = 3;
53 constexpr int SIZE_OF_FOUR = 4;
54 constexpr int SIZE_OF_FIVE = 5;
55 constexpr int SIZE_OF_EIGHT = 8;
56 constexpr int32_t ALIGN_RULES_NUM = 6;
57 constexpr int32_t ALIGN_DIRECTION_DEFAULT = 2;
58 constexpr double FULL_DIMENSION = 100.0;
59 constexpr double HALF_DIMENSION = 50.0;
60 constexpr uint32_t DEFAULT_DURATION = 1000;
61 constexpr int64_t MICROSEC_TO_MILLISEC = 1000;
62 constexpr int32_t MAX_ALIGN_VALUE = 8;
63 constexpr int32_t BACKWARD_COMPAT_MAGIC_NUMBER_OFFSCREEN = 1000;
64 constexpr SharedTransitionEffectType DEFAULT_SHARED_EFFECT = SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE;
65 
ConvertBorderStyle(int32_t value)66 BorderStyle ConvertBorderStyle(int32_t value)
67 {
68     auto style = static_cast<BorderStyle>(value);
69     if (style < BorderStyle::SOLID || style > BorderStyle::NONE) {
70         style = BorderStyle::SOLID;
71     }
72     return style;
73 }
74 
ParseJsDouble(const EcmaVM * vm,const Local<JSValueRef> & value,double & result)75 bool ParseJsDouble(const EcmaVM *vm, const Local<JSValueRef> &value, double &result)
76 {
77     if (value->IsNumber()) {
78         result = value->ToNumber(vm)->Value();
79         return true;
80     }
81     if (value->IsString()) {
82         return StringUtils::StringToDouble(value->ToString(vm)->ToString(), result);
83     }
84 
85     return false;
86 }
87 
ParseJsInt32(const EcmaVM * vm,const Local<JSValueRef> & value,int32_t & result)88 bool ParseJsInt32(const EcmaVM *vm, const Local<JSValueRef> &value, int32_t &result)
89 {
90     if (value->IsNumber()) {
91         result = value->Int32Value(vm);
92         return true;
93     }
94     if (value->IsString()) {
95         result = StringUtils::StringToInt(value->ToString(vm)->ToString());
96         return true;
97     }
98 
99     return false;
100 }
101 
ParseJsAngle(const EcmaVM * vm,const Local<JSValueRef> & value,std::optional<float> & angle)102 void ParseJsAngle(const EcmaVM *vm, const Local<JSValueRef> &value, std::optional<float> &angle)
103 {
104     if (value->IsNumber()) {
105         angle = static_cast<float>(value->ToNumber(vm)->Value());
106         return;
107     }
108     if (value->IsString()) {
109         angle = static_cast<float>(StringUtils::StringToDegree(value->ToString(vm)->ToString()));
110         return;
111     }
112     return;
113 }
114 
ParseGradientAngle(const EcmaVM * vm,const Local<JSValueRef> & value,std::vector<double> & values)115 void ParseGradientAngle(const EcmaVM *vm, const Local<JSValueRef> &value, std::vector<double> &values)
116 {
117     std::optional<float> degree;
118     ParseJsAngle(vm, value, degree);
119     auto angleHasValue = degree.has_value();
120     auto angleValue = angleHasValue ? degree.value() : 0.0f;
121     degree.reset();
122     values.push_back(static_cast<double>(angleHasValue));
123     values.push_back(static_cast<double>(angleValue));
124 }
125 
ParseGradientColorStops(const EcmaVM * vm,const Local<JSValueRef> & value,std::vector<double> & colors)126 void ParseGradientColorStops(const EcmaVM *vm, const Local<JSValueRef> &value, std::vector<double> &colors)
127 {
128     if (!value->IsArray(vm)) {
129         return;
130     }
131     auto array = panda::Local<panda::ArrayRef>(value);
132     auto length = array->Length(vm);
133     for (uint32_t index = 0; index < length; index++) {
134         auto item = panda::ArrayRef::GetValueAt(vm, array, index);
135         if (!item->IsArray(vm)) {
136             continue;
137         }
138         auto itemArray = panda::Local<panda::ArrayRef>(item);
139         auto itemLength = itemArray->Length(vm);
140         if (itemLength < NUM_1) {
141             continue;
142         }
143         Color color;
144         auto colorParams = panda::ArrayRef::GetValueAt(vm, itemArray, NUM_0);
145         if (!ArkTSUtils::ParseJsColorAlpha(vm, colorParams, color)) {
146             continue;
147         }
148         bool hasDimension = false;
149         double dimension = 0.0;
150         if (itemLength > NUM_1) {
151             auto stopDimension = panda::ArrayRef::GetValueAt(vm, itemArray, NUM_1);
152             if (ArkTSUtils::ParseJsDouble(vm, stopDimension, dimension)) {
153                 hasDimension = true;
154             }
155         }
156         colors.push_back(static_cast<double>(color.GetValue()));
157         colors.push_back(static_cast<double>(hasDimension));
158         colors.push_back(dimension);
159     }
160 }
161 
ParseJsShadowColorStrategy(const EcmaVM * vm,const Local<JSValueRef> & value,ShadowColorStrategy & strategy)162 bool ParseJsShadowColorStrategy(const EcmaVM *vm, const Local<JSValueRef> &value, ShadowColorStrategy& strategy)
163 {
164     if (value->IsString()) {
165         std::string colorStr = value->ToString(vm)->ToString();
166         if (colorStr.compare("average") == 0) {
167             strategy = ShadowColorStrategy::AVERAGE;
168             return true;
169         } else if (colorStr.compare("primary") == 0) {
170             strategy = ShadowColorStrategy::PRIMARY;
171             return true;
172         }
173     }
174     return false;
175 }
176 
ParseJsShadowDimension(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimension)177 bool ParseJsShadowDimension(const EcmaVM *vm, const Local<JSValueRef> &value, CalcDimension& dimension)
178 {
179     if (ArkTSUtils::ParseJsResource(vm, value, dimension)) {
180         return true;
181     } else {
182         if (ArkTSUtils::ParseJsDimensionVp(vm, value, dimension)) {
183             return true;
184         }
185     }
186     return false;
187 }
188 
ParseJsShadowColor(const EcmaVM * vm,const Local<JSValueRef> & colorArg,int32_t & type,uint32_t & colorValue)189 bool ParseJsShadowColor(const EcmaVM *vm, const Local<JSValueRef> &colorArg,
190     int32_t& type, uint32_t& colorValue)
191 {
192     Color color;
193     ShadowColorStrategy shadowColorStrategy;
194     if (ParseJsShadowColorStrategy(vm, colorArg, shadowColorStrategy)) {
195         type = 1; // 1: has shadowColorStrategy
196         colorValue = static_cast<uint32_t>(shadowColorStrategy);
197         return true;
198     } else if (ArkTSUtils::ParseJsColorAlpha(vm, colorArg, color)) {
199         type = 2; // 2: has shadowColor
200         colorValue = color.GetValue();
201         return true;
202     }
203     return false;
204 }
205 
ParseCalcDimensions(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t offset,uint32_t count,std::vector<std::optional<CalcDimension>> & results,const CalcDimension & defValue)206 bool ParseCalcDimensions(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t offset, uint32_t count,
207     std::vector<std::optional<CalcDimension>>& results, const CalcDimension& defValue)
208 {
209     auto end = offset + count;
210     auto argsNumber = runtimeCallInfo->GetArgsNumber();
211     if (end > argsNumber) {
212         return false;
213     }
214     bool hasValue = false;
215     EcmaVM* vm = runtimeCallInfo->GetVM();
216     for (uint32_t index = offset; index < end; index++) {
217         auto arg = runtimeCallInfo->GetCallArgRef(index);
218         std::optional<CalcDimension> optCalcDimension;
219         CalcDimension dimension(defValue);
220         if (ArkTSUtils::ParseJsDimensionVp(vm, arg, dimension, false)) {
221             optCalcDimension = dimension;
222             hasValue = true;
223         }
224         results.push_back(optCalcDimension);
225     }
226     return hasValue;
227 }
228 
ResetCalcDimensions(std::vector<std::optional<CalcDimension>> & optDimensions)229 void ResetCalcDimensions(std::vector<std::optional<CalcDimension>>& optDimensions)
230 {
231     for (uint32_t index = 0; index < optDimensions.size(); index++) {
232         auto optDimension = optDimensions[index];
233         optDimension.reset();
234     }
235 }
236 
PushDimensionsToVector(std::vector<ArkUIStringAndFloat> & results,const std::vector<std::optional<CalcDimension>> & optDimensions)237 void PushDimensionsToVector(std::vector<ArkUIStringAndFloat>& results,
238     const std::vector<std::optional<CalcDimension>>& optDimensions)
239 {
240     for (uint32_t index = 0; index < optDimensions.size(); index++) {
241         auto optDimension = optDimensions[index];
242         auto hasValue = optDimension.has_value();
243         DimensionUnit unit = DimensionUnit::PX;
244         ArkUIStringAndFloat value = { 0.0, nullptr };
245         if (hasValue) {
246             unit = optDimension.value().Unit();
247             if (unit == DimensionUnit::CALC) {
248                 value.valueStr = optDimension.value().CalcValue().c_str();
249             } else {
250                 value.value = optDimension.value().Value();
251             }
252         }
253         results.push_back(ArkUIStringAndFloat { static_cast<double>(hasValue), nullptr });
254         results.push_back(value);
255         results.push_back(ArkUIStringAndFloat { static_cast<double>(unit), nullptr });
256     }
257 }
258 
ParseBorderImageSlice(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t & offset,std::vector<std::optional<CalcDimension>> & optDimensions,uint8_t & bitsets)259 void ParseBorderImageSlice(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t& offset,
260     std::vector<std::optional<CalcDimension>>& optDimensions, uint8_t& bitsets)
261 {
262     if (ParseCalcDimensions(runtimeCallInfo, offset, NUM_4, optDimensions, CalcDimension(0.0))) {
263         bitsets |= BorderImage::SLICE_BIT;
264     }
265     offset += NUM_4;
266 }
267 
ParseBorderImageWidth(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t & offset,std::vector<std::optional<CalcDimension>> & optDimensions,uint8_t & bitsets)268 void ParseBorderImageWidth(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t& offset,
269     std::vector<std::optional<CalcDimension>>& optDimensions, uint8_t& bitsets)
270 {
271     if (ParseCalcDimensions(runtimeCallInfo, offset, NUM_4, optDimensions, CalcDimension(0.0))) {
272         bitsets |= BorderImage::WIDTH_BIT;
273     }
274     offset += NUM_4;
275 }
276 
ParseBorderImageOutset(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t & offset,std::vector<std::optional<CalcDimension>> & optDimensions,uint8_t & bitsets)277 void ParseBorderImageOutset(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t& offset,
278     std::vector<std::optional<CalcDimension>>& optDimensions, uint8_t& bitsets)
279 {
280     if (ParseCalcDimensions(runtimeCallInfo, offset, NUM_4, optDimensions, CalcDimension(0.0))) {
281         bitsets |= BorderImage::OUTSET_BIT;
282     }
283     offset += NUM_4;
284 }
285 
ParseBorderImageRepeat(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t & offset,std::vector<ArkUIStringAndFloat> & options,uint8_t & bitsets)286 bool ParseBorderImageRepeat(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t& offset,
287     std::vector<ArkUIStringAndFloat>& options, uint8_t& bitsets)
288 {
289     auto argsNumber = runtimeCallInfo->GetArgsNumber();
290     if ((offset + NUM_1) > argsNumber) {
291         return false;
292     }
293     auto vm = runtimeCallInfo->GetVM();
294     auto repeatArg = runtimeCallInfo->GetCallArgRef(offset);
295     auto repeatHasValue = repeatArg->IsString();
296     auto repeatValue = BorderImageRepeat::STRETCH;
297     if (repeatHasValue) {
298         auto repeatStr = repeatArg->ToString(vm)->ToString();
299         if (repeatStr == "Repeat") {
300             repeatValue = BorderImageRepeat::REPEAT;
301         } else if (repeatStr == "Round") {
302             repeatValue = BorderImageRepeat::ROUND;
303         } else if (repeatStr == "Space") {
304             repeatValue = BorderImageRepeat::SPACE;
305         } else {
306             repeatValue = BorderImageRepeat::STRETCH;
307         }
308     }
309     options.push_back(ArkUIStringAndFloat { static_cast<double>(repeatHasValue), nullptr });
310     options.push_back(ArkUIStringAndFloat { static_cast<double>(repeatValue), nullptr });
311     if (repeatHasValue) {
312         bitsets |= BorderImage::REPEAT_BIT;
313     }
314     offset += NUM_1;
315     return true;
316 }
317 
ParseBorderImageFill(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t & offset,std::vector<ArkUIStringAndFloat> & options)318 bool ParseBorderImageFill(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t& offset,
319     std::vector<ArkUIStringAndFloat>& options)
320 {
321     auto argsNumber = runtimeCallInfo->GetArgsNumber();
322     if ((offset + NUM_1) > argsNumber) {
323         return false;
324     }
325     auto fillArg = runtimeCallInfo->GetCallArgRef(offset);
326     auto hasValue = fillArg->IsBoolean();
327     auto fill = (hasValue) ? fillArg->BooleaValue() : false;
328     options.push_back(ArkUIStringAndFloat {static_cast<double>(hasValue), nullptr });
329     options.push_back(ArkUIStringAndFloat {static_cast<double>(fill), nullptr });
330     offset += NUM_1;
331     return true;
332 }
333 
IsArgsUndefined(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t offset,uint32_t count)334 bool IsArgsUndefined(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t offset, uint32_t count)
335 {
336     auto argsNumber = runtimeCallInfo->GetArgsNumber();
337     auto end = offset + count;
338     end = (end > argsNumber) ? argsNumber : end;
339     for (uint32_t index = offset; index < end; index++) {
340         auto jsArg = runtimeCallInfo->GetCallArgRef(index);
341         if (jsArg->IsUndefined()) {
342             continue;
343         }
344         return false;
345     }
346     return true;
347 }
348 
ParseBorderImageLinearGradient(NodeHandle node,ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t offset,uint8_t & bitsets)349 void ParseBorderImageLinearGradient(NodeHandle node,
350     ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t offset,
351     uint8_t& bitsets)
352 {
353     auto argsNumber = runtimeCallInfo->GetArgsNumber();
354     if ((offset + NUM_4) > argsNumber) {
355         return;
356     }
357     auto angleArg = runtimeCallInfo->GetCallArgRef(offset);
358     auto directionArg = runtimeCallInfo->GetCallArgRef(offset + NUM_1);
359     auto colorsArg = runtimeCallInfo->GetCallArgRef(offset + NUM_2);
360     auto repeatingArg = runtimeCallInfo->GetCallArgRef(offset + NUM_3);
361     if (angleArg->IsUndefined() && directionArg->IsUndefined() &&
362         colorsArg->IsUndefined() && repeatingArg->IsUndefined()) {
363         return;
364     }
365     auto vm = runtimeCallInfo->GetVM();
366     std::vector<double> options;
367     ParseGradientAngle(vm, angleArg, options);
368     int32_t direction = static_cast<int32_t>(GradientDirection::NONE);
369     ParseJsInt32(vm, directionArg, direction);
370     options.push_back(static_cast<double>(direction));
371     std::vector<double> colors;
372     ParseGradientColorStops(vm, colorsArg, colors);
373     auto repeating = repeatingArg->IsBoolean() ? repeatingArg->BooleaValue() : false;
374     options.push_back(static_cast<double>(repeating));
375     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderImageGradient(node,
376         options.data(), options.size(), colors.data(), colors.size());
377     bitsets |= BorderImage::GRADIENT_BIT;
378 }
379 
ParseBorderImageSource(ArkUIRuntimeCallInfo * runtimeCallInfo,uint32_t & offset,NodeHandle node,std::string & src,uint8_t & bitsets)380 bool ParseBorderImageSource(ArkUIRuntimeCallInfo* runtimeCallInfo, uint32_t& offset,
381     NodeHandle node, std::string& src, uint8_t& bitsets)
382 {
383     auto argsNumber = runtimeCallInfo->GetArgsNumber();
384     if ((offset + NUM_5) > argsNumber) {
385         return false;
386     }
387     if (IsArgsUndefined(runtimeCallInfo, offset, NUM_5)) {
388         return false;
389     }
390     auto sourceArg = runtimeCallInfo->GetCallArgRef(offset); // use 1 args
391     offset += NUM_1;
392     auto vm = runtimeCallInfo->GetVM();
393     if (sourceArg->IsString()) {
394         src = sourceArg->ToString(vm)->ToString();
395         bitsets |= BorderImage::SOURCE_BIT;
396     } else {
397         if (ArkTSUtils::ParseJsMedia(vm, sourceArg, src)) {
398             bitsets |= BorderImage::SOURCE_BIT;
399         } else {
400             ParseBorderImageLinearGradient(node, runtimeCallInfo, offset, bitsets);
401         }
402     }
403     offset += NUM_4; // skip 4 args
404     return true;
405 }
406 
ParseChainedMoveTransition(const Framework::JSRef<Framework::JSVal> & effectOption,const JSExecutionContext & context)407 RefPtr<NG::ChainedTransitionEffect> ParseChainedMoveTransition(
408     const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
409 {
410     int32_t edge = 0;
411     if (JSViewAbstract::ParseJsInt32(effectOption, edge)) {
412         if (edge < static_cast<int32_t>(NG::TransitionEdge::TOP) ||
413             edge > static_cast<int32_t>(NG::TransitionEdge::END)) {
414             edge = static_cast<int32_t>(NG::TransitionEdge::START);
415         }
416         return AceType::MakeRefPtr<NG::ChainedMoveEffect>(static_cast<NG::TransitionEdge>(edge));
417     }
418     return nullptr;
419 }
420 
ParseChainedOpacityTransition(const Framework::JSRef<Framework::JSVal> & effectOption,const JSExecutionContext & context)421 RefPtr<NG::ChainedTransitionEffect> ParseChainedOpacityTransition(
422     const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
423 {
424     double opacity = 1.0;
425     if (Framework::JSViewAbstract::ParseJsDouble(effectOption, opacity)) {
426         if ((LessNotEqual(opacity, 0.0)) || opacity > 1.0) {
427             opacity = 1.0;
428         }
429         return AceType::MakeRefPtr<NG::ChainedOpacityEffect>(opacity);
430     }
431     return nullptr;
432 }
433 
ParseJsTranslate(const Framework::JSRef<Framework::JSVal> & jsValue,CalcDimension & translateX,CalcDimension & translateY,CalcDimension & translateZ)434 void ParseJsTranslate(const Framework::JSRef<Framework::JSVal>& jsValue, CalcDimension& translateX,
435     CalcDimension& translateY, CalcDimension& translateZ)
436 {
437     if (!jsValue->IsObject()) {
438         return;
439     }
440     Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(jsValue);
441     Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("x"), translateX);
442     Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("y"), translateY);
443     Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("z"), translateZ);
444 }
445 
ParseChainedTranslateTransition(const Framework::JSRef<Framework::JSVal> & effectOption,const JSExecutionContext & context)446 RefPtr<NG::ChainedTransitionEffect> ParseChainedTranslateTransition(
447     const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
448 {
449     if (effectOption->IsObject()) {
450         // default: x, y, z (0.0, 0.0, 0.0)
451         NG::TranslateOptions translate;
452         ParseJsTranslate(effectOption, translate.x, translate.y, translate.z);
453         return AceType::MakeRefPtr<NG::ChainedTranslateEffect>(translate);
454     }
455     return nullptr;
456 }
457 
GetDefaultRotateVector(double & dx,double & dy,double & dz)458 void GetDefaultRotateVector(double& dx, double& dy, double& dz)
459 {
460     dx = 0.0;
461     dy = 0.0;
462     dz = 0.0;
463     if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_NINE)) {
464         dz = 1.0;
465     }
466 }
467 
ParseJsRotate(const Framework::JSRef<Framework::JSVal> & jsValue,NG::RotateOptions & rotate,std::optional<float> & angle)468 void ParseJsRotate(
469     const Framework::JSRef<Framework::JSVal>& jsValue, NG::RotateOptions& rotate, std::optional<float>& angle)
470 {
471     if (!jsValue->IsObject()) {
472         return;
473     }
474     // default: dx, dy, dz (0.0, 0.0, 0.0)
475     double dxVal = 0.0;
476     double dyVal = 0.0;
477     double dzVal = 0.0;
478     Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(jsValue);
479     if (!jsObj->HasProperty("x") && !jsObj->HasProperty("y") && !jsObj->HasProperty("z")) {
480         GetDefaultRotateVector(dxVal, dyVal, dzVal);
481     } else {
482         Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("x"), dxVal);
483         Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("y"), dyVal);
484         Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("z"), dzVal);
485     }
486     rotate.xDirection = static_cast<float>(dxVal);
487     rotate.yDirection = static_cast<float>(dyVal);
488     rotate.zDirection = static_cast<float>(dzVal);
489     // if specify centerX
490     if (!Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("centerX"), rotate.centerX)) {
491         rotate.centerX = Dimension(0.5f, DimensionUnit::PERCENT);
492     }
493     // if specify centerY
494     if (!Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("centerY"), rotate.centerY)) {
495         rotate.centerY = Dimension(0.5f, DimensionUnit::PERCENT);
496     }
497     // if specify centerZ
498     if (!Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("centerZ"), rotate.centerZ)) {
499         rotate.centerZ = Dimension(0.5f, DimensionUnit::PERCENT);
500     }
501     // if specify angle
502     Framework::JSViewAbstract::GetJsAngle("angle", jsObj, angle);
503     rotate.perspective = 0.0f;
504     Framework::JSViewAbstract::GetJsPerspective("perspective", jsObj, rotate.perspective);
505 }
506 
ParseChainedRotateTransition(const Framework::JSRef<Framework::JSVal> & effectOption,const JSExecutionContext & context)507 RefPtr<NG::ChainedTransitionEffect> ParseChainedRotateTransition(
508     const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
509 {
510     RefPtr<NG::ChainedTransitionEffect> effect;
511     if (effectOption->IsObject()) {
512         NG::RotateOptions rotate(0.0f, 0.0f, 0.0f, 0.0f, 0.5_pct, 0.5_pct);
513         std::optional<float> angle;
514         ParseJsRotate(effectOption, rotate, angle);
515         if (angle.has_value()) {
516             rotate.angle = angle.value();
517             return AceType::MakeRefPtr<NG::ChainedRotateEffect>(rotate);
518         }
519     }
520     return nullptr;
521 }
522 
ParseJsScale(const Framework::JSRef<Framework::JSVal> & jsValue,float & scaleX,float & scaleY,float & scaleZ,CalcDimension & centerX,CalcDimension & centerY)523 void ParseJsScale(const Framework::JSRef<Framework::JSVal>& jsValue, float& scaleX, float& scaleY, float& scaleZ,
524     CalcDimension& centerX, CalcDimension& centerY)
525 {
526     double xVal = 1.0;
527     double yVal = 1.0;
528     double zVal = 1.0;
529     if (!jsValue->IsObject()) {
530         scaleX = static_cast<float>(xVal);
531         scaleY = static_cast<float>(yVal);
532         scaleZ = static_cast<float>(zVal);
533         CalcDimension length;
534         centerX = length;
535         centerY = length;
536         return;
537     }
538     Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(jsValue);
539     Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("x"), xVal);
540     Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("y"), yVal);
541     Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("z"), zVal);
542     scaleX = static_cast<float>(xVal);
543     scaleY = static_cast<float>(yVal);
544     scaleZ = static_cast<float>(zVal);
545     // if specify centerX
546     Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("centerX"), centerX);
547     // if specify centerY
548     Framework::JSViewAbstract::ParseJsDimensionVp(jsObj->GetProperty("centerY"), centerY);
549 }
550 
ParseChainedScaleTransition(const Framework::JSRef<Framework::JSVal> & effectOption,const JSExecutionContext & context)551 RefPtr<NG::ChainedTransitionEffect> ParseChainedScaleTransition(
552     const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
553 {
554     if (effectOption->IsObject()) {
555         // default: x, y, z (1.0, 1.0, 1.0), centerX, centerY 50% 50%;
556         NG::ScaleOptions scale(1.0f, 1.0f, 1.0f, 0.5_pct, 0.5_pct);
557         ParseJsScale(effectOption, scale.xScale, scale.yScale, scale.zScale, scale.centerX, scale.centerY);
558         return AceType::MakeRefPtr<NG::ChainedScaleEffect>(scale);
559     }
560     return nullptr;
561 }
562 
563 RefPtr<NG::ChainedTransitionEffect> ParseChainedTransition(
564     const JSRef<JSObject>& object, const JSExecutionContext& context);
565 
ParseChainedAsymmetricTransition(const Framework::JSRef<Framework::JSVal> & effectOption,const JSExecutionContext & context)566 RefPtr<NG::ChainedTransitionEffect> ParseChainedAsymmetricTransition(
567     const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
568 {
569     if (effectOption->IsObject()) {
570         auto effectObj = Framework::JSRef<Framework::JSObject>::Cast(effectOption);
571         auto appearJsVal = effectObj->GetProperty("appear");
572         auto disappearJsVal = effectObj->GetProperty("disappear");
573         RefPtr<NG::ChainedTransitionEffect> appearEffect;
574         RefPtr<NG::ChainedTransitionEffect> disappearEffect;
575         if (appearJsVal->IsObject()) {
576             auto appearObj = Framework::JSRef<Framework::JSObject>::Cast(appearJsVal);
577             appearEffect = ParseChainedTransition(appearObj, context);
578         }
579         if (disappearJsVal->IsObject()) {
580             auto disappearObj = Framework::JSRef<Framework::JSObject>::Cast(disappearJsVal);
581             disappearEffect = ParseChainedTransition(disappearObj, context);
582         }
583         return AceType::MakeRefPtr<NG::ChainedAsymmetricEffect>(appearEffect, disappearEffect);
584     }
585     return nullptr;
586 }
587 
GetFormAnimationTimeInterval(const RefPtr<PipelineBase> & pipelineContext)588 int64_t GetFormAnimationTimeInterval(const RefPtr<PipelineBase>& pipelineContext)
589 {
590     CHECK_NULL_RETURN(pipelineContext, 0);
591     return (GetMicroTickCount() - pipelineContext->GetFormAnimationStartTime()) / MICROSEC_TO_MILLISEC;
592 }
593 
594 using ChainedTransitionEffectCreator = RefPtr<NG::ChainedTransitionEffect> (*)(
595     const Framework::JSRef<Framework::JSVal>&, const JSExecutionContext&);
596 
GetAnimationOptionResult(shared_ptr<AnimationOption> & animationOptionResult,const JSRef<JSObject> & propAnimationOption,const RefPtr<PipelineBase> & pipelineContext,const JSExecutionContext & context)597 void GetAnimationOptionResult(shared_ptr<AnimationOption>& animationOptionResult,
598     const JSRef<JSObject>& propAnimationOption, const RefPtr<PipelineBase>& pipelineContext,
599     const JSExecutionContext& context)
600 {
601     // The maximum of the form-animation-playback duration value is 1000 ms.
602     if (pipelineContext->IsFormRender() && pipelineContext->IsFormAnimation()) {
603         auto formAnimationTimeInterval = GetFormAnimationTimeInterval(pipelineContext);
604         // If the duration exceeds 1000ms, init it to 0 ms.
605         if (formAnimationTimeInterval > DEFAULT_DURATION) {
606             animationOptionResult->SetDuration(0);
607         } else if (animationOptionResult->GetDuration() > (DEFAULT_DURATION - formAnimationTimeInterval)) {
608             // If remaining time is less than 1000ms, check for update duration.
609             animationOptionResult->SetDuration(DEFAULT_DURATION - formAnimationTimeInterval);
610             TAG_LOGI(AceLogTag::ACE_FORM, "[Form animation]  Form Transition SetDuration: %{public}lld ms",
611                 static_cast<long long>(DEFAULT_DURATION - formAnimationTimeInterval));
612         }
613     }
614     auto animationOptionObj = Framework::JSRef<Framework::JSObject>::Cast(propAnimationOption);
615     Framework::JSRef<Framework::JSVal> onFinish = animationOptionObj->GetProperty("onFinish");
616     if (onFinish->IsFunction()) {
617         RefPtr<JsFunction> jsFunc =
618             AceType::MakeRefPtr<JsFunction>(Framework::JSRef<Framework::JSObject>(), JSRef<JSFunc>::Cast(onFinish));
619         std::function<void()> onFinishEvent = [execCtx = context, func = std::move(jsFunc),
620                                                   id = Container::CurrentId()]() {
621             ContainerScope scope(id);
622             JAVASCRIPT_EXECUTION_SCOPE_WITH_CHECK(execCtx);
623             func->Execute();
624         };
625         animationOptionResult->SetOnFinishEvent(onFinishEvent);
626     }
627 }
628 
ParseChainedTransition(const Framework::JSRef<Framework::JSObject> & object,const JSExecutionContext & context)629 RefPtr<NG::ChainedTransitionEffect> ParseChainedTransition(
630     const Framework::JSRef<Framework::JSObject>& object, const JSExecutionContext& context)
631 {
632     auto propType = object->GetProperty("type_");
633     if (!propType->IsString()) {
634         return nullptr;
635     }
636     std::string type = propType->ToString();
637     auto propEffectOption = object->GetProperty("effect_");
638     auto propAnimationOption = object->GetProperty("animation_");
639     auto propSuccessor = object->GetProperty("successor_");
640     static const LinearMapNode<ChainedTransitionEffectCreator> creatorMap[] = {
641         { "asymmetric", ParseChainedAsymmetricTransition },
642         { "identity",
643             [](const Framework::JSRef<Framework::JSVal>& effectOption, const JSExecutionContext& context)
644                 -> RefPtr<NG::ChainedTransitionEffect> { return AceType::MakeRefPtr<NG::ChainedIdentityEffect>(); } },
645         { "move", ParseChainedMoveTransition },
646         { "opacity", ParseChainedOpacityTransition },
647         { "rotate", ParseChainedRotateTransition },
648         { "scale", ParseChainedScaleTransition },
649         { "slideSwitch",
650             [](const Framework::JSRef<Framework::JSVal>& effectOption,
651                 const JSExecutionContext& context) -> RefPtr<NG::ChainedTransitionEffect> {
652                 return AceType::MakeRefPtr<NG::ChainedSlideSwitchEffect>();
653             } },
654         { "translate", ParseChainedTranslateTransition },
655     };
656     int64_t index = BinarySearchFindIndex(creatorMap, ArraySize(creatorMap), type.c_str());
657     if (index < 0) {
658         return nullptr;
659     }
660     RefPtr<NG::ChainedTransitionEffect> result = creatorMap[index].value(propEffectOption, context);
661     if (!result) {
662         return nullptr;
663     }
664     if (propAnimationOption->IsObject()) {
665         auto container = Container::Current();
666         CHECK_NULL_RETURN(container, nullptr);
667         auto pipelineContext = container->GetPipelineContext();
668         CHECK_NULL_RETURN(pipelineContext, nullptr);
669         auto animationOptionResult = std::make_shared<AnimationOption>(
670             JSViewContext::CreateAnimation(propAnimationOption, pipelineContext->IsFormRender()));
671         GetAnimationOptionResult(animationOptionResult, propAnimationOption, pipelineContext, context);
672         result->SetAnimationOption(animationOptionResult);
673     }
674     if (propSuccessor->IsObject()) {
675         result->SetNext(ParseChainedTransition(Framework::JSRef<Framework::JSObject>::Cast(propSuccessor), context));
676     }
677     return result;
678 }
679 
ParseJsTransition(const Framework::JSRef<Framework::JSVal> & transitionArgs)680 NG::TransitionOptions ParseJsTransition(const Framework::JSRef<Framework::JSVal>& transitionArgs)
681 {
682     NG::TransitionOptions transitionOption;
683     if (!transitionArgs->IsObject()) {
684         return transitionOption;
685     }
686     Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(transitionArgs);
687     bool hasEffect = false;
688     transitionOption.Type = ParseTransitionType(jsObj->GetPropertyValue<std::string>("type", "All"));
689     if (jsObj->HasProperty("opacity")) {
690         double opacity = 1.0;
691         Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("opacity"), opacity);
692         opacity = std::clamp(opacity, 0.0, 1.0);
693         transitionOption.UpdateOpacity(static_cast<float>(opacity));
694         hasEffect = true;
695     }
696     if (jsObj->HasProperty("translate")) {
697         // default: x, y, z (0.0, 0.0, 0.0)
698         NG::TranslateOptions translate;
699         ParseJsTranslate(jsObj->GetProperty("translate"), translate.x, translate.y, translate.z);
700         transitionOption.UpdateTranslate(translate);
701         hasEffect = true;
702     }
703     if (jsObj->HasProperty("scale")) {
704         // default: x, y, z (1.0, 1.0, 1.0), centerX, centerY 50% 50%;
705         NG::ScaleOptions scale(1.0f, 1.0f, 1.0f, 0.5_pct, 0.5_pct);
706         ParseJsScale(
707             jsObj->GetProperty("scale"), scale.xScale, scale.yScale, scale.zScale, scale.centerX, scale.centerY);
708         transitionOption.UpdateScale(scale);
709         hasEffect = true;
710     }
711     if (jsObj->HasProperty("rotate")) {
712         // default: dx, dy, dz (0.0, 0.0, 0.0), angle 0, centerX, centerY 50% 50%;
713         NG::RotateOptions rotate(0.0f, 0.0f, 0.0f, 0.0f, 0.5_pct, 0.5_pct);
714         std::optional<float> angle;
715         ParseJsRotate(jsObj->GetProperty("rotate"), rotate, angle);
716         if (angle.has_value()) {
717             rotate.angle = angle.value();
718             transitionOption.UpdateRotate(rotate);
719             hasEffect = true;
720         }
721     }
722     if (!hasEffect) {
723         // default transition
724         transitionOption = NG::TransitionOptions::GetDefaultTransition(transitionOption.Type);
725     }
726     return transitionOption;
727 }
728 
ParseMotionPath(const Framework::JSRef<Framework::JSVal> & jsValue,MotionPathOption & option)729 bool ParseMotionPath(const Framework::JSRef<Framework::JSVal>& jsValue, MotionPathOption& option)
730 {
731     if (!jsValue->IsObject()) {
732         return false;
733     }
734 
735     Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(jsValue);
736     auto path = jsObj->GetPropertyValue<std::string>("path", "");
737     if (path.empty()) {
738         return false;
739     }
740     option.SetPath(path);
741     double from = 0.0;
742     double to = 1.0;
743     Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("from"), from);
744     Framework::JSViewAbstract::ParseJsDouble(jsObj->GetProperty("to"), to);
745     if (GreatNotEqual(from, 1.0) || LessNotEqual(from, 0.0)) {
746         from = 0.0;
747     }
748     if (GreatNotEqual(to, 1.0) || LessNotEqual(to, 0.0)) {
749         to = 1.0;
750     } else if (to < from) {
751         to = from;
752     }
753     option.SetBegin(static_cast<float>(from));
754     option.SetEnd(static_cast<float>(to));
755     option.SetRotate(jsObj->GetPropertyValue<bool>("rotatable", false));
756     return true;
757 }
758 
ParseJsDoublePair(const EcmaVM * vm,const Local<JSValueRef> & value,double & first,double & second)759 bool ParseJsDoublePair(const EcmaVM *vm, const Local<JSValueRef> &value, double &first, double &second)
760 {
761     if (!value->IsArray(vm)) {
762         return false;
763     }
764     auto array = panda::Local<panda::ArrayRef>(value);
765     if (array->Length(vm) != NUM_2) {
766         return false;
767     }
768     auto firstArg = panda::ArrayRef::GetValueAt(vm, array, NUM_0);
769     if (!firstArg->IsNumber()) {
770         return false;
771     }
772     auto secondArg = panda::ArrayRef::GetValueAt(vm, array, NUM_1);
773     if (!secondArg->IsNumber()) {
774         return false;
775     }
776     first = firstArg->ToNumber(vm)->Value();
777     second = secondArg->ToNumber(vm)->Value();
778     return true;
779 }
780 
ParseGradientCenter(const EcmaVM * vm,const Local<JSValueRef> & value,std::vector<double> & values)781 void ParseGradientCenter(const EcmaVM* vm, const Local<JSValueRef>& value, std::vector<double>& values)
782 {
783     bool hasValueX = false;
784     bool hasValueY = false;
785     CalcDimension valueX;
786     CalcDimension valueY;
787     if (value->IsArray(vm)) {
788         auto array = panda::Local<panda::ArrayRef>(value);
789         auto length = array->Length(vm);
790         if (length == NUM_2) {
791             hasValueX =
792                 ArkTSUtils::ParseJsDimensionVp(vm, panda::ArrayRef::GetValueAt(vm, array, NUM_0), valueX, false);
793             hasValueY =
794                 ArkTSUtils::ParseJsDimensionVp(vm, panda::ArrayRef::GetValueAt(vm, array, NUM_1), valueY, false);
795         }
796     }
797     values.push_back(static_cast<double>(hasValueX));
798     values.push_back(static_cast<double>(valueX.Value()));
799     values.push_back(static_cast<double>(valueX.Unit()));
800     values.push_back(static_cast<double>(hasValueY));
801     values.push_back(static_cast<double>(valueY.Value()));
802     values.push_back(static_cast<double>(valueY.Unit()));
803 }
804 
PushOuterBordeDimensionVector(const std::optional<CalcDimension> & valueDimen,std::vector<double> & options)805 void PushOuterBordeDimensionVector(const std::optional<CalcDimension>& valueDimen, std::vector<double> &options)
806 {
807     options.push_back(static_cast<double>(valueDimen.has_value()));
808     if (valueDimen.has_value()) {
809         options.push_back(static_cast<double>(valueDimen.value().Value()));
810         options.push_back(static_cast<double>(valueDimen.value().Unit()));
811     } else {
812         options.push_back(0);
813         options.push_back(0);
814     }
815 }
816 
ParseOuterBorder(EcmaVM * vm,const Local<JSValueRef> & args,std::optional<CalcDimension> & optionalDimention)817 void ParseOuterBorder(EcmaVM* vm, const Local<JSValueRef>& args, std::optional<CalcDimension>& optionalDimention)
818 {
819     CalcDimension valueDimen;
820     if (!args->IsUndefined() && ArkTSUtils::ParseJsDimensionVp(vm, args, valueDimen, false)) {
821         if (valueDimen.IsNegative() || valueDimen.Unit() == DimensionUnit::PERCENT) {
822             valueDimen.Reset();
823         }
824         optionalDimention = valueDimen;
825     }
826 }
827 
ParseOuterBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<double> & values)828 void ParseOuterBorderWidth(ArkUIRuntimeCallInfo *runtimeCallInfo, EcmaVM *vm, std::vector<double> &values)
829 {
830     Local<JSValueRef> leftArgs = runtimeCallInfo->GetCallArgRef(NUM_1);
831     Local<JSValueRef> rightArgs = runtimeCallInfo->GetCallArgRef(NUM_2);
832     Local<JSValueRef> topArgs = runtimeCallInfo->GetCallArgRef(NUM_3);
833     Local<JSValueRef> bottomArgs = runtimeCallInfo->GetCallArgRef(NUM_4);
834     std::optional<CalcDimension> leftDimen;
835     std::optional<CalcDimension> rightDimen;
836     std::optional<CalcDimension> topDimen;
837     std::optional<CalcDimension> bottomDimen;
838 
839     ParseOuterBorder(vm, leftArgs, leftDimen);
840     ParseOuterBorder(vm, rightArgs, rightDimen);
841     ParseOuterBorder(vm, topArgs, topDimen);
842     ParseOuterBorder(vm, bottomArgs, bottomDimen);
843 
844     PushOuterBordeDimensionVector(leftDimen, values);
845     PushOuterBordeDimensionVector(rightDimen, values);
846     PushOuterBordeDimensionVector(topDimen, values);
847     PushOuterBordeDimensionVector(bottomDimen, values);
848 }
849 
PushOuterBordeColorVector(const std::optional<Color> & valueColor,std::vector<uint32_t> & options)850 void PushOuterBordeColorVector(const std::optional<Color>& valueColor, std::vector<uint32_t> &options)
851 {
852     options.push_back(static_cast<uint32_t>(valueColor.has_value()));
853     if (valueColor.has_value()) {
854         options.push_back(static_cast<uint32_t>(valueColor.value().GetValue()));
855     } else {
856         options.push_back(0);
857     }
858 }
ParseOuterBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<uint32_t> & values,int32_t argsIndex)859 void ParseOuterBorderColor(
860     ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm, std::vector<uint32_t>& values, int32_t argsIndex)
861 {
862     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(argsIndex);
863     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_1);
864     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_2);
865     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_3);
866 
867     std::optional<Color> leftColor;
868     std::optional<Color> rightColor;
869     std::optional<Color> topColor;
870     std::optional<Color> bottomColor;
871 
872     Color left;
873     if (!leftArg->IsUndefined() && ArkTSUtils::ParseJsColorAlpha(vm, leftArg, left)) {
874         leftColor = left;
875     }
876     Color right;
877     if (!rightArg->IsUndefined() && ArkTSUtils::ParseJsColorAlpha(vm, rightArg, right)) {
878         rightColor = right;
879     }
880     Color top;
881     if (!topArg->IsUndefined() && ArkTSUtils::ParseJsColorAlpha(vm, topArg, top)) {
882         topColor = top;
883     }
884     Color bottom;
885     if (!bottomArg->IsUndefined() && ArkTSUtils::ParseJsColorAlpha(vm, bottomArg, bottom)) {
886         bottomColor = bottom;
887     }
888 
889     PushOuterBordeColorVector(leftColor, values);
890     PushOuterBordeColorVector(rightColor, values);
891     PushOuterBordeColorVector(topColor, values);
892     PushOuterBordeColorVector(bottomColor, values);
893 }
894 
ParseOuterBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<double> & values,int32_t argsIndex)895 void ParseOuterBorderRadius(
896     ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm, std::vector<double>& values, int32_t argsIndex)
897 {
898     Local<JSValueRef> topLeftArgs = runtimeCallInfo->GetCallArgRef(argsIndex);
899     Local<JSValueRef> topRightArgs = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_1);
900     Local<JSValueRef> bottomLeftArgs = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_2);
901     Local<JSValueRef> bottomRightArgs = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_3);
902 
903     std::optional<CalcDimension> topLeftOptinal;
904     std::optional<CalcDimension> topRightOptinal;
905     std::optional<CalcDimension> bottomLeftOptinal;
906     std::optional<CalcDimension> bottomRightOptinal;
907 
908     ParseOuterBorder(vm, topLeftArgs, topLeftOptinal);
909     ParseOuterBorder(vm, topRightArgs, topRightOptinal);
910     ParseOuterBorder(vm, bottomLeftArgs, bottomLeftOptinal);
911     ParseOuterBorder(vm, bottomRightArgs, bottomRightOptinal);
912 
913     PushOuterBordeDimensionVector(topLeftOptinal, values);
914     PushOuterBordeDimensionVector(topRightOptinal, values);
915     PushOuterBordeDimensionVector(bottomLeftOptinal, values);
916     PushOuterBordeDimensionVector(bottomRightOptinal, values);
917 }
918 
PushOuterBordeStyleVector(const std::optional<BorderStyle> & value,std::vector<uint32_t> & options)919 void PushOuterBordeStyleVector(const std::optional<BorderStyle>& value, std::vector<uint32_t> &options)
920 {
921     options.push_back(static_cast<uint32_t>(value.has_value()));
922     if (value.has_value()) {
923         options.push_back(static_cast<uint32_t>(value.value()));
924     } else {
925         options.push_back(0);
926     }
927 }
928 
ParseOuterBorderStyle(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<uint32_t> & values,int32_t argsIndex)929 void ParseOuterBorderStyle(
930     ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM* vm, std::vector<uint32_t>& values, int32_t argsIndex)
931 {
932     std::optional<BorderStyle> styleLeft;
933     std::optional<BorderStyle> styleRight;
934     std::optional<BorderStyle> styleTop;
935     std::optional<BorderStyle> styleBottom;
936 
937     auto topArg = runtimeCallInfo->GetCallArgRef(argsIndex);
938     auto rightArg = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_1);
939     auto bottomArg = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_2);
940     auto leftArg = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_3);
941 
942     if (!topArg->IsUndefined() && topArg->IsNumber()) {
943         styleTop = ConvertBorderStyle(topArg->Int32Value(vm));
944     }
945     if (!rightArg->IsUndefined() && rightArg->IsNumber()) {
946         styleRight = ConvertBorderStyle(rightArg->Int32Value(vm));
947     }
948     if (!bottomArg->IsUndefined() && bottomArg->IsNumber()) {
949         styleBottom = ConvertBorderStyle(bottomArg->Int32Value(vm));
950     }
951     if (!leftArg->IsUndefined() && leftArg->IsNumber()) {
952         styleLeft = ConvertBorderStyle(leftArg->Int32Value(vm));
953     }
954 
955     PushOuterBordeStyleVector(styleLeft, values);
956     PushOuterBordeStyleVector(styleRight, values);
957     PushOuterBordeStyleVector(styleTop, values);
958     PushOuterBordeStyleVector(styleBottom, values);
959 }
960 
SetBackgroundImagePositionAlign(double & value,DimensionUnit & type,double valueContent,const DimensionUnit & typeContent)961 void SetBackgroundImagePositionAlign(double &value, DimensionUnit &type, double valueContent,
962     const DimensionUnit &typeContent)
963 {
964     value = valueContent;
965     type = typeContent;
966 }
967 
ParseBackgroundImagePositionAlign(const int32_t align,double & valueX,double & valueY,DimensionUnit & typeX,DimensionUnit & typeY)968 void ParseBackgroundImagePositionAlign(const int32_t align, double &valueX, double &valueY, DimensionUnit &typeX,
969     DimensionUnit &typeY)
970 {
971     switch (align) {
972         case NUM_0:
973             SetBackgroundImagePositionAlign(valueX, typeX, 0.0, DimensionUnit::PERCENT);
974             SetBackgroundImagePositionAlign(valueY, typeY, 0.0, DimensionUnit::PERCENT);
975             break;
976         case NUM_1:
977             SetBackgroundImagePositionAlign(valueX, typeX, HALF_DIMENSION, DimensionUnit::PERCENT);
978             SetBackgroundImagePositionAlign(valueY, typeY, 0.0, DimensionUnit::PERCENT);
979             break;
980         case NUM_2:
981             SetBackgroundImagePositionAlign(valueX, typeX, FULL_DIMENSION, DimensionUnit::PERCENT);
982             SetBackgroundImagePositionAlign(valueY, typeY, 0.0, DimensionUnit::PERCENT);
983             break;
984         case NUM_3:
985             SetBackgroundImagePositionAlign(valueX, typeX, 0.0, DimensionUnit::PERCENT);
986             SetBackgroundImagePositionAlign(valueY, typeY, HALF_DIMENSION, DimensionUnit::PERCENT);
987             break;
988         case NUM_4:
989             SetBackgroundImagePositionAlign(valueX, typeX, HALF_DIMENSION, DimensionUnit::PERCENT);
990             SetBackgroundImagePositionAlign(valueY, typeY, HALF_DIMENSION, DimensionUnit::PERCENT);
991             break;
992         case NUM_5:
993             SetBackgroundImagePositionAlign(valueX, typeX, FULL_DIMENSION, DimensionUnit::PERCENT);
994             SetBackgroundImagePositionAlign(valueY, typeY, HALF_DIMENSION, DimensionUnit::PERCENT);
995             break;
996         case NUM_6:
997             SetBackgroundImagePositionAlign(valueX, typeX, 0.0, DimensionUnit::PERCENT);
998             SetBackgroundImagePositionAlign(valueY, typeY, FULL_DIMENSION, DimensionUnit::PERCENT);
999             break;
1000         case NUM_7:
1001             SetBackgroundImagePositionAlign(valueX, typeX, HALF_DIMENSION, DimensionUnit::PERCENT);
1002             SetBackgroundImagePositionAlign(valueY, typeY, FULL_DIMENSION, DimensionUnit::PERCENT);
1003             break;
1004         case NUM_8:
1005             SetBackgroundImagePositionAlign(valueX, typeX, FULL_DIMENSION, DimensionUnit::PERCENT);
1006             SetBackgroundImagePositionAlign(valueY, typeY, FULL_DIMENSION, DimensionUnit::PERCENT);
1007             break;
1008         default:
1009             break;
1010     }
1011 }
1012 
ParseAxisDimensionVp(const EcmaVM * vm,const Local<JSValueRef> & jsValue,CalcDimension & result,bool checkIllegal=false)1013 bool ParseAxisDimensionVp(const EcmaVM *vm, const Local<JSValueRef> &jsValue, CalcDimension &result,
1014     bool checkIllegal = false)
1015 {
1016     if (jsValue->IsNumber()) {
1017         result = Dimension(jsValue->ToNumber(vm)->Value(), DimensionUnit::VP);
1018         return true;
1019     }
1020     if (jsValue->IsString()) {
1021         if (checkIllegal) {
1022             return StringUtils::StringToDimensionWithUnitNG(jsValue->ToString(vm)->ToString(), result,
1023                 DimensionUnit::VP);
1024         }
1025         result = StringUtils::StringToCalcDimension(jsValue->ToString(vm)->ToString(), false, DimensionUnit::VP);
1026         return true;
1027     }
1028     return false;
1029 }
1030 
ParseDirection(EcmaVM * vm,const Local<JSValueRef> & directionArg,float & value)1031 void ParseDirection(EcmaVM *vm, const Local<JSValueRef> &directionArg, float &value)
1032 {
1033     if (directionArg->IsNumber()) {
1034         value = directionArg->ToNumber(vm)->Value();
1035     }
1036 }
1037 
GetJsAngle(const EcmaVM * vm,const Local<JSValueRef> & angleArg,std::optional<float> & angle)1038 void GetJsAngle(const EcmaVM* vm, const Local<JSValueRef>& angleArg, std::optional<float>& angle)
1039 {
1040     if (angleArg->IsString()) {
1041         angle = static_cast<float>(StringUtils::StringToDegree(angleArg->ToString(vm)->ToString()));
1042     } else if (angleArg->IsNumber()) {
1043         angle = static_cast<float>(angleArg->ToNumber(vm)->Value());
1044     } else {
1045         LOGE("Invalid value type");
1046     }
1047 }
1048 
ParseCenterDimension(const EcmaVM * vm,const Local<JSValueRef> & centerArg,CalcDimension & centerDimension)1049 void ParseCenterDimension(const EcmaVM* vm, const Local<JSValueRef>& centerArg, CalcDimension& centerDimension)
1050 {
1051     if (!ArkTSUtils::ParseJsDimensionVp(vm, centerArg, centerDimension, false)) {
1052         centerDimension = Dimension(0.5f, DimensionUnit::PERCENT);
1053     }
1054 }
1055 
ParseRotate(ArkUIRuntimeCallInfo * runtimeCallInfo,double values[],int units[],int valuesLength,int unitsLength)1056 bool ParseRotate(ArkUIRuntimeCallInfo *runtimeCallInfo, double values[], int units[], int valuesLength, int unitsLength)
1057 {
1058     if (valuesLength != SIZE_OF_EIGHT || unitsLength != SIZE_OF_THREE) {
1059         return false;
1060     }
1061     EcmaVM *vm = runtimeCallInfo->GetVM();
1062     Local<JSValueRef> xDirectionArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1063     Local<JSValueRef> yDirectionArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1064     Local<JSValueRef> zDirectionArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1065     Local<JSValueRef> angleArg = runtimeCallInfo->GetCallArgRef(NUM_4);
1066     Local<JSValueRef> centerXArg = runtimeCallInfo->GetCallArgRef(NUM_5);
1067     Local<JSValueRef> centerYArg = runtimeCallInfo->GetCallArgRef(NUM_6);
1068     Local<JSValueRef> centerZArg = runtimeCallInfo->GetCallArgRef(NUM_7);
1069     Local<JSValueRef> perspectiveArg = runtimeCallInfo->GetCallArgRef(NUM_8);
1070     float xDirection = 0.0f;
1071     float yDirection = 0.0f;
1072     float zDirection = 0.0f;
1073     float angle = 0.0f;
1074     std::optional<float> angleOptional;
1075     CalcDimension centerX = 0.5_pct;
1076     CalcDimension centerY = 0.5_pct;
1077     CalcDimension centerZ = CalcDimension(0.0f, DimensionUnit::VP);
1078     GetJsAngle(vm, angleArg, angleOptional);
1079     if (!angleOptional) {
1080         return false;
1081     }
1082     angle = angleOptional.value();
1083     double perspective = 0.0;
1084     if (!xDirectionArg->IsNumber() && !yDirectionArg->IsNumber() && !zDirectionArg->IsNumber()) {
1085         zDirection = 1.0f;
1086     }
1087     ParseDirection(vm, xDirectionArg, xDirection);
1088     ParseDirection(vm, yDirectionArg, yDirection);
1089     ParseDirection(vm, zDirectionArg, zDirection);
1090     ParseCenterDimension(vm, centerXArg, centerX);
1091     ParseCenterDimension(vm, centerYArg, centerY);
1092     ParseCenterDimension(vm, centerZArg, centerZ);
1093     ArkTSUtils::ParseJsDouble(vm, perspectiveArg, perspective);
1094     values[NUM_0] = centerX.Value();
1095     units[NUM_0] = static_cast<int>(centerX.Unit());
1096     values[NUM_1] = centerY.Value();
1097     units[NUM_1] = static_cast<int>(centerY.Unit());
1098     values[NUM_2] = centerZ.Value();
1099     units[NUM_2] = static_cast<int>(centerZ.Unit());
1100     values[NUM_3] = xDirection;
1101     values[NUM_4] = yDirection;
1102     values[NUM_5] = zDirection;
1103     values[NUM_6] = angle;
1104     values[NUM_7] = perspective;
1105     return true;
1106 }
1107 
ParseBlurOption(const EcmaVM * vm,const Local<JSValueRef> blurOptionsArg,BlurOption & blurOption)1108 void ParseBlurOption(const EcmaVM* vm, const Local<JSValueRef> blurOptionsArg, BlurOption& blurOption)
1109 {
1110     if (blurOptionsArg->IsArray(vm)) {
1111         Local<panda::ArrayRef> params = static_cast<Local<panda::ArrayRef>>(blurOptionsArg);
1112         auto grey1 = params->GetValueAt(vm, blurOptionsArg, 0)->Uint32Value(vm);
1113         auto grey2 = params->GetValueAt(vm, blurOptionsArg, 1)->Uint32Value(vm);
1114         std::vector<float> greyVec(2); // 2 number
1115         greyVec[0] = grey1;
1116         greyVec[1] = grey2;
1117         blurOption.grayscale = greyVec;
1118     }
1119 }
1120 
ParseCalcDimension(const EcmaVM * vm,NodeHandle node,const Local<JSValueRef> & value,CalcDimension & result,bool isWidth)1121 bool ParseCalcDimension(const EcmaVM* vm,
1122     NodeHandle node, const Local<JSValueRef>& value, CalcDimension& result, bool isWidth)
1123 {
1124     CHECK_NULL_RETURN(vm, false);
1125     bool undefined = value->IsUndefined();
1126     if (undefined) {
1127         GetArkUIInternalNodeAPI()->GetCommonModifier().ClearWidthOrHeight(node, isWidth);
1128         return true;
1129     }
1130     if (Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
1131         if (!ArkTSUtils::ParseJsDimensionVpNG(vm, value, result)) {
1132             GetArkUIInternalNodeAPI()->GetCommonModifier().ClearWidthOrHeight(node, isWidth);
1133             return false;
1134         }
1135     } else if (!ArkTSUtils::ParseJsDimensionVp(vm, value, result)) {
1136         return false;
1137     }
1138 
1139     if (LessNotEqual(result.Value(), 0.0)) {
1140         result.SetValue(0.0);
1141     }
1142     std::string calc = result.CalcValue();
1143     if (isWidth) {
1144         GetArkUIInternalNodeAPI()->GetCommonModifier().SetWidth(
1145             node, result.Value(), static_cast<int32_t>(result.Unit()), calc.c_str());
1146     } else {
1147         GetArkUIInternalNodeAPI()->GetCommonModifier().SetHeight(
1148             node, result.Value(), static_cast<int32_t>(result.Unit()), calc.c_str());
1149     }
1150     return true;
1151 }
1152 
ParseJsAlignRule(const EcmaVM * vm,const Local<JSValueRef> & arg,std::string & anchor,int8_t & direction)1153 bool ParseJsAlignRule(const EcmaVM* vm, const Local<JSValueRef> &arg, std::string& anchor, int8_t &direction)
1154 {
1155     if (arg->IsString()) {
1156         std::string directionString = arg->ToString(vm)->ToString();
1157         if (directionString.empty()) {
1158             return false;
1159         }
1160         size_t pos = directionString.find('|');
1161         if (pos == std::string::npos) {
1162             return false;
1163         }
1164         char* endPtr = nullptr;
1165         long alignValue = std::strtol(directionString.substr(0, pos).c_str(), &endPtr, 10);
1166         direction = static_cast<int8_t>(alignValue);
1167         anchor = directionString.substr(pos + 1);
1168         return true;
1169     }
1170     return false;
1171 }
1172 
ParseResponseRegion(const EcmaVM * vm,const Local<JSValueRef> & jsValue,double regionValues[],int32_t regionUnits[],int32_t length)1173 bool ParseResponseRegion(
1174     const EcmaVM* vm, const Local<JSValueRef>& jsValue, double regionValues[], int32_t regionUnits[], int32_t length)
1175 {
1176     if (jsValue->IsUndefined() || !jsValue->IsArray(vm)) {
1177         return false;
1178     }
1179 
1180     Local<panda::ArrayRef> transArray = static_cast<Local<panda::ArrayRef>>(jsValue);
1181     for (int32_t i = 0; i < length; i = i + NUM_4) {
1182         Local<JSValueRef> x = transArray->GetValueAt(vm, jsValue, i + NUM_0);
1183         Local<JSValueRef> y = transArray->GetValueAt(vm, jsValue, i + NUM_1);
1184         Local<JSValueRef> width = transArray->GetValueAt(vm, jsValue, i + NUM_2);
1185         Local<JSValueRef> height = transArray->GetValueAt(vm, jsValue, i + NUM_3);
1186         CalcDimension xDimen = CalcDimension(0.0, DimensionUnit::VP);
1187         CalcDimension yDimen = CalcDimension(0.0, DimensionUnit::VP);
1188         CalcDimension widthDimen = CalcDimension(1, DimensionUnit::PERCENT);
1189         CalcDimension heightDimen = CalcDimension(1, DimensionUnit::PERCENT);
1190         auto s1 = width->ToString(vm)->ToString();
1191         auto s2 = height->ToString(vm)->ToString();
1192         if (s1.find('-') != std::string::npos) {
1193             width = ToJSValue("100%");
1194         }
1195         if (s2.find('-') != std::string::npos) {
1196             height = ToJSValue("100%");
1197         }
1198         if (!ArkTSUtils::ParseJsDimensionNG(vm, x, xDimen, DimensionUnit::VP)) {
1199             xDimen = CalcDimension(0.0, DimensionUnit::VP);
1200         }
1201         if (!ArkTSUtils::ParseJsDimensionNG(vm, y, yDimen, DimensionUnit::VP)) {
1202             yDimen = CalcDimension(0.0, DimensionUnit::VP);
1203         }
1204         if (!ArkTSUtils::ParseJsDimensionNG(vm, width, widthDimen, DimensionUnit::VP)) {
1205             widthDimen = CalcDimension(1, DimensionUnit::PERCENT);
1206         }
1207         if (!ArkTSUtils::ParseJsDimensionNG(vm, height, heightDimen, DimensionUnit::VP)) {
1208             heightDimen = CalcDimension(1, DimensionUnit::PERCENT);
1209         }
1210         regionValues[i + NUM_0] = xDimen.Value();
1211         regionUnits[i + NUM_0] = static_cast<int32_t>(xDimen.Unit());
1212         regionValues[i + NUM_1] = yDimen.Value();
1213         regionUnits[i + NUM_1] = static_cast<int32_t>(yDimen.Unit());
1214         regionValues[i + NUM_2] = widthDimen.Value();
1215         regionUnits[i + NUM_2] = static_cast<int32_t>(widthDimen.Unit());
1216         regionValues[i + NUM_3] = heightDimen.Value();
1217         regionUnits[i + NUM_3] = static_cast<int32_t>(heightDimen.Unit());
1218     }
1219     return true;
1220 }
1221 } // namespace
1222 
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1223 ArkUINativeModuleValue CommonBridge::SetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
1224 {
1225     EcmaVM *vm = runtimeCallInfo->GetVM();
1226     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1227     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1228     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1229     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1230     Color color;
1231     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
1232         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundColor(nativeNode);
1233     } else {
1234         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundColor(nativeNode, color.GetValue());
1235     }
1236     return panda::JSValueRef::Undefined(vm);
1237 }
1238 
ResetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1239 ArkUINativeModuleValue CommonBridge::ResetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
1240 {
1241     EcmaVM *vm = runtimeCallInfo->GetVM();
1242     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1243     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1244     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1245     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundColor(nativeNode);
1246     return panda::JSValueRef::Undefined(vm);
1247 }
1248 
SetBorderWidthArray(const EcmaVM * vm,const Local<JSValueRef> & args,double values[],int units[],int index)1249 void SetBorderWidthArray(const EcmaVM* vm, const Local<JSValueRef>& args, double values[], int units[], int index)
1250 {
1251     CalcDimension borderDimension;
1252     if (!args->IsUndefined()) {
1253         if (ArkTSUtils::ParseAllBorder(vm, args, borderDimension)) {
1254             values[index] = borderDimension.Value();
1255             units[index] = static_cast<int>(borderDimension.Unit());
1256         } else {
1257             values[index] = 0;
1258             units[index] = static_cast<int>(DimensionUnit::VP);
1259         }
1260     } else {
1261         values[index] = -1;
1262         units[index] = static_cast<int>(DimensionUnit::INVALID);
1263     }
1264 }
1265 
SetBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)1266 ArkUINativeModuleValue CommonBridge::SetBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
1267 {
1268     EcmaVM* vm = runtimeCallInfo->GetVM();
1269     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1270     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1271     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1272     Local<JSValueRef> leftArgs = runtimeCallInfo->GetCallArgRef(NUM_1);
1273     Local<JSValueRef> rightArgs = runtimeCallInfo->GetCallArgRef(NUM_2);
1274     Local<JSValueRef> topArgs = runtimeCallInfo->GetCallArgRef(NUM_3);
1275     Local<JSValueRef> bottomArgs = runtimeCallInfo->GetCallArgRef(NUM_4);
1276     if (leftArgs->IsUndefined() && rightArgs->IsUndefined() && topArgs->IsUndefined() && bottomArgs->IsUndefined()) {
1277         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderWidth(nativeNode);
1278         return panda::JSValueRef::Undefined(vm);
1279     }
1280 
1281     uint32_t size = SIZE_OF_FOUR;
1282     double values[size];
1283     int units[size];
1284 
1285     SetBorderWidthArray(vm, leftArgs, values, units, NUM_0);
1286     SetBorderWidthArray(vm, rightArgs, values, units, NUM_1);
1287     SetBorderWidthArray(vm, topArgs, values, units, NUM_2);
1288     SetBorderWidthArray(vm, bottomArgs, values, units, NUM_3);
1289 
1290     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderWidth(nativeNode, values, units, size);
1291     return panda::JSValueRef::Undefined(vm);
1292 }
1293 
ResetBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)1294 ArkUINativeModuleValue CommonBridge::ResetBorderWidth(ArkUIRuntimeCallInfo *runtimeCallInfo)
1295 {
1296     EcmaVM *vm = runtimeCallInfo->GetVM();
1297     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1298     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1299     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1300     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderWidth(nativeNode);
1301     return panda::JSValueRef::Undefined(vm);
1302 }
1303 
SetBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)1304 ArkUINativeModuleValue CommonBridge::SetBorderRadius(ArkUIRuntimeCallInfo *runtimeCallInfo)
1305 {
1306     EcmaVM *vm = runtimeCallInfo->GetVM();
1307     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1308     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1309     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1310     Local<JSValueRef> topLeftArgs = runtimeCallInfo->GetCallArgRef(NUM_1);
1311     Local<JSValueRef> topRightArgs = runtimeCallInfo->GetCallArgRef(NUM_2);
1312     Local<JSValueRef> bottomLeftArgs = runtimeCallInfo->GetCallArgRef(NUM_3);
1313     Local<JSValueRef> bottomRightArgs = runtimeCallInfo->GetCallArgRef(NUM_4);
1314     if (topLeftArgs->IsUndefined() && topRightArgs->IsUndefined() && bottomLeftArgs->IsUndefined() &&
1315         bottomRightArgs->IsUndefined()) {
1316         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderRadius(nativeNode);
1317         return panda::JSValueRef::Undefined(vm);
1318     }
1319 
1320     CalcDimension topLeft;
1321     CalcDimension topRight;
1322     CalcDimension bottomLeft;
1323     CalcDimension bottomRight;
1324 
1325     ArkTSUtils::ParseAllBorder(vm, topLeftArgs, topLeft);
1326     ArkTSUtils::ParseAllBorder(vm, topRightArgs, topRight);
1327     ArkTSUtils::ParseAllBorder(vm, bottomLeftArgs, bottomLeft);
1328     ArkTSUtils::ParseAllBorder(vm, bottomRightArgs, bottomRight);
1329 
1330     uint32_t size = SIZE_OF_FOUR;
1331     double values[size];
1332     int units[size];
1333 
1334     values[NUM_0] = topLeft.Value();
1335     units[NUM_0] = static_cast<int>(topLeft.Unit());
1336     values[NUM_1] = topRight.Value();
1337     units[NUM_1] = static_cast<int>(topRight.Unit());
1338     values[NUM_2] = bottomLeft.Value();
1339     units[NUM_2] = static_cast<int>(bottomLeft.Unit());
1340     values[NUM_3] = bottomRight.Value();
1341     units[NUM_3] = static_cast<int>(bottomRight.Unit());
1342 
1343     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderRadius(nativeNode, values, units, SIZE_OF_FOUR);
1344 
1345     return panda::JSValueRef::Undefined(vm);
1346 }
1347 
ResetBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)1348 ArkUINativeModuleValue CommonBridge::ResetBorderRadius(ArkUIRuntimeCallInfo *runtimeCallInfo)
1349 {
1350     EcmaVM *vm = runtimeCallInfo->GetVM();
1351     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1352     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1353     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1354     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderRadius(nativeNode);
1355     return panda::JSValueRef::Undefined(vm);
1356 }
1357 
SetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)1358 ArkUINativeModuleValue CommonBridge::SetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
1359 {
1360     EcmaVM* vm = runtimeCallInfo->GetVM();
1361     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1362     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1363     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1364     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(NUM_1);
1365 
1366     CalcDimension width;
1367     std::string calcStr;
1368     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, jsValue, width)) {
1369         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetWidth(nativeNode);
1370     } else {
1371         if (LessNotEqual(width.Value(), 0.0)) {
1372             width.SetValue(0.0);
1373         }
1374 
1375         if (width.Unit() == DimensionUnit::CALC) {
1376             GetArkUIInternalNodeAPI()->GetCommonModifier().SetWidth(
1377                 nativeNode, 0, static_cast<int32_t>(width.Unit()), width.CalcValue().c_str());
1378         } else {
1379             GetArkUIInternalNodeAPI()->GetCommonModifier().SetWidth(
1380                 nativeNode, width.Value(), static_cast<int32_t>(width.Unit()), calcStr.c_str());
1381         }
1382     }
1383     return panda::JSValueRef::Undefined(vm);
1384 }
1385 
ResetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)1386 ArkUINativeModuleValue CommonBridge::ResetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
1387 {
1388     EcmaVM* vm = runtimeCallInfo->GetVM();
1389     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1390     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1391     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1392     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetWidth(nativeNode);
1393     return panda::JSValueRef::Undefined(vm);
1394 }
1395 
SetHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1396 ArkUINativeModuleValue CommonBridge::SetHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
1397 {
1398     EcmaVM* vm = runtimeCallInfo->GetVM();
1399     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1400     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1401     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1402     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(NUM_1);
1403     CalcDimension height;
1404     std::string calcStr;
1405     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, jsValue, height)) {
1406         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHeight(nativeNode);
1407     } else {
1408         if (LessNotEqual(height.Value(), 0.0)) {
1409             height.SetValue(0.0);
1410         }
1411         if (height.Unit() == DimensionUnit::CALC) {
1412             GetArkUIInternalNodeAPI()->GetCommonModifier().SetHeight(
1413                 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), height.CalcValue().c_str());
1414         } else {
1415             GetArkUIInternalNodeAPI()->GetCommonModifier().SetHeight(
1416                 nativeNode, height.Value(), static_cast<int32_t>(height.Unit()), calcStr.c_str());
1417         }
1418     }
1419     return panda::JSValueRef::Undefined(vm);
1420 }
1421 
ResetHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1422 ArkUINativeModuleValue CommonBridge::ResetHeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
1423 {
1424     EcmaVM *vm = runtimeCallInfo->GetVM();
1425     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1426     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1427     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1428     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHeight(nativeNode);
1429     return panda::JSValueRef::Undefined(vm);
1430 }
1431 
SetPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)1432 ArkUINativeModuleValue CommonBridge::SetPosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
1433 {
1434     EcmaVM *vm = runtimeCallInfo->GetVM();
1435     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1436     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1437     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1438     Local<JSValueRef> sizeX = runtimeCallInfo->GetCallArgRef(NUM_1);
1439     Local<JSValueRef> sizeY = runtimeCallInfo->GetCallArgRef(NUM_2);
1440 
1441     CalcDimension x;
1442     CalcDimension y;
1443     bool hasX = ArkTSUtils::ParseJsDimensionVp(vm, sizeX, x);
1444     bool hasY = ArkTSUtils::ParseJsDimensionVp(vm, sizeY, y);
1445     if (!hasX && !hasY) {
1446         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetPosition(nativeNode);
1447         return panda::JSValueRef::Undefined(vm);
1448     }
1449     GetArkUIInternalNodeAPI()->GetCommonModifier().SetPosition(nativeNode, x.Value(), static_cast<int>(x.Unit()),
1450         y.Value(), static_cast<int>(y.Unit()));
1451     return panda::JSValueRef::Undefined(vm);
1452 }
1453 
ResetPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)1454 ArkUINativeModuleValue CommonBridge::ResetPosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
1455 {
1456     EcmaVM *vm = runtimeCallInfo->GetVM();
1457     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1458     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1459     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1460     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetPosition(nativeNode);
1461     return panda::JSValueRef::Undefined(vm);
1462 }
1463 
SetTransform(ArkUIRuntimeCallInfo * runtimeCallInfo)1464 ArkUINativeModuleValue CommonBridge::SetTransform(ArkUIRuntimeCallInfo *runtimeCallInfo)
1465 {
1466     EcmaVM *vm = runtimeCallInfo->GetVM();
1467     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1468     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1469     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1470     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(NUM_1);
1471 
1472     if (!jsValue->IsArray(vm)) {
1473         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTransform(nativeNode);
1474         return panda::JSValueRef::Undefined(vm);
1475     }
1476 
1477     const auto matrix4Len = Matrix4::DIMENSION * Matrix4::DIMENSION;
1478     float matrix[matrix4Len];
1479     Local<panda::ArrayRef> transArray = static_cast<Local<panda::ArrayRef>>(jsValue);
1480     for (size_t i = 0; i < transArray->Length(vm); i++) {
1481         Local<JSValueRef> value = transArray->GetValueAt(vm, jsValue, i);
1482         matrix[i] = value->ToNumber(vm)->Value();
1483     }
1484     GetArkUIInternalNodeAPI()->GetCommonModifier().SetTransform(nativeNode, matrix, matrix4Len);
1485     return panda::JSValueRef::Undefined(vm);
1486 }
1487 
ResetTransform(ArkUIRuntimeCallInfo * runtimeCallInfo)1488 ArkUINativeModuleValue CommonBridge::ResetTransform(ArkUIRuntimeCallInfo *runtimeCallInfo)
1489 {
1490     EcmaVM *vm = runtimeCallInfo->GetVM();
1491     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1492     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1493     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1494 
1495     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTransform(nativeNode);
1496     return panda::JSValueRef::Undefined(vm);
1497 }
1498 
SetBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1499 ArkUINativeModuleValue CommonBridge::SetBorderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
1500 {
1501     EcmaVM *vm = runtimeCallInfo->GetVM();
1502     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1503     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1504     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1505     Local<JSValueRef> rifghtArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1506     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1507     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(NUM_4);
1508     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1509 
1510     Color leftColor;
1511     Color rightColor;
1512     Color topColor;
1513     Color bottomColor;
1514 
1515     if (!ArkTSUtils::ParseJsColorAlpha(vm, leftArg, leftColor)) {
1516         leftColor.SetValue(COLOR_ALPHA_VALUE);
1517     }
1518     if (!ArkTSUtils::ParseJsColorAlpha(vm, rifghtArg, rightColor)) {
1519         rightColor.SetValue(COLOR_ALPHA_VALUE);
1520     }
1521     if (!ArkTSUtils::ParseJsColorAlpha(vm, topArg, topColor)) {
1522         topColor.SetValue(COLOR_ALPHA_VALUE);
1523     }
1524     if (!ArkTSUtils::ParseJsColorAlpha(vm, bottomArg, bottomColor)) {
1525         bottomColor.SetValue(COLOR_ALPHA_VALUE);
1526     }
1527     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderColor(nativeNode, leftColor.GetValue(),
1528         rightColor.GetValue(), topColor.GetValue(), bottomColor.GetValue());
1529     return panda::JSValueRef::Undefined(vm);
1530 }
1531 
ResetBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1532 ArkUINativeModuleValue CommonBridge::ResetBorderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
1533 {
1534     EcmaVM *vm = runtimeCallInfo->GetVM();
1535     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1536     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1537     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1538     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderColor(nativeNode);
1539     return panda::JSValueRef::Undefined(vm);
1540 }
1541 
SetOutlineColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1542 ArkUINativeModuleValue CommonBridge::SetOutlineColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1543 {
1544     EcmaVM* vm = runtimeCallInfo->GetVM();
1545     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1546     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1547     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1548     std::vector<uint32_t> colorOptions;
1549     ParseOuterBorderColor(runtimeCallInfo, vm, colorOptions, NUM_1);
1550     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOutlineColor(
1551         nativeNode, colorOptions.data(), colorOptions.size());
1552     return panda::JSValueRef::Undefined(vm);
1553 }
1554 
ResetOutlineColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1555 ArkUINativeModuleValue CommonBridge::ResetOutlineColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1556 {
1557     EcmaVM* vm = runtimeCallInfo->GetVM();
1558     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1559     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1560     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1561     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOutlineColor(nativeNode);
1562     return panda::JSValueRef::Undefined(vm);
1563 }
1564 
SetOutlineRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)1565 ArkUINativeModuleValue CommonBridge::SetOutlineRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
1566 {
1567     EcmaVM* vm = runtimeCallInfo->GetVM();
1568     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1569     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1570     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1571     std::vector<double> radiusOptions;
1572     ParseOuterBorderRadius(runtimeCallInfo, vm, radiusOptions, NUM_1);
1573     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOutlineRadius(
1574         nativeNode, radiusOptions.data(), radiusOptions.size());
1575     return panda::JSValueRef::Undefined(vm);
1576 }
1577 
ResetOutlineRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)1578 ArkUINativeModuleValue CommonBridge::ResetOutlineRadius(ArkUIRuntimeCallInfo* runtimeCallInfo)
1579 {
1580     EcmaVM* vm = runtimeCallInfo->GetVM();
1581     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1582     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1583     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1584     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOutlineRadius(nativeNode);
1585     return panda::JSValueRef::Undefined(vm);
1586 }
1587 
SetOutlineWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)1588 ArkUINativeModuleValue CommonBridge::SetOutlineWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
1589 {
1590     EcmaVM* vm = runtimeCallInfo->GetVM();
1591     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1592     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1593     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1594     std::vector<double> widthOptions;
1595     ParseOuterBorderWidth(runtimeCallInfo, vm, widthOptions);
1596     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOutlineWidth(
1597         nativeNode, widthOptions.data(), widthOptions.size());
1598     return panda::JSValueRef::Undefined(vm);
1599 }
1600 
ResetOutlineWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)1601 ArkUINativeModuleValue CommonBridge::ResetOutlineWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
1602 {
1603     EcmaVM* vm = runtimeCallInfo->GetVM();
1604     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1605     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1606     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1607     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOutlineWidth(nativeNode);
1608     return panda::JSValueRef::Undefined(vm);
1609 }
1610 
SetOutlineStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)1611 ArkUINativeModuleValue CommonBridge::SetOutlineStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
1612 {
1613     EcmaVM* vm = runtimeCallInfo->GetVM();
1614     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1615     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1616     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1617     std::vector<uint32_t> styleOptions;
1618     ParseOuterBorderStyle(runtimeCallInfo, vm, styleOptions, NUM_1);
1619     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOutlineStyle(
1620         nativeNode, styleOptions.data(), styleOptions.size());
1621     return panda::JSValueRef::Undefined(vm);
1622 }
1623 
ResetOutlineStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)1624 ArkUINativeModuleValue CommonBridge::ResetOutlineStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
1625 {
1626     EcmaVM* vm = runtimeCallInfo->GetVM();
1627     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1628     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1629     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1630     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOutlineStyle(nativeNode);
1631     return panda::JSValueRef::Undefined(vm);
1632 }
1633 
SetOutline(ArkUIRuntimeCallInfo * runtimeCallInfo)1634 ArkUINativeModuleValue CommonBridge::SetOutline(ArkUIRuntimeCallInfo* runtimeCallInfo)
1635 {
1636     EcmaVM* vm = runtimeCallInfo->GetVM();
1637     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1638     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1639     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1640     std::vector<double> options;
1641     ParseOuterBorderWidth(runtimeCallInfo, vm, options);         // Outline Width args start index from 1
1642     ParseOuterBorderRadius(runtimeCallInfo, vm, options, NUM_9); // Outline Radius args start index
1643 
1644     std::vector<uint32_t> colorAndStyleOptions;
1645     ParseOuterBorderColor(runtimeCallInfo, vm, colorAndStyleOptions, NUM_5);  // Outline Color args start index
1646     ParseOuterBorderStyle(runtimeCallInfo, vm, colorAndStyleOptions, NUM_13); // Outline Styel args start index
1647 
1648     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOutline(
1649         nativeNode, options.data(), options.size(), colorAndStyleOptions.data(), colorAndStyleOptions.size());
1650     return panda::JSValueRef::Undefined(vm);
1651 }
1652 
ResetOutline(ArkUIRuntimeCallInfo * runtimeCallInfo)1653 ArkUINativeModuleValue CommonBridge::ResetOutline(ArkUIRuntimeCallInfo* runtimeCallInfo)
1654 {
1655     EcmaVM* vm = runtimeCallInfo->GetVM();
1656     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1657     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1658     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
1659     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOutline(nativeNode);
1660     return panda::JSValueRef::Undefined(vm);
1661 }
1662 
SetBorderStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)1663 ArkUINativeModuleValue CommonBridge::SetBorderStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
1664 {
1665     EcmaVM *vm = runtimeCallInfo->GetVM();
1666     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1667     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1668     auto typeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1669     auto styleArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1670     auto topArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1671     auto rightArg = runtimeCallInfo->GetCallArgRef(NUM_4);
1672     auto bottomArg = runtimeCallInfo->GetCallArgRef(NUM_5);
1673     auto leftArg = runtimeCallInfo->GetCallArgRef(NUM_6);
1674     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
1675     if ((!typeArg->IsBoolean()) || (!typeArg->BooleaValue())) {
1676         int32_t styles[] = { static_cast<int32_t>(BorderStyle::SOLID) };
1677         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderStyle(nativeNode, styles,
1678             (sizeof(styles) / sizeof(styles[NUM_0])));
1679         return panda::JSValueRef::Undefined(vm);
1680     }
1681     if (styleArg->IsInt()) {
1682         int32_t styles[] = { styleArg->Int32Value(vm) };
1683         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderStyle(nativeNode, styles,
1684             (sizeof(styles) / sizeof(styles[NUM_0])));
1685         return panda::JSValueRef::Undefined(vm);
1686     }
1687     int32_t styles[] = { -1, -1, -1, -1 };
1688     if (topArg->IsInt()) {
1689         styles[NUM_0] = topArg->Int32Value(vm);
1690     }
1691     if (rightArg->IsInt()) {
1692         styles[NUM_1] = rightArg->Int32Value(vm);
1693     }
1694     if (bottomArg->IsInt()) {
1695         styles[NUM_2] = bottomArg->Int32Value(vm);
1696     }
1697     if (leftArg->IsInt()) {
1698         styles[NUM_3] = leftArg->Int32Value(vm);
1699     }
1700     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderStyle(nativeNode, styles,
1701         (sizeof(styles) / sizeof(styles[NUM_0])));
1702     return panda::JSValueRef::Undefined(vm);
1703 }
1704 
ResetBorderStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)1705 ArkUINativeModuleValue CommonBridge::ResetBorderStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
1706 {
1707     EcmaVM *vm = runtimeCallInfo->GetVM();
1708     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1709     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1710     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1711     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderStyle(nativeNode);
1712     return panda::JSValueRef::Undefined(vm);
1713 }
1714 
SetShadow(ArkUIRuntimeCallInfo * runtimeCallInfo)1715 ArkUINativeModuleValue CommonBridge::SetShadow(ArkUIRuntimeCallInfo *runtimeCallInfo)
1716 {
1717     EcmaVM *vm = runtimeCallInfo->GetVM();
1718     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1719     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1720     auto styleArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1721     auto radiusArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1722     auto typeArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1723     auto colorArg = runtimeCallInfo->GetCallArgRef(NUM_4);
1724     auto offsetXArg = runtimeCallInfo->GetCallArgRef(NUM_5);
1725     auto offsetYArg = runtimeCallInfo->GetCallArgRef(NUM_6);
1726     auto fillArg = runtimeCallInfo->GetCallArgRef(NUM_7);
1727     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
1728     int32_t shadowStyle = 0;
1729     if (ArkTSUtils::ParseJsInteger(vm, styleArg, shadowStyle)) {
1730         double shadows[] = { shadowStyle };
1731         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackShadow(nativeNode, shadows,
1732             (sizeof(shadows) / sizeof(shadows[NUM_0])));
1733         return panda::JSValueRef::Undefined(vm);
1734     }
1735 
1736     double shadows[] = { 0.0, 0.0, 0.0, 0.0, static_cast<double>(ShadowType::COLOR), 0.0, 0.0 };
1737     ArkTSUtils::ParseJsDouble(vm, radiusArg, shadows[NUM_0]);
1738     shadows[NUM_0] = (LessNotEqual(shadows[NUM_0], 0.0)) ? 0.0 : shadows[NUM_0];
1739     CalcDimension offsetX;
1740     if (ParseJsShadowDimension(vm, offsetXArg, offsetX)) {
1741         shadows[NUM_2] = offsetX.Value();
1742     }
1743     CalcDimension offsetY;
1744     if (ParseJsShadowDimension(vm, offsetYArg, offsetY)) {
1745         shadows[NUM_3] = offsetY.Value();
1746     }
1747     if (typeArg->IsInt()) {
1748         uint32_t shadowType = typeArg->Uint32Value(vm);
1749         shadows[NUM_4] = static_cast<double>(
1750             std::clamp(shadowType, static_cast<uint32_t>(ShadowType::COLOR), static_cast<uint32_t>(ShadowType::BLUR)));
1751     }
1752     int32_t type = 0;
1753     uint32_t color = 0;
1754     if (ParseJsShadowColor(vm, colorArg, type, color)) {
1755         shadows[NUM_1] = static_cast<double>(type);
1756         shadows[NUM_5] = static_cast<double>(color);
1757     }
1758     shadows[NUM_6] = static_cast<uint32_t>((fillArg->IsBoolean()) ? fillArg->BooleaValue() : false);
1759     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackShadow(nativeNode, shadows,
1760         (sizeof(shadows) / sizeof(shadows[NUM_0])));
1761     return panda::JSValueRef::Undefined(vm);
1762 }
1763 
ResetShadow(ArkUIRuntimeCallInfo * runtimeCallInfo)1764 ArkUINativeModuleValue CommonBridge::ResetShadow(ArkUIRuntimeCallInfo *runtimeCallInfo)
1765 {
1766     EcmaVM *vm = runtimeCallInfo->GetVM();
1767     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1768     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1769     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1770     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackShadow(nativeNode);
1771     return panda::JSValueRef::Undefined(vm);
1772 }
1773 
SetHitTestBehavior(ArkUIRuntimeCallInfo * runtimeCallInfo)1774 ArkUINativeModuleValue CommonBridge::SetHitTestBehavior(ArkUIRuntimeCallInfo *runtimeCallInfo)
1775 {
1776     EcmaVM *vm = runtimeCallInfo->GetVM();
1777     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1778     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1779     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1780     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1781     if (secondArg->IsNumber()) {
1782         uint32_t hitTestModeNG = secondArg->Uint32Value(vm);
1783         GetArkUIInternalNodeAPI()->GetCommonModifier().SetHitTestBehavior(nativeNode, hitTestModeNG);
1784     } else {
1785         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHitTestBehavior(nativeNode);
1786     }
1787     return panda::JSValueRef::Undefined(vm);
1788 }
1789 
ResetHitTestBehavior(ArkUIRuntimeCallInfo * runtimeCallInfo)1790 ArkUINativeModuleValue CommonBridge::ResetHitTestBehavior(ArkUIRuntimeCallInfo *runtimeCallInfo)
1791 {
1792     EcmaVM *vm = runtimeCallInfo->GetVM();
1793     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1794     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1795     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1796     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHitTestBehavior(nativeNode);
1797     return panda::JSValueRef::Undefined(vm);
1798 }
1799 
SetZIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)1800 ArkUINativeModuleValue CommonBridge::SetZIndex(ArkUIRuntimeCallInfo *runtimeCallInfo)
1801 {
1802     EcmaVM *vm = runtimeCallInfo->GetVM();
1803     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1804     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1805     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1806     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1807     if (secondArg->IsNumber()) {
1808         int32_t value = secondArg->Int32Value(vm);
1809         GetArkUIInternalNodeAPI()->GetCommonModifier().SetZIndex(nativeNode, value);
1810     } else {
1811         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetZIndex(nativeNode);
1812     }
1813     return panda::JSValueRef::Undefined(vm);
1814 }
1815 
ResetZIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)1816 ArkUINativeModuleValue CommonBridge::ResetZIndex(ArkUIRuntimeCallInfo *runtimeCallInfo)
1817 {
1818     EcmaVM *vm = runtimeCallInfo->GetVM();
1819     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1820     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1821     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1822     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetZIndex(nativeNode);
1823     return panda::JSValueRef::Undefined(vm);
1824 }
1825 
SetOpacity(ArkUIRuntimeCallInfo * runtimeCallInfo)1826 ArkUINativeModuleValue CommonBridge::SetOpacity(ArkUIRuntimeCallInfo *runtimeCallInfo)
1827 {
1828     EcmaVM *vm = runtimeCallInfo->GetVM();
1829     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1830     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1831     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1832     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1833     double opacity;
1834     if (!ArkTSUtils::ParseJsDouble(vm, secondArg, opacity)) {
1835         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOpacity(nativeNode);
1836     } else {
1837         GetArkUIInternalNodeAPI()->GetCommonModifier().SetOpacity(nativeNode, opacity);
1838     }
1839     return panda::JSValueRef::Undefined(vm);
1840 }
1841 
ResetOpacity(ArkUIRuntimeCallInfo * runtimeCallInfo)1842 ArkUINativeModuleValue CommonBridge::ResetOpacity(ArkUIRuntimeCallInfo *runtimeCallInfo)
1843 {
1844     EcmaVM *vm = runtimeCallInfo->GetVM();
1845     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1846     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1847     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1848     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOpacity(nativeNode);
1849     return panda::JSValueRef::Undefined(vm);
1850 }
1851 
SetAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)1852 ArkUINativeModuleValue CommonBridge::SetAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
1853 {
1854     EcmaVM *vm = runtimeCallInfo->GetVM();
1855     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1856     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1857     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1858     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1859     if (secondArg->IsNumber()) {
1860         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAlign(nativeNode, secondArg->ToNumber(vm)->Value());
1861     } else {
1862         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAlign(nativeNode);
1863     }
1864     return panda::JSValueRef::Undefined(vm);
1865 }
1866 
ResetAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)1867 ArkUINativeModuleValue CommonBridge::ResetAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
1868 {
1869     EcmaVM *vm = runtimeCallInfo->GetVM();
1870     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1871     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1872     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1873     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAlign(nativeNode);
1874     return panda::JSValueRef::Undefined(vm);
1875 }
1876 
SetBackdropBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)1877 ArkUINativeModuleValue CommonBridge::SetBackdropBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
1878 {
1879     EcmaVM *vm = runtimeCallInfo->GetVM();
1880     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1881     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1882     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1883     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1884     if (secondArg->IsNumber()) {
1885         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackdropBlur(nativeNode, secondArg->ToNumber(vm)->Value());
1886     } else {
1887         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackdropBlur(nativeNode);
1888     }
1889     return panda::JSValueRef::Undefined(vm);
1890 }
1891 
ResetBackdropBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)1892 ArkUINativeModuleValue CommonBridge::ResetBackdropBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
1893 {
1894     EcmaVM *vm = runtimeCallInfo->GetVM();
1895     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1896     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1897     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1898     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackdropBlur(nativeNode);
1899     return panda::JSValueRef::Undefined(vm);
1900 }
1901 
SetHueRotate(ArkUIRuntimeCallInfo * runtimeCallInfo)1902 ArkUINativeModuleValue CommonBridge::SetHueRotate(ArkUIRuntimeCallInfo *runtimeCallInfo)
1903 {
1904     EcmaVM *vm = runtimeCallInfo->GetVM();
1905     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1906     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1907     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1908     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1909     std::optional<float> degree;
1910     if (secondArg->IsString()) {
1911         degree = static_cast<float>(StringUtils::StringToDegree(secondArg->ToString(vm)->ToString()));
1912     } else if (secondArg->IsNumber()) {
1913         degree = static_cast<float>(secondArg->ToNumber(vm)->Value());
1914     } else {
1915         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHueRotate(nativeNode);
1916         return panda::JSValueRef::Undefined(vm);
1917     }
1918 
1919     float deg = 0.0f;
1920     if (degree) {
1921         deg = degree.value();
1922         degree.reset();
1923     }
1924     GetArkUIInternalNodeAPI()->GetCommonModifier().SetHueRotate(nativeNode, deg);
1925     return panda::JSValueRef::Undefined(vm);
1926 }
1927 
ResetHueRotate(ArkUIRuntimeCallInfo * runtimeCallInfo)1928 ArkUINativeModuleValue CommonBridge::ResetHueRotate(ArkUIRuntimeCallInfo *runtimeCallInfo)
1929 {
1930     EcmaVM *vm = runtimeCallInfo->GetVM();
1931     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1932     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1933     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1934     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHueRotate(nativeNode);
1935     return panda::JSValueRef::Undefined(vm);
1936 }
1937 
SetInvert(ArkUIRuntimeCallInfo * runtimeCallInfo)1938 ArkUINativeModuleValue CommonBridge::SetInvert(ArkUIRuntimeCallInfo *runtimeCallInfo)
1939 {
1940     EcmaVM *vm = runtimeCallInfo->GetVM();
1941     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1942     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1943     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1944     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1945     if (secondArg->IsNumber()) {
1946         GetArkUIInternalNodeAPI()->GetCommonModifier().SetInvert(nativeNode, secondArg->ToNumber(vm)->Value());
1947     } else {
1948         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetInvert(nativeNode);
1949     }
1950     return panda::JSValueRef::Undefined(vm);
1951 }
1952 
ResetInvert(ArkUIRuntimeCallInfo * runtimeCallInfo)1953 ArkUINativeModuleValue CommonBridge::ResetInvert(ArkUIRuntimeCallInfo *runtimeCallInfo)
1954 {
1955     EcmaVM *vm = runtimeCallInfo->GetVM();
1956     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1957     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1958     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1959     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetInvert(nativeNode);
1960     return panda::JSValueRef::Undefined(vm);
1961 }
1962 
SetSepia(ArkUIRuntimeCallInfo * runtimeCallInfo)1963 ArkUINativeModuleValue CommonBridge::SetSepia(ArkUIRuntimeCallInfo *runtimeCallInfo)
1964 {
1965     EcmaVM *vm = runtimeCallInfo->GetVM();
1966     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1967     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1968     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1969     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1970     if (secondArg->IsNumber()) {
1971         GetArkUIInternalNodeAPI()->GetCommonModifier().SetSepia(nativeNode, secondArg->ToNumber(vm)->Value());
1972     } else {
1973         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetSepia(nativeNode);
1974     }
1975     return panda::JSValueRef::Undefined(vm);
1976 }
1977 
ResetSepia(ArkUIRuntimeCallInfo * runtimeCallInfo)1978 ArkUINativeModuleValue CommonBridge::ResetSepia(ArkUIRuntimeCallInfo *runtimeCallInfo)
1979 {
1980     EcmaVM *vm = runtimeCallInfo->GetVM();
1981     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1982     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1983     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1984     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetSepia(nativeNode);
1985     return panda::JSValueRef::Undefined(vm);
1986 }
1987 
SetSaturate(ArkUIRuntimeCallInfo * runtimeCallInfo)1988 ArkUINativeModuleValue CommonBridge::SetSaturate(ArkUIRuntimeCallInfo *runtimeCallInfo)
1989 {
1990     EcmaVM *vm = runtimeCallInfo->GetVM();
1991     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1992     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1993     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1994     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
1995     if (secondArg->IsNumber()) {
1996         GetArkUIInternalNodeAPI()->GetCommonModifier().SetSaturate(nativeNode, secondArg->ToNumber(vm)->Value());
1997     } else {
1998         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetSaturate(nativeNode);
1999     }
2000     return panda::JSValueRef::Undefined(vm);
2001 }
2002 
ResetSaturate(ArkUIRuntimeCallInfo * runtimeCallInfo)2003 ArkUINativeModuleValue CommonBridge::ResetSaturate(ArkUIRuntimeCallInfo *runtimeCallInfo)
2004 {
2005     EcmaVM *vm = runtimeCallInfo->GetVM();
2006     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2007     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2008     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2009     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetSaturate(nativeNode);
2010     return panda::JSValueRef::Undefined(vm);
2011 }
2012 
SetColorBlend(ArkUIRuntimeCallInfo * runtimeCallInfo)2013 ArkUINativeModuleValue CommonBridge::SetColorBlend(ArkUIRuntimeCallInfo *runtimeCallInfo)
2014 {
2015     EcmaVM *vm = runtimeCallInfo->GetVM();
2016     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2017     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2018     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2019     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2020     Color color;
2021     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
2022         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetColorBlend(nativeNode);
2023         } else {
2024             GetArkUIInternalNodeAPI()->GetCommonModifier().SetColorBlend(nativeNode, color.GetValue());
2025         }
2026     return panda::JSValueRef::Undefined(vm);
2027 }
2028 
ResetColorBlend(ArkUIRuntimeCallInfo * runtimeCallInfo)2029 ArkUINativeModuleValue CommonBridge::ResetColorBlend(ArkUIRuntimeCallInfo *runtimeCallInfo)
2030 {
2031     EcmaVM *vm = runtimeCallInfo->GetVM();
2032     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2033     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2034     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2035     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetColorBlend(nativeNode);
2036     return panda::JSValueRef::Undefined(vm);
2037 }
2038 
SetGrayscale(ArkUIRuntimeCallInfo * runtimeCallInfo)2039 ArkUINativeModuleValue CommonBridge::SetGrayscale(ArkUIRuntimeCallInfo *runtimeCallInfo)
2040 {
2041     EcmaVM *vm = runtimeCallInfo->GetVM();
2042     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2043     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2044     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2045     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2046     if (secondArg->IsNumber()) {
2047         GetArkUIInternalNodeAPI()->GetCommonModifier().SetGrayscale(nativeNode, secondArg->ToNumber(vm)->Value());
2048     } else {
2049         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGrayscale(nativeNode);
2050     }
2051     return panda::JSValueRef::Undefined(vm);
2052 }
2053 
ResetGrayscale(ArkUIRuntimeCallInfo * runtimeCallInfo)2054 ArkUINativeModuleValue CommonBridge::ResetGrayscale(ArkUIRuntimeCallInfo *runtimeCallInfo)
2055 {
2056     EcmaVM *vm = runtimeCallInfo->GetVM();
2057     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2058     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2059     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2060     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGrayscale(nativeNode);
2061     return panda::JSValueRef::Undefined(vm);
2062 }
2063 
SetContrast(ArkUIRuntimeCallInfo * runtimeCallInfo)2064 ArkUINativeModuleValue CommonBridge::SetContrast(ArkUIRuntimeCallInfo *runtimeCallInfo)
2065 {
2066     EcmaVM *vm = runtimeCallInfo->GetVM();
2067     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2068     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2069     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2070     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2071     if (secondArg->IsNumber()) {
2072         GetArkUIInternalNodeAPI()->GetCommonModifier().SetContrast(nativeNode, secondArg->ToNumber(vm)->Value());
2073     } else {
2074         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetContrast(nativeNode);
2075     }
2076     return panda::JSValueRef::Undefined(vm);
2077 }
2078 
ResetContrast(ArkUIRuntimeCallInfo * runtimeCallInfo)2079 ArkUINativeModuleValue CommonBridge::ResetContrast(ArkUIRuntimeCallInfo *runtimeCallInfo)
2080 {
2081     EcmaVM *vm = runtimeCallInfo->GetVM();
2082     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2083     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2084     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2085     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetContrast(nativeNode);
2086     return panda::JSValueRef::Undefined(vm);
2087 }
2088 
SetBrightness(ArkUIRuntimeCallInfo * runtimeCallInfo)2089 ArkUINativeModuleValue CommonBridge::SetBrightness(ArkUIRuntimeCallInfo *runtimeCallInfo)
2090 {
2091     EcmaVM *vm = runtimeCallInfo->GetVM();
2092     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2093     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2094     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2095     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2096     if (secondArg->IsNumber()) {
2097         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBrightness(nativeNode, secondArg->ToNumber(vm)->Value());
2098     } else {
2099         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBrightness(nativeNode);
2100     }
2101     return panda::JSValueRef::Undefined(vm);
2102 }
2103 
ResetBrightness(ArkUIRuntimeCallInfo * runtimeCallInfo)2104 ArkUINativeModuleValue CommonBridge::ResetBrightness(ArkUIRuntimeCallInfo *runtimeCallInfo)
2105 {
2106     EcmaVM *vm = runtimeCallInfo->GetVM();
2107     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2108     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2109     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2110     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBrightness(nativeNode);
2111     return panda::JSValueRef::Undefined(vm);
2112 }
2113 
SetBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)2114 ArkUINativeModuleValue CommonBridge::SetBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
2115 {
2116     EcmaVM *vm = runtimeCallInfo->GetVM();
2117     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2118     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2119     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2120     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2121     if (secondArg->IsNumber()) {
2122         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBlur(nativeNode, secondArg->ToNumber(vm)->Value());
2123     } else {
2124         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBlur(nativeNode);
2125     }
2126     return panda::JSValueRef::Undefined(vm);
2127 }
2128 
ResetBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)2129 ArkUINativeModuleValue CommonBridge::ResetBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
2130 {
2131     EcmaVM *vm = runtimeCallInfo->GetVM();
2132     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2133     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2134     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2135     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBlur(nativeNode);
2136     return panda::JSValueRef::Undefined(vm);
2137 }
2138 
SetLinearGradient(ArkUIRuntimeCallInfo * runtimeCallInfo)2139 ArkUINativeModuleValue CommonBridge::SetLinearGradient(ArkUIRuntimeCallInfo *runtimeCallInfo)
2140 {
2141     EcmaVM *vm = runtimeCallInfo->GetVM();
2142     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2143     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2144     auto angleArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2145     auto directionArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2146     auto colorsArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2147     auto repeatingArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2148     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2149     std::vector<double> values;
2150     ParseGradientAngle(vm, angleArg, values);
2151     int32_t direction = static_cast<int32_t>(GradientDirection::NONE);
2152     ParseJsInt32(vm, directionArg, direction);
2153     values.push_back(static_cast<double>(direction));
2154     std::vector<double> colors;
2155     ParseGradientColorStops(vm, colorsArg, colors);
2156     auto repeating = repeatingArg->IsBoolean() ? repeatingArg->BooleaValue() : false;
2157     values.push_back(static_cast<double>(repeating));
2158     GetArkUIInternalNodeAPI()->GetCommonModifier().SetLinearGradient(nativeNode, values.data(), values.size(),
2159         colors.data(), colors.size());
2160     return panda::JSValueRef::Undefined(vm);
2161 }
2162 
ResetLinearGradient(ArkUIRuntimeCallInfo * runtimeCallInfo)2163 ArkUINativeModuleValue CommonBridge::ResetLinearGradient(ArkUIRuntimeCallInfo *runtimeCallInfo)
2164 {
2165     EcmaVM *vm = runtimeCallInfo->GetVM();
2166     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2167     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2168     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2169     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetLinearGradient(nativeNode);
2170     return panda::JSValueRef::Undefined(vm);
2171 }
2172 
SetSweepGradient(ArkUIRuntimeCallInfo * runtimeCallInfo)2173 ArkUINativeModuleValue CommonBridge::SetSweepGradient(ArkUIRuntimeCallInfo *runtimeCallInfo)
2174 {
2175     EcmaVM *vm = runtimeCallInfo->GetVM();
2176     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2177     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2178     auto centerArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2179     auto startArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2180     auto endArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2181     auto rotationArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2182     auto colorsArg = runtimeCallInfo->GetCallArgRef(NUM_5);
2183     auto repeatingArg = runtimeCallInfo->GetCallArgRef(NUM_6);
2184     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2185     std::vector<double> values;
2186     ParseGradientCenter(vm, centerArg, values);
2187     ParseGradientAngle(vm, startArg, values);
2188     ParseGradientAngle(vm, endArg, values);
2189     ParseGradientAngle(vm, rotationArg, values);
2190     std::vector<double> colors;
2191     ParseGradientColorStops(vm, colorsArg, colors);
2192     auto repeating = repeatingArg->IsBoolean() ? repeatingArg->BooleaValue() : false;
2193     values.push_back(static_cast<double>(repeating));
2194     GetArkUIInternalNodeAPI()->GetCommonModifier().SetSweepGradient(nativeNode, values.data(), values.size(),
2195         colors.data(), colors.size());
2196     return panda::JSValueRef::Undefined(vm);
2197 }
2198 
ResetSweepGradient(ArkUIRuntimeCallInfo * runtimeCallInfo)2199 ArkUINativeModuleValue CommonBridge::ResetSweepGradient(ArkUIRuntimeCallInfo *runtimeCallInfo)
2200 {
2201     EcmaVM *vm = runtimeCallInfo->GetVM();
2202     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2203     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2204     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2205     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetSweepGradient(nativeNode);
2206     return panda::JSValueRef::Undefined(vm);
2207 }
2208 
SetRadialGradient(ArkUIRuntimeCallInfo * runtimeCallInfo)2209 ArkUINativeModuleValue CommonBridge::SetRadialGradient(ArkUIRuntimeCallInfo *runtimeCallInfo)
2210 {
2211     EcmaVM *vm = runtimeCallInfo->GetVM();
2212     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2213     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2214     auto centerArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2215     auto radiusArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2216     auto colorsArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2217     auto repeatingArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2218     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2219     std::vector<double> values;
2220     ParseGradientCenter(vm, centerArg, values);
2221     CalcDimension radius;
2222     auto hasRadius = ArkTSUtils::ParseJsDimensionVp(vm, radiusArg, radius, false);
2223     values.push_back(static_cast<double>(hasRadius));
2224     values.push_back(static_cast<double>(radius.Value()));
2225     values.push_back(static_cast<double>(radius.Unit()));
2226     std::vector<double> colors;
2227     ParseGradientColorStops(vm, colorsArg, colors);
2228     auto repeating = repeatingArg->IsBoolean() ? repeatingArg->BooleaValue() : false;
2229     values.push_back(static_cast<double>(repeating));
2230     GetArkUIInternalNodeAPI()->GetCommonModifier().SetRadialGradient(nativeNode, values.data(), values.size(),
2231         colors.data(), colors.size());
2232     return panda::JSValueRef::Undefined(vm);
2233 }
2234 
ResetRadialGradient(ArkUIRuntimeCallInfo * runtimeCallInfo)2235 ArkUINativeModuleValue CommonBridge::ResetRadialGradient(ArkUIRuntimeCallInfo *runtimeCallInfo)
2236 {
2237     EcmaVM *vm = runtimeCallInfo->GetVM();
2238     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2239     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2240     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2241     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRadialGradient(nativeNode);
2242     return panda::JSValueRef::Undefined(vm);
2243 }
2244 
SetOverlay(ArkUIRuntimeCallInfo * runtimeCallInfo)2245 ArkUINativeModuleValue CommonBridge::SetOverlay(ArkUIRuntimeCallInfo* runtimeCallInfo)
2246 {
2247     EcmaVM* vm = runtimeCallInfo->GetVM();
2248     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2249     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2250     auto valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2251     auto alignArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2252     auto offsetXArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2253     auto offsetYArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2254     auto hasOptionsArg = runtimeCallInfo->GetCallArgRef(NUM_5);
2255     auto hasOffsetArg = runtimeCallInfo->GetCallArgRef(NUM_6);
2256     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2257 
2258     std::optional<std::string> text;
2259     if (valueArg->IsString()) {
2260         text = valueArg->ToString(vm)->ToString();
2261     }
2262     int32_t align = ALIGNMENT_CENTER;
2263     auto hasAlign = ArkTSUtils::ParseJsInteger(vm, alignArg, align);
2264     std::optional<CalcDimension> offsetX = CalcDimension(0);
2265     std::optional<CalcDimension> offsetY = CalcDimension(0);
2266     CalcDimension dimensionX;
2267     if (ArkTSUtils::ParseJsDimensionVp(vm, offsetXArg, dimensionX, false)) {
2268         offsetX = dimensionX;
2269     }
2270     CalcDimension dimensionY;
2271     if (ArkTSUtils::ParseJsDimensionVp(vm, offsetYArg, dimensionY, false)) {
2272         offsetY = dimensionY;
2273     }
2274     auto hasOptions = (hasOptionsArg->IsBoolean()) ? hasOptionsArg->ToBoolean(vm)->Value(): false;
2275     auto hasOffset = (hasOffsetArg->IsBoolean()) ? hasOffsetArg->ToBoolean(vm)->Value(): false;
2276     std::vector<double> options;
2277     options.push_back(static_cast<double>(hasAlign));
2278     options.push_back(static_cast<double>(align));
2279     options.push_back(static_cast<double>(offsetX.has_value()));
2280     options.push_back(static_cast<double>(offsetX.value().Value()));
2281     options.push_back(static_cast<double>(offsetX.value().Unit()));
2282     options.push_back(static_cast<double>(offsetY.has_value()));
2283     options.push_back(static_cast<double>(offsetY.value().Value()));
2284     options.push_back(static_cast<double>(offsetY.value().Unit()));
2285     options.push_back(static_cast<double>(hasOptions));
2286     options.push_back(static_cast<double>(hasOffset));
2287     auto textPtr = (text.has_value()) ? text.value().c_str() : nullptr;
2288     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOverlay(nativeNode, textPtr, options.data(), options.size());
2289     return panda::JSValueRef::Undefined(vm);
2290 }
2291 
ResetOverlay(ArkUIRuntimeCallInfo * runtimeCallInfo)2292 ArkUINativeModuleValue CommonBridge::ResetOverlay(ArkUIRuntimeCallInfo* runtimeCallInfo)
2293 {
2294     EcmaVM* vm = runtimeCallInfo->GetVM();
2295     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2296     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2297     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2298     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOverlay(nativeNode);
2299     return panda::JSValueRef::Undefined(vm);
2300 }
2301 
SetBorderImage(ArkUIRuntimeCallInfo * runtimeCallInfo)2302 ArkUINativeModuleValue CommonBridge::SetBorderImage(ArkUIRuntimeCallInfo* runtimeCallInfo)
2303 {
2304     EcmaVM* vm = runtimeCallInfo->GetVM();
2305     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2306     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2307     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2308     auto argsNumber = runtimeCallInfo->GetArgsNumber();
2309     if (IsArgsUndefined(runtimeCallInfo, NUM_1, argsNumber - NUM_1)) {
2310         return panda::JSValueRef::Undefined(vm);
2311     }
2312     std::string src;
2313     std::vector<ArkUIStringAndFloat> options;
2314     uint8_t bitsets = 0;
2315     uint32_t offset = NUM_1;
2316     std::vector<std::optional<CalcDimension>> sliceDimensions;
2317     ParseBorderImageSlice(runtimeCallInfo, offset, sliceDimensions, bitsets); // use 4 args
2318     PushDimensionsToVector(options, sliceDimensions);
2319     ParseBorderImageRepeat(runtimeCallInfo, offset, options, bitsets); // use 1 args
2320     if (!ParseBorderImageSource(runtimeCallInfo, offset, nativeNode, src, bitsets)) { // use 5 args
2321         return panda::JSValueRef::Undefined(vm);
2322     }
2323     std::vector<std::optional<CalcDimension>> widthDimensions;
2324     ParseBorderImageWidth(runtimeCallInfo, offset, widthDimensions, bitsets); // use 4 args
2325     PushDimensionsToVector(options, widthDimensions);
2326     std::vector<std::optional<CalcDimension>> outsetDimensions;
2327     ParseBorderImageOutset(runtimeCallInfo, offset, outsetDimensions, bitsets); // use 4 args
2328     PushDimensionsToVector(options, outsetDimensions);
2329     ParseBorderImageFill(runtimeCallInfo, offset, options); // use 1 args
2330     options.push_back(ArkUIStringAndFloat { static_cast<double>(bitsets), nullptr });
2331     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorderImage(nativeNode,
2332         src.c_str(), options.data(), options.size());
2333     ResetCalcDimensions(sliceDimensions);
2334     ResetCalcDimensions(widthDimensions);
2335     ResetCalcDimensions(outsetDimensions);
2336     return panda::JSValueRef::Undefined(vm);
2337 }
2338 
ResetBorderImage(ArkUIRuntimeCallInfo * runtimeCallInfo)2339 ArkUINativeModuleValue CommonBridge::ResetBorderImage(ArkUIRuntimeCallInfo* runtimeCallInfo)
2340 {
2341     EcmaVM* vm = runtimeCallInfo->GetVM();
2342     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2343     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2344     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2345     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorderImage(nativeNode);
2346     return panda::JSValueRef::Undefined(vm);
2347 }
2348 
SetForegroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)2349 ArkUINativeModuleValue CommonBridge::SetForegroundBlurStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
2350 {
2351     EcmaVM *vm = runtimeCallInfo->GetVM();
2352     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2353     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2354     auto blurStyleArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2355     auto colorModeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2356     auto adaptiveColorArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2357     auto scaleArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2358     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2359     int32_t blurStyle = -1;
2360     if (blurStyleArg->IsNumber()) {
2361         blurStyle = blurStyleArg->Int32Value(vm);
2362     }
2363     bool isHasOptions = !(colorModeArg->IsUndefined() && adaptiveColorArg->IsUndefined() && scaleArg->IsUndefined());
2364     int32_t colorMode = -1;
2365     int32_t adaptiveColor = -1;
2366     double scale = -1.0;
2367     if (isHasOptions) {
2368         colorMode = static_cast<int32_t>(ThemeColorMode::SYSTEM);
2369         ParseJsInt32(vm, colorModeArg, colorMode);
2370         adaptiveColor = static_cast<int32_t>(AdaptiveColor::DEFAULT);
2371         ParseJsInt32(vm, adaptiveColorArg, adaptiveColor);
2372         scale = 1.0;
2373         if (scaleArg->IsNumber()) {
2374             scale = scaleArg->ToNumber(vm)->Value();
2375         }
2376     }
2377     GetArkUIInternalNodeAPI()->GetCommonModifier().SetForegroundBlurStyle(nativeNode, blurStyle, colorMode,
2378         adaptiveColor, scale);
2379     return panda::JSValueRef::Undefined(vm);
2380 }
2381 
ResetForegroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)2382 ArkUINativeModuleValue CommonBridge::ResetForegroundBlurStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
2383 {
2384     EcmaVM *vm = runtimeCallInfo->GetVM();
2385     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2386     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2387     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2388     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetForegroundBlurStyle(nativeNode);
2389     return panda::JSValueRef::Undefined(vm);
2390 }
2391 
SetLinearGradientBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)2392 ArkUINativeModuleValue CommonBridge::SetLinearGradientBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
2393 {
2394     EcmaVM *vm = runtimeCallInfo->GetVM();
2395     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2396     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2397     auto blurRadiusArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2398     auto fractionStopsArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2399     auto directionArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2400     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2401     double blurRadius = 0.0;
2402     ParseJsDouble(vm, blurRadiusArg, blurRadius);
2403     auto direction = static_cast<int32_t>(GradientDirection::BOTTOM);
2404     if (directionArg->IsInt()) {
2405         direction = directionArg->Int32Value(vm);
2406     }
2407     std::vector<double> fractionStops;
2408     if (fractionStopsArg->IsArray(vm)) {
2409         auto array = panda::Local<panda::ArrayRef>(fractionStopsArg);
2410         auto length = array->Length(vm);
2411         for (uint32_t index = 0; index < length; index++) {
2412             auto fractionStop = panda::ArrayRef::GetValueAt(vm, array, index);
2413             double first = 0.0;
2414             double second = 0.0;
2415             if (!ParseJsDoublePair(vm, fractionStop, first, second)) {
2416                 continue;
2417             }
2418             fractionStops.push_back(first);
2419             fractionStops.push_back(second);
2420         }
2421     }
2422     GetArkUIInternalNodeAPI()->GetCommonModifier().SetLinearGradientBlur(nativeNode, blurRadius, fractionStops.data(),
2423         fractionStops.size(), direction);
2424     return panda::JSValueRef::Undefined(vm);
2425 }
2426 
ResetLinearGradientBlur(ArkUIRuntimeCallInfo * runtimeCallInfo)2427 ArkUINativeModuleValue CommonBridge::ResetLinearGradientBlur(ArkUIRuntimeCallInfo *runtimeCallInfo)
2428 {
2429     EcmaVM *vm = runtimeCallInfo->GetVM();
2430     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2431     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2432     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2433     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetLinearGradientBlur(nativeNode);
2434     return panda::JSValueRef::Undefined(vm);
2435 }
2436 
SetBackgroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)2437 ArkUINativeModuleValue CommonBridge::SetBackgroundBlurStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
2438 {
2439     EcmaVM *vm = runtimeCallInfo->GetVM();
2440     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2441     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2442     auto blurStyleArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2443     auto colorModeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2444     auto adaptiveColorArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2445     auto scaleArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2446     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2447     int32_t blurStyle = -1;
2448     if (blurStyleArg->IsNumber()) {
2449         blurStyle = blurStyleArg->Int32Value(vm);
2450     }
2451     bool isHasOptions = !(colorModeArg->IsUndefined() && adaptiveColorArg->IsUndefined() && scaleArg->IsUndefined());
2452     int32_t colorMode = -1;
2453     int32_t adaptiveColor = -1;
2454     double scale = -1.0;
2455     if (isHasOptions) {
2456         colorMode = static_cast<int32_t>(ThemeColorMode::SYSTEM);
2457         ParseJsInt32(vm, colorModeArg, colorMode);
2458         adaptiveColor = static_cast<int32_t>(AdaptiveColor::DEFAULT);
2459         ParseJsInt32(vm, adaptiveColorArg, adaptiveColor);
2460         scale = 1.0;
2461         if (scaleArg->IsNumber()) {
2462             scale = scaleArg->ToNumber(vm)->Value();
2463         }
2464     }
2465     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundBlurStyle(nativeNode, blurStyle, colorMode,
2466         adaptiveColor, scale);
2467     return panda::JSValueRef::Undefined(vm);
2468 }
2469 
ResetBackgroundBlurStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)2470 ArkUINativeModuleValue CommonBridge::ResetBackgroundBlurStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
2471 {
2472     EcmaVM *vm = runtimeCallInfo->GetVM();
2473     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2474     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2475     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2476     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundBlurStyle(nativeNode);
2477     return panda::JSValueRef::Undefined(vm);
2478 }
2479 
SetBorder(ArkUIRuntimeCallInfo * runtimeCallInfo)2480 ArkUINativeModuleValue CommonBridge::SetBorder(ArkUIRuntimeCallInfo* runtimeCallInfo)
2481 {
2482     EcmaVM *vm = runtimeCallInfo->GetVM();
2483     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2484     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2485     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2486 
2487     std::vector<double> options;
2488     ParseOuterBorderWidth(runtimeCallInfo, vm, options);         // Border Width args start index from 1
2489     ParseOuterBorderRadius(runtimeCallInfo, vm, options, NUM_9); // Border Radius args start index
2490 
2491     std::vector<uint32_t> colorAndStyleOptions;
2492     ParseOuterBorderColor(runtimeCallInfo, vm, colorAndStyleOptions, NUM_5);  // Border Color args start index
2493     ParseOuterBorderStyle(runtimeCallInfo, vm, colorAndStyleOptions, NUM_13); // Border Styel args start index
2494 
2495     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBorder(
2496         nativeNode, options.data(), options.size(), colorAndStyleOptions.data(), colorAndStyleOptions.size());
2497     return panda::JSValueRef::Undefined(vm);
2498 }
2499 
ResetBorder(ArkUIRuntimeCallInfo * runtimeCallInfo)2500 ArkUINativeModuleValue CommonBridge::ResetBorder(ArkUIRuntimeCallInfo *runtimeCallInfo)
2501 {
2502     EcmaVM *vm = runtimeCallInfo->GetVM();
2503     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2504     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2505     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2506     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBorder(nativeNode);
2507     return panda::JSValueRef::Undefined(vm);
2508 }
2509 
SetBackgroundImagePosition(ArkUIRuntimeCallInfo * runtimeCallInfo)2510 ArkUINativeModuleValue CommonBridge::SetBackgroundImagePosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
2511 {
2512     EcmaVM *vm = runtimeCallInfo->GetVM();
2513     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2514     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2515     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2516     Local<JSValueRef> xArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2517     Local<JSValueRef> yArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2518     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2519     double valueX = 0.0;
2520     double valueY = 0.0;
2521     DimensionUnit typeX = DimensionUnit::PX;
2522     DimensionUnit typeY = DimensionUnit::PX;
2523     bool isAlign = false;
2524 
2525     if (secondArg->IsNumber()) {
2526         int32_t align = secondArg->ToNumber(vm)->Value();
2527         ParseBackgroundImagePositionAlign(align, valueX, valueY, typeX, typeY);
2528         isAlign = true;
2529     } else {
2530         CalcDimension x(0, DimensionUnit::VP);
2531         CalcDimension y(0, DimensionUnit::VP);
2532 
2533         if (ArkTSUtils::ParseJsDimensionVp(vm, xArg, x)) {
2534             valueX = x.Value();
2535         }
2536         if (ArkTSUtils::ParseJsDimensionVp(vm, yArg, y)) {
2537             valueY = y.Value();
2538         }
2539         if (x.Unit() == DimensionUnit::PERCENT) {
2540             valueX = x.Value();
2541             typeX = DimensionUnit::PERCENT;
2542         }
2543         if (y.Unit() == DimensionUnit::PERCENT) {
2544             valueY = y.Value();
2545             typeY = DimensionUnit::PERCENT;
2546         }
2547     }
2548 
2549     double values[SIZE_OF_TWO];
2550     int32_t types[SIZE_OF_TWO];
2551     values[NUM_0] = valueX;
2552     types[NUM_0] = static_cast<int32_t>(typeX);
2553     values[NUM_1] = valueY;
2554     types[NUM_1] = static_cast<int32_t>(typeY);
2555 
2556     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundImagePosition(nativeNode, values, types, isAlign,
2557         SIZE_OF_TWO);
2558     return panda::JSValueRef::Undefined(vm);
2559 }
2560 
ResetBackgroundImagePosition(ArkUIRuntimeCallInfo * runtimeCallInfo)2561 ArkUINativeModuleValue CommonBridge::ResetBackgroundImagePosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
2562 {
2563     EcmaVM *vm = runtimeCallInfo->GetVM();
2564     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2565     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2566     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2567     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundImagePosition(nativeNode);
2568     return panda::JSValueRef::Undefined(vm);
2569 }
2570 
SetBackgroundImageSize(ArkUIRuntimeCallInfo * runtimeCallInfo)2571 ArkUINativeModuleValue CommonBridge::SetBackgroundImageSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
2572 {
2573     EcmaVM *vm = runtimeCallInfo->GetVM();
2574     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2575     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2576     Local<JSValueRef> imageSizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2577     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2578     Local<JSValueRef> heightArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2579     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2580 
2581     OHOS::Ace::BackgroundImageSizeType typeWidth = OHOS::Ace::BackgroundImageSizeType::AUTO;
2582     double valueWidth = 0.0;
2583     OHOS::Ace::BackgroundImageSizeType typeHeight = OHOS::Ace::BackgroundImageSizeType::AUTO;
2584     double valueHeight = 0.0;
2585 
2586     if (imageSizeArg->IsNumber()) {
2587         auto sizeType = imageSizeArg->ToNumber(vm)->Value();
2588         typeWidth = static_cast<OHOS::Ace::BackgroundImageSizeType>(sizeType);
2589         typeHeight = static_cast<OHOS::Ace::BackgroundImageSizeType>(sizeType);
2590     } else {
2591         CalcDimension width;
2592         CalcDimension height;
2593         ArkTSUtils::ParseJsDimensionVp(vm, widthArg, width);
2594         ArkTSUtils::ParseJsDimensionVp(vm, heightArg, height);
2595 
2596         valueWidth = width.ConvertToPx();
2597         valueHeight = height.ConvertToPx();
2598         typeWidth = BackgroundImageSizeType::LENGTH;
2599         typeHeight = BackgroundImageSizeType::LENGTH;
2600         if (width.Unit() == DimensionUnit::PERCENT) {
2601             typeWidth = BackgroundImageSizeType::PERCENT;
2602             valueWidth = width.Value() * FULL_DIMENSION;
2603         }
2604         if (height.Unit() == DimensionUnit::PERCENT) {
2605             typeHeight = BackgroundImageSizeType::PERCENT;
2606             valueHeight = height.Value() * FULL_DIMENSION;
2607         }
2608     }
2609     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundImageSize(
2610         nativeNode, valueWidth, valueHeight, static_cast<int32_t>(typeWidth), static_cast<int32_t>(typeHeight));
2611     return panda::JSValueRef::Undefined(vm);
2612 }
2613 
ResetBackgroundImageSize(ArkUIRuntimeCallInfo * runtimeCallInfo)2614 ArkUINativeModuleValue CommonBridge::ResetBackgroundImageSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
2615 {
2616     EcmaVM *vm = runtimeCallInfo->GetVM();
2617     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2618     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2619     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2620     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundImageSize(nativeNode);
2621     return panda::JSValueRef::Undefined(vm);
2622 }
2623 
SetBackgroundImage(ArkUIRuntimeCallInfo * runtimeCallInfo)2624 ArkUINativeModuleValue CommonBridge::SetBackgroundImage(ArkUIRuntimeCallInfo *runtimeCallInfo)
2625 {
2626     EcmaVM *vm = runtimeCallInfo->GetVM();
2627     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2628     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2629     Local<JSValueRef> srcArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2630     Local<JSValueRef> repeatArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2631     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2632     std::string src;
2633     int32_t repeatIndex = 0;
2634     if (!ArkTSUtils::ParseJsMedia(vm, srcArg, src)) {
2635         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundImage(nativeNode);
2636         return panda::JSValueRef::Undefined(vm);
2637     }
2638     std::string bundle;
2639     std::string module;
2640     ArkTSUtils::GetJsMediaBundleInfo(vm, srcArg, bundle, module);
2641     if (repeatArg->IsNumber()) {
2642         repeatIndex = repeatArg->ToNumber(vm)->Value();
2643     }
2644     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundImage(
2645         nativeNode, src.c_str(), bundle.c_str(), module.c_str(), repeatIndex);
2646     return panda::JSValueRef::Undefined(vm);
2647 }
2648 
ResetBackgroundImage(ArkUIRuntimeCallInfo * runtimeCallInfo)2649 ArkUINativeModuleValue CommonBridge::ResetBackgroundImage(ArkUIRuntimeCallInfo *runtimeCallInfo)
2650 {
2651     EcmaVM *vm = runtimeCallInfo->GetVM();
2652     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2653     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2654     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2655     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundImage(nativeNode);
2656     return panda::JSValueRef::Undefined(vm);
2657 }
2658 
SetTranslate(ArkUIRuntimeCallInfo * runtimeCallInfo)2659 ArkUINativeModuleValue CommonBridge::SetTranslate(ArkUIRuntimeCallInfo *runtimeCallInfo)
2660 {
2661     EcmaVM *vm = runtimeCallInfo->GetVM();
2662     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2663     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2664     Local<JSValueRef> xArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2665     Local<JSValueRef> yArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2666     Local<JSValueRef> zArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2667     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2668     if (!xArg->IsNumber() && !xArg->IsString() && !yArg->IsNumber() && !yArg->IsString() && !zArg->IsNumber() &&
2669         !zArg->IsString()) {
2670         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTranslate(nativeNode);
2671     } else {
2672         auto translateX = CalcDimension(0.0);
2673         auto translateY = CalcDimension(0.0);
2674         auto translateZ = CalcDimension(0.0);
2675         bool hasX = ParseAxisDimensionVp(vm, xArg, translateX, true);
2676         bool hasY = ParseAxisDimensionVp(vm, yArg, translateY, true);
2677         bool hasZ = ParseAxisDimensionVp(vm, zArg, translateZ, true);
2678         if (hasX || hasY || hasZ) {
2679             uint32_t size = SIZE_OF_THREE;
2680             double values[size];
2681             int units[size];
2682 
2683             values[NUM_0] = translateX.Value();
2684             units[NUM_0] = static_cast<int>(translateX.Unit());
2685             values[NUM_1] = translateY.Value();
2686             units[NUM_1] = static_cast<int>(translateY.Unit());
2687             values[NUM_2] = translateZ.Value();
2688             units[NUM_2] = static_cast<int>(translateZ.Unit());
2689             GetArkUIInternalNodeAPI()->GetCommonModifier().SetTranslate(nativeNode, values, units, size);
2690         } else {
2691             GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTranslate(nativeNode);
2692         }
2693     }
2694     return panda::JSValueRef::Undefined(vm);
2695 }
2696 
ResetTranslate(ArkUIRuntimeCallInfo * runtimeCallInfo)2697 ArkUINativeModuleValue CommonBridge::ResetTranslate(ArkUIRuntimeCallInfo *runtimeCallInfo)
2698 {
2699     EcmaVM *vm = runtimeCallInfo->GetVM();
2700     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2701     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2702     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2703     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTranslate(nativeNode);
2704     return panda::JSValueRef::Undefined(vm);
2705 }
2706 
SetScale(ArkUIRuntimeCallInfo * runtimeCallInfo)2707 ArkUINativeModuleValue CommonBridge::SetScale(ArkUIRuntimeCallInfo *runtimeCallInfo)
2708 {
2709     EcmaVM *vm = runtimeCallInfo->GetVM();
2710     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2711     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2712     Local<JSValueRef> xArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2713     Local<JSValueRef> yArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2714     Local<JSValueRef> zArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2715     Local<JSValueRef> centerXArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2716     Local<JSValueRef> centerYArg = runtimeCallInfo->GetCallArgRef(NUM_5);
2717     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2718     if (xArg->IsNumber() || yArg->IsNumber() || zArg->IsNumber()) {
2719         auto scaleX = 1.0f;
2720         auto scaleY = 1.0f;
2721         auto scaleZ = 1.0f;
2722 
2723         CalcDimension centerX = 0.5_pct;
2724         CalcDimension centerY = 0.5_pct;
2725 
2726         if (xArg->IsNumber()) {
2727             scaleX = xArg->ToNumber(vm)->Value();
2728         }
2729         if (yArg->IsNumber()) {
2730             scaleY = yArg->ToNumber(vm)->Value();
2731         }
2732         if (zArg->IsNumber()) {
2733             scaleZ = zArg->ToNumber(vm)->Value();
2734         }
2735         if (centerXArg->IsNumber() || centerXArg->IsString()) {
2736             ParseAxisDimensionVp(vm, centerXArg, centerX, true);
2737         }
2738         if (centerYArg->IsNumber() || centerYArg->IsString()) {
2739             ParseAxisDimensionVp(vm, centerYArg, centerY, true);
2740         }
2741 
2742         double values[SIZE_OF_FIVE];
2743         int units[SIZE_OF_TWO];
2744 
2745         values[NUM_0] = centerX.Value();
2746         units[NUM_0] = static_cast<int>(centerX.Unit());
2747         values[NUM_1] = centerY.Value();
2748         units[NUM_1] = static_cast<int>(centerY.Unit());
2749         values[NUM_2] = scaleX;
2750         values[NUM_3] = scaleY;
2751         values[NUM_4] = scaleZ;
2752         GetArkUIInternalNodeAPI()->GetCommonModifier().SetScale(nativeNode, values, SIZE_OF_FIVE, units, SIZE_OF_TWO);
2753     } else {
2754         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetScale(nativeNode);
2755     }
2756 
2757     return panda::JSValueRef::Undefined(vm);
2758 }
2759 
ResetScale(ArkUIRuntimeCallInfo * runtimeCallInfo)2760 ArkUINativeModuleValue CommonBridge::ResetScale(ArkUIRuntimeCallInfo *runtimeCallInfo)
2761 {
2762     EcmaVM *vm = runtimeCallInfo->GetVM();
2763     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2764     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2765     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2766     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetScale(nativeNode);
2767     return panda::JSValueRef::Undefined(vm);
2768 }
2769 
SetRotate(ArkUIRuntimeCallInfo * runtimeCallInfo)2770 ArkUINativeModuleValue CommonBridge::SetRotate(ArkUIRuntimeCallInfo *runtimeCallInfo)
2771 {
2772     EcmaVM *vm = runtimeCallInfo->GetVM();
2773     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2774     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2775     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2776 
2777     double values[SIZE_OF_EIGHT];
2778     int units[SIZE_OF_THREE];
2779 
2780     if (ParseRotate(runtimeCallInfo, values, units, SIZE_OF_EIGHT, SIZE_OF_THREE)) {
2781         GetArkUIInternalNodeAPI()->GetCommonModifier().SetRotate(
2782             nativeNode, values, SIZE_OF_EIGHT, units, SIZE_OF_THREE);
2783     } else {
2784         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRotate(nativeNode);
2785     }
2786     return panda::JSValueRef::Undefined(vm);
2787 }
2788 
ResetRotate(ArkUIRuntimeCallInfo * runtimeCallInfo)2789 ArkUINativeModuleValue CommonBridge::ResetRotate(ArkUIRuntimeCallInfo *runtimeCallInfo)
2790 {
2791     EcmaVM *vm = runtimeCallInfo->GetVM();
2792     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2793     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2794     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2795     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRotate(nativeNode);
2796     return panda::JSValueRef::Undefined(vm);
2797 }
2798 
SetGeometryTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)2799 ArkUINativeModuleValue CommonBridge::SetGeometryTransition(ArkUIRuntimeCallInfo *runtimeCallInfo)
2800 {
2801     EcmaVM *vm = runtimeCallInfo->GetVM();
2802     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2803     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2804     Local<JSValueRef> idArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2805     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2806     if (!idArg->IsString()) {
2807         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGeometryTransition(nativeNode);
2808         return panda::JSValueRef::Undefined(vm);
2809     }
2810 
2811     std::string id = idArg->ToString(vm)->ToString();
2812     GetArkUIInternalNodeAPI()->GetCommonModifier().SetGeometryTransition(nativeNode, id.c_str());
2813     return panda::JSValueRef::Undefined(vm);
2814 }
2815 
ResetGeometryTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)2816 ArkUINativeModuleValue CommonBridge::ResetGeometryTransition(ArkUIRuntimeCallInfo *runtimeCallInfo)
2817 {
2818     EcmaVM *vm = runtimeCallInfo->GetVM();
2819     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2820     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2821     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2822     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGeometryTransition(nativeNode);
2823     return panda::JSValueRef::Undefined(vm);
2824 }
2825 
ResetClip(ArkUIRuntimeCallInfo * runtimeCallInfo)2826 ArkUINativeModuleValue CommonBridge::ResetClip(ArkUIRuntimeCallInfo *runtimeCallInfo)
2827 {
2828     EcmaVM *vm = runtimeCallInfo->GetVM();
2829     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2830     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2831     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2832     auto *frameNode = reinterpret_cast<FrameNode *>(nativeNode);
2833     ViewAbstract::SetClipEdge(frameNode, false);
2834     return panda::JSValueRef::Undefined(vm);
2835 }
2836 
SetClip(ArkUIRuntimeCallInfo * runtimeCallInfo)2837 ArkUINativeModuleValue CommonBridge::SetClip(ArkUIRuntimeCallInfo *runtimeCallInfo)
2838 {
2839     EcmaVM *vm = runtimeCallInfo->GetVM();
2840     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2841     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2842     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2843     auto *frameNode = reinterpret_cast<FrameNode *>(nativeNode);
2844 
2845     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
2846     if (info[NUM_1]->IsUndefined()) {
2847         ViewAbstract::SetClipEdge(frameNode, false);
2848         return panda::JSValueRef::Undefined(vm);
2849     }
2850     if (info[NUM_1]->IsObject()) {
2851         Framework::JSShapeAbstract *clipShape =
2852             Framework::JSRef<Framework::JSObject>::Cast(info[NUM_1])->Unwrap<Framework::JSShapeAbstract>();
2853         if (clipShape == nullptr) {
2854             return panda::JSValueRef::Undefined(vm);
2855         }
2856         ViewAbstract::SetClipShape(frameNode, clipShape->GetBasicShape());
2857     } else if (info[NUM_1]->IsBoolean()) {
2858         ViewAbstract::SetClipEdge(frameNode, info[NUM_1]->ToBoolean());
2859     }
2860     return panda::JSValueRef::Undefined(vm);
2861 }
2862 
SetPixelStretchEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2863 ArkUINativeModuleValue CommonBridge::SetPixelStretchEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
2864 {
2865     EcmaVM *vm = runtimeCallInfo->GetVM();
2866     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2867     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2868     auto topArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2869     auto rightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2870     auto bottomArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2871     auto leftArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2872     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2873     CalcDimension left;
2874     ArkTSUtils::ParseJsDimensionVp(vm, leftArg, left);
2875     CalcDimension right;
2876     ArkTSUtils::ParseJsDimensionVp(vm, rightArg, right);
2877     CalcDimension top;
2878     ArkTSUtils::ParseJsDimensionVp(vm, topArg, top);
2879     CalcDimension bottom;
2880     ArkTSUtils::ParseJsDimensionVp(vm, bottomArg, bottom);
2881     double values[] = { left.Value(), top.Value(), right.Value(), bottom.Value() };
2882     int units[] = { static_cast<int>(left.Unit()), static_cast<int>(top.Unit()), static_cast<int>(right.Unit()),
2883                     static_cast<int>(bottom.Unit()) };
2884     GetArkUIInternalNodeAPI()->GetCommonModifier().SetPixelStretchEffect(nativeNode, values, units,
2885         (sizeof(values) / sizeof(values[NUM_0])));
2886     return panda::JSValueRef::Undefined(vm);
2887 }
2888 
ResetPixelStretchEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2889 ArkUINativeModuleValue CommonBridge::ResetPixelStretchEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
2890 {
2891     EcmaVM *vm = runtimeCallInfo->GetVM();
2892     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2893     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2894     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
2895     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetPixelStretchEffect(nativeNode);
2896     return panda::JSValueRef::Undefined(vm);
2897 }
2898 
SetLightUpEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2899 ArkUINativeModuleValue CommonBridge::SetLightUpEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
2900 {
2901     EcmaVM *vm = runtimeCallInfo->GetVM();
2902     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2903     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2904     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2905     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2906     auto radio = 1.0;
2907     if (secondArg->IsNumber()) {
2908         radio = secondArg->ToNumber(vm)->Value();
2909     }
2910     GetArkUIInternalNodeAPI()->GetCommonModifier().SetLightUpEffect(nativeNode, radio);
2911     return panda::JSValueRef::Undefined(vm);
2912 }
2913 
ResetLightUpEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2914 ArkUINativeModuleValue CommonBridge::ResetLightUpEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
2915 {
2916     EcmaVM *vm = runtimeCallInfo->GetVM();
2917     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2918     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2919     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2920     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetLightUpEffect(nativeNode);
2921     return panda::JSValueRef::Undefined(vm);
2922 }
2923 
SetSphericalEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2924 ArkUINativeModuleValue CommonBridge::SetSphericalEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
2925 {
2926     EcmaVM *vm = runtimeCallInfo->GetVM();
2927     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2928     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2929     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2930     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2931     auto radio = 0.0;
2932     if (secondArg->IsNumber()) {
2933         radio = secondArg->ToNumber(vm)->Value();
2934     }
2935     GetArkUIInternalNodeAPI()->GetCommonModifier().SetSphericalEffect(nativeNode, radio);
2936     return panda::JSValueRef::Undefined(vm);
2937 }
2938 
ResetSphericalEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2939 ArkUINativeModuleValue CommonBridge::ResetSphericalEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
2940 {
2941     EcmaVM *vm = runtimeCallInfo->GetVM();
2942     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2943     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2944     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2945     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetSphericalEffect(nativeNode);
2946     return panda::JSValueRef::Undefined(vm);
2947 }
2948 
SetRenderGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)2949 ArkUINativeModuleValue CommonBridge::SetRenderGroup(ArkUIRuntimeCallInfo *runtimeCallInfo)
2950 {
2951     EcmaVM *vm = runtimeCallInfo->GetVM();
2952     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2953     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2954     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2955     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2956     auto isRenderGroup = false;
2957     if (secondArg->IsBoolean()) {
2958         isRenderGroup = secondArg->ToBoolean(vm)->Value();
2959     }
2960     GetArkUIInternalNodeAPI()->GetCommonModifier().SetRenderGroup(nativeNode, isRenderGroup);
2961     return panda::JSValueRef::Undefined(vm);
2962 }
2963 
ResetRenderGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)2964 ArkUINativeModuleValue CommonBridge::ResetRenderGroup(ArkUIRuntimeCallInfo *runtimeCallInfo)
2965 {
2966     EcmaVM *vm = runtimeCallInfo->GetVM();
2967     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2968     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2969     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2970     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRenderGroup(nativeNode);
2971     return panda::JSValueRef::Undefined(vm);
2972 }
2973 
SetRenderFit(ArkUIRuntimeCallInfo * runtimeCallInfo)2974 ArkUINativeModuleValue CommonBridge::SetRenderFit(ArkUIRuntimeCallInfo *runtimeCallInfo)
2975 {
2976     EcmaVM *vm = runtimeCallInfo->GetVM();
2977     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2978     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2979     auto fitModeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2980     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2981     auto renderFit = static_cast<int32_t>(RenderFit::TOP_LEFT);
2982     if (fitModeArg->IsNumber()) {
2983         renderFit = fitModeArg->Int32Value(vm);
2984     }
2985     GetArkUIInternalNodeAPI()->GetCommonModifier().SetRenderFit(nativeNode, renderFit);
2986     return panda::JSValueRef::Undefined(vm);
2987 }
2988 
ResetRenderFit(ArkUIRuntimeCallInfo * runtimeCallInfo)2989 ArkUINativeModuleValue CommonBridge::ResetRenderFit(ArkUIRuntimeCallInfo *runtimeCallInfo)
2990 {
2991     EcmaVM *vm = runtimeCallInfo->GetVM();
2992     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2993     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2994     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
2995     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRenderFit(nativeNode);
2996     return panda::JSValueRef::Undefined(vm);
2997 }
2998 
SetUseEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)2999 ArkUINativeModuleValue CommonBridge::SetUseEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
3000 {
3001     EcmaVM *vm = runtimeCallInfo->GetVM();
3002     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3003     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3004     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3005     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
3006     auto useEffect = false;
3007     if (secondArg->IsBoolean()) {
3008         useEffect = secondArg->ToBoolean(vm)->Value();
3009     }
3010     GetArkUIInternalNodeAPI()->GetCommonModifier().SetUseEffect(nativeNode, useEffect);
3011     return panda::JSValueRef::Undefined(vm);
3012 }
3013 
ResetUseEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)3014 ArkUINativeModuleValue CommonBridge::ResetUseEffect(ArkUIRuntimeCallInfo *runtimeCallInfo)
3015 {
3016     EcmaVM *vm = runtimeCallInfo->GetVM();
3017     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3018     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3019     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
3020     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetUseEffect(nativeNode);
3021     return panda::JSValueRef::Undefined(vm);
3022 }
3023 
SetForegroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)3024 ArkUINativeModuleValue CommonBridge::SetForegroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
3025 {
3026     EcmaVM *vm = runtimeCallInfo->GetVM();
3027     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3028     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3029     auto colorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3030     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
3031     if (colorArg->IsString()) {
3032         std::string colorStr = colorArg->ToString(vm)->ToString();
3033         colorStr.erase(std::remove(colorStr.begin(), colorStr.end(), ' '), colorStr.end());
3034         std::transform(colorStr.begin(), colorStr.end(), colorStr.begin(), ::tolower);
3035         if (colorStr.compare("invert") == 0) {
3036             auto strategy = static_cast<uint32_t>(ForegroundColorStrategy::INVERT);
3037             GetArkUIInternalNodeAPI()->GetCommonModifier().SetForegroundColor(nativeNode, false, strategy);
3038             return panda::JSValueRef::Undefined(vm);
3039         }
3040     }
3041     Color foregroundColor;
3042     if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, foregroundColor)) {
3043         return panda::JSValueRef::Undefined(vm);
3044     }
3045     GetArkUIInternalNodeAPI()->GetCommonModifier().SetForegroundColor(nativeNode, true, foregroundColor.GetValue());
3046     return panda::JSValueRef::Undefined(vm);
3047 }
3048 
ResetForegroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)3049 ArkUINativeModuleValue CommonBridge::ResetForegroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
3050 {
3051     EcmaVM *vm = runtimeCallInfo->GetVM();
3052     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3053     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3054     auto nativeNode = firstArg->ToNativePointer(vm)->Value();
3055     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetForegroundColor(nativeNode);
3056     return panda::JSValueRef::Undefined(vm);
3057 }
3058 
SetMotionPath(ArkUIRuntimeCallInfo * runtimeCallInfo)3059 ArkUINativeModuleValue CommonBridge::SetMotionPath(ArkUIRuntimeCallInfo *runtimeCallInfo)
3060 {
3061     EcmaVM *vm = runtimeCallInfo->GetVM();
3062     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3063     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3064     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3065     auto pathArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3066     auto fromArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3067     auto toArg = runtimeCallInfo->GetCallArgRef(NUM_3);
3068     auto rotatableArg = runtimeCallInfo->GetCallArgRef(NUM_4);
3069     std::string pathStringValue;
3070     if (pathArg->IsString()) {
3071         pathStringValue = pathArg->ToString(vm)->ToString();
3072     }
3073     float fromValue = (fromArg->IsNumber()) ? fromArg->ToNumber(vm)->Value() : 0.0f;
3074     float toValue = (toArg->IsNumber()) ? toArg->ToNumber(vm)->Value() : 1.0f;
3075     if (fromValue > 1.0f || fromValue < 0.0f) {
3076         fromValue = 0.0f;
3077     }
3078     if (toValue > 1.0f || toValue < 0.0f) {
3079         toValue = 1.0f;
3080     } else if (toValue < fromValue) {
3081         toValue = fromValue;
3082     }
3083     bool rotatableValue = (rotatableArg->IsBoolean()) ? rotatableArg->ToBoolean(vm)->Value() : false;
3084     GetArkUIInternalNodeAPI()->GetCommonModifier().SetMotionPath(nativeNode, pathStringValue.c_str(), fromValue,
3085         toValue, rotatableValue);
3086     return panda::JSValueRef::Undefined(vm);
3087 }
3088 
ResetMotionPath(ArkUIRuntimeCallInfo * runtimeCallInfo)3089 ArkUINativeModuleValue CommonBridge::ResetMotionPath(ArkUIRuntimeCallInfo *runtimeCallInfo)
3090 {
3091     EcmaVM *vm = runtimeCallInfo->GetVM();
3092     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3093     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3094     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3095     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMotionPath(nativeNode);
3096     return panda::JSValueRef::Undefined(vm);
3097 }
3098 
SetGroupDefaultFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)3099 ArkUINativeModuleValue CommonBridge::SetGroupDefaultFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
3100 {
3101     EcmaVM *vm = runtimeCallInfo->GetVM();
3102     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3103     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3104     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3105     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3106     if (secondArg->IsBoolean()) {
3107         bool groupDefaultFocus = secondArg->ToBoolean(vm)->Value();
3108         GetArkUIInternalNodeAPI()->GetCommonModifier().SetGroupDefaultFocus(nativeNode, groupDefaultFocus);
3109     } else {
3110         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGroupDefaultFocus(nativeNode);
3111     }
3112     return panda::JSValueRef::Undefined(vm);
3113 }
3114 
ResetGroupDefaultFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)3115 ArkUINativeModuleValue CommonBridge::ResetGroupDefaultFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
3116 {
3117     EcmaVM *vm = runtimeCallInfo->GetVM();
3118     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3119     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3120     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3121     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGroupDefaultFocus(nativeNode);
3122     return panda::JSValueRef::Undefined(vm);
3123 }
3124 
SetFocusOnTouch(ArkUIRuntimeCallInfo * runtimeCallInfo)3125 ArkUINativeModuleValue CommonBridge::SetFocusOnTouch(ArkUIRuntimeCallInfo *runtimeCallInfo)
3126 {
3127     EcmaVM *vm = runtimeCallInfo->GetVM();
3128     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3129     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3130     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3131     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3132     if (secondArg->IsBoolean()) {
3133         bool focusOnTouch = secondArg->ToBoolean(vm)->Value();
3134         GetArkUIInternalNodeAPI()->GetCommonModifier().SetFocusOnTouch(nativeNode, focusOnTouch);
3135     } else {
3136         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFocusOnTouch(nativeNode);
3137     }
3138     return panda::JSValueRef::Undefined(vm);
3139 }
3140 
ResetFocusOnTouch(ArkUIRuntimeCallInfo * runtimeCallInfo)3141 ArkUINativeModuleValue CommonBridge::ResetFocusOnTouch(ArkUIRuntimeCallInfo *runtimeCallInfo)
3142 {
3143     EcmaVM *vm = runtimeCallInfo->GetVM();
3144     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3145     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3146     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3147     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFocusOnTouch(nativeNode);
3148     return panda::JSValueRef::Undefined(vm);
3149 }
3150 
SetFocusable(ArkUIRuntimeCallInfo * runtimeCallInfo)3151 ArkUINativeModuleValue CommonBridge::SetFocusable(ArkUIRuntimeCallInfo* runtimeCallInfo)
3152 {
3153     EcmaVM* vm = runtimeCallInfo->GetVM();
3154     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3155     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3156     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3157     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3158     if (secondArg->IsBoolean()) {
3159         bool focusable = secondArg->ToBoolean(vm)->Value();
3160         GetArkUIInternalNodeAPI()->GetCommonModifier().SetFocusable(nativeNode, focusable);
3161     } else {
3162         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFocusable(nativeNode);
3163     }
3164     return panda::JSValueRef::Undefined(vm);
3165 }
3166 
ResetFocusable(ArkUIRuntimeCallInfo * runtimeCallInfo)3167 ArkUINativeModuleValue CommonBridge::ResetFocusable(ArkUIRuntimeCallInfo* runtimeCallInfo)
3168 {
3169     EcmaVM* vm = runtimeCallInfo->GetVM();
3170     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3171     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3172     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3173     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFocusable(nativeNode);
3174     return panda::JSValueRef::Undefined(vm);
3175 }
3176 
SetTouchable(ArkUIRuntimeCallInfo * runtimeCallInfo)3177 ArkUINativeModuleValue CommonBridge::SetTouchable(ArkUIRuntimeCallInfo* runtimeCallInfo)
3178 {
3179     EcmaVM* vm = runtimeCallInfo->GetVM();
3180     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3181     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3182     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3183     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3184     if (secondArg->IsBoolean()) {
3185         bool touchable = secondArg->ToBoolean(vm)->Value();
3186         GetArkUIInternalNodeAPI()->GetCommonModifier().SetTouchable(nativeNode, touchable);
3187     } else {
3188         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTouchable(nativeNode);
3189     }
3190     return panda::JSValueRef::Undefined(vm);
3191 }
3192 
ResetTouchable(ArkUIRuntimeCallInfo * runtimeCallInfo)3193 ArkUINativeModuleValue CommonBridge::ResetTouchable(ArkUIRuntimeCallInfo* runtimeCallInfo)
3194 {
3195     EcmaVM* vm = runtimeCallInfo->GetVM();
3196     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3197     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3198     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3199     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTouchable(nativeNode);
3200     return panda::JSValueRef::Undefined(vm);
3201 }
3202 
SetDefaultFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)3203 ArkUINativeModuleValue CommonBridge::SetDefaultFocus(ArkUIRuntimeCallInfo* runtimeCallInfo)
3204 {
3205     EcmaVM* vm = runtimeCallInfo->GetVM();
3206     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3207     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3208     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3209     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3210     if (secondArg->IsBoolean()) {
3211         bool defaultFocus = secondArg->ToBoolean(vm)->Value();
3212         GetArkUIInternalNodeAPI()->GetCommonModifier().SetDefaultFocus(nativeNode, defaultFocus);
3213     } else {
3214         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDefaultFocus(nativeNode);
3215     }
3216     return panda::JSValueRef::Undefined(vm);
3217 }
3218 
ResetDefaultFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)3219 ArkUINativeModuleValue CommonBridge::ResetDefaultFocus(ArkUIRuntimeCallInfo* runtimeCallInfo)
3220 {
3221     EcmaVM* vm = runtimeCallInfo->GetVM();
3222     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3223     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3224     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3225     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDefaultFocus(nativeNode);
3226     return panda::JSValueRef::Undefined(vm);
3227 }
3228 
SetDisplayPriority(ArkUIRuntimeCallInfo * runtimeCallInfo)3229 ArkUINativeModuleValue CommonBridge::SetDisplayPriority(ArkUIRuntimeCallInfo* runtimeCallInfo)
3230 {
3231     EcmaVM* vm = runtimeCallInfo->GetVM();
3232     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3233     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3234     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3235     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3236     if (secondArg->IsNumber()) {
3237         double value = secondArg->ToNumber(vm)->Value();
3238         GetArkUIInternalNodeAPI()->GetCommonModifier().SetDisplayPriority(nativeNode, value);
3239     } else {
3240         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDisplayPriority(nativeNode);
3241     }
3242     return panda::JSValueRef::Undefined(vm);
3243 }
3244 
ResetDisplayPriority(ArkUIRuntimeCallInfo * runtimeCallInfo)3245 ArkUINativeModuleValue CommonBridge::ResetDisplayPriority(ArkUIRuntimeCallInfo* runtimeCallInfo)
3246 {
3247     EcmaVM* vm = runtimeCallInfo->GetVM();
3248     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3249     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3250     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3251     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDisplayPriority(nativeNode);
3252     return panda::JSValueRef::Undefined(vm);
3253 }
3254 
SetAccessibilityLevel(ArkUIRuntimeCallInfo * runtimeCallInfo)3255 ArkUINativeModuleValue CommonBridge::SetAccessibilityLevel(ArkUIRuntimeCallInfo* runtimeCallInfo)
3256 {
3257     EcmaVM* vm = runtimeCallInfo->GetVM();
3258     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3259     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3260     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3261     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3262     if (secondArg->IsString()) {
3263         std::string stringValue = secondArg->ToString(vm)->ToString();
3264         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAccessibilityLevel(nativeNode, stringValue.c_str());
3265     } else {
3266         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityLevel(nativeNode);
3267     }
3268     return panda::JSValueRef::Undefined(vm);
3269 }
3270 
ResetAccessibilityLevel(ArkUIRuntimeCallInfo * runtimeCallInfo)3271 ArkUINativeModuleValue CommonBridge::ResetAccessibilityLevel(ArkUIRuntimeCallInfo* runtimeCallInfo)
3272 {
3273     EcmaVM* vm = runtimeCallInfo->GetVM();
3274     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3275     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3276     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3277     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityLevel(nativeNode);
3278     return panda::JSValueRef::Undefined(vm);
3279 }
3280 
SetAccessibilityDescription(ArkUIRuntimeCallInfo * runtimeCallInfo)3281 ArkUINativeModuleValue CommonBridge::SetAccessibilityDescription(ArkUIRuntimeCallInfo* runtimeCallInfo)
3282 {
3283     EcmaVM* vm = runtimeCallInfo->GetVM();
3284     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3285     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3286     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3287     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3288     if (secondArg->IsString()) {
3289         std::string stringValue = secondArg->ToString(vm)->ToString();
3290         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAccessibilityDescription(nativeNode, stringValue.c_str());
3291     } else {
3292         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityDescription(nativeNode);
3293     }
3294     return panda::JSValueRef::Undefined(vm);
3295 }
3296 
ResetAccessibilityDescription(ArkUIRuntimeCallInfo * runtimeCallInfo)3297 ArkUINativeModuleValue CommonBridge::ResetAccessibilityDescription(ArkUIRuntimeCallInfo* runtimeCallInfo)
3298 {
3299     EcmaVM* vm = runtimeCallInfo->GetVM();
3300     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3301     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3302     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3303     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityDescription(nativeNode);
3304     return panda::JSValueRef::Undefined(vm);
3305 }
3306 
SetOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)3307 ArkUINativeModuleValue CommonBridge::SetOffset(ArkUIRuntimeCallInfo *runtimeCallInfo)
3308 {
3309     EcmaVM *vm = runtimeCallInfo->GetVM();
3310     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3311     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3312     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3313     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3314     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3315     CalcDimension xVal(0, DimensionUnit::VP);
3316     CalcDimension yVal(0, DimensionUnit::VP);
3317     ArkTSUtils::ParseJsDimensionVp(vm, secondArg, xVal);
3318     ArkTSUtils::ParseJsDimensionVp(vm, thirdArg, yVal);
3319 
3320     double number[2] = {xVal.Value(), yVal.Value()};
3321     int8_t unit[2] = {static_cast<int8_t>(xVal.Unit()), static_cast<int8_t>(yVal.Unit())};
3322     GetArkUIInternalNodeAPI()->GetCommonModifier().SetOffset(nativeNode, number, unit);
3323     return panda::JSValueRef::Undefined(vm);
3324 }
3325 
ResetOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)3326 ArkUINativeModuleValue CommonBridge::ResetOffset(ArkUIRuntimeCallInfo *runtimeCallInfo)
3327 {
3328     EcmaVM *vm = runtimeCallInfo->GetVM();
3329     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3330     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3331     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3332 
3333     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetOffset(nativeNode);
3334     return panda::JSValueRef::Undefined(vm);
3335 }
3336 
ParsePadding(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimen,ArkUISizeType & result)3337 void ParsePadding(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen, ArkUISizeType& result)
3338 {
3339     if (ArkTSUtils::ParseJsDimensionVp(vm, value, dimen)) {
3340         if (LessOrEqual(dimen.Value(), 0.0)) {
3341             dimen.SetValue(0.0);
3342             dimen.SetUnit(DimensionUnit::VP);
3343         }
3344         result.unit = static_cast<int8_t>(dimen.Unit());
3345         if (dimen.CalcValue() != "") {
3346             result.string = dimen.CalcValue().c_str();
3347         } else {
3348             result.value = dimen.Value();
3349         }
3350     }
3351 }
3352 
SetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)3353 ArkUINativeModuleValue CommonBridge::SetPadding(ArkUIRuntimeCallInfo *runtimeCallInfo)
3354 {
3355     EcmaVM *vm = runtimeCallInfo->GetVM();
3356     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3357     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3358     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3359     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3360     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3361     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
3362     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(NUM_4);
3363 
3364     struct ArkUISizeType top = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
3365     struct ArkUISizeType right = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
3366     struct ArkUISizeType bottom = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
3367     struct ArkUISizeType left = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
3368 
3369     CalcDimension topDimen(0, DimensionUnit::VP);
3370     CalcDimension rightDimen(0, DimensionUnit::VP);
3371     CalcDimension bottomDimen(0, DimensionUnit::VP);
3372     CalcDimension leftDimen(0, DimensionUnit::VP);
3373     ParsePadding(vm, secondArg, topDimen, top);
3374     ParsePadding(vm, thirdArg, rightDimen, right);
3375     ParsePadding(vm, forthArg, bottomDimen, bottom);
3376     ParsePadding(vm, fifthArg, leftDimen, left);
3377     GetArkUIInternalNodeAPI()->GetCommonModifier().SetPadding(nativeNode, &top, &right, &bottom, &left);
3378 
3379     return panda::JSValueRef::Undefined(vm);
3380 }
3381 
ResetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)3382 ArkUINativeModuleValue CommonBridge::ResetPadding(ArkUIRuntimeCallInfo *runtimeCallInfo)
3383 {
3384     EcmaVM *vm = runtimeCallInfo->GetVM();
3385     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3386     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3387     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3388     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetPadding(nativeNode);
3389     return panda::JSValueRef::Undefined(vm);
3390 }
3391 
SetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)3392 ArkUINativeModuleValue CommonBridge::SetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
3393 {
3394     EcmaVM *vm = runtimeCallInfo->GetVM();
3395     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3396     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3397     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3398     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3399     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3400     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
3401     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(NUM_4);
3402     ArkUISizeType top = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
3403     ArkUISizeType right = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
3404     ArkUISizeType bottom = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
3405     ArkUISizeType left = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
3406     CalcDimension topDimen(0, DimensionUnit::VP);
3407     if (ArkTSUtils::ParseJsDimensionVp(vm, secondArg, topDimen)) {
3408         top.unit = static_cast<int8_t>(topDimen.Unit());
3409         if (topDimen.CalcValue() != "") {
3410             top.string = topDimen.CalcValue().c_str();
3411         } else {
3412             top.value = topDimen.Value();
3413         }
3414     }
3415     CalcDimension rightDimen(0, DimensionUnit::VP);
3416     if (ArkTSUtils::ParseJsDimensionVp(vm, thirdArg, rightDimen)) {
3417         right.unit = static_cast<int8_t>(rightDimen.Unit());
3418         if (rightDimen.CalcValue() != "") {
3419             right.string = rightDimen.CalcValue().c_str();
3420         } else {
3421             right.value = rightDimen.Value();
3422         }
3423     }
3424     CalcDimension bottomDimen(0, DimensionUnit::VP);
3425     if (ArkTSUtils::ParseJsDimensionVp(vm, forthArg, bottomDimen)) {
3426         bottom.unit = static_cast<int8_t>(bottomDimen.Unit());
3427         if (bottomDimen.CalcValue() != "") {
3428             bottom.string = bottomDimen.CalcValue().c_str();
3429         } else {
3430             bottom.value = bottomDimen.Value();
3431         }
3432     }
3433     CalcDimension leftDimen(0, DimensionUnit::VP);
3434     if (ArkTSUtils::ParseJsDimensionVp(vm, fifthArg, leftDimen)) {
3435         left.unit = static_cast<int8_t>(leftDimen.Unit());
3436         if (leftDimen.CalcValue() != "") {
3437             left.string = leftDimen.CalcValue().c_str();
3438         } else {
3439             left.value = leftDimen.Value();
3440         }
3441     }
3442     GetArkUIInternalNodeAPI()->GetCommonModifier().SetMargin(nativeNode, &top, &right, &bottom, &left);
3443     return panda::JSValueRef::Undefined(vm);
3444 }
3445 
ResetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)3446 ArkUINativeModuleValue CommonBridge::ResetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
3447 {
3448     EcmaVM *vm = runtimeCallInfo->GetVM();
3449     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3450     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3451     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3452     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMargin(nativeNode);
3453     return panda::JSValueRef::Undefined(vm);
3454 }
3455 
SetMarkAnchor(ArkUIRuntimeCallInfo * runtimeCallInfo)3456 ArkUINativeModuleValue CommonBridge::SetMarkAnchor(ArkUIRuntimeCallInfo *runtimeCallInfo)
3457 {
3458     EcmaVM *vm = runtimeCallInfo->GetVM();
3459     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3460     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3461     Local<JSValueRef> xArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3462     Local<JSValueRef> yArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3463     void *nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
3464     CalcDimension x(0.0, DimensionUnit::VP);
3465     CalcDimension y(0.0, DimensionUnit::VP);
3466     bool hasX = ArkTSUtils::ParseJsDimensionNG(vm, xArg, x, DimensionUnit::VP);
3467     bool hasY = ArkTSUtils::ParseJsDimensionNG(vm, yArg, y, DimensionUnit::VP);
3468     if (hasX || hasY) {
3469         GetArkUIInternalNodeAPI()->GetCommonModifier().SetMarkAnchor(nativeNode, x.Value(),
3470             static_cast<int32_t>(x.Unit()), y.Value(), static_cast<int32_t>(y.Unit()));
3471     } else {
3472         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMarkAnchor(nativeNode);
3473     }
3474     return panda::JSValueRef::Undefined(vm);
3475 }
3476 
ResetMarkAnchor(ArkUIRuntimeCallInfo * runtimeCallInfo)3477 ArkUINativeModuleValue CommonBridge::ResetMarkAnchor(ArkUIRuntimeCallInfo *runtimeCallInfo)
3478 {
3479     EcmaVM *vm = runtimeCallInfo->GetVM();
3480     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3481     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(0);
3482     void *nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
3483     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMarkAnchor(nativeNode);
3484     return panda::JSValueRef::Undefined(vm);
3485 }
3486 
SetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)3487 ArkUINativeModuleValue CommonBridge::SetVisibility(ArkUIRuntimeCallInfo *runtimeCallInfo)
3488 {
3489     EcmaVM *vm = runtimeCallInfo->GetVM();
3490     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3491     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3492     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3493     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3494     int32_t value = 0;
3495     if (secondArg->IsNumber()) {
3496         value = secondArg->Int32Value(vm);
3497         if (value<NUM_0 || value>NUM_2) {
3498             value = 0;
3499         }
3500     }
3501     GetArkUIInternalNodeAPI()->GetCommonModifier().SetVisibility(nativeNode, value);
3502     return panda::JSValueRef::Undefined(vm);
3503 }
3504 
ResetVisibility(ArkUIRuntimeCallInfo * runtimeCallInfo)3505 ArkUINativeModuleValue CommonBridge::ResetVisibility(ArkUIRuntimeCallInfo *runtimeCallInfo)
3506 {
3507     EcmaVM *vm = runtimeCallInfo->GetVM();
3508     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3509     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3510     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3511     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetVisibility(nativeNode);
3512     return panda::JSValueRef::Undefined(vm);
3513 }
3514 
SetAccessibilityText(ArkUIRuntimeCallInfo * runtimeCallInfo)3515 ArkUINativeModuleValue CommonBridge::SetAccessibilityText(ArkUIRuntimeCallInfo* runtimeCallInfo)
3516 {
3517     EcmaVM* vm = runtimeCallInfo->GetVM();
3518     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3519     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3520     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3521     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3522     if (secondArg->IsString()) {
3523         std::string stringValue = secondArg->ToString(vm)->ToString();
3524         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAccessibilityText(nativeNode, stringValue.c_str());
3525     } else {
3526         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityText(nativeNode);
3527     }
3528     return panda::JSValueRef::Undefined(vm);
3529 }
3530 
ResetAccessibilityText(ArkUIRuntimeCallInfo * runtimeCallInfo)3531 ArkUINativeModuleValue CommonBridge::ResetAccessibilityText(ArkUIRuntimeCallInfo* runtimeCallInfo)
3532 {
3533     EcmaVM* vm = runtimeCallInfo->GetVM();
3534     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3535     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3536     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3537     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityText(nativeNode);
3538     return panda::JSValueRef::Undefined(vm);
3539 }
3540 
SetConstraintSize(ArkUIRuntimeCallInfo * runtimeCallInfo)3541 ArkUINativeModuleValue CommonBridge::SetConstraintSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
3542 {
3543     EcmaVM* vm = runtimeCallInfo->GetVM();
3544     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3545     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3546     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3547     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3548     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
3549     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(NUM_4);
3550     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3551     CalcDimension minWidth;
3552     CalcDimension maxWidth;
3553     CalcDimension minHeight;
3554     CalcDimension maxHeight;
3555     struct ArkUISizeType minWidthValue = {0.0, 0};
3556     struct ArkUISizeType maxWidthValue = {0.0, 0};
3557     struct ArkUISizeType minHeightValue = {0.0, 0};
3558     struct ArkUISizeType maxHeightValue = {0.0, 0};
3559 
3560     bool version10OrLarger = Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN);
3561     if (ArkTSUtils::ParseJsDimensionVp(vm, secondArg, minWidth)) {
3562         minWidthValue.value = minWidth.Value();
3563         minWidthValue.unit = static_cast<int8_t>(minWidth.Unit());
3564         GetArkUIInternalNodeAPI()->GetCommonModifier().SetMinWidth(nativeNode, &minWidthValue);
3565     } else if (version10OrLarger) {
3566         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMinWidth(nativeNode);
3567     }
3568 
3569     if (ArkTSUtils::ParseJsDimensionVp(vm, thirdArg, maxWidth)) {
3570         maxWidthValue.value = maxWidth.Value();
3571         maxWidthValue.unit = static_cast<int8_t>(maxWidth.Unit());
3572         GetArkUIInternalNodeAPI()->GetCommonModifier().SetMaxWidth(nativeNode, &maxWidthValue);
3573     } else if (version10OrLarger) {
3574         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMaxWidth(nativeNode);
3575     }
3576 
3577     if (ArkTSUtils::ParseJsDimensionVp(vm, forthArg, minHeight)) {
3578         minHeightValue.value = minHeight.Value();
3579         minHeightValue.unit = static_cast<int8_t>(minHeight.Unit());
3580         GetArkUIInternalNodeAPI()->GetCommonModifier().SetMinHeight(nativeNode, &minHeightValue);
3581     } else if (version10OrLarger) {
3582         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMinHeight(nativeNode);
3583     }
3584 
3585     if (ArkTSUtils::ParseJsDimensionVp(vm, fifthArg, maxHeight)) {
3586         maxHeightValue.value = maxHeight.Value();
3587         maxHeightValue.unit = static_cast<int8_t>(maxHeight.Unit());
3588         GetArkUIInternalNodeAPI()->GetCommonModifier().SetMaxHeight(nativeNode, &maxHeightValue);
3589     } else if (version10OrLarger) {
3590         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMaxHeight(nativeNode);
3591     }
3592     return panda::JSValueRef::Undefined(vm);
3593 }
3594 
ResetConstraintSize(ArkUIRuntimeCallInfo * runtimeCallInfo)3595 ArkUINativeModuleValue CommonBridge::ResetConstraintSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
3596 {
3597     EcmaVM* vm = runtimeCallInfo->GetVM();
3598     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3599     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3600     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3601     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMaxHeight(nativeNode);
3602     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMaxWidth(nativeNode);
3603     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMinHeight(nativeNode);
3604     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMinWidth(nativeNode);
3605     return panda::JSValueRef::Undefined(vm);
3606 }
3607 
SetDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)3608 ArkUINativeModuleValue CommonBridge::SetDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
3609 {
3610     EcmaVM* vm = runtimeCallInfo->GetVM();
3611     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3612     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3613     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3614     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3615     std::string dir;
3616     int32_t direction = NUM_3;
3617     if (secondArg->IsString()) {
3618         dir = secondArg->ToString(vm)->ToString();
3619         if (dir == "Ltr") {
3620             direction = NUM_0;
3621         } else if (dir == "Rtl") {
3622             direction = NUM_1;
3623         } else if (dir == "Auto") {
3624             direction = NUM_3;
3625         } else if (dir == "undefined" && Container::GreatOrEqualAPIVersion(PlatformVersion::VERSION_TEN)) {
3626             direction = NUM_3;
3627         }
3628     }
3629     GetArkUIInternalNodeAPI()->GetCommonModifier().SetDirection(nativeNode, direction);
3630     return panda::JSValueRef::Undefined(vm);
3631 }
3632 
ResetDirection(ArkUIRuntimeCallInfo * runtimeCallInfo)3633 ArkUINativeModuleValue CommonBridge::ResetDirection(ArkUIRuntimeCallInfo* runtimeCallInfo)
3634 {
3635     EcmaVM* vm = runtimeCallInfo->GetVM();
3636     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3637     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3638     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3639     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDirection(nativeNode);
3640     return panda::JSValueRef::Undefined(vm);
3641 }
3642 
SetLayoutWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)3643 ArkUINativeModuleValue CommonBridge::SetLayoutWeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
3644 {
3645     EcmaVM* vm = runtimeCallInfo->GetVM();
3646     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3647     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3648     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3649     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3650     int32_t layoutWeight = 0;
3651     if (secondArg->IsNumber()) {
3652         layoutWeight = secondArg->Int32Value(vm);
3653     } else if (secondArg->IsString()) {
3654         layoutWeight = StringUtils::StringToInt(secondArg->ToString(vm)->ToString());
3655     }
3656     GetArkUIInternalNodeAPI()->GetCommonModifier().SetLayoutWeight(nativeNode, layoutWeight);
3657     return panda::JSValueRef::Undefined(vm);
3658 }
3659 
ResetLayoutWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)3660 ArkUINativeModuleValue CommonBridge::ResetLayoutWeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
3661 {
3662     EcmaVM* vm = runtimeCallInfo->GetVM();
3663     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3664     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3665     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3666     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetLayoutWeight(nativeNode);
3667     return panda::JSValueRef::Undefined(vm);
3668 }
3669 
SetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)3670 ArkUINativeModuleValue CommonBridge::SetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
3671 {
3672     EcmaVM* vm = runtimeCallInfo->GetVM();
3673     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3674     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3675     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3676     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3677     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3678     CalcDimension wVal(0.0, DimensionUnit::VP);
3679     CalcDimension hVal(0.0, DimensionUnit::VP);
3680     ParseCalcDimension(vm, nativeNode, secondArg, wVal, true);
3681     ParseCalcDimension(vm, nativeNode, thirdArg, hVal, false);
3682     return panda::JSValueRef::Undefined(vm);
3683 }
3684 
ResetSize(ArkUIRuntimeCallInfo * runtimeCallInfo)3685 ArkUINativeModuleValue CommonBridge::ResetSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
3686 {
3687     EcmaVM* vm = runtimeCallInfo->GetVM();
3688     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3689     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3690     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3691     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetWidth(nativeNode);
3692     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHeight(nativeNode);
3693     return panda::JSValueRef::Undefined(vm);
3694 }
3695 
SetAlignSelf(ArkUIRuntimeCallInfo * runtimeCallInfo)3696 ArkUINativeModuleValue CommonBridge::SetAlignSelf(ArkUIRuntimeCallInfo* runtimeCallInfo)
3697 {
3698     EcmaVM* vm = runtimeCallInfo->GetVM();
3699     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3700     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3701     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3702     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3703 
3704     if (secondArg->IsNumber() && secondArg->ToNumber(vm)->Value() >= 0 &&
3705         secondArg->ToNumber(vm)->Value() <= MAX_ALIGN_VALUE) {
3706         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAlignSelf(nativeNode, secondArg->Int32Value(vm));
3707     } else {
3708         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAlignSelf(nativeNode);
3709     }
3710     return panda::JSValueRef::Undefined(vm);
3711 }
3712 
ResetAlignSelf(ArkUIRuntimeCallInfo * runtimeCallInfo)3713 ArkUINativeModuleValue CommonBridge::ResetAlignSelf(ArkUIRuntimeCallInfo* runtimeCallInfo)
3714 {
3715     EcmaVM* vm = runtimeCallInfo->GetVM();
3716     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3717     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3718     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3719     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAlignSelf(nativeNode);
3720     return panda::JSValueRef::Undefined(vm);
3721 }
3722 
SetAspectRatio(ArkUIRuntimeCallInfo * runtimeCallInfo)3723 ArkUINativeModuleValue CommonBridge::SetAspectRatio(ArkUIRuntimeCallInfo* runtimeCallInfo)
3724 {
3725     EcmaVM* vm = runtimeCallInfo->GetVM();
3726     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3727     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3728     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3729     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3730 
3731     if (secondArg->IsNumber()) {
3732         double value = secondArg->ToNumber(vm)->Value();
3733         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAspectRatio(nativeNode, value);
3734     } else {
3735         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAspectRatio(nativeNode);
3736     }
3737     return panda::JSValueRef::Undefined(vm);
3738 }
3739 
ResetAspectRatio(ArkUIRuntimeCallInfo * runtimeCallInfo)3740 ArkUINativeModuleValue CommonBridge::ResetAspectRatio(ArkUIRuntimeCallInfo* runtimeCallInfo)
3741 {
3742     EcmaVM* vm = runtimeCallInfo->GetVM();
3743     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3744     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3745     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3746     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAspectRatio(nativeNode);
3747     return panda::JSValueRef::Undefined(vm);
3748 }
3749 
SetFlexGrow(ArkUIRuntimeCallInfo * runtimeCallInfo)3750 ArkUINativeModuleValue CommonBridge::SetFlexGrow(ArkUIRuntimeCallInfo* runtimeCallInfo)
3751 {
3752     EcmaVM* vm = runtimeCallInfo->GetVM();
3753     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3754     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3755     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3756     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3757 
3758     if (secondArg->IsNumber()) {
3759         double value = secondArg->ToNumber(vm)->Value();
3760         GetArkUIInternalNodeAPI()->GetCommonModifier().SetFlexGrow(nativeNode, value);
3761     } else {
3762         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFlexGrow(nativeNode);
3763     }
3764     return panda::JSValueRef::Undefined(vm);
3765 }
3766 
ResetFlexGrow(ArkUIRuntimeCallInfo * runtimeCallInfo)3767 ArkUINativeModuleValue CommonBridge::ResetFlexGrow(ArkUIRuntimeCallInfo* runtimeCallInfo)
3768 {
3769     EcmaVM* vm = runtimeCallInfo->GetVM();
3770     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3771     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3772     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3773     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFlexGrow(nativeNode);
3774     return panda::JSValueRef::Undefined(vm);
3775 }
3776 
SetFlexShrink(ArkUIRuntimeCallInfo * runtimeCallInfo)3777 ArkUINativeModuleValue CommonBridge::SetFlexShrink(ArkUIRuntimeCallInfo* runtimeCallInfo)
3778 {
3779     EcmaVM* vm = runtimeCallInfo->GetVM();
3780     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3781     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3782     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3783     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3784 
3785     if (secondArg->IsNumber()) {
3786         double value = secondArg->ToNumber(vm)->Value();
3787         GetArkUIInternalNodeAPI()->GetCommonModifier().SetFlexShrink(nativeNode, value);
3788     } else {
3789         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFlexShrink(nativeNode);
3790     }
3791     return panda::JSValueRef::Undefined(vm);
3792 }
3793 
ResetFlexShrink(ArkUIRuntimeCallInfo * runtimeCallInfo)3794 ArkUINativeModuleValue CommonBridge::ResetFlexShrink(ArkUIRuntimeCallInfo* runtimeCallInfo)
3795 {
3796     EcmaVM* vm = runtimeCallInfo->GetVM();
3797     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3798     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3799     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3800     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFlexShrink(nativeNode);
3801     return panda::JSValueRef::Undefined(vm);
3802 }
3803 
SetGridOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)3804 ArkUINativeModuleValue CommonBridge::SetGridOffset(ArkUIRuntimeCallInfo *runtimeCallInfo)
3805 {
3806     EcmaVM* vm = runtimeCallInfo->GetVM();
3807     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3808     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3809     Local<JSValueRef> offsetArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3810     void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
3811     int32_t offset = 0;
3812     if (offsetArg->IsNumber()) {
3813         offset = offsetArg->Int32Value(vm);
3814         GetArkUIInternalNodeAPI()->GetCommonModifier().SetGridOffset(nativeNode, offset);
3815     } else {
3816         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGridOffset(nativeNode);
3817     }
3818     return panda::JSValueRef::Undefined(vm);
3819 }
3820 
ResetGridOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)3821 ArkUINativeModuleValue CommonBridge::ResetGridOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
3822 {
3823     EcmaVM* vm = runtimeCallInfo->GetVM();
3824     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3825     Local<JSValueRef> nativeNodeArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3826     void* nativeNode = nativeNodeArg->ToNativePointer(vm)->Value();
3827     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGridOffset(nativeNode);
3828     return panda::JSValueRef::Undefined(vm);
3829 }
3830 
SetGridSpan(ArkUIRuntimeCallInfo * runtimeCallInfo)3831 ArkUINativeModuleValue CommonBridge::SetGridSpan(ArkUIRuntimeCallInfo *runtimeCallInfo)
3832 {
3833     EcmaVM* vm = runtimeCallInfo->GetVM();
3834     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3835     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3836     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3837     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3838     int32_t value = 0;
3839     if (secondArg->IsNumber()) {
3840         value = secondArg->Int32Value(vm);
3841         GetArkUIInternalNodeAPI()->GetCommonModifier().SetGridSpan(nativeNode, value);
3842     } else {
3843         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGridSpan(nativeNode);
3844     }
3845     return panda::JSValueRef::Undefined(vm);
3846 }
3847 
ResetGridSpan(ArkUIRuntimeCallInfo * runtimeCallInfo)3848 ArkUINativeModuleValue CommonBridge::ResetGridSpan(ArkUIRuntimeCallInfo *runtimeCallInfo)
3849 {
3850     EcmaVM* vm = runtimeCallInfo->GetVM();
3851     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3852     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3853     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3854     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetGridSpan(nativeNode);
3855     return panda::JSValueRef::Undefined(vm);
3856 }
3857 
SetExpandSafeArea(ArkUIRuntimeCallInfo * runtimeCallInfo)3858 ArkUINativeModuleValue CommonBridge::SetExpandSafeArea(ArkUIRuntimeCallInfo *runtimeCallInfo)
3859 {
3860     EcmaVM* vm = runtimeCallInfo->GetVM();
3861     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3862     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3863     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3864     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3865     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3866     std::string typeCppStr = "";
3867     std::string edgesCppStr = "";
3868     if (secondArg->IsString()) {
3869         typeCppStr = secondArg->ToString(vm)->ToString();
3870     } else {
3871         typeCppStr = "1|2|4";
3872     }
3873 
3874     if (thirdArg->IsString()) {
3875         edgesCppStr = thirdArg->ToString(vm)->ToString();
3876     } else {
3877         edgesCppStr = "1|2|4|8";
3878     }
3879     const char* typeStr = typeCppStr.c_str();
3880     const char* edgesStr = edgesCppStr.c_str();
3881     GetArkUIInternalNodeAPI()->GetCommonModifier().SetExpandSafeArea(nativeNode, typeStr, edgesStr);
3882     return panda::JSValueRef::Undefined(vm);
3883 }
3884 
ResetExpandSafeArea(ArkUIRuntimeCallInfo * runtimeCallInfo)3885 ArkUINativeModuleValue CommonBridge::ResetExpandSafeArea(ArkUIRuntimeCallInfo* runtimeCallInfo)
3886 {
3887     EcmaVM* vm = runtimeCallInfo->GetVM();
3888     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3889     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3890     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3891     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetExpandSafeArea(nativeNode);
3892     return panda::JSValueRef::Undefined(vm);
3893 }
3894 
SetAlignRules(ArkUIRuntimeCallInfo * runtimeCallInfo)3895 ArkUINativeModuleValue CommonBridge::SetAlignRules(ArkUIRuntimeCallInfo* runtimeCallInfo)
3896 {
3897     EcmaVM* vm = runtimeCallInfo->GetVM();
3898     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3899     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3900     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3901     Local<JSValueRef> middleArg = runtimeCallInfo->GetCallArgRef(NUM_2);
3902     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(NUM_3);
3903     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(NUM_4);
3904     Local<JSValueRef> centerArg = runtimeCallInfo->GetCallArgRef(NUM_5);
3905     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(NUM_6);
3906     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
3907 
3908     auto anchors = std::make_unique<std::string []>(ALIGN_RULES_NUM);
3909     auto direction = std::make_unique<int8_t []>(ALIGN_RULES_NUM);
3910     for (int i = 0; i < ALIGN_RULES_NUM; i++) {
3911         anchors[i] = "";
3912         direction[i] = ALIGN_DIRECTION_DEFAULT;
3913     }
3914     bool leftParseResult = ParseJsAlignRule(vm, leftArg, anchors[0], direction[0]);
3915     bool middleParseResult = ParseJsAlignRule(vm, middleArg, anchors[1], direction[1]);
3916     bool rightParseResult = ParseJsAlignRule(vm, rightArg, anchors[2], direction[2]);
3917     bool topParseResult = ParseJsAlignRule(vm, topArg, anchors[3], direction[3]);
3918     bool centerParseResult = ParseJsAlignRule(vm, centerArg, anchors[4], direction[4]);
3919     bool bottomParseResult = ParseJsAlignRule(vm, bottomArg, anchors[5], direction[5]);
3920     if (!leftParseResult && !middleParseResult && !rightParseResult && !topParseResult && !centerParseResult &&
3921         !bottomParseResult) {
3922         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAlignRules(nativeNode);
3923         return panda::JSValueRef::Undefined(vm);
3924     }
3925     auto realAnchors = std::make_unique<char* []>(ALIGN_RULES_NUM);
3926     for (int i = 0; i < ALIGN_RULES_NUM; i++) {
3927         realAnchors[i] = const_cast<char*>(anchors[i].c_str());
3928     }
3929     GetArkUIInternalNodeAPI()->GetCommonModifier().SetAlignRules(nativeNode, realAnchors.get(), direction.get(),
3930         ALIGN_RULES_NUM);
3931     return panda::JSValueRef::Undefined(vm);
3932 }
3933 
ResetAlignRules(ArkUIRuntimeCallInfo * runtimeCallInfo)3934 ArkUINativeModuleValue CommonBridge::ResetAlignRules(ArkUIRuntimeCallInfo* runtimeCallInfo)
3935 {
3936     EcmaVM* vm = runtimeCallInfo->GetVM();
3937     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3938     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3939     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3940     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAlignRules(nativeNode);
3941     return panda::JSValueRef::Undefined(vm);
3942 }
3943 
SetFlexBasis(ArkUIRuntimeCallInfo * runtimeCallInfo)3944 ArkUINativeModuleValue CommonBridge::SetFlexBasis(ArkUIRuntimeCallInfo* runtimeCallInfo)
3945 {
3946     EcmaVM* vm = runtimeCallInfo->GetVM();
3947     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3948     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3949     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
3950     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3951     struct ArkUIStringAndFloat flexBasis { 0.0, nullptr};
3952     std::string tempValueStr = "";
3953     if (secondArg->IsNumber()) {
3954         flexBasis.value = secondArg->ToNumber(vm)->Value();
3955         GetArkUIInternalNodeAPI()->GetCommonModifier().SetFlexBasis(nativeNode, &flexBasis);
3956     } else if (secondArg->IsString()) {
3957         tempValueStr = secondArg->ToString(vm)->ToString();
3958         flexBasis.valueStr = tempValueStr.c_str();
3959         GetArkUIInternalNodeAPI()->GetCommonModifier().SetFlexBasis(nativeNode, &flexBasis);
3960     } else {
3961         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFlexBasis(nativeNode);
3962     }
3963     return panda::JSValueRef::Undefined(vm);
3964 }
3965 
ResetFlexBasis(ArkUIRuntimeCallInfo * runtimeCallInfo)3966 ArkUINativeModuleValue CommonBridge::ResetFlexBasis(ArkUIRuntimeCallInfo* runtimeCallInfo)
3967 {
3968     EcmaVM* vm = runtimeCallInfo->GetVM();
3969     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3970     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
3971     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3972     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetFlexBasis(nativeNode);
3973     return panda::JSValueRef::Undefined(vm);
3974 }
3975 
SetAllowDrop(ArkUIRuntimeCallInfo * runtimeCallInfo)3976 ArkUINativeModuleValue CommonBridge::SetAllowDrop(ArkUIRuntimeCallInfo* runtimeCallInfo)
3977 {
3978     EcmaVM* vm = runtimeCallInfo->GetVM();
3979     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
3980     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
3981     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
3982     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
3983     if (secondArg->IsUndefined()) {
3984         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAllowDrop(nativeNode);
3985         return panda::JSValueRef::Undefined(vm);
3986     }
3987     Local<panda::ArrayRef> allowDropArray = static_cast<Local<panda::ArrayRef>>(secondArg);
3988     std::vector<std::string> keepStr;
3989     std::vector<const char*> strList;
3990     for (size_t i = 0; i < allowDropArray->Length(vm); i++) {
3991         Local<JSValueRef> objValue = allowDropArray->GetValueAt(vm, secondArg, i);
3992         keepStr.push_back(objValue->ToString(vm)->ToString());
3993         strList.push_back(keepStr[i].c_str());
3994     }
3995     GetArkUIInternalNodeAPI()->GetCommonModifier().SetAllowDrop(nativeNode, strList.data(), strList.size());
3996     return panda::JSValueRef::Undefined(vm);
3997 }
3998 
ResetAllowDrop(ArkUIRuntimeCallInfo * runtimeCallInfo)3999 ArkUINativeModuleValue CommonBridge::ResetAllowDrop(ArkUIRuntimeCallInfo* runtimeCallInfo)
4000 {
4001     EcmaVM* vm = runtimeCallInfo->GetVM();
4002     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4003     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4004     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4005     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAllowDrop(nativeNode);
4006     return panda::JSValueRef::Undefined(vm);
4007 }
4008 
SetId(ArkUIRuntimeCallInfo * runtimeCallInfo)4009 ArkUINativeModuleValue CommonBridge::SetId(ArkUIRuntimeCallInfo* runtimeCallInfo)
4010 {
4011     EcmaVM* vm = runtimeCallInfo->GetVM();
4012     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4013     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4014     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
4015     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4016     if (secondArg->IsString()) {
4017         std::string stringValue = secondArg->ToString(vm)->ToString();
4018         GetArkUIInternalNodeAPI()->GetCommonModifier().SetId(nativeNode, stringValue.c_str());
4019     } else {
4020         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetId(nativeNode);
4021     }
4022     return panda::JSValueRef::Undefined(vm);
4023 }
4024 
ResetId(ArkUIRuntimeCallInfo * runtimeCallInfo)4025 ArkUINativeModuleValue CommonBridge::ResetId(ArkUIRuntimeCallInfo* runtimeCallInfo)
4026 {
4027     EcmaVM* vm = runtimeCallInfo->GetVM();
4028     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4029     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4030     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4031     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetId(nativeNode);
4032     return panda::JSValueRef::Undefined(vm);
4033 }
4034 
SetKey(ArkUIRuntimeCallInfo * runtimeCallInfo)4035 ArkUINativeModuleValue CommonBridge::SetKey(ArkUIRuntimeCallInfo* runtimeCallInfo)
4036 {
4037     EcmaVM* vm = runtimeCallInfo->GetVM();
4038     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4039     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4040     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
4041     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4042     if (secondArg->IsString()) {
4043         std::string stringValue = secondArg->ToString(vm)->ToString();
4044         GetArkUIInternalNodeAPI()->GetCommonModifier().SetKey(nativeNode, stringValue.c_str());
4045     } else {
4046         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetKey(nativeNode);
4047     }
4048     return panda::JSValueRef::Undefined(vm);
4049 }
4050 
ResetKey(ArkUIRuntimeCallInfo * runtimeCallInfo)4051 ArkUINativeModuleValue CommonBridge::ResetKey(ArkUIRuntimeCallInfo* runtimeCallInfo)
4052 {
4053     EcmaVM* vm = runtimeCallInfo->GetVM();
4054     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4055     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4056     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4057     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetKey(nativeNode);
4058     return panda::JSValueRef::Undefined(vm);
4059 }
4060 
SetRestoreId(ArkUIRuntimeCallInfo * runtimeCallInfo)4061 ArkUINativeModuleValue CommonBridge::SetRestoreId(ArkUIRuntimeCallInfo* runtimeCallInfo)
4062 {
4063     EcmaVM* vm = runtimeCallInfo->GetVM();
4064     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4065     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4066     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
4067     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4068     if (secondArg->IsNumber()) {
4069         uint32_t value = secondArg->Uint32Value(vm);
4070         GetArkUIInternalNodeAPI()->GetCommonModifier().SetRestoreId(nativeNode, value);
4071     } else {
4072         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRestoreId(nativeNode);
4073     }
4074     return panda::JSValueRef::Undefined(vm);
4075 }
4076 
ResetRestoreId(ArkUIRuntimeCallInfo * runtimeCallInfo)4077 ArkUINativeModuleValue CommonBridge::ResetRestoreId(ArkUIRuntimeCallInfo* runtimeCallInfo)
4078 {
4079     EcmaVM* vm = runtimeCallInfo->GetVM();
4080     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4081     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4082     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4083     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetRestoreId(nativeNode);
4084     return panda::JSValueRef::Undefined(vm);
4085 }
4086 
SetTabIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)4087 ArkUINativeModuleValue CommonBridge::SetTabIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
4088 {
4089     EcmaVM* vm = runtimeCallInfo->GetVM();
4090     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4091     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4092     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
4093     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4094     if (secondArg->IsNumber()) {
4095         int32_t index = secondArg->Int32Value(vm);
4096         GetArkUIInternalNodeAPI()->GetCommonModifier().SetTabIndex(nativeNode, index);
4097     } else {
4098         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTabIndex(nativeNode);
4099     }
4100     return panda::JSValueRef::Undefined(vm);
4101 }
4102 
ResetTabIndex(ArkUIRuntimeCallInfo * runtimeCallInfo)4103 ArkUINativeModuleValue CommonBridge::ResetTabIndex(ArkUIRuntimeCallInfo* runtimeCallInfo)
4104 {
4105     EcmaVM* vm = runtimeCallInfo->GetVM();
4106     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4107     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4108     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4109     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetTabIndex(nativeNode);
4110     return panda::JSValueRef::Undefined(vm);
4111 }
4112 
SetObscured(ArkUIRuntimeCallInfo * runtimeCallInfo)4113 ArkUINativeModuleValue CommonBridge::SetObscured(ArkUIRuntimeCallInfo* runtimeCallInfo)
4114 {
4115     EcmaVM* vm = runtimeCallInfo->GetVM();
4116     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4117     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4118     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
4119     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4120 
4121     if (secondArg->IsUndefined() || !secondArg->IsArray(vm)) {
4122         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetObscured(nativeNode);
4123         return panda::JSValueRef::Undefined(vm);
4124     }
4125     Local<panda::ArrayRef> transArray = static_cast<Local<panda::ArrayRef>>(secondArg);
4126     auto length = transArray->Length(vm);
4127     int32_t reasonArray[length];
4128 
4129     for (size_t i = 0; i < length; i++) {
4130         Local<JSValueRef> value = transArray->GetValueAt(vm, secondArg, i);
4131         reasonArray[i] = value->Int32Value(vm);
4132     }
4133     GetArkUIInternalNodeAPI()->GetCommonModifier().SetObscured(nativeNode, reasonArray, length);
4134     return panda::JSValueRef::Undefined(vm);
4135 }
4136 
ResetObscured(ArkUIRuntimeCallInfo * runtimeCallInfo)4137 ArkUINativeModuleValue CommonBridge::ResetObscured(ArkUIRuntimeCallInfo* runtimeCallInfo)
4138 {
4139     EcmaVM* vm = runtimeCallInfo->GetVM();
4140     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4141     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4142     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4143     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetObscured(nativeNode);
4144     return panda::JSValueRef::Undefined(vm);
4145 }
4146 
SetBackgroundEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)4147 ArkUINativeModuleValue CommonBridge::SetBackgroundEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
4148 {
4149     EcmaVM* vm = runtimeCallInfo->GetVM();
4150     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4151     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);     // 0:index of parameter frameNode
4152     Local<JSValueRef> radiusArg = runtimeCallInfo->GetCallArgRef(1);        // 1:index of parameter radius
4153     Local<JSValueRef> saturationArg = runtimeCallInfo->GetCallArgRef(2);    // 2:index of parameter saturation
4154     Local<JSValueRef> brightnessArg = runtimeCallInfo->GetCallArgRef(3);    // 3:index of parameter brightness
4155     Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(4);         // 4:index of parameter color
4156     Local<JSValueRef> adaptiveColorArg = runtimeCallInfo->GetCallArgRef(5); // 5:index of parameter adaptiveColor
4157     Local<JSValueRef> blurOptionsArg = runtimeCallInfo->GetCallArgRef(6);   // 6:index of parameter blurOptions
4158     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4159     CalcDimension radius;
4160     if (!ArkTSUtils::ParseJsDimensionVp(vm, radiusArg, radius) || LessNotEqual(radius.Value(), 0.0f)) {
4161         radius.SetValue(0.0f);
4162     }
4163     double saturation = 1.0f;
4164     if (saturationArg->IsNumber()) {
4165         saturation = saturationArg->ToNumber(vm)->Value();
4166         saturation = (saturation > 0.0f || NearZero(saturation)) ? saturation : 1.0f;
4167     }
4168     double brightness = 1.0f;
4169     if (brightnessArg->IsNumber()) {
4170         brightness = brightnessArg->ToNumber(vm)->Value();
4171         brightness = (brightness > 0.0f || NearZero(brightness)) ? brightness : 1.0f;
4172     }
4173     Color color = Color::TRANSPARENT;
4174     if (!ArkTSUtils::ParseJsColor(vm, colorArg, color)) {
4175         color.SetValue(Color::TRANSPARENT.GetValue());
4176     }
4177     auto adaptiveColorValue = static_cast<int32_t>(AdaptiveColor::DEFAULT);
4178     auto adaptiveColor = AdaptiveColor::DEFAULT;
4179     if (adaptiveColorArg->IsNumber()) {
4180         adaptiveColorValue = adaptiveColorArg->Int32Value(vm);
4181         if (adaptiveColorValue >= static_cast<int32_t>(AdaptiveColor::DEFAULT) &&
4182             adaptiveColorValue <= static_cast<int32_t>(AdaptiveColor::AVERAGE)) {
4183             adaptiveColor = static_cast<AdaptiveColor>(adaptiveColorValue);
4184         }
4185     }
4186     BlurOption blurOption;
4187     if (blurOptionsArg->IsArray(vm)) {
4188         ParseBlurOption(vm, blurOptionsArg, blurOption);
4189     }
4190     EffectOption option = { radius, saturation, brightness, color, adaptiveColor, blurOption };
4191     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundEffect(nativeNode, option);
4192     return panda::JSValueRef::Undefined(vm);
4193 }
4194 
ResetBackgroundEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)4195 ArkUINativeModuleValue CommonBridge::ResetBackgroundEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
4196 {
4197     EcmaVM* vm = runtimeCallInfo->GetVM();
4198     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4199     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4200     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4201     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundEffect(nativeNode);
4202     return panda::JSValueRef::Undefined(vm);
4203 }
4204 
SetBackgroundBrightness(ArkUIRuntimeCallInfo * runtimeCallInfo)4205 ArkUINativeModuleValue CommonBridge::SetBackgroundBrightness(ArkUIRuntimeCallInfo* runtimeCallInfo)
4206 {
4207     EcmaVM* vm = runtimeCallInfo->GetVM();
4208     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4209     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);     // 0:index of parameter frameNode
4210     Local<JSValueRef> ratedArg = runtimeCallInfo->GetCallArgRef(1);         // 1:index of parameter ratedArg
4211     Local<JSValueRef> lightUpDegreeArg = runtimeCallInfo->GetCallArgRef(2); // 2:index of parameter lightUpDegreeArg
4212     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4213     double rate = 0.0;
4214     double lightUpDegree = 0.0;
4215     if (!ArkTSUtils::ParseJsDouble(vm, ratedArg, rate)) {
4216         return panda::JSValueRef::Undefined(vm);
4217     }
4218     if (!ArkTSUtils::ParseJsDouble(vm, lightUpDegreeArg, lightUpDegree)) {
4219         return panda::JSValueRef::Undefined(vm);
4220     }
4221     GetArkUIInternalNodeAPI()->GetCommonModifier().SetBackgroundBrightness(nativeNode, rate, lightUpDegree);
4222     return panda::JSValueRef::Undefined(vm);
4223 }
4224 
ResetBackgroundBrightness(ArkUIRuntimeCallInfo * runtimeCallInfo)4225 ArkUINativeModuleValue CommonBridge::ResetBackgroundBrightness(ArkUIRuntimeCallInfo* runtimeCallInfo)
4226 {
4227     EcmaVM* vm = runtimeCallInfo->GetVM();
4228     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4229     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4230     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4231     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBackgroundBrightness(nativeNode);
4232     return panda::JSValueRef::Undefined(vm);
4233 }
4234 
SetDragPreviewOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)4235 ArkUINativeModuleValue CommonBridge::SetDragPreviewOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
4236 {
4237     EcmaVM* vm = runtimeCallInfo->GetVM();
4238     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4239     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
4240     Local<JSValueRef> mode = runtimeCallInfo->GetCallArgRef(1);
4241     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4242     if (mode->IsNumber()) {
4243         int32_t dragPreviewMode = mode->Int32Value(vm);
4244         GetArkUIInternalNodeAPI()->GetCommonModifier().SetDragPreviewOptions(nativeNode, dragPreviewMode);
4245     } else {
4246         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDragPreviewOptions(nativeNode);
4247     }
4248     return panda::JSValueRef::Undefined(vm);
4249 }
4250 
ResetDragPreviewOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)4251 ArkUINativeModuleValue CommonBridge::ResetDragPreviewOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
4252 {
4253     EcmaVM* vm = runtimeCallInfo->GetVM();
4254     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4255     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4256     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4257     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDragPreviewOptions(nativeNode);
4258     return panda::JSValueRef::Undefined(vm);
4259 }
4260 
SetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)4261 ArkUINativeModuleValue CommonBridge::SetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
4262 {
4263     EcmaVM* vm = runtimeCallInfo->GetVM();
4264     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4265     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4266     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4267     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
4268     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4269     int32_t length = thirdArg->Int32Value(vm);
4270     double regionArray[length];
4271     int32_t regionUnits[length];
4272     if (!ParseResponseRegion(vm, secondArg, regionArray, regionUnits, length)) {
4273         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetResponseRegion(nativeNode);
4274         return panda::JSValueRef::Undefined(vm);
4275     }
4276     GetArkUIInternalNodeAPI()->GetCommonModifier().SetResponseRegion(nativeNode, regionArray, regionUnits, length);
4277     return panda::JSValueRef::Undefined(vm);
4278 }
4279 
ResetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)4280 ArkUINativeModuleValue CommonBridge::ResetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
4281 {
4282     EcmaVM* vm = runtimeCallInfo->GetVM();
4283     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4284     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4285     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4286     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetResponseRegion(nativeNode);
4287     return panda::JSValueRef::Undefined(vm);
4288 }
4289 
ResetTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)4290 ArkUINativeModuleValue CommonBridge::ResetTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
4291 {
4292     EcmaVM* vm = runtimeCallInfo->GetVM();
4293     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4294     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4295     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4296     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4297     ViewAbstract::SetTransition(frameNode, NG::TransitionOptions::GetDefaultTransition(TransitionType::ALL));
4298     return panda::JSValueRef::Undefined(vm);
4299 }
4300 
SetTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)4301 ArkUINativeModuleValue CommonBridge::SetTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
4302 {
4303     EcmaVM* vm = runtimeCallInfo->GetVM();
4304     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4305     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4306     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4307     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4308     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
4309     if (!info[1]->IsObject()) {
4310         return panda::JSValueRef::Undefined(vm);
4311     }
4312     auto obj = Framework::JSRef<Framework::JSObject>::Cast(info[1]);
4313     if (!obj->GetProperty("successor_")->IsUndefined()) {
4314         auto chainedEffect = ParseChainedTransition(obj, info.GetExecutionContext());
4315         ViewAbstract::SetChainedTransition(frameNode, chainedEffect);
4316         return panda::JSValueRef::Undefined(vm);
4317     }
4318     auto options = ParseJsTransition(info[1]);
4319     ViewAbstract::SetTransition(frameNode, options);
4320     return panda::JSValueRef::Undefined(vm);
4321 }
4322 
ResetTransitionPassThrough(ArkUIRuntimeCallInfo * runtimeCallInfo)4323 ArkUINativeModuleValue CommonBridge::ResetTransitionPassThrough(ArkUIRuntimeCallInfo* runtimeCallInfo)
4324 {
4325     EcmaVM* vm = runtimeCallInfo->GetVM();
4326     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4327     return panda::JSValueRef::Undefined(vm);
4328 }
4329 
SetTransitionPassThrough(ArkUIRuntimeCallInfo * runtimeCallInfo)4330 ArkUINativeModuleValue CommonBridge::SetTransitionPassThrough(ArkUIRuntimeCallInfo* runtimeCallInfo)
4331 {
4332     EcmaVM* vm = runtimeCallInfo->GetVM();
4333     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4334     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4335     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4336     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4337     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
4338     if (!info[1]->IsObject()) {
4339         return panda::JSValueRef::Undefined(vm);
4340     }
4341     auto obj = Framework::JSRef<Framework::JSObject>::Cast(info[1]);
4342     if (!obj->GetProperty("successor_")->IsUndefined()) {
4343         auto chainedEffect = ParseChainedTransition(obj, info.GetExecutionContext());
4344         ViewAbstract::SetChainedTransition(frameNode, chainedEffect);
4345         return panda::JSValueRef::Undefined(vm);
4346     }
4347     auto options = ParseJsTransition(info[1]);
4348     ViewAbstract::SetTransition(frameNode, options);
4349     return panda::JSValueRef::Undefined(vm);
4350 }
4351 
ResetSharedTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)4352 ArkUINativeModuleValue CommonBridge::ResetSharedTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
4353 {
4354     EcmaVM* vm = runtimeCallInfo->GetVM();
4355     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4356     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4357     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4358     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4359     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
4360     auto id = info[1]->ToString();
4361     if (id.empty()) {
4362         return panda::JSValueRef::Undefined(vm);
4363     }
4364     std::shared_ptr<SharedTransitionOption> sharedOption;
4365     sharedOption = std::make_shared<SharedTransitionOption>();
4366     sharedOption->duration = DEFAULT_DURATION;
4367     sharedOption->delay = NUM_0;
4368     sharedOption->curve = Curves::LINEAR;
4369     sharedOption->zIndex = NUM_0;
4370     sharedOption->type = DEFAULT_SHARED_EFFECT;
4371 
4372     ViewAbstract::SetSharedTransition(frameNode, id, sharedOption);
4373     return panda::JSValueRef::Undefined(vm);
4374 }
4375 
SetSharedTransition(ArkUIRuntimeCallInfo * runtimeCallInfo)4376 ArkUINativeModuleValue CommonBridge::SetSharedTransition(ArkUIRuntimeCallInfo* runtimeCallInfo)
4377 {
4378     EcmaVM* vm = runtimeCallInfo->GetVM();
4379     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4380     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4381     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4382     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4383     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
4384     auto id = info[NUM_1]->ToString();
4385     if (id.empty()) {
4386         return panda::JSValueRef::Undefined(vm);
4387     }
4388     std::shared_ptr<SharedTransitionOption> sharedOption;
4389     if (info[NUM_2]->IsObject()) {
4390         Framework::JSRef<Framework::JSObject> jsObj = Framework::JSRef<Framework::JSObject>::Cast(info[NUM_2]);
4391         sharedOption = std::make_shared<SharedTransitionOption>();
4392         sharedOption->duration = jsObj->GetPropertyValue<int32_t>("duration", DEFAULT_DURATION);
4393         if (sharedOption->duration < 0) {
4394             sharedOption->duration = DEFAULT_DURATION;
4395         }
4396         sharedOption->delay = jsObj->GetPropertyValue<int32_t>("delay", 0);
4397         if (sharedOption->delay < 0) {
4398             sharedOption->delay = 0;
4399         }
4400         RefPtr<Curve> curve;
4401         Framework::JSRef<Framework::JSVal> curveArgs = jsObj->GetProperty("curve");
4402         if (curveArgs->IsString()) {
4403             curve = Framework::CreateCurve(jsObj->GetPropertyValue<std::string>("curve", "linear"), false);
4404         } else if (curveArgs->IsObject()) {
4405             Framework::JSRef<Framework::JSVal> curveString =
4406                 Framework::JSRef<Framework::JSObject>::Cast(curveArgs)->GetProperty("__curveString");
4407             if (!curveString->IsString()) {
4408                 return panda::JSValueRef::Undefined(vm);
4409             }
4410             curve = Framework::CreateCurve(curveString->ToString(), false);
4411         }
4412         if (!curve) {
4413             curve = Curves::LINEAR;
4414         }
4415         sharedOption->curve = curve;
4416         if (jsObj->HasProperty("motionPath")) {
4417             MotionPathOption motionPathOption;
4418             if (ParseMotionPath(jsObj->GetProperty("motionPath"), motionPathOption)) {
4419                 sharedOption->motionPathOption = motionPathOption;
4420             }
4421         }
4422         sharedOption->zIndex = jsObj->GetPropertyValue<int32_t>("zIndex", 0);
4423         int32_t type = jsObj->GetPropertyValue<int32_t>("type", static_cast<int32_t>(DEFAULT_SHARED_EFFECT));
4424         sharedOption->type = static_cast<SharedTransitionEffectType>(type);
4425     }
4426     ViewAbstract::SetSharedTransition(frameNode, id, sharedOption);
4427     return panda::JSValueRef::Undefined(vm);
4428 }
SetMask(ArkUIRuntimeCallInfo * runtimeCallInfo)4429 ArkUINativeModuleValue CommonBridge::SetMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
4430 {
4431     EcmaVM* vm = runtimeCallInfo->GetVM();
4432     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4433     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4434     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4435     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4436 
4437     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
4438     if (!info[NUM_1]->IsObject()) {
4439         ViewAbstract::SetProgressMask(frameNode, nullptr);
4440         return panda::JSValueRef::Undefined(vm);
4441     }
4442     auto paramObject = Framework::JSRef<Framework::JSObject>::Cast(info[NUM_1]);
4443     Framework::JSRef<Framework::JSVal> typeParam = paramObject->GetProperty("type");
4444     if (!typeParam->IsNull() && !typeParam->IsUndefined() && typeParam->IsString() &&
4445         typeParam->ToString() == "ProgressMask") {
4446         auto progressMask = AceType::MakeRefPtr<NG::ProgressMaskProperty>();
4447         Framework::JSRef<Framework::JSVal> jValue = paramObject->GetProperty("value");
4448         auto value = jValue->IsNumber() ? jValue->ToNumber<float>() : 0.0f;
4449         if (value < 0.0f) {
4450             value = 0.0f;
4451         }
4452         progressMask->SetValue(value);
4453         Framework::JSRef<Framework::JSVal> jTotal = paramObject->GetProperty("total");
4454         auto total = jTotal->IsNumber() ? jTotal->ToNumber<float>() : DEFAULT_PROGRESS_TOTAL;
4455         if (total < 0.0f) {
4456             total = DEFAULT_PROGRESS_TOTAL;
4457         }
4458         progressMask->SetMaxValue(total);
4459         Framework::JSRef<Framework::JSVal> jColor = paramObject->GetProperty("color");
4460         Color colorVal;
4461         if (Framework::JSViewAbstract::ParseJsColor(jColor, colorVal)) {
4462             progressMask->SetColor(colorVal);
4463         } else {
4464             auto theme = Framework::JSShapeAbstract::GetTheme<ProgressTheme>();
4465             progressMask->SetColor(theme->GetMaskColor());
4466         }
4467         ViewAbstract::SetProgressMask(frameNode, progressMask);
4468     } else {
4469         Framework::JSShapeAbstract* maskShape =
4470             Framework::JSRef<Framework::JSObject>::Cast(info[NUM_1])->Unwrap<Framework::JSShapeAbstract>();
4471         if (maskShape == nullptr) {
4472             return panda::JSValueRef::Undefined(vm);
4473         };
4474         ViewAbstract::SetMask(frameNode, maskShape->GetBasicShape());
4475     }
4476     return panda::JSValueRef::Undefined(vm);
4477 }
4478 
ResetMask(ArkUIRuntimeCallInfo * runtimeCallInfo)4479 ArkUINativeModuleValue CommonBridge::ResetMask(ArkUIRuntimeCallInfo* runtimeCallInfo)
4480 {
4481     EcmaVM* vm = runtimeCallInfo->GetVM();
4482     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4483     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4484     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4485     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
4486     ViewAbstract::SetProgressMask(frameNode, nullptr);
4487     return panda::JSValueRef::Undefined(vm);
4488 }
4489 
SetMouseResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)4490 ArkUINativeModuleValue CommonBridge::SetMouseResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
4491 {
4492     EcmaVM* vm = runtimeCallInfo->GetVM();
4493     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4494     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4495     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4496     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
4497     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4498     int32_t length = thirdArg->Int32Value(vm);
4499     double regionArray[length];
4500     int32_t regionUnits[length];
4501     if (!ParseResponseRegion(vm, secondArg, regionArray, regionUnits, length)) {
4502         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMouseResponseRegion(nativeNode);
4503         return panda::JSValueRef::Undefined(vm);
4504     }
4505     GetArkUIInternalNodeAPI()->GetCommonModifier().SetMouseResponseRegion(nativeNode, regionArray, regionUnits, length);
4506     return panda::JSValueRef::Undefined(vm);
4507 }
4508 
ResetMouseResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)4509 ArkUINativeModuleValue CommonBridge::ResetMouseResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
4510 {
4511     EcmaVM* vm = runtimeCallInfo->GetVM();
4512     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4513     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4514     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4515     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMouseResponseRegion(nativeNode);
4516     return panda::JSValueRef::Undefined(vm);
4517 }
4518 
SetEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)4519 ArkUINativeModuleValue CommonBridge::SetEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
4520 {
4521     EcmaVM* vm = runtimeCallInfo->GetVM();
4522     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4523     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4524     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4525     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4526     if (secondArg->IsBoolean()) {
4527         bool boolValue = secondArg->ToBoolean(vm)->Value();
4528         GetArkUIInternalNodeAPI()->GetCommonModifier().SetEnabled(nativeNode, boolValue);
4529     } else {
4530         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetEnabled(nativeNode);
4531     }
4532     return panda::JSValueRef::Undefined(vm);
4533 }
4534 
ResetEnabled(ArkUIRuntimeCallInfo * runtimeCallInfo)4535 ArkUINativeModuleValue CommonBridge::ResetEnabled(ArkUIRuntimeCallInfo* runtimeCallInfo)
4536 {
4537     EcmaVM* vm = runtimeCallInfo->GetVM();
4538     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4539     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4540     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4541     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetEnabled(nativeNode);
4542     return panda::JSValueRef::Undefined(vm);
4543 }
4544 
SetUseShadowBatching(ArkUIRuntimeCallInfo * runtimeCallInfo)4545 ArkUINativeModuleValue CommonBridge::SetUseShadowBatching(ArkUIRuntimeCallInfo* runtimeCallInfo)
4546 {
4547     EcmaVM* vm = runtimeCallInfo->GetVM();
4548     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4549     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
4550     Local<JSValueRef> booleanArg = runtimeCallInfo->GetCallArgRef(1);
4551     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4552     if (booleanArg->IsBoolean()) {
4553         bool boolValue = booleanArg->ToBoolean(vm)->Value();
4554         GetArkUIInternalNodeAPI()->GetCommonModifier().SetUseShadowBatching(nativeNode, boolValue);
4555     } else {
4556         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetUseShadowBatching(nativeNode);
4557     }
4558     return panda::JSValueRef::Undefined(vm);
4559 }
4560 
ResetUseShadowBatching(ArkUIRuntimeCallInfo * runtimeCallInfo)4561 ArkUINativeModuleValue CommonBridge::ResetUseShadowBatching(ArkUIRuntimeCallInfo* runtimeCallInfo)
4562 {
4563     EcmaVM* vm = runtimeCallInfo->GetVM();
4564     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4565     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
4566     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4567     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetUseShadowBatching(nativeNode);
4568     return panda::JSValueRef::Undefined(vm);
4569 }
4570 
SetBlendMode(ArkUIRuntimeCallInfo * runtimeCallInfo)4571 ArkUINativeModuleValue CommonBridge::SetBlendMode(ArkUIRuntimeCallInfo *runtimeCallInfo)
4572 {
4573     EcmaVM* vm = runtimeCallInfo->GetVM();
4574     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4575     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);      // 0: index of parameter frameNode
4576     Local<JSValueRef> blendModeArg = runtimeCallInfo->GetCallArgRef(1);      // 1: index of parameter blendMode
4577     Local<JSValueRef> blendApplyTypeArg = runtimeCallInfo->GetCallArgRef(2); // 2: index of parameter blendApplyType
4578     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4579     int32_t blendModeValue = static_cast<int32_t>(OHOS::Ace::BlendMode::NONE);
4580     int32_t blendApplyTypeValue = static_cast<int32_t>(OHOS::Ace::BlendApplyType::FAST);
4581     if (blendModeArg->IsNumber()) {
4582         int32_t blendModeNum = blendModeArg->Int32Value(vm);
4583         if (blendModeNum >= static_cast<int32_t>(OHOS::Ace::BlendMode::NONE) &&
4584             blendModeNum <= static_cast<int32_t>(OHOS::Ace::BlendMode::LUMINOSITY)) {
4585             blendModeValue = blendModeNum;
4586         } else if (blendModeNum == BACKWARD_COMPAT_MAGIC_NUMBER_OFFSCREEN) {
4587             blendModeValue = static_cast<int32_t>(OHOS::Ace::BlendMode::SRC_OVER);
4588             blendApplyTypeValue = static_cast<int32_t>(OHOS::Ace::BlendApplyType::OFFSCREEN);
4589         }
4590         if (blendApplyTypeArg->IsNumber()) {
4591             int32_t blendApplyTypeNum = blendApplyTypeArg->Int32Value(vm);
4592             if (blendApplyTypeNum >= static_cast<int>(OHOS::Ace::BlendApplyType::FAST) &&
4593                 blendApplyTypeNum <= static_cast<int>(OHOS::Ace::BlendApplyType::OFFSCREEN)) {
4594                 blendApplyTypeValue = blendApplyTypeNum;
4595             }
4596         }
4597         GetArkUIInternalNodeAPI()->GetCommonModifier().SetBlendMode(nativeNode, blendModeValue, blendApplyTypeValue);
4598     } else {
4599         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBlendMode(nativeNode);
4600     }
4601     return panda::JSValueRef::Undefined(vm);
4602 }
4603 
ResetBlendMode(ArkUIRuntimeCallInfo * runtimeCallInfo)4604 ArkUINativeModuleValue CommonBridge::ResetBlendMode(ArkUIRuntimeCallInfo *runtimeCallInfo)
4605 {
4606     EcmaVM *vm = runtimeCallInfo->GetVM();
4607     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4608     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
4609     void *nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4610     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetBlendMode(nativeNode);
4611     return panda::JSValueRef::Undefined(vm);
4612 }
4613 
SetMonopolizeEvents(ArkUIRuntimeCallInfo * runtimeCallInfo)4614 ArkUINativeModuleValue CommonBridge::SetMonopolizeEvents(ArkUIRuntimeCallInfo* runtimeCallInfo)
4615 {
4616     EcmaVM* vm = runtimeCallInfo->GetVM();
4617     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4618     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
4619     Local<JSValueRef> booleanArg = runtimeCallInfo->GetCallArgRef(1);
4620     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4621     if (booleanArg->IsBoolean()) {
4622         bool boolValue = booleanArg->ToBoolean(vm)->Value();
4623         GetArkUIInternalNodeAPI()->GetCommonModifier().SetMonopolizeEvents(nativeNode, boolValue);
4624     } else {
4625         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMonopolizeEvents(nativeNode);
4626     }
4627     return panda::JSValueRef::Undefined(vm);
4628 }
4629 
ResetMonopolizeEvents(ArkUIRuntimeCallInfo * runtimeCallInfo)4630 ArkUINativeModuleValue CommonBridge::ResetMonopolizeEvents(ArkUIRuntimeCallInfo* runtimeCallInfo)
4631 {
4632     EcmaVM* vm = runtimeCallInfo->GetVM();
4633     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4634     Local<JSValueRef> frameNodeArg = runtimeCallInfo->GetCallArgRef(0);
4635     void* nativeNode = frameNodeArg->ToNativePointer(vm)->Value();
4636     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetMonopolizeEvents(nativeNode);
4637     return panda::JSValueRef::Undefined(vm);
4638 }
4639 
SetDraggable(ArkUIRuntimeCallInfo * runtimeCallInfo)4640 ArkUINativeModuleValue CommonBridge::SetDraggable(ArkUIRuntimeCallInfo* runtimeCallInfo)
4641 {
4642     EcmaVM* vm = runtimeCallInfo->GetVM();
4643     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4644     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4645     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4646     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4647     if (secondArg->IsBoolean()) {
4648         bool boolValue = secondArg->ToBoolean(vm)->Value();
4649         GetArkUIInternalNodeAPI()->GetCommonModifier().SetDraggable(nativeNode, boolValue);
4650     } else {
4651         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDraggable(nativeNode);
4652     }
4653     return panda::JSValueRef::Undefined(vm);
4654 }
4655 
ResetDraggable(ArkUIRuntimeCallInfo * runtimeCallInfo)4656 ArkUINativeModuleValue CommonBridge::ResetDraggable(ArkUIRuntimeCallInfo* runtimeCallInfo)
4657 {
4658     EcmaVM* vm = runtimeCallInfo->GetVM();
4659     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4660     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4661     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4662     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetDraggable(nativeNode);
4663     return panda::JSValueRef::Undefined(vm);
4664 }
4665 
SetAccessibilityGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)4666 ArkUINativeModuleValue CommonBridge::SetAccessibilityGroup(ArkUIRuntimeCallInfo* runtimeCallInfo)
4667 {
4668     EcmaVM* vm = runtimeCallInfo->GetVM();
4669     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4670     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4671     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4672     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4673     if (secondArg->IsBoolean()) {
4674         bool boolValue = secondArg->ToBoolean(vm)->Value();
4675         GetArkUIInternalNodeAPI()->GetCommonModifier().SetAccessibilityGroup(nativeNode, boolValue);
4676     } else {
4677         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityGroup(nativeNode);
4678     }
4679     return panda::JSValueRef::Undefined(vm);
4680 }
4681 
ResetAccessibilityGroup(ArkUIRuntimeCallInfo * runtimeCallInfo)4682 ArkUINativeModuleValue CommonBridge::ResetAccessibilityGroup(ArkUIRuntimeCallInfo* runtimeCallInfo)
4683 {
4684     EcmaVM* vm = runtimeCallInfo->GetVM();
4685     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4686     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4687     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4688     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetAccessibilityGroup(nativeNode);
4689     return panda::JSValueRef::Undefined(vm);
4690 }
4691 
SetHoverEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)4692 ArkUINativeModuleValue CommonBridge::SetHoverEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
4693 {
4694     EcmaVM* vm = runtimeCallInfo->GetVM();
4695     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4696     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4697     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4698     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4699 
4700     if (secondArg->IsUndefined() || !secondArg->IsNumber()) {
4701         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHoverEffect(nativeNode);
4702         return panda::JSValueRef::Undefined(vm);
4703     }
4704     int32_t intValue = secondArg->Int32Value(vm);
4705     GetArkUIInternalNodeAPI()->GetCommonModifier().SetHoverEffect(nativeNode, intValue);
4706     return panda::JSValueRef::Undefined(vm);
4707 }
4708 
ResetHoverEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)4709 ArkUINativeModuleValue CommonBridge::ResetHoverEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
4710 {
4711     EcmaVM* vm = runtimeCallInfo->GetVM();
4712     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4713     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4714     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4715     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetHoverEffect(nativeNode);
4716     return panda::JSValueRef::Undefined(vm);
4717 }
4718 
SetClickEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)4719 ArkUINativeModuleValue CommonBridge::SetClickEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
4720 {
4721     EcmaVM* vm = runtimeCallInfo->GetVM();
4722     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4723     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4724     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4725     Local<JSValueRef> levelArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4726     Local<JSValueRef> scaleArg = runtimeCallInfo->GetCallArgRef(NUM_2);
4727 
4728     int32_t clickEffectLevelValue = 0;
4729     if (levelArg->IsNumber()) {
4730         clickEffectLevelValue = levelArg->Int32Value(vm);
4731         if (clickEffectLevelValue < static_cast<int32_t>(OHOS::Ace::ClickEffectLevel::LIGHT) ||
4732             clickEffectLevelValue > static_cast<int32_t>(OHOS::Ace::ClickEffectLevel::HEAVY)) {
4733             clickEffectLevelValue = 0;
4734         }
4735     }
4736     float scaleNumberValue = 0.9f;
4737     if (!scaleArg->IsNumber()) {
4738         if ((OHOS::Ace::ClickEffectLevel)clickEffectLevelValue == OHOS::Ace::ClickEffectLevel::MIDDLE ||
4739             (OHOS::Ace::ClickEffectLevel)clickEffectLevelValue == OHOS::Ace::ClickEffectLevel::HEAVY) {
4740             scaleNumberValue = 0.95f;
4741         }
4742     } else {
4743         scaleNumberValue = scaleArg->ToNumber(vm)->Value();
4744         if (LessNotEqual(scaleNumberValue, 0.0) || GreatNotEqual(scaleNumberValue, 1.0)) {
4745             if ((OHOS::Ace::ClickEffectLevel)clickEffectLevelValue == OHOS::Ace::ClickEffectLevel::MIDDLE ||
4746                 (OHOS::Ace::ClickEffectLevel)clickEffectLevelValue == OHOS::Ace::ClickEffectLevel::HEAVY) {
4747                 scaleNumberValue = 0.95f;
4748             } else {
4749                 scaleNumberValue = 0.9f;
4750             }
4751         }
4752     }
4753     GetArkUIInternalNodeAPI()->GetCommonModifier().SetClickEffect(nativeNode, clickEffectLevelValue,
4754         scaleNumberValue);
4755     return panda::JSValueRef::Undefined(vm);
4756 }
4757 
ResetClickEffect(ArkUIRuntimeCallInfo * runtimeCallInfo)4758 ArkUINativeModuleValue CommonBridge::ResetClickEffect(ArkUIRuntimeCallInfo* runtimeCallInfo)
4759 {
4760     EcmaVM* vm = runtimeCallInfo->GetVM();
4761     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4762     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4763     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4764     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetClickEffect(nativeNode);
4765     return panda::JSValueRef::Undefined(vm);
4766 }
4767 
SetKeyBoardShortCut(ArkUIRuntimeCallInfo * runtimeCallInfo)4768 ArkUINativeModuleValue CommonBridge::SetKeyBoardShortCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
4769 {
4770     EcmaVM* vm = runtimeCallInfo->GetVM();
4771     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4772     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
4773     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
4774     Local<JSValueRef> keysArg = runtimeCallInfo->GetCallArgRef(NUM_2);
4775     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4776     if ((!valueArg->IsString() && !valueArg->IsNumber()) || !keysArg->IsArray(vm)) {
4777         GetArkUIInternalNodeAPI()->GetCommonModifier().ResetKeyBoardShortCut(nativeNode);
4778         return panda::JSValueRef::Undefined(vm);
4779     }
4780     std::string stringValue;
4781     if (valueArg->IsNumber()) {
4782         OHOS::Ace::FunctionKey functionkey = static_cast<OHOS::Ace::FunctionKey>(valueArg->Int32Value(vm));
4783         stringValue = JSViewAbstract::GetFunctionKeyName(functionkey);
4784     } else {
4785         stringValue = valueArg->ToString(vm)->ToString();
4786     }
4787     Local<panda::ArrayRef> keysArray = static_cast<Local<panda::ArrayRef>>(keysArg);
4788     auto arrLength = keysArray->Length(vm);
4789     if (arrLength > NUM_10) {
4790         arrLength = NUM_10;
4791     }
4792     int32_t* keysIntArray = new int32_t[arrLength];
4793     for (size_t i = 0; i < arrLength; i++) {
4794         Local<JSValueRef> objValue = keysArray->GetValueAt(vm, keysArg, i);
4795         keysIntArray[i] = objValue->Int32Value(vm);
4796     }
4797     GetArkUIInternalNodeAPI()->GetCommonModifier().SetKeyBoardShortCut(
4798         nativeNode, stringValue.c_str(), keysIntArray, arrLength);
4799     delete[] keysIntArray;
4800     return panda::JSValueRef::Undefined(vm);
4801 }
4802 
ResetKeyBoardShortCut(ArkUIRuntimeCallInfo * runtimeCallInfo)4803 ArkUINativeModuleValue CommonBridge::ResetKeyBoardShortCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
4804 {
4805     EcmaVM* vm = runtimeCallInfo->GetVM();
4806     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4807     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4808     void* nativeNode = firstArg->ToNativePointer(vm)->Value();
4809     GetArkUIInternalNodeAPI()->GetCommonModifier().ResetKeyBoardShortCut(nativeNode);
4810     return panda::JSValueRef::Undefined(vm);
4811 }
4812 
SetClipWithEdge(ArkUIRuntimeCallInfo * runtimeCallInfo)4813 ArkUINativeModuleValue CommonBridge::SetClipWithEdge(ArkUIRuntimeCallInfo *runtimeCallInfo)
4814 {
4815     EcmaVM *vm = runtimeCallInfo->GetVM();
4816     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4817     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4818     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
4819     auto *frameNode = reinterpret_cast<FrameNode *>(nativeNode);
4820 
4821     Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
4822     if (info[NUM_1]->IsUndefined()) {
4823         ViewAbstract::SetClipEdge(frameNode, true);
4824         return panda::JSValueRef::Undefined(vm);
4825     }
4826     if (info[NUM_1]->IsObject()) {
4827         Framework::JSShapeAbstract *clipShape =
4828             Framework::JSRef<Framework::JSObject>::Cast(info[NUM_1])->Unwrap<Framework::JSShapeAbstract>();
4829         if (clipShape == nullptr) {
4830             return panda::JSValueRef::Undefined(vm);
4831         }
4832         ViewAbstract::SetClipShape(frameNode, clipShape->GetBasicShape());
4833     } else if (info[NUM_1]->IsBoolean()) {
4834         ViewAbstract::SetClipEdge(frameNode, info[NUM_1]->ToBoolean());
4835     }
4836     return panda::JSValueRef::Undefined(vm);
4837 }
4838 
ResetClipWithEdge(ArkUIRuntimeCallInfo * runtimeCallInfo)4839 ArkUINativeModuleValue CommonBridge::ResetClipWithEdge(ArkUIRuntimeCallInfo *runtimeCallInfo)
4840 {
4841     EcmaVM *vm = runtimeCallInfo->GetVM();
4842     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
4843     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
4844     void *nativeNode = firstArg->ToNativePointer(vm)->Value();
4845     auto *frameNode = reinterpret_cast<FrameNode *>(nativeNode);
4846     ViewAbstract::SetClipEdge(frameNode, true);
4847     return panda::JSValueRef::Undefined(vm);
4848 }
4849 } // namespace OHOS::Ace::NG
4850