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