• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_text_area_bridge.h"
16 #include <cstdint>
17 
18 #include "bridge/common/utils/utils.h"
19 #include "bridge/declarative_frontend/engine/jsi/jsi_types.h"
20 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_common_bridge.h"
21 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_text_input_bridge.h"
22 #include "bridge/declarative_frontend/jsview/js_text_editable_controller.h"
23 #include "bridge/declarative_frontend/jsview/js_view_abstract.h"
24 #include "core/components/common/layout/constants.h"
25 #include "core/components/common/properties/text_style.h"
26 #include "core/components_ng/pattern/text_field/text_field_model_ng.h"
27 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
28 #include "frameworks/bridge/declarative_frontend/jsview/js_textfield.h"
29 
30 namespace OHOS::Ace::NG {
31 namespace {
32 constexpr int NUM_0 = 0;
33 constexpr int NUM_1 = 1;
34 constexpr int NUM_2 = 2;
35 constexpr int NUM_3 = 3;
36 constexpr int NUM_4 = 4;
37 constexpr int NUM_5 = 5;
38 constexpr int NUM_6 = 6;
39 constexpr int NUM_9 = 9;
40 constexpr int NUM_13 = 13;
41 constexpr int NUM_17 = 17;
42 constexpr int NUM_21 = 21;
43 constexpr int NUM_25 = 25;
44 constexpr int NUM_26 = 26;
45 constexpr int NUM_27 = 27;
46 constexpr int NUM_28 = 28;
47 constexpr int SIZE_OF_FOUR = 4;
48 constexpr int PARAM_ARR_LENGTH_1 = 1;
49 constexpr int PARAM_ARR_LENGTH_2 = 2;
50 constexpr int PARAM_ARR_LENGTH_3 = 3;
51 constexpr uint32_t KEY_BOARD_FOCUS_DEFAULT = 1;
52 constexpr uint32_t ILLEGAL_VALUE = 0;
53 constexpr int32_t DEFAULT_MODE = -1;
54 constexpr uint32_t COLOR_ALPHA_VALUE = 0xFF000000;
55 const int32_t MINI_VALID_VALUE = 1;
56 const int32_t MAX_VALID_VALUE = 100;
57 constexpr int16_t DEFAULT_ALPHA = 255;
58 constexpr double DEFAULT_OPACITY = 0.2;
59 constexpr uint32_t DEFAULT_OVERFLOW = 4;
60 const std::vector<TextOverflow> TEXT_OVERFLOWS = { TextOverflow::NONE, TextOverflow::CLIP, TextOverflow::ELLIPSIS,
61     TextOverflow::MARQUEE, TextOverflow::DEFAULT };
62 const std::string DEFAULT_FONT_WEIGHT = "400";
63 const std::vector<OHOS::Ace::TextAlign> TEXT_ALIGNS = { OHOS::Ace::TextAlign::START, OHOS::Ace::TextAlign::CENTER,
64     OHOS::Ace::TextAlign::END, OHOS::Ace::TextAlign::JUSTIFY };
65 const std::vector<OHOS::Ace::FontStyle> FONT_STYLES = { OHOS::Ace::FontStyle::NORMAL, OHOS::Ace::FontStyle::ITALIC };
66 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
67 const std::vector<TextHeightAdaptivePolicy> HEIGHT_ADAPTIVE_POLICY = { TextHeightAdaptivePolicy::MAX_LINES_FIRST,
68     TextHeightAdaptivePolicy::MIN_FONT_SIZE_FIRST, TextHeightAdaptivePolicy::LAYOUT_CONSTRAINT_FIRST };
69 
ParseLocalizedPadding(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimen,ArkUISizeType & result)70 bool ParseLocalizedPadding(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen,
71     ArkUISizeType& result)
72 {
73     if (ArkTSUtils::ParseJsLengthMetrics(vm, value, dimen)) {
74         if (LessOrEqual(dimen.Value(), 0.0)) {
75             dimen.SetValue(0.0);
76             dimen.SetUnit(DimensionUnit::VP);
77         }
78         result.unit = static_cast<int8_t>(dimen.Unit());
79         if (dimen.CalcValue() != "") {
80             result.string = dimen.CalcValue().c_str();
81         } else {
82             result.value = dimen.Value();
83         }
84         return true;
85     }
86     return false;
87 }
88 
ParseLocalizedMargin(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimen,ArkUISizeType & result)89 bool ParseLocalizedMargin(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen, ArkUISizeType& result)
90 {
91     if (ArkTSUtils::ParseJsLengthMetrics(vm, value, dimen)) {
92         result.unit = static_cast<int8_t>(dimen.Unit());
93         if (dimen.CalcValue() != "") {
94             result.string = dimen.CalcValue().c_str();
95         } else {
96             result.value = dimen.Value();
97         }
98         return true;
99     }
100     return false;
101 }
102 
SetBorderWidthArrayByDimen(CalcDimension & borderDimension,ArkUI_Float32 values[],int units[],int index)103 void SetBorderWidthArrayByDimen(CalcDimension& borderDimension, ArkUI_Float32 values[], int units[], int index)
104 {
105     values[index] = borderDimension.Value();
106     units[index] = static_cast<int>(borderDimension.Unit());
107 }
108 
ParseMirrorDimen(ArkUI_Float32 values[],int units[],int idx,CalcDimension & calcDimen)109 void ParseMirrorDimen(ArkUI_Float32 values[], int units[], int idx, CalcDimension& calcDimen)
110 {
111     values[idx] = calcDimen.Value();
112     units[idx] = static_cast<int>(calcDimen.Unit());
113 }
114 
ParseLocalizedBorderWidth(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & dimen)115 bool ParseLocalizedBorderWidth(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& dimen)
116 {
117     if (ArkTSUtils::ParseJsLengthMetrics(vm, value, dimen)) {
118         if (LessOrEqual(dimen.Value(), 0.0)) {
119             dimen.SetValue(0.0);
120             dimen.SetUnit(DimensionUnit::VP);
121         }
122         return true;
123     }
124     return false;
125 }
126 
ParseLocalizedBorderRadius(const EcmaVM * vm,const Local<JSValueRef> & value,CalcDimension & result)127 bool ParseLocalizedBorderRadius(const EcmaVM* vm, const Local<JSValueRef>& value, CalcDimension& result)
128 {
129     if (ArkTSUtils::ParseJsLengthMetrics(vm, value, result)) {
130         if (result.IsNegative()) {
131             result.Reset();
132         }
133         return true;
134     }
135     return false;
136 }
137 
PushOuterBorderDimensionVector(const std::optional<CalcDimension> & valueDim,std::vector<ArkUI_Float32> & options)138 void PushOuterBorderDimensionVector(const std::optional<CalcDimension>& valueDim, std::vector<ArkUI_Float32> &options)
139 {
140     options.push_back(static_cast<ArkUI_Float32>(valueDim.has_value()));
141     if (valueDim.has_value()) {
142         options.push_back(static_cast<ArkUI_Float32>(valueDim.value().Value()));
143         options.push_back(static_cast<ArkUI_Float32>(valueDim.value().Unit()));
144     } else {
145         options.push_back(0);
146         options.push_back(0);
147     }
148 }
149 
ParseOuterBorderDashParam(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,std::vector<ArkUI_Float32> & values,int32_t argsIndex)150 void ParseOuterBorderDashParam(ArkUIRuntimeCallInfo *runtimeCallInfo, EcmaVM *vm, std::vector<ArkUI_Float32> &values,
151     int32_t argsIndex)
152 {
153     Local<JSValueRef> leftArgs = runtimeCallInfo->GetCallArgRef(argsIndex);
154     Local<JSValueRef> rightArgs = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_1);
155     Local<JSValueRef> topArgs = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_2);
156     Local<JSValueRef> bottomArgs = runtimeCallInfo->GetCallArgRef(argsIndex + NUM_3);
157     std::optional<CalcDimension> leftDim;
158     std::optional<CalcDimension> rightDim;
159     std::optional<CalcDimension> topDim;
160     std::optional<CalcDimension> bottomDim;
161 
162     ArkTSUtils::ParseOuterBorderForDashParams(vm, leftArgs, leftDim);
163     ArkTSUtils::ParseOuterBorderForDashParams(vm, rightArgs, rightDim);
164     ArkTSUtils::ParseOuterBorderForDashParams(vm, topArgs, topDim);
165     ArkTSUtils::ParseOuterBorderForDashParams(vm, bottomArgs, bottomDim);
166 
167     PushOuterBorderDimensionVector(leftDim, values);
168     PushOuterBorderDimensionVector(rightDim, values);
169     PushOuterBorderDimensionVector(topDim, values);
170     PushOuterBorderDimensionVector(bottomDim, values);
171 }
172 
SetBorderDash(ArkUIRuntimeCallInfo * runtimeCallInfo,EcmaVM * vm,ArkUINodeHandle nativeNode)173 void SetBorderDash(ArkUIRuntimeCallInfo* runtimeCallInfo, EcmaVM *vm, ArkUINodeHandle nativeNode)
174 {
175     std::vector<ArkUI_Float32> dashOptions;
176     // Border DashGap args start index from 17
177     ParseOuterBorderDashParam(runtimeCallInfo, vm, dashOptions, NUM_17);
178     // Border DashGap args start index from 25
179     Local<JSValueRef> startDashGap = runtimeCallInfo->GetCallArgRef(NUM_25);
180     // Border DashGap args end index from 26
181     Local<JSValueRef> endDashGap = runtimeCallInfo->GetCallArgRef(NUM_26);
182     std::optional<CalcDimension> startDashGapDim;
183     std::optional<CalcDimension> endDashGapDim;
184     ArkTSUtils::ParseOuterBorderForDashParams(vm, startDashGap, startDashGapDim);
185     ArkTSUtils::ParseOuterBorderForDashParams(vm, endDashGap, endDashGapDim);
186     ArkTSUtils::PushOuterBorderDimensionVector(startDashGapDim, dashOptions);
187     ArkTSUtils::PushOuterBorderDimensionVector(endDashGapDim, dashOptions);
188 
189     // Border DashWidth args start index from 21
190     ParseOuterBorderDashParam(runtimeCallInfo, vm, dashOptions, NUM_21);
191     // Border DashWidth args start index from 27
192     Local<JSValueRef> startDashWidth = runtimeCallInfo->GetCallArgRef(NUM_27);
193     // Border DashWidth args end index from 28
194     Local<JSValueRef> endDashWidth = runtimeCallInfo->GetCallArgRef(NUM_28);
195     std::optional<CalcDimension> startDashWidthDim;
196     std::optional<CalcDimension> endDashWidthDim;
197     ArkTSUtils::ParseOuterBorderForDashParams(vm, startDashWidth, startDashWidthDim);
198     ArkTSUtils::ParseOuterBorderForDashParams(vm, endDashWidth, endDashWidthDim);
199     ArkTSUtils::PushOuterBorderDimensionVector(startDashWidthDim, dashOptions);
200     ArkTSUtils::PushOuterBorderDimensionVector(endDashWidthDim, dashOptions);
201 
202     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderDash(nativeNode, dashOptions.data(),
203         dashOptions.size());
204 }
205 } // namespace
206 
SetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)207 ArkUINativeModuleValue TextAreaBridge::SetStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
208 {
209     EcmaVM *vm = runtimeCallInfo->GetVM();
210     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
211     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
212     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
213     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
214     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
215     if (secondArg->IsString(vm)) {
216         auto str = secondArg->ToString(vm)->ToString(vm);
217         if (str == "Inline") {
218             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaStyle(nativeNode,
219                 static_cast<int32_t>(InputStyle::INLINE));
220         } else {
221             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaStyle(nativeNode,
222                 static_cast<int32_t>(InputStyle::DEFAULT));
223         }
224     } else {
225         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaStyle(nativeNode);
226     }
227     return panda::JSValueRef::Undefined(vm);
228 }
229 
ResetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)230 ArkUINativeModuleValue TextAreaBridge::ResetStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
231 {
232     EcmaVM *vm = runtimeCallInfo->GetVM();
233     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
234     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
235     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
236     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
237     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaStyle(nativeNode);
238     return panda::JSValueRef::Undefined(vm);
239 }
240 
SetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)241 ArkUINativeModuleValue TextAreaBridge::SetSelectionMenuHidden(ArkUIRuntimeCallInfo *runtimeCallInfo)
242 {
243     EcmaVM *vm = runtimeCallInfo->GetVM();
244     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
245     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
246     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
247     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
248     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
249     uint32_t contextMenuHidden = 0;
250     if (secondArg->IsBoolean()) {
251         contextMenuHidden = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
252     }
253     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaSelectionMenuHidden(nativeNode, contextMenuHidden);
254     return panda::JSValueRef::Undefined(vm);
255 }
256 
ResetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)257 ArkUINativeModuleValue TextAreaBridge::ResetSelectionMenuHidden(ArkUIRuntimeCallInfo *runtimeCallInfo)
258 {
259     EcmaVM *vm = runtimeCallInfo->GetVM();
260     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
261     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
262     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
263     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
264     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaSelectionMenuHidden(nativeNode);
265     return panda::JSValueRef::Undefined(vm);
266 }
267 
SetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)268 ArkUINativeModuleValue TextAreaBridge::SetMaxLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
269 {
270     EcmaVM *vm = runtimeCallInfo->GetVM();
271     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
272     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
273     Local<JSValueRef> maxLinesArg = runtimeCallInfo->GetCallArgRef(NUM_1);
274     Local<JSValueRef> overflowModeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
275     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
276     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
277 
278     auto maxLines = static_cast<uint32_t>(INT32_MAX);
279     if (maxLinesArg->IsNumber() && maxLinesArg->Int32Value(vm) > NUM_0) {
280         maxLines = maxLinesArg->Uint32Value(vm);
281     }
282 
283     uint32_t overflowMode = 0;
284 
285     if (overflowModeArg->IsNumber() &&
286         (overflowModeArg->Int32Value(vm) == NUM_0 || overflowModeArg->Int32Value(vm) == NUM_1)) {
287         overflowMode = overflowModeArg->Uint32Value(vm);
288     }
289     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMaxLines(nativeNode, maxLines, overflowMode);
290     return panda::JSValueRef::Undefined(vm);
291 }
292 
ResetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)293 ArkUINativeModuleValue TextAreaBridge::ResetMaxLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
294 {
295     EcmaVM *vm = runtimeCallInfo->GetVM();
296     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
297     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
298     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
299     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
300     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMaxLines(nativeNode);
301     return panda::JSValueRef::Undefined(vm);
302 }
303 
SetMinLines(ArkUIRuntimeCallInfo * runtimeCallInfo)304 ArkUINativeModuleValue TextAreaBridge::SetMinLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
305 {
306     EcmaVM *vm = runtimeCallInfo->GetVM();
307     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
308     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
309     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
310     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
311     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
312     if (secondArg->IsNumber() && secondArg->Int32Value(vm) > 0) {
313         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMinLines(nativeNode, secondArg->Uint32Value(vm));
314     } else {
315         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMinLines(nativeNode);
316     }
317     return panda::JSValueRef::Undefined(vm);
318 }
319 
ResetMinLines(ArkUIRuntimeCallInfo * runtimeCallInfo)320 ArkUINativeModuleValue TextAreaBridge::ResetMinLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
321 {
322     EcmaVM *vm = runtimeCallInfo->GetVM();
323     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
324     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
325     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
326     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
327     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMinLines(nativeNode);
328     return panda::JSValueRef::Undefined(vm);
329 }
330 
SetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)331 ArkUINativeModuleValue TextAreaBridge::SetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo)
332 {
333     EcmaVM *vm = runtimeCallInfo->GetVM();
334     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
335     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
336     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
337     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
338     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
339     int32_t copyOptions = static_cast<int32_t>(OHOS::Ace::CopyOptions::None);
340     int32_t copyOptionsDistributed = static_cast<int32_t>(OHOS::Ace::CopyOptions::Distributed);
341     if (secondArg->IsNumber() && secondArg->Int32Value(vm) >= copyOptions &&
342         secondArg->Int32Value(vm) <= copyOptionsDistributed) {
343         copyOptions = secondArg->Int32Value(vm);
344         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaCopyOption(nativeNode, copyOptions);
345     } else {
346         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaCopyOption(nativeNode);
347     }
348     return panda::JSValueRef::Undefined(vm);
349 }
350 
ResetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)351 ArkUINativeModuleValue TextAreaBridge::ResetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo)
352 {
353     EcmaVM *vm = runtimeCallInfo->GetVM();
354     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
355     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
356     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
357     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
358     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaCopyOption(nativeNode);
359     return panda::JSValueRef::Undefined(vm);
360 }
361 
SetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)362 ArkUINativeModuleValue TextAreaBridge::SetPlaceholderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
363 {
364     EcmaVM *vm = runtimeCallInfo->GetVM();
365     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
366     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
367     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
368     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
369     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
370     Color color;
371     RefPtr<ResourceObject> resourceObject;
372     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
373     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
374         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaPlaceholderColor(nativeNode);
375     } else {
376         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaPlaceholderColor(
377             nativeNode, color.GetValue(), AceType::RawPtr(resourceObject));
378     }
379     return panda::JSValueRef::Undefined(vm);
380 }
381 
ResetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)382 ArkUINativeModuleValue TextAreaBridge::ResetPlaceholderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
383 {
384     EcmaVM *vm = runtimeCallInfo->GetVM();
385     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
386     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
387     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
388     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
389     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaPlaceholderColor(nativeNode);
390     return panda::JSValueRef::Undefined(vm);
391 }
392 
SetTextAreaTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)393 ArkUINativeModuleValue TextAreaBridge::SetTextAreaTextAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
394 {
395     EcmaVM *vm = runtimeCallInfo->GetVM();
396     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
397     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
398     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
399     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
400     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
401     if (secondArg->IsNumber()) {
402         int32_t value = secondArg->Int32Value(vm);
403         if (value >= 0 && value < static_cast<int32_t>(TEXT_ALIGNS.size())) {
404             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaTextAlign(nativeNode, value);
405         } else {
406             return panda::JSValueRef::Undefined(vm);
407         }
408     } else {
409         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaTextAlign(nativeNode);
410     }
411     return panda::JSValueRef::Undefined(vm);
412 }
413 
ResetTextAreaTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)414 ArkUINativeModuleValue TextAreaBridge::ResetTextAreaTextAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
415 {
416     EcmaVM *vm = runtimeCallInfo->GetVM();
417     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
418     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
419     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
420     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
421     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaTextAlign(nativeNode);
422     return panda::JSValueRef::Undefined(vm);
423 }
424 
SetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)425 ArkUINativeModuleValue TextAreaBridge::SetPlaceholderFont(ArkUIRuntimeCallInfo *runtimeCallInfo)
426 {
427     EcmaVM *vm = runtimeCallInfo->GetVM();
428     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
429     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
430     Local<JSValueRef> fontSizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
431     Local<JSValueRef> fontWeightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
432     Local<JSValueRef> fontFamilyArg = runtimeCallInfo->GetCallArgRef(NUM_3);
433     Local<JSValueRef> fontStyleArg = runtimeCallInfo->GetCallArgRef(NUM_4);
434     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
435     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
436     struct ArkUIResourceLength fontSize = { 0.0, -1, nullptr };
437     CalcDimension size;
438     RefPtr<ResourceObject> fontSizeObject;
439     std::string calcStr;
440     if (ArkTSUtils::ParseJsDimensionNG(vm, fontSizeArg, size, DimensionUnit::FP, fontSizeObject, false)) {
441         if (size.Unit() == DimensionUnit::CALC) {
442             fontSize.unit = static_cast<int32_t>(DimensionUnit::CALC);
443             calcStr = size.CalcValue();
444             fontSize.string = calcStr.c_str();
445         } else {
446             fontSize.value = size.Value();
447             fontSize.unit = static_cast<int32_t>(size.Unit());
448             fontSize.string = calcStr.c_str();
449         }
450     }
451     std::string fontWeight;
452     if (!fontWeightArg->IsNull()) {
453         if (fontWeightArg->IsNumber()) {
454             fontWeight = std::to_string(fontWeightArg->Int32Value(vm));
455         } else if (fontWeightArg->IsString(vm)) {
456             fontWeight = fontWeightArg->ToString(vm)->ToString(vm);
457         }
458     }
459     std::vector<std::string> fontFamilies;
460     RefPtr<ResourceObject> fontFamiliesObj;
461     std::string family;
462     if (ArkTSUtils::ParseJsFontFamilies(vm, fontFamilyArg, fontFamilies, fontFamiliesObj)) {
463         for (uint32_t i = 0; i < fontFamilies.size(); i++) {
464             family += fontFamilies.at(i);
465             family += ',';
466         }
467         family.pop_back();
468     }
469     int32_t style = -1;
470     if (fontStyleArg->IsNumber()) {
471         style = fontStyleArg->Int32Value(vm);
472         style = (style <= 0 || style > static_cast<int32_t>(FONT_STYLES.size())) ? -1 : style;
473     }
474     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaPlaceholderFont(nativeNode, &fontSize,
475         fontWeight.c_str(), family.c_str(), style, AceType::RawPtr(fontSizeObject), AceType::RawPtr(fontFamiliesObj));
476     return panda::JSValueRef::Undefined(vm);
477 }
478 
ResetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)479 ArkUINativeModuleValue TextAreaBridge::ResetPlaceholderFont(ArkUIRuntimeCallInfo *runtimeCallInfo)
480 {
481     EcmaVM *vm = runtimeCallInfo->GetVM();
482     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
483     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
484     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
485     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
486     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaPlaceholderFont(nativeNode);
487     return panda::JSValueRef::Undefined(vm);
488 }
489 
SetBarState(ArkUIRuntimeCallInfo * runtimeCallInfo)490 ArkUINativeModuleValue TextAreaBridge::SetBarState(ArkUIRuntimeCallInfo *runtimeCallInfo)
491 {
492     EcmaVM *vm = runtimeCallInfo->GetVM();
493     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
494     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
495     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
496     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
497     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
498     if (secondArg->IsNumber()) {
499         uint32_t barStateValue = secondArg->Uint32Value(vm);
500         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBarState(nativeNode, barStateValue);
501     } else {
502         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBarState(nativeNode);
503     }
504     return panda::JSValueRef::Undefined(vm);
505 }
506 
ResetBarState(ArkUIRuntimeCallInfo * runtimeCallInfo)507 ArkUINativeModuleValue TextAreaBridge::ResetBarState(ArkUIRuntimeCallInfo *runtimeCallInfo)
508 {
509     EcmaVM *vm = runtimeCallInfo->GetVM();
510     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
511     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
512     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
513     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
514     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBarState(nativeNode);
515     return panda::JSValueRef::Undefined(vm);
516 }
517 
SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)518 ArkUINativeModuleValue TextAreaBridge::SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
519 {
520     EcmaVM *vm = runtimeCallInfo->GetVM();
521     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
522     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
523     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
524     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
525     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
526     uint32_t keyboardOnFocusValue = KEY_BOARD_FOCUS_DEFAULT;
527     if (secondArg->IsBoolean()) {
528         keyboardOnFocusValue = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
529     }
530     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaEnableKeyboardOnFocus(nativeNode, keyboardOnFocusValue);
531     return panda::JSValueRef::Undefined(vm);
532 }
533 
ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)534 ArkUINativeModuleValue TextAreaBridge::ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
535 {
536     EcmaVM *vm = runtimeCallInfo->GetVM();
537     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
538     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
539     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
540     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
541     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnableKeyboardOnFocus(nativeNode);
542     return panda::JSValueRef::Undefined(vm);
543 }
544 
SetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)545 ArkUINativeModuleValue TextAreaBridge::SetFontFamily(ArkUIRuntimeCallInfo *runtimeCallInfo)
546 {
547     EcmaVM *vm = runtimeCallInfo->GetVM();
548     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
549     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
550     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
551     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
552     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
553     std::vector<std::string> fontFamilies;
554     RefPtr<ResourceObject> resourceObject;
555     if (!ArkTSUtils::ParseJsFontFamilies(vm, secondArg, fontFamilies, resourceObject)) {
556         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontFamily(nativeNode);
557         return panda::JSValueRef::Undefined(vm);
558     }
559     std::string families;
560     for (uint32_t i = 0; i < fontFamilies.size(); i++) {
561         families += fontFamilies.at(i);
562         families += ',';
563     }
564     families.pop_back();
565     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontFamily(
566         nativeNode, families.c_str(), AceType::RawPtr(resourceObject));
567     return panda::JSValueRef::Undefined(vm);
568 }
569 
ResetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)570 ArkUINativeModuleValue TextAreaBridge::ResetFontFamily(ArkUIRuntimeCallInfo *runtimeCallInfo)
571 {
572     EcmaVM *vm = runtimeCallInfo->GetVM();
573     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
574     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
575     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
576     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
577     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontFamily(nativeNode);
578     return panda::JSValueRef::Undefined(vm);
579 }
580 
SetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)581 ArkUINativeModuleValue TextAreaBridge::SetShowCounter(ArkUIRuntimeCallInfo *runtimeCallInfo)
582 {
583     EcmaVM *vm = runtimeCallInfo->GetVM();
584     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
585     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
586     Local<JSValueRef> showCounterArg = runtimeCallInfo->GetCallArgRef(NUM_1);
587     Local<JSValueRef> highlightBorderArg = runtimeCallInfo->GetCallArgRef(NUM_2);
588     Local<JSValueRef> thresholdArg = runtimeCallInfo->GetCallArgRef(NUM_3);
589     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
590     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
591     auto showCounter = false;
592     if (showCounterArg->IsBoolean()) {
593         showCounter = showCounterArg->BooleaValue(vm);
594     }
595     auto highlightBorder = true;
596     if (highlightBorderArg->IsBoolean()) {
597         highlightBorder = highlightBorderArg->BooleaValue(vm);
598     }
599     auto thresholdValue = static_cast<int32_t>(DEFAULT_MODE);
600     if (thresholdArg->IsNumber()) {
601         thresholdValue = thresholdArg->Int32Value(vm);
602         if (thresholdValue < MINI_VALID_VALUE || thresholdValue > MAX_VALID_VALUE) {
603             thresholdValue = static_cast<int32_t>(ILLEGAL_VALUE);
604             showCounter = false;
605         }
606     }
607     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaShowCounterOptions(
608         nativeNode, showCounter, thresholdValue, highlightBorder);
609     return panda::JSValueRef::Undefined(vm);
610 }
611 
ResetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)612 ArkUINativeModuleValue TextAreaBridge::ResetShowCounter(ArkUIRuntimeCallInfo *runtimeCallInfo)
613 {
614     EcmaVM *vm = runtimeCallInfo->GetVM();
615     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
616     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
617     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
618     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
619     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaShowCounter(nativeNode);
620     return panda::JSValueRef::Undefined(vm);
621 }
622 
SetCaretColor(ArkUIRuntimeCallInfo * runtimeCallInfo)623 ArkUINativeModuleValue TextAreaBridge::SetCaretColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
624 {
625     EcmaVM *vm = runtimeCallInfo->GetVM();
626     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
627     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
628     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
629     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
630     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
631     Color color;
632     RefPtr<ResourceObject> resourceObject;
633     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
634     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
635         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaCaretColor(nativeNode);
636     } else {
637         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaCaretColor(
638             nativeNode, color.GetValue(), AceType::RawPtr(resourceObject));
639     }
640     return panda::JSValueRef::Undefined(vm);
641 }
642 
ResetCaretColor(ArkUIRuntimeCallInfo * runtimeCallInfo)643 ArkUINativeModuleValue TextAreaBridge::ResetCaretColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
644 {
645     EcmaVM *vm = runtimeCallInfo->GetVM();
646     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
647     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
648     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
649     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
650     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaCaretColor(nativeNode);
651     return panda::JSValueRef::Undefined(vm);
652 }
653 
SetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)654 ArkUINativeModuleValue TextAreaBridge::SetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
655 {
656     EcmaVM *vm = runtimeCallInfo->GetVM();
657     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
658     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
659     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
660     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
661     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
662     if (!secondArg->IsNumber()) {
663         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMaxLength(nativeNode);
664     } else {
665         int32_t maxLength = secondArg->Int32Value(vm);
666         if (std::isinf(static_cast<float>(secondArg->ToNumber(vm)->Value()))) {
667             maxLength = INT32_MAX; // Infinity
668         }
669         if (maxLength >= 0) {
670             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMaxLength(nativeNode, maxLength);
671         } else {
672             GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMaxLength(nativeNode);
673         }
674     }
675     return panda::JSValueRef::Undefined(vm);
676 }
677 
ResetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)678 ArkUINativeModuleValue TextAreaBridge::ResetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
679 {
680     EcmaVM *vm = runtimeCallInfo->GetVM();
681     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
682     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
683     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
684     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
685     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMaxLength(nativeNode);
686     return panda::JSValueRef::Undefined(vm);
687 }
688 
SetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)689 ArkUINativeModuleValue TextAreaBridge::SetFontColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
690 {
691     EcmaVM *vm = runtimeCallInfo->GetVM();
692     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
693     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
694     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
695     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
696     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
697     Color color;
698     RefPtr<ResourceObject> resourceObject;
699     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
700     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
701         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontColor(nativeNode);
702     } else {
703         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontColor(
704             nativeNode, color.GetValue(), AceType::RawPtr(resourceObject));
705     }
706     return panda::JSValueRef::Undefined(vm);
707 }
708 
ResetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)709 ArkUINativeModuleValue TextAreaBridge::ResetFontColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
710 {
711     EcmaVM *vm = runtimeCallInfo->GetVM();
712     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
713     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
714     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
715     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
716     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontColor(nativeNode);
717     return panda::JSValueRef::Undefined(vm);
718 }
719 
SetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)720 ArkUINativeModuleValue TextAreaBridge::SetFontStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
721 {
722     EcmaVM *vm = runtimeCallInfo->GetVM();
723     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
724     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
725     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
726     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
727     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
728     if (secondArg->IsNumber()) {
729         int32_t fontStyle = secondArg->Int32Value(vm);
730         if (fontStyle >= 0 && fontStyle < static_cast<int32_t>(FONT_STYLES.size())) {
731             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontStyle(nativeNode,
732                 static_cast<uint32_t>(fontStyle));
733         } else {
734             return panda::JSValueRef::Undefined(vm);
735         }
736     } else {
737         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontStyle(nativeNode);
738     }
739     return panda::JSValueRef::Undefined(vm);
740 }
741 
ResetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)742 ArkUINativeModuleValue TextAreaBridge::ResetFontStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
743 {
744     EcmaVM *vm = runtimeCallInfo->GetVM();
745     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
746     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
747     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
748     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
749     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontStyle(nativeNode);
750     return panda::JSValueRef::Undefined(vm);
751 }
752 
SetFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)753 ArkUINativeModuleValue TextAreaBridge::SetFontWeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
754 {
755     EcmaVM *vm = runtimeCallInfo->GetVM();
756     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
757     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
758     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
759     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
760     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
761     std::string fontWeight = DEFAULT_FONT_WEIGHT;
762     RefPtr<ResourceObject> resourceObject;
763     if (!secondArg->IsNull()) {
764         if (secondArg->IsNumber()) {
765             fontWeight = std::to_string(secondArg->Int32Value(vm));
766         } else if ((secondArg->IsString(vm) || secondArg->IsObject(vm)) &&
767             (!(ArkTSUtils::ParseJsString(vm, secondArg, fontWeight, resourceObject)))) {
768             return panda::JSValueRef::Undefined(vm);
769         }
770     }
771     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontWeightStr(
772         nativeNode, fontWeight.c_str(), AceType::RawPtr(resourceObject));
773     return panda::JSValueRef::Undefined(vm);
774 }
775 
ResetFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)776 ArkUINativeModuleValue TextAreaBridge::ResetFontWeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
777 {
778     EcmaVM *vm = runtimeCallInfo->GetVM();
779     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
780     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
781     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
782     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
783     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontWeight(nativeNode);
784     return panda::JSValueRef::Undefined(vm);
785 }
786 
SetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)787 ArkUINativeModuleValue TextAreaBridge::SetFontSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
788 {
789     EcmaVM *vm = runtimeCallInfo->GetVM();
790     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
791     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
792     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
793     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
794     Local<JSValueRef> jsValue = runtimeCallInfo->GetCallArgRef(NUM_1);
795     struct ArkUIResourceLength fontSize = { 0.0, 0, nullptr };
796     CalcDimension size;
797     RefPtr<ResourceObject> resourceObject;
798     std::string calcStr;
799     if (jsValue->IsUndefined() ||
800         !ArkTSUtils::ParseJsDimensionNG(vm, jsValue, size, DimensionUnit::FP, resourceObject, false)) {
801         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontSize(nativeNode);
802     } else {
803         if (size.Unit() == DimensionUnit::CALC) {
804             fontSize.unit = static_cast<int32_t>(DimensionUnit::CALC);
805             calcStr = size.CalcValue();
806             fontSize.string = calcStr.c_str();
807             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontSize(
808                 nativeNode, &fontSize, AceType::RawPtr(resourceObject));
809         } else {
810             fontSize.value = size.Value();
811             fontSize.unit = static_cast<int32_t>(size.Unit());
812             fontSize.string = calcStr.c_str();
813             GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontSize(
814                 nativeNode, &fontSize, AceType::RawPtr(resourceObject));
815         }
816     }
817     return panda::JSValueRef::Undefined(vm);
818 }
819 
ResetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)820 ArkUINativeModuleValue TextAreaBridge::ResetFontSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
821 {
822     EcmaVM *vm = runtimeCallInfo->GetVM();
823     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
824     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
825     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
826     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
827     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontSize(nativeNode);
828     return panda::JSValueRef::Undefined(vm);
829 }
830 
SetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)831 ArkUINativeModuleValue TextAreaBridge::SetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
832 {
833     EcmaVM* vm = runtimeCallInfo->GetVM();
834     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
835     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
836     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
837     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
838     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
839     if (secondArg->IsString(vm)) {
840         auto value = secondArg->ToString(vm)->ToString(vm);
841         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaFontFeature(nativeNode, value.c_str());
842     } else {
843         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontFeature(nativeNode);
844     }
845     return panda::JSValueRef::Undefined(vm);
846 }
847 
ResetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)848 ArkUINativeModuleValue TextAreaBridge::ResetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
849 {
850     EcmaVM* vm = runtimeCallInfo->GetVM();
851     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
852     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
853     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
854     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
855     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaFontFeature(nativeNode);
856     return panda::JSValueRef::Undefined(vm);
857 }
858 
SetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)859 ArkUINativeModuleValue TextAreaBridge::SetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
860 {
861     EcmaVM* vm = runtimeCallInfo->GetVM();
862     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
863     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
864     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
865     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
866     Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
867     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
868     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
869     auto container = Container::Current();
870     CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
871     auto pipelineContext = container->GetPipelineContext();
872     CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
873     auto themeManager = pipelineContext->GetThemeManager();
874     CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
875     auto theme = themeManager->GetTheme<TextFieldTheme>();
876     CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
877     Color color = theme->GetTextStyle().GetTextDecorationColor();
878     int32_t textAreaDecoration = static_cast<int32_t>(theme->GetTextDecoration());
879     if (secondArg->IsInt()) {
880         textAreaDecoration = secondArg->Int32Value(vm);
881     }
882     RefPtr<ResourceObject> resourceObject;
883     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
884     ArkTSUtils::ParseJsColorAlpha(vm, thirdArg, color, Color::BLACK, resourceObject, nodeInfo);
885     int32_t textDecorationStyle = static_cast<int32_t>(DEFAULT_DECORATION_STYLE);
886     if (fourthArg->IsInt()) {
887         textDecorationStyle = fourthArg->Int32Value(vm);
888     }
889     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaDecoration(
890         nativeNode, textAreaDecoration, color.GetValue(), textDecorationStyle, AceType::RawPtr(resourceObject));
891     return panda::JSValueRef::Undefined(vm);
892 }
893 
ResetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)894 ArkUINativeModuleValue TextAreaBridge::ResetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
895 {
896     EcmaVM* vm = runtimeCallInfo->GetVM();
897     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
898     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
899     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
900     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
901     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaDecoration(nativeNode);
902     return panda::JSValueRef::Undefined(vm);
903 }
904 
SetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)905 ArkUINativeModuleValue TextAreaBridge::SetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
906 {
907     EcmaVM* vm = runtimeCallInfo->GetVM();
908     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
909     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
910     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
911     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
912     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
913     CalcDimension value;
914     RefPtr<ResourceObject> resourceObject;
915     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, false)) {
916         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLetterSpacing(nativeNode);
917     } else {
918         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaLetterSpacing(
919             nativeNode, value.Value(), static_cast<int>(value.Unit()), AceType::RawPtr(resourceObject));
920     }
921     return panda::JSValueRef::Undefined(vm);
922 }
923 
SetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)924 ArkUINativeModuleValue TextAreaBridge::SetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
925 {
926     EcmaVM* vm = runtimeCallInfo->GetVM();
927     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
928     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
929     CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
930     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
931     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
932     CalcDimension value;
933     RefPtr<ResourceObject> resourceObject;
934     auto pipelineContext = PipelineBase::GetCurrentContext();
935     CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
936     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
937     CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
938     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, false)) {
939         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaAdaptMinFontSize(nativeNode);
940     } else {
941         if (value.IsNegative()) {
942             value = theme->GetTextStyle().GetAdaptMinFontSize();
943         }
944         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaAdaptMinFontSize(
945             nativeNode, value.Value(), static_cast<int32_t>(value.Unit()), AceType::RawPtr(resourceObject));
946     }
947     return panda::JSValueRef::Undefined(vm);
948 }
949 
SetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)950 ArkUINativeModuleValue TextAreaBridge::SetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
951 {
952     EcmaVM* vm = runtimeCallInfo->GetVM();
953     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
954     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
955     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
956     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
957     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
958     double minFontScale;
959     RefPtr<ResourceObject> resourceObject;
960     if (!ArkTSUtils::ParseJsDouble(vm, secondArg, minFontScale, resourceObject)) {
961         return panda::JSValueRef::Undefined(vm);
962     }
963     if (LessOrEqual(minFontScale, 0.0f)) {
964         minFontScale = 0.0f;
965     } else if (GreatOrEqual(minFontScale, 1.0f)) {
966         minFontScale = 1.0f;
967     }
968     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMinFontScale(
969         nativeNode, static_cast<float>(minFontScale), AceType::RawPtr(resourceObject));
970     return panda::JSValueRef::Undefined(vm);
971 }
972 
ResetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)973 ArkUINativeModuleValue TextAreaBridge::ResetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
974 {
975     EcmaVM* vm = runtimeCallInfo->GetVM();
976     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
977     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
978     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
979     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
980     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMinFontScale(nativeNode);
981     return panda::JSValueRef::Undefined(vm);
982 }
983 
SetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)984 ArkUINativeModuleValue TextAreaBridge::SetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
985 {
986     EcmaVM* vm = runtimeCallInfo->GetVM();
987     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
988     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
989     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
990     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
991     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
992     double maxFontScale;
993     RefPtr<ResourceObject> resourceObject;
994     if (!ArkTSUtils::ParseJsDouble(vm, secondArg, maxFontScale, resourceObject)) {
995         return panda::JSValueRef::Undefined(vm);
996     }
997     if (LessOrEqual(maxFontScale, 1.0f)) {
998         maxFontScale = 1.0f;
999     }
1000     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMaxFontScale(
1001         nativeNode, static_cast<float>(maxFontScale), AceType::RawPtr(resourceObject));
1002     return panda::JSValueRef::Undefined(vm);
1003 }
1004 
ResetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)1005 ArkUINativeModuleValue TextAreaBridge::ResetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
1006 {
1007     EcmaVM* vm = runtimeCallInfo->GetVM();
1008     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1009     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1010     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1011     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1012     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMaxFontScale(nativeNode);
1013     return panda::JSValueRef::Undefined(vm);
1014 }
1015 
ResetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1016 ArkUINativeModuleValue TextAreaBridge::ResetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1017 {
1018     EcmaVM* vm = runtimeCallInfo->GetVM();
1019     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1020     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1021     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1022     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1023     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLetterSpacing(nativeNode);
1024     return panda::JSValueRef::Undefined(vm);
1025 }
1026 
SetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1027 ArkUINativeModuleValue TextAreaBridge::SetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
1028 {
1029     EcmaVM* vm = runtimeCallInfo->GetVM();
1030     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1031     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1032     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1033     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1034     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1035     CalcDimension value;
1036     RefPtr<ResourceObject> resourceObject;
1037     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, true)) {
1038         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLineHeight(nativeNode);
1039     } else {
1040         if (value.IsNegative()) {
1041             value.Reset();
1042         }
1043         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaLineHeight(
1044             nativeNode, value.Value(), static_cast<int>(value.Unit()), AceType::RawPtr(resourceObject));
1045     }
1046     return panda::JSValueRef::Undefined(vm);
1047 }
1048 
ResetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1049 ArkUINativeModuleValue TextAreaBridge::ResetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1050 {
1051     EcmaVM* vm = runtimeCallInfo->GetVM();
1052     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1053     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1054     CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1055     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1056     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaAdaptMinFontSize(nativeNode);
1057     return panda::JSValueRef::Undefined(vm);
1058 }
1059 
SetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1060 ArkUINativeModuleValue TextAreaBridge::SetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1061 {
1062     EcmaVM* vm = runtimeCallInfo->GetVM();
1063     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1064     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1065     CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1066     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1067     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1068     CalcDimension value;
1069     RefPtr<ResourceObject> resourceObject;
1070     auto pipelineContext = PipelineBase::GetCurrentContext();
1071     CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
1072     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1073     CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
1074     if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, resourceObject, false)) {
1075         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaAdaptMaxFontSize(nativeNode);
1076     } else {
1077         if (value.IsNegative()) {
1078             value = theme->GetTextStyle().GetAdaptMaxFontSize();
1079         }
1080         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaAdaptMaxFontSize(
1081             nativeNode, value.Value(), static_cast<int32_t>(value.Unit()), AceType::RawPtr(resourceObject));
1082     }
1083     return panda::JSValueRef::Undefined(vm);
1084 }
1085 
ResetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1086 ArkUINativeModuleValue TextAreaBridge::ResetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
1087 {
1088     EcmaVM* vm = runtimeCallInfo->GetVM();
1089     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1090     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1091     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1092     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1093     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLineHeight(nativeNode);
1094     return panda::JSValueRef::Undefined(vm);
1095 }
1096 
SetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1097 ArkUINativeModuleValue TextAreaBridge::SetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1098 {
1099     EcmaVM* vm = runtimeCallInfo->GetVM();
1100     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1101     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1102     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1103     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1104     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1105     if (secondArg->IsBoolean()) {
1106         uint32_t halfLeading = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1107         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaHalfLeading(nativeNode, halfLeading);
1108     } else {
1109         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaHalfLeading(nativeNode);
1110     }
1111     return panda::JSValueRef::Undefined(vm);
1112 }
1113 
ResetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1114 ArkUINativeModuleValue TextAreaBridge::ResetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1115 {
1116     EcmaVM* vm = runtimeCallInfo->GetVM();
1117     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1118     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1119     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1120     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1121     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaHalfLeading(nativeNode);
1122     return panda::JSValueRef::Undefined(vm);
1123 }
1124 
SetKeyboardAppearance(ArkUIRuntimeCallInfo * runtimeCallInfo)1125 ArkUINativeModuleValue TextAreaBridge::SetKeyboardAppearance(ArkUIRuntimeCallInfo* runtimeCallInfo)
1126 {
1127     EcmaVM* vm = runtimeCallInfo->GetVM();
1128     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1129     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1130     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1131     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1132     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1133     if (secondArg->IsNumber()) {
1134         uint32_t keyboardAppearance = secondArg->Uint32Value(vm);
1135         if (keyboardAppearance >= static_cast<uint32_t>(KeyboardAppearance::NONE_IMMERSIVE) &&
1136             keyboardAppearance <= static_cast<uint32_t>(KeyboardAppearance::DARK_IMMERSIVE)) {
1137             GetArkUINodeModifiers()->getTextAreaModifier()->
1138                 setTextAreaKeyboardAppearance(nativeNode, keyboardAppearance); // when input is valid
1139             return panda::JSValueRef::Undefined(vm);
1140         }
1141     }
1142     GetArkUINodeModifiers()->getTextAreaModifier()->
1143         setTextAreaKeyboardAppearance(nativeNode, static_cast<int32_t>(KeyboardAppearance::NONE_IMMERSIVE));
1144     return panda::JSValueRef::Undefined(vm);
1145 }
1146 
ResetKeyboardAppearance(ArkUIRuntimeCallInfo * runtimeCallInfo)1147 ArkUINativeModuleValue TextAreaBridge::ResetKeyboardAppearance(ArkUIRuntimeCallInfo* runtimeCallInfo)
1148 {
1149     EcmaVM* vm = runtimeCallInfo->GetVM();
1150     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1151     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1152     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1153     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1154     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaKeyboardAppearance(nativeNode);
1155     return panda::JSValueRef::Undefined(vm);
1156 }
1157 
SetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)1158 ArkUINativeModuleValue TextAreaBridge::SetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
1159 {
1160     EcmaVM* vm = runtimeCallInfo->GetVM();
1161     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1162     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1163     Local<JSValueRef> workBreakArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1164     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1165     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1166     if (workBreakArg->IsNull() || workBreakArg->IsUndefined() || !workBreakArg->IsNumber()) {
1167         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaWordBreak(nativeNode);
1168         return panda::JSValueRef::Undefined(vm);
1169     }
1170     uint32_t wordBreak = workBreakArg->Uint32Value(vm);
1171     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaWordBreak(nativeNode, wordBreak);
1172     return panda::JSValueRef::Undefined(vm);
1173 }
1174 
ResetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)1175 ArkUINativeModuleValue TextAreaBridge::ResetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
1176 {
1177     EcmaVM* vm = runtimeCallInfo->GetVM();
1178     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1179     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1180     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1181     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1182     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaWordBreak(nativeNode);
1183     return panda::JSValueRef::Undefined(vm);
1184 }
1185 
SetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)1186 ArkUINativeModuleValue TextAreaBridge::SetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1187 {
1188     EcmaVM* vm = runtimeCallInfo->GetVM();
1189     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1190     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1191     Local<JSValueRef> lineBreakStrategyArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1192     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1193     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1194     if (lineBreakStrategyArg->IsNull() || lineBreakStrategyArg->IsUndefined() || !lineBreakStrategyArg->IsNumber()) {
1195         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLineBreakStrategy(nativeNode);
1196         return panda::JSValueRef::Undefined(vm);
1197     }
1198     uint32_t lineBreakStrategy = lineBreakStrategyArg->Uint32Value(vm);
1199     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaLineBreakStrategy(nativeNode, lineBreakStrategy);
1200     return panda::JSValueRef::Undefined(vm);
1201 }
1202 
ResetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)1203 ArkUINativeModuleValue TextAreaBridge::ResetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1204 {
1205     EcmaVM* vm = runtimeCallInfo->GetVM();
1206     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1207     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1208     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1209     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1210     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLineBreakStrategy(nativeNode);
1211     return panda::JSValueRef::Undefined(vm);
1212 }
1213 
ResetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1214 ArkUINativeModuleValue TextAreaBridge::ResetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1215 {
1216     EcmaVM* vm = runtimeCallInfo->GetVM();
1217     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1218     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1219     CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1220     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1221     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaAdaptMaxFontSize(nativeNode);
1222     return panda::JSValueRef::Undefined(vm);
1223 }
1224 
SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)1225 ArkUINativeModuleValue TextAreaBridge::SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1226 {
1227     EcmaVM* vm = runtimeCallInfo->GetVM();
1228     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1229     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1230     CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1231     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1232     Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1233     int32_t value = valueArg->ToNumber(vm)->Value();
1234     if (value < 0 || value >= static_cast<int32_t>(HEIGHT_ADAPTIVE_POLICY.size())) {
1235         value = 0;
1236     }
1237     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaHeightAdaptivePolicy(nativeNode, value);
1238     return panda::JSValueRef::Undefined(vm);
1239 }
1240 
ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)1241 ArkUINativeModuleValue TextAreaBridge::ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1242 {
1243     EcmaVM* vm = runtimeCallInfo->GetVM();
1244     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1245     Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1246     CHECK_NULL_RETURN(nodeArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1247     auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1248     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaHeightAdaptivePolicy(nativeNode);
1249     return panda::JSValueRef::Undefined(vm);
1250 }
SetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1251 ArkUINativeModuleValue TextAreaBridge::SetSelectedBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1252 {
1253     EcmaVM* vm = runtimeCallInfo->GetVM();
1254     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1255     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1256     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1257     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1258     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1259     Color color;
1260     RefPtr<ResourceObject> resourceObject;
1261     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
1262     if (ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
1263         if (color.GetAlpha() == DEFAULT_ALPHA) {
1264             color = color.ChangeOpacity(DEFAULT_OPACITY);
1265         }
1266         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaSelectedBackgroundColor(
1267             nativeNode, color.GetValue(), AceType::RawPtr(resourceObject));
1268     } else {
1269         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaSelectedBackgroundColor(nativeNode);
1270     }
1271     return panda::JSValueRef::Undefined(vm);
1272 }
1273 
ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1274 ArkUINativeModuleValue TextAreaBridge::ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1275 {
1276     EcmaVM* vm = runtimeCallInfo->GetVM();
1277     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1278     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1279     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1280     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1281     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaSelectedBackgroundColor(nativeNode);
1282     return panda::JSValueRef::Undefined(vm);
1283 }
1284 
SetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)1285 ArkUINativeModuleValue TextAreaBridge::SetCaretStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
1286 {
1287     EcmaVM *vm = runtimeCallInfo->GetVM();
1288     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1289     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1290     Local<JSValueRef> caretWidthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1291     Local<JSValueRef> caretColorArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1292     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1293     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1294 
1295     auto textFieldTheme = ArkTSUtils::GetTheme<TextFieldTheme>();
1296     CHECK_NULL_RETURN(textFieldTheme, panda::JSValueRef::Undefined(vm));
1297     CalcDimension caretWidth = textFieldTheme->GetCursorWidth();
1298     RefPtr<ResourceObject> widthObject;
1299     if (!ArkTSUtils::ParseJsDimensionVpNG(vm, caretWidthArg, caretWidth, widthObject, false) ||
1300             LessNotEqual(caretWidth.Value(), 0.0)) {
1301         caretWidth = textFieldTheme->GetCursorWidth();
1302     }
1303     Color color;
1304     uint32_t caretColor = textFieldTheme->GetCursorColor().GetValue();
1305     RefPtr<ResourceObject> colorObject;
1306     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
1307     if (!caretColorArg->IsUndefined()) {
1308         if (ArkTSUtils::ParseJsColorAlpha(vm, caretColorArg, color, colorObject, nodeInfo)) {
1309             caretColor = color.GetValue();
1310         }
1311     }
1312     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaCaretStyle(
1313         nativeNode, caretWidth.Value(), static_cast<int8_t>(caretWidth.Unit()),
1314         caretColor, AceType::RawPtr(widthObject), AceType::RawPtr(colorObject));
1315     return panda::JSValueRef::Undefined(vm);
1316 }
1317 
ResetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)1318 ArkUINativeModuleValue TextAreaBridge::ResetCaretStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
1319 {
1320     EcmaVM *vm = runtimeCallInfo->GetVM();
1321     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1322     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1323     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1324     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1325     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaCaretStyle(nativeNode);
1326     return panda::JSValueRef::Undefined(vm);
1327 }
1328 
SetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)1329 ArkUINativeModuleValue TextAreaBridge::SetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
1330 {
1331     EcmaVM* vm = runtimeCallInfo->GetVM();
1332     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1333     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1334     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1335     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1336     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1337     int32_t value;
1338     if (secondArg->IsUndefined()) {
1339         value = DEFAULT_OVERFLOW;
1340     } else if (secondArg->IsNumber()) {
1341         value = secondArg->Int32Value(vm);
1342     } else {
1343         value = DEFAULT_OVERFLOW;
1344     }
1345     if (value < 0 || value >= static_cast<int32_t>(TEXT_OVERFLOWS.size())) {
1346         value = DEFAULT_OVERFLOW;
1347     }
1348     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaTextOverflow(nativeNode, value);
1349     return panda::JSValueRef::Undefined(vm);
1350 }
1351 
ResetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)1352 ArkUINativeModuleValue TextAreaBridge::ResetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
1353 {
1354     EcmaVM* vm = runtimeCallInfo->GetVM();
1355     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1356     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1357     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1358     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1359     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaTextOverflow(nativeNode);
1360     return panda::JSValueRef::Undefined(vm);
1361 }
1362 
SetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1363 ArkUINativeModuleValue TextAreaBridge::SetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1364 {
1365     EcmaVM* vm = runtimeCallInfo->GetVM();
1366     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1367     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1368     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1369     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1370     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1371     CalcDimension indent;
1372     RefPtr<ResourceObject> resourceObject;
1373     if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, indent, DimensionUnit::VP, resourceObject, true)) {
1374         indent.Reset();
1375     }
1376 
1377     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaTextIndent(
1378         nativeNode, indent.Value(), static_cast<int8_t>(indent.Unit()), AceType::RawPtr(resourceObject));
1379     return panda::JSValueRef::Undefined(vm);
1380 }
1381 
ResetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1382 ArkUINativeModuleValue TextAreaBridge::ResetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1383 {
1384     EcmaVM* vm = runtimeCallInfo->GetVM();
1385     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1386     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1387     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1388     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1389     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaTextIndent(nativeNode);
1390     return panda::JSValueRef::Undefined(vm);
1391 }
1392 
SetLineSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1393 ArkUINativeModuleValue TextAreaBridge::SetLineSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1394 {
1395     EcmaVM* vm = runtimeCallInfo->GetVM();
1396     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1397     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1398     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1399     Local<JSValueRef> optionsArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1400     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1401     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1402     CalcDimension value;
1403     if (!ArkTSUtils::ParseJsLengthMetrics(vm, secondArg, value)) {
1404         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLineSpacing(nativeNode);
1405     } else {
1406         if (value.IsNegative()) {
1407             value.Reset();
1408         }
1409         bool isOnlyBetweenLines = optionsArg->IsBoolean() ? optionsArg->ToBoolean(vm)->Value() : false;
1410         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaLineSpacing(
1411             nativeNode, value.Value(), static_cast<int>(value.Unit()), isOnlyBetweenLines);
1412     }
1413     return panda::JSValueRef::Undefined(vm);
1414 }
1415 
ResetLineSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1416 ArkUINativeModuleValue TextAreaBridge::ResetLineSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1417 {
1418     EcmaVM* vm = runtimeCallInfo->GetVM();
1419     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1420     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1421     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1422     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1423     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaLineSpacing(nativeNode);
1424     return panda::JSValueRef::Undefined(vm);
1425 }
1426 
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1427 ArkUINativeModuleValue TextAreaBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1428 {
1429     EcmaVM *vm = runtimeCallInfo->GetVM();
1430     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1431     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1432     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1433     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1434     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1435     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1436     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1437     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1438         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnChange(nativeNode);
1439         return panda::JSValueRef::Undefined(vm);
1440     }
1441     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1442     std::function<void(const ChangeValueInfo&)> callback = [vm, frameNode,
1443         func = panda::CopyableGlobal(vm, func)](const ChangeValueInfo& changeValueInfo) {
1444         panda::LocalScope pandaScope(vm);
1445         panda::TryCatch trycatch(vm);
1446         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1447         auto eventObject = CommonBridge::CreateChangeValueInfoObj(vm, changeValueInfo);
1448         auto contentObj = eventObject->Get(vm, "content");
1449         auto previewTextObj = eventObject->Get(vm, "previewText");
1450         auto optionsObj = eventObject->Get(vm, "options");
1451         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_3] = { contentObj, previewTextObj, optionsObj };
1452         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_3);
1453     };
1454     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnChange(
1455         nativeNode, reinterpret_cast<void*>(&callback));
1456     return panda::JSValueRef::Undefined(vm);
1457 }
1458 
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1459 ArkUINativeModuleValue TextAreaBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1460 {
1461     EcmaVM* vm = runtimeCallInfo->GetVM();
1462     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1463     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1464     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1465     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1466     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnChange(nativeNode);
1467     return panda::JSValueRef::Undefined(vm);
1468 }
1469 
SetEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)1470 ArkUINativeModuleValue TextAreaBridge::SetEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
1471 {
1472     EcmaVM *vm = runtimeCallInfo->GetVM();
1473     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1474     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1475     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1476     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1477     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1478 
1479     if (secondArg->IsNumber()) {
1480         int32_t value = secondArg->Int32Value(vm);
1481         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaEnterKeyType(nativeNode, value);
1482     } else {
1483         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnterKeyType(nativeNode);
1484     }
1485     return panda::JSValueRef::Undefined(vm);
1486 }
1487 
SetTextAreaAutoCapitalizationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)1488 ArkUINativeModuleValue TextAreaBridge::SetTextAreaAutoCapitalizationMode(ArkUIRuntimeCallInfo *runtimeCallInfo)
1489 {
1490     EcmaVM *vm = runtimeCallInfo->GetVM();
1491     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1492     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1493 
1494     if (firstArg->IsUndefined() || firstArg->IsNull()) {
1495         return panda::JSValueRef::Undefined(vm);
1496     }
1497 
1498     if (!(firstArg->IsNativePointer(vm))) {
1499         return panda::JSValueRef::Undefined(vm);
1500     }
1501 
1502     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1503     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1504 
1505     if (!(secondArg->IsUndefined()) && !(secondArg->IsNull()) && secondArg->IsNumber()) {
1506         int32_t value = secondArg->Int32Value(vm);
1507         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaAutoCapitalizationMode(nativeNode, value);
1508     } else {
1509         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaAutoCapitalizationMode(nativeNode);
1510     }
1511     return panda::JSValueRef::Undefined(vm);
1512 }
1513 
ResetEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)1514 ArkUINativeModuleValue TextAreaBridge::ResetEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
1515 {
1516     EcmaVM *vm = runtimeCallInfo->GetVM();
1517     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1518     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1519     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1520     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1521     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnterKeyType(nativeNode);
1522     return panda::JSValueRef::Undefined(vm);
1523 }
1524 
ResetTextAreaAutoCapitalizationMode(ArkUIRuntimeCallInfo * runtimeCallInfo)1525 ArkUINativeModuleValue TextAreaBridge::ResetTextAreaAutoCapitalizationMode(ArkUIRuntimeCallInfo *runtimeCallInfo)
1526 {
1527     EcmaVM *vm = runtimeCallInfo->GetVM();
1528     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1529     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1530 
1531     if (firstArg->IsUndefined() || firstArg->IsNull()) {
1532         return panda::JSValueRef::Undefined(vm);
1533     }
1534 
1535     if (!(firstArg->IsNativePointer(vm))) {
1536         return panda::JSValueRef::Undefined(vm);
1537     }
1538 
1539     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1540     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaAutoCapitalizationMode(nativeNode);
1541     return panda::JSValueRef::Undefined(vm);
1542 }
1543 
SetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1544 ArkUINativeModuleValue TextAreaBridge::SetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1545 {
1546     EcmaVM *vm = runtimeCallInfo->GetVM();
1547     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1548     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1549     Local<JSValueRef> inputFilterArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1550     Local<JSValueRef> errorCallbackArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1551     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1552     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1553     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1554     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1555     if (inputFilterArg->IsUndefined() || inputFilterArg->IsNull() || !inputFilterArg->IsString(vm)) {
1556         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaInputFilter(nativeNode);
1557         return panda::JSValueRef::Undefined(vm);
1558     }
1559     std::string inputFilter = inputFilterArg->ToString(vm)->ToString(vm);
1560     if (errorCallbackArg->IsUndefined() || errorCallbackArg->IsNull() ||
1561         !errorCallbackArg->IsFunction(vm)) {
1562         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaInputFilter(
1563             nativeNode, inputFilter.c_str(), nullptr);
1564     } else {
1565         panda::Local<panda::FunctionRef> func = errorCallbackArg->ToObject(vm);
1566         std::function<void(const std::u16string&)> callback = [vm, frameNode,
1567             func = panda::CopyableGlobal(vm, func)](const std::u16string& info) {
1568             panda::LocalScope pandaScope(vm);
1569             panda::TryCatch trycatch(vm);
1570             PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1571             panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1572                 panda::StringRef::NewFromUtf16(vm, info.c_str()) };
1573             func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1574         };
1575         GetArkUINodeModifiers()->getTextAreaModifier()->
1576             setTextAreaInputFilter(nativeNode, inputFilter.c_str(), reinterpret_cast<void*>(&callback));
1577     }
1578     return panda::JSValueRef::Undefined(vm);
1579 }
1580 
ResetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1581 ArkUINativeModuleValue TextAreaBridge::ResetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1582 {
1583     EcmaVM* vm = runtimeCallInfo->GetVM();
1584     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1585     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1586     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1587     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1588     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaInputFilter(nativeNode);
1589     return panda::JSValueRef::Undefined(vm);
1590 }
1591 
SetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1592 ArkUINativeModuleValue TextAreaBridge::SetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1593 {
1594     EcmaVM *vm = runtimeCallInfo->GetVM();
1595     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1596     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1597     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1598     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1599     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1600     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1601     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1602     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1603         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnTextSelectionChange(nativeNode);
1604         return panda::JSValueRef::Undefined(vm);
1605     }
1606     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1607     std::function<void(int32_t, int32_t)> callback = [vm, frameNode,
1608         func = panda::CopyableGlobal(vm, func)](int32_t selectionStart, int selectionEnd) {
1609         panda::LocalScope pandaScope(vm);
1610         panda::TryCatch trycatch(vm);
1611         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1612         panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, selectionStart);
1613         panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, selectionEnd);
1614         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { startParam, endParam };
1615         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1616     };
1617     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnTextSelectionChange(
1618         nativeNode, reinterpret_cast<void*>(&callback));
1619     return panda::JSValueRef::Undefined(vm);
1620 }
1621 
ResetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1622 ArkUINativeModuleValue TextAreaBridge::ResetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1623 {
1624     EcmaVM* vm = runtimeCallInfo->GetVM();
1625     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1626     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1627     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1628     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1629     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnTextSelectionChange(nativeNode);
1630     return panda::JSValueRef::Undefined(vm);
1631 }
1632 
SetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1633 ArkUINativeModuleValue TextAreaBridge::SetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1634 {
1635     EcmaVM *vm = runtimeCallInfo->GetVM();
1636     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1637     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1638     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1639     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1640     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1641     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1642     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1643     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1644         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnContentScroll(nativeNode);
1645         return panda::JSValueRef::Undefined(vm);
1646     }
1647     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1648     std::function<void(float, float)> callback = [vm, frameNode,
1649         func = panda::CopyableGlobal(vm, func)](float totalOffsetX, float totalOffsetY) {
1650         panda::LocalScope pandaScope(vm);
1651         panda::TryCatch trycatch(vm);
1652         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1653         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1654             panda::NumberRef::New(vm, totalOffsetX), panda::NumberRef::New(vm, totalOffsetY) };
1655         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1656     };
1657     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnContentScroll(
1658         nativeNode, reinterpret_cast<void*>(&callback));
1659     return panda::JSValueRef::Undefined(vm);
1660 }
1661 
ResetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1662 ArkUINativeModuleValue TextAreaBridge::ResetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1663 {
1664     EcmaVM* vm = runtimeCallInfo->GetVM();
1665     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1666     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1667     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1668     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1669     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnContentScroll(nativeNode);
1670     return panda::JSValueRef::Undefined(vm);
1671 }
1672 
SetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1673 ArkUINativeModuleValue TextAreaBridge::SetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1674 {
1675     EcmaVM *vm = runtimeCallInfo->GetVM();
1676     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1677     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1678     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1679     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1680     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1681     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1682     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1683     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1684         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnEditChange(nativeNode);
1685         return panda::JSValueRef::Undefined(vm);
1686     }
1687     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1688     std::function<void(bool)> callback = [vm, frameNode,
1689         func = panda::CopyableGlobal(vm, func)](bool isInEditStatus) {
1690         panda::LocalScope pandaScope(vm);
1691         panda::TryCatch trycatch(vm);
1692         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1693         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1694             panda::BooleanRef::New(vm, isInEditStatus) };
1695         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1696     };
1697     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnEditChange(
1698         nativeNode, reinterpret_cast<void*>(&callback));
1699     return panda::JSValueRef::Undefined(vm);
1700 }
1701 
ResetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1702 ArkUINativeModuleValue TextAreaBridge::ResetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1703 {
1704     EcmaVM* vm = runtimeCallInfo->GetVM();
1705     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1706     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1707     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1708     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1709     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnEditChange(nativeNode);
1710     return panda::JSValueRef::Undefined(vm);
1711 }
1712 
SetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1713 ArkUINativeModuleValue TextAreaBridge::SetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1714 {
1715     EcmaVM *vm = runtimeCallInfo->GetVM();
1716     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1717     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1718     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1719     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1720     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1721     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1722     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1723     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1724         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnCopy(nativeNode);
1725         return panda::JSValueRef::Undefined(vm);
1726     }
1727     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1728     std::function<void(const std::u16string&)> callback = [vm, frameNode,
1729         func = panda::CopyableGlobal(vm, func)](const std::u16string& copyStr) {
1730         panda::LocalScope pandaScope(vm);
1731         panda::TryCatch trycatch(vm);
1732         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1733         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1734             panda::StringRef::NewFromUtf16(vm, copyStr.c_str()) };
1735         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1736     };
1737     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnCopy(nativeNode, reinterpret_cast<void*>(&callback));
1738     return panda::JSValueRef::Undefined(vm);
1739 }
1740 
ResetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1741 ArkUINativeModuleValue TextAreaBridge::ResetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1742 {
1743     EcmaVM* vm = runtimeCallInfo->GetVM();
1744     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1745     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1746     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1747     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1748     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnCopy(nativeNode);
1749     return panda::JSValueRef::Undefined(vm);
1750 }
1751 
SetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1752 ArkUINativeModuleValue TextAreaBridge::SetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1753 {
1754     EcmaVM *vm = runtimeCallInfo->GetVM();
1755     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1756     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1757     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1758     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1759     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1760     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1761     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1762     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1763         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnCut(nativeNode);
1764         return panda::JSValueRef::Undefined(vm);
1765     }
1766     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1767     std::function<void(const std::u16string&)> callback = [vm, frameNode,
1768         func = panda::CopyableGlobal(vm, func)](const std::u16string& cutStr) {
1769         panda::LocalScope pandaScope(vm);
1770         panda::TryCatch trycatch(vm);
1771         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1772         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1773             panda::StringRef::NewFromUtf16(vm, cutStr.c_str()) };
1774         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1775     };
1776     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnCut(nativeNode, reinterpret_cast<void*>(&callback));
1777     return panda::JSValueRef::Undefined(vm);
1778 }
1779 
ResetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1780 ArkUINativeModuleValue TextAreaBridge::ResetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1781 {
1782     EcmaVM* vm = runtimeCallInfo->GetVM();
1783     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1784     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1785     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1786     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1787     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnCut(nativeNode);
1788     return panda::JSValueRef::Undefined(vm);
1789 }
1790 
SetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1791 ArkUINativeModuleValue TextAreaBridge::SetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
1792 {
1793     EcmaVM *vm = runtimeCallInfo->GetVM();
1794     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1795     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1796     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1797     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1798     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1799     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1800     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1801     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1802         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnPaste(nativeNode);
1803         return panda::JSValueRef::Undefined(vm);
1804     }
1805     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1806     std::function<void(const std::u16string&, NG::TextCommonEvent&)> callback = [vm, frameNode,
1807         func = panda::CopyableGlobal(vm, func)](const std::u16string& val, NG::TextCommonEvent& info) {
1808         panda::LocalScope pandaScope(vm);
1809         panda::TryCatch trycatch(vm);
1810         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1811         auto eventObject = panda::ObjectRef::New(vm);
1812         eventObject->SetNativePointerFieldCount(vm, 1);
1813         eventObject->Set(vm, panda::StringRef::NewFromUtf8(vm, "preventDefault"),
1814             panda::FunctionRef::New(vm, Framework::JsPreventDefault));
1815         eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&info));
1816         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1817             panda::StringRef::NewFromUtf16(vm, val.c_str()), eventObject };
1818         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1819     };
1820     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnPaste(
1821         nativeNode, reinterpret_cast<void*>(&callback));
1822     return panda::JSValueRef::Undefined(vm);
1823 }
1824 
ResetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1825 ArkUINativeModuleValue TextAreaBridge::ResetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
1826 {
1827     EcmaVM* vm = runtimeCallInfo->GetVM();
1828     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1829     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1830     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1831     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1832     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnPaste(nativeNode);
1833     return panda::JSValueRef::Undefined(vm);
1834 }
1835 
SetType(ArkUIRuntimeCallInfo * runtimeCallInfo)1836 ArkUINativeModuleValue TextAreaBridge::SetType(ArkUIRuntimeCallInfo* runtimeCallInfo)
1837 {
1838     EcmaVM *vm = runtimeCallInfo->GetVM();
1839     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1840     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1841     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1842     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1843     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1844     if (secondArg->IsNumber()) {
1845         int32_t value = secondArg->Int32Value(vm);
1846         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaType(nativeNode, value);
1847     } else {
1848         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaType(nativeNode);
1849     }
1850     return panda::JSValueRef::Undefined(vm);
1851 }
1852 
ResetType(ArkUIRuntimeCallInfo * runtimeCallInfo)1853 ArkUINativeModuleValue TextAreaBridge::ResetType(ArkUIRuntimeCallInfo* runtimeCallInfo)
1854 {
1855     EcmaVM* vm = runtimeCallInfo->GetVM();
1856     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1857     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1858     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1859     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1860     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaType(nativeNode);
1861     return panda::JSValueRef::Undefined(vm);
1862 }
1863 
SetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)1864 ArkUINativeModuleValue TextAreaBridge::SetPadding(ArkUIRuntimeCallInfo *runtimeCallInfo)
1865 {
1866     EcmaVM *vm = runtimeCallInfo->GetVM();
1867     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1868     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1869     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1870     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1871     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1872     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1873     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1874     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(NUM_4);
1875 
1876     struct ArkUISizeType top = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
1877     struct ArkUISizeType right = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
1878     struct ArkUISizeType bottom = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
1879     struct ArkUISizeType left = { 0.0, static_cast<int8_t>(DimensionUnit::VP), nullptr };
1880 
1881     CalcDimension topDimen(0, DimensionUnit::VP);
1882     CalcDimension rightDimen(0, DimensionUnit::VP);
1883     CalcDimension bottomDimen(0, DimensionUnit::VP);
1884     CalcDimension leftDimen(0, DimensionUnit::VP);
1885     ArkUIPaddingRes paddingRes;
1886     bool isLengthMetrics = false;
1887     if (secondArg->IsObject(vm)) {
1888         isLengthMetrics |= ParseLocalizedPadding(vm, secondArg, topDimen, top);
1889     }
1890     if (thirdArg->IsObject(vm)) {
1891         isLengthMetrics |= ParseLocalizedPadding(vm, thirdArg, rightDimen, right);
1892     }
1893     if (forthArg->IsObject(vm)) {
1894         isLengthMetrics |= ParseLocalizedPadding(vm, forthArg, bottomDimen, bottom);
1895     }
1896     if (fifthArg->IsObject(vm)) {
1897         isLengthMetrics |= ParseLocalizedPadding(vm, fifthArg, leftDimen, left);
1898     }
1899 
1900     if (isLengthMetrics) {
1901         auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
1902         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaPadding(nativeNode,
1903             &top,
1904             isRightToLeft ? &left : &right,
1905             &bottom,
1906             isRightToLeft ? &right : &left,
1907             &paddingRes);
1908         return panda::JSValueRef::Undefined(vm);
1909     }
1910 
1911     RefPtr<ResourceObject> topResObject;
1912     RefPtr<ResourceObject> rightResObject;
1913     RefPtr<ResourceObject> bottomResObject;
1914     RefPtr<ResourceObject> leftResObject;
1915     ArkTSUtils::ParsePadding(vm, secondArg, topDimen, top, topResObject);
1916     ArkTSUtils::ParsePadding(vm, thirdArg, rightDimen, right, rightResObject);
1917     ArkTSUtils::ParsePadding(vm, forthArg, bottomDimen, bottom, bottomResObject);
1918     ArkTSUtils::ParsePadding(vm, fifthArg, leftDimen, left, leftResObject);
1919     paddingRes.topObj = AceType::RawPtr(topResObject);
1920     paddingRes.rightObj = AceType::RawPtr(rightResObject);
1921     paddingRes.bottomObj = AceType::RawPtr(bottomResObject);
1922     paddingRes.leftObj = AceType::RawPtr(leftResObject);
1923     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaPadding(
1924         nativeNode, &top, &right, &bottom, &left, &paddingRes);
1925     return panda::JSValueRef::Undefined(vm);
1926 }
1927 
ResetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)1928 ArkUINativeModuleValue TextAreaBridge::ResetPadding(ArkUIRuntimeCallInfo* runtimeCallInfo)
1929 {
1930     EcmaVM *vm = runtimeCallInfo->GetVM();
1931     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1932     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1933     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1934     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1935     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaPadding(nativeNode);
1936     return panda::JSValueRef::Undefined(vm);
1937 }
1938 
SetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1939 ArkUINativeModuleValue TextAreaBridge::SetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1940 {
1941     EcmaVM *vm = runtimeCallInfo->GetVM();
1942     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1943     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1944     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1945     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1946     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1947     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1948     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
1949     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1950         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnSubmitWithEvent(nativeNode);
1951         return panda::JSValueRef::Undefined(vm);
1952     }
1953     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1954     std::function<void(int32_t, NG::TextFieldCommonEvent&)> callback = [vm, frameNode,
1955         func = panda::CopyableGlobal(vm, func)](int32_t key, NG::TextFieldCommonEvent& event) {
1956         panda::LocalScope pandaScope(vm);
1957         panda::TryCatch trycatch(vm);
1958         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1959         const char* keys[] = { "text", "keepEditableState" };
1960         Local<JSValueRef> values[] = { panda::StringRef::NewFromUtf16(vm, event.GetText().c_str()),
1961             panda::FunctionRef::New(vm, Framework::JSTextField::JsKeepEditableState) };
1962         auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1963         eventObject->SetNativePointerFieldCount(vm, 1);
1964         eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&event));
1965         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1966             panda::IntegerRef::New(vm, key), eventObject };
1967         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1968     };
1969     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnSubmitWithEvent(
1970         nativeNode, reinterpret_cast<void*>(&callback));
1971     return panda::JSValueRef::Undefined(vm);
1972 }
1973 
ResetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1974 ArkUINativeModuleValue TextAreaBridge::ResetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1975 {
1976     EcmaVM* vm = runtimeCallInfo->GetVM();
1977     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1978     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1979     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1980     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1981     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnSubmitWithEvent(nativeNode);
1982     return panda::JSValueRef::Undefined(vm);
1983 }
1984 
SetContentType(ArkUIRuntimeCallInfo * runtimeCallInfo)1985 ArkUINativeModuleValue TextAreaBridge::SetContentType(ArkUIRuntimeCallInfo *runtimeCallInfo)
1986 {
1987     EcmaVM *vm = runtimeCallInfo->GetVM();
1988     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
1989     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1990     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1991     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
1992     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1993 
1994     if (secondArg->IsNumber()) {
1995         uint32_t value = static_cast<uint32_t>(secondArg->Int32Value(vm));
1996         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaContentType(nativeNode, value);
1997     } else {
1998         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaContentType(nativeNode);
1999     }
2000     return panda::JSValueRef::Undefined(vm);
2001 }
2002 
ResetContentType(ArkUIRuntimeCallInfo * runtimeCallInfo)2003 ArkUINativeModuleValue TextAreaBridge::ResetContentType(ArkUIRuntimeCallInfo *runtimeCallInfo)
2004 {
2005     EcmaVM *vm = runtimeCallInfo->GetVM();
2006     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2007     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2008     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2009     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2010     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaContentType(nativeNode);
2011     return panda::JSValueRef::Undefined(vm);
2012 }
2013 
SetEnableAutoFill(ArkUIRuntimeCallInfo * runtimeCallInfo)2014 ArkUINativeModuleValue TextAreaBridge::SetEnableAutoFill(ArkUIRuntimeCallInfo *runtimeCallInfo)
2015 {
2016     EcmaVM *vm = runtimeCallInfo->GetVM();
2017     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2018     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2019     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2020     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2021     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2022 
2023     if (secondArg->IsBoolean()) {
2024         uint32_t enableAutoFill = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2025         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaEnableAutoFill(nativeNode, enableAutoFill);
2026     } else {
2027         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnableAutoFill(nativeNode);
2028     }
2029 
2030     return panda::JSValueRef::Undefined(vm);
2031 }
2032 
ResetEnableAutoFill(ArkUIRuntimeCallInfo * runtimeCallInfo)2033 ArkUINativeModuleValue TextAreaBridge::ResetEnableAutoFill(ArkUIRuntimeCallInfo *runtimeCallInfo)
2034 {
2035     EcmaVM *vm = runtimeCallInfo->GetVM();
2036     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2037     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2038     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2039     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2040     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnableAutoFill(nativeNode);
2041     return panda::JSValueRef::Undefined(vm);
2042 }
2043 
SetBorder(ArkUIRuntimeCallInfo * runtimeCallInfo)2044 ArkUINativeModuleValue TextAreaBridge::SetBorder(ArkUIRuntimeCallInfo* runtimeCallInfo)
2045 {
2046     EcmaVM *vm = runtimeCallInfo->GetVM();
2047     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2048     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2049     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2050     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2051 
2052     std::vector<ArkUI_Float32> options;
2053     // Border Width args start index from 1
2054     ArkTSUtils::ParseOuterBorderWidth(runtimeCallInfo, vm, options);
2055     // Border Radius args start index
2056     ArkTSUtils::ParseOuterBorderRadius(runtimeCallInfo, vm, options, NUM_9);
2057 
2058     std::vector<uint32_t> colorAndStyleOptions;
2059     // Border Color args start index
2060     ArkTSUtils::ParseOuterBorderColor(runtimeCallInfo, vm, colorAndStyleOptions, NUM_5);
2061     // Border Style args start index
2062     ArkTSUtils::ParseOuterBorderStyle(runtimeCallInfo, vm, colorAndStyleOptions, NUM_13);
2063 
2064     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorder(
2065         nativeNode, options.data(), options.size(), colorAndStyleOptions.data(), colorAndStyleOptions.size());
2066 
2067     SetBorderDash(runtimeCallInfo, vm, nativeNode);
2068     return panda::JSValueRef::Undefined(vm);
2069 }
2070 
ResetBorder(ArkUIRuntimeCallInfo * runtimeCallInfo)2071 ArkUINativeModuleValue TextAreaBridge::ResetBorder(ArkUIRuntimeCallInfo *runtimeCallInfo)
2072 {
2073     EcmaVM *vm = runtimeCallInfo->GetVM();
2074     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2075     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2076     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2077     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2078     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorder(nativeNode);
2079     return panda::JSValueRef::Undefined(vm);
2080 }
2081 
SetBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2082 ArkUINativeModuleValue TextAreaBridge::SetBorderWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2083 {
2084     EcmaVM* vm = runtimeCallInfo->GetVM();
2085     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2086     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2087     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2088     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2089     Local<JSValueRef> topArgs = runtimeCallInfo->GetCallArgRef(NUM_1);
2090     Local<JSValueRef> rightArgs = runtimeCallInfo->GetCallArgRef(NUM_2);
2091     Local<JSValueRef> bottomArgs = runtimeCallInfo->GetCallArgRef(NUM_3);
2092     Local<JSValueRef> leftArgs = runtimeCallInfo->GetCallArgRef(NUM_4);
2093     if (leftArgs->IsUndefined() && rightArgs->IsUndefined() && topArgs->IsUndefined() && bottomArgs->IsUndefined()) {
2094         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorderWidth(nativeNode);
2095         return panda::JSValueRef::Undefined(vm);
2096     }
2097 
2098     CalcDimension top;
2099     CalcDimension right;
2100     CalcDimension bottom;
2101     CalcDimension left;
2102     bool isLengthMetrics = false;
2103 
2104     if (topArgs->IsObject(vm)) {
2105         isLengthMetrics |= ParseLocalizedBorderWidth(vm, topArgs, top);
2106     }
2107     if (rightArgs->IsObject(vm)) {
2108         isLengthMetrics |= ParseLocalizedBorderWidth(vm, rightArgs, right);
2109     }
2110     if (bottomArgs->IsObject(vm)) {
2111         isLengthMetrics |= ParseLocalizedBorderWidth(vm, bottomArgs, bottom);
2112     }
2113     if (leftArgs->IsObject(vm)) {
2114         isLengthMetrics |= ParseLocalizedBorderWidth(vm, leftArgs, left);
2115     }
2116 
2117     uint32_t size = NUM_4;
2118     ArkUI_Float32 values[size];
2119     int units[size];
2120 
2121     if (isLengthMetrics) {
2122         auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
2123         SetBorderWidthArrayByDimen(top, values, units, NUM_0);
2124         SetBorderWidthArrayByDimen(isRightToLeft ? left : right, values, units, NUM_1);
2125         SetBorderWidthArrayByDimen(bottom, values, units, NUM_2);
2126         SetBorderWidthArrayByDimen(isRightToLeft ? right : left, values, units, NUM_3);
2127     } else {
2128         ArkTSUtils::SetBorderWidthArray(vm, topArgs, values, units, NUM_0);
2129         ArkTSUtils::SetBorderWidthArray(vm, rightArgs, values, units, NUM_1);
2130         ArkTSUtils::SetBorderWidthArray(vm, bottomArgs, values, units, NUM_2);
2131         ArkTSUtils::SetBorderWidthArray(vm, leftArgs, values, units, NUM_3);
2132     }
2133 
2134     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderWidth(nativeNode, values, units, size);
2135     return panda::JSValueRef::Undefined(vm);
2136 }
2137 
ResetBorderWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2138 ArkUINativeModuleValue TextAreaBridge::ResetBorderWidth(ArkUIRuntimeCallInfo *runtimeCallInfo)
2139 {
2140     EcmaVM *vm = runtimeCallInfo->GetVM();
2141     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2142     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2143     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2144     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2145     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorderWidth(nativeNode);
2146     return panda::JSValueRef::Undefined(vm);
2147 }
2148 
SetBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2149 ArkUINativeModuleValue TextAreaBridge::SetBorderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2150 {
2151     EcmaVM *vm = runtimeCallInfo->GetVM();
2152     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2153     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2154     Local<JSValueRef> topArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2155     Local<JSValueRef> rightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2156     Local<JSValueRef> bottomArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2157     Local<JSValueRef> leftArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2158     Local<JSValueRef> isLocalizedArg = runtimeCallInfo->GetCallArgRef(NUM_5);
2159     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2160     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2161     auto isLocalized = (isLocalizedArg->IsBoolean()) ? isLocalizedArg->ToBoolean(vm)->Value() : false;
2162 
2163     Color leftColor;
2164     Color rightColor;
2165     Color topColor;
2166     Color bottomColor;
2167 
2168     if (!ArkTSUtils::ParseJsColorAlpha(vm, topArg, topColor)) {
2169         topColor.SetValue(COLOR_ALPHA_VALUE);
2170     }
2171     if (!ArkTSUtils::ParseJsColorAlpha(vm, rightArg, rightColor)) {
2172         rightColor.SetValue(COLOR_ALPHA_VALUE);
2173     }
2174     if (!ArkTSUtils::ParseJsColorAlpha(vm, bottomArg, bottomColor)) {
2175         bottomColor.SetValue(COLOR_ALPHA_VALUE);
2176     }
2177     if (!ArkTSUtils::ParseJsColorAlpha(vm, leftArg, leftColor)) {
2178         leftColor.SetValue(COLOR_ALPHA_VALUE);
2179     }
2180     auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
2181     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderColor(nativeNode,
2182         topColor.GetValue(),
2183         (isRightToLeft && isLocalized) ? leftColor.GetValue() : rightColor.GetValue(),
2184         bottomColor.GetValue(),
2185         (isRightToLeft && isLocalized) ? rightColor.GetValue() : leftColor.GetValue());
2186     return panda::JSValueRef::Undefined(vm);
2187 }
2188 
ResetBorderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2189 ArkUINativeModuleValue TextAreaBridge::ResetBorderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2190 {
2191     EcmaVM *vm = runtimeCallInfo->GetVM();
2192     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2193     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2194     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2195     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2196     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorderColor(nativeNode);
2197     return panda::JSValueRef::Undefined(vm);
2198 }
2199 
SetBorderStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)2200 ArkUINativeModuleValue TextAreaBridge::SetBorderStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
2201 {
2202     EcmaVM *vm = runtimeCallInfo->GetVM();
2203     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2204     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2205     auto typeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2206     auto styleArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2207     auto topArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2208     auto rightArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2209     auto bottomArg = runtimeCallInfo->GetCallArgRef(NUM_5);
2210     auto leftArg = runtimeCallInfo->GetCallArgRef(NUM_6);
2211     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2212     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2213     if ((!typeArg->IsBoolean()) || (!typeArg->BooleaValue(vm))) {
2214         int32_t styles[] = { static_cast<int32_t>(BorderStyle::SOLID) };
2215         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderStyle(nativeNode, styles,
2216             (sizeof(styles) / sizeof(styles[NUM_0])));
2217         return panda::JSValueRef::Undefined(vm);
2218     }
2219     if (styleArg->IsInt()) {
2220         int32_t styles[] = { styleArg->Int32Value(vm) };
2221         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderStyle(nativeNode, styles,
2222             (sizeof(styles) / sizeof(styles[NUM_0])));
2223         return panda::JSValueRef::Undefined(vm);
2224     }
2225     int32_t styles[] = { -1, -1, -1, -1 };
2226     if (topArg->IsInt()) {
2227         styles[NUM_0] = topArg->Int32Value(vm);
2228     }
2229     if (rightArg->IsInt()) {
2230         styles[NUM_1] = rightArg->Int32Value(vm);
2231     }
2232     if (bottomArg->IsInt()) {
2233         styles[NUM_2] = bottomArg->Int32Value(vm);
2234     }
2235     if (leftArg->IsInt()) {
2236         styles[NUM_3] = leftArg->Int32Value(vm);
2237     }
2238     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderStyle(nativeNode, styles,
2239         (sizeof(styles) / sizeof(styles[NUM_0])));
2240     return panda::JSValueRef::Undefined(vm);
2241 }
2242 
ResetBorderStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)2243 ArkUINativeModuleValue TextAreaBridge::ResetBorderStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
2244 {
2245     EcmaVM *vm = runtimeCallInfo->GetVM();
2246     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2247     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2248     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2249     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2250     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorderStyle(nativeNode);
2251     return panda::JSValueRef::Undefined(vm);
2252 }
2253 
SetBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)2254 ArkUINativeModuleValue TextAreaBridge::SetBorderRadius(ArkUIRuntimeCallInfo *runtimeCallInfo)
2255 {
2256     EcmaVM *vm = runtimeCallInfo->GetVM();
2257     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2258     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2259     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2260     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2261     Local<JSValueRef> topLeftArgs = runtimeCallInfo->GetCallArgRef(NUM_1);
2262     Local<JSValueRef> topRightArgs = runtimeCallInfo->GetCallArgRef(NUM_2);
2263     Local<JSValueRef> bottomLeftArgs = runtimeCallInfo->GetCallArgRef(NUM_3);
2264     Local<JSValueRef> bottomRightArgs = runtimeCallInfo->GetCallArgRef(NUM_4);
2265     if (topLeftArgs->IsUndefined() && topRightArgs->IsUndefined() && bottomLeftArgs->IsUndefined() &&
2266         bottomRightArgs->IsUndefined()) {
2267         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorderRadius(nativeNode);
2268         return panda::JSValueRef::Undefined(vm);
2269     }
2270 
2271     CalcDimension topLeft;
2272     CalcDimension topRight;
2273     CalcDimension bottomLeft;
2274     CalcDimension bottomRight;
2275 
2276     bool isLengthMetrics = false;
2277     if (topLeftArgs->IsObject(vm)) {
2278         isLengthMetrics |= ParseLocalizedBorderRadius(vm, topLeftArgs, topLeft);
2279     }
2280     if (topRightArgs->IsObject(vm)) {
2281         isLengthMetrics |= ParseLocalizedBorderRadius(vm, topRightArgs, topRight);
2282     }
2283     if (bottomLeftArgs->IsObject(vm)) {
2284         isLengthMetrics |= ParseLocalizedBorderRadius(vm, bottomLeftArgs, bottomLeft);
2285     }
2286     if (bottomRightArgs->IsObject(vm)) {
2287         isLengthMetrics |= ParseLocalizedBorderRadius(vm, bottomRightArgs, bottomRight);
2288     }
2289     if (!isLengthMetrics) {
2290         ArkTSUtils::ParseAllBorder(vm, topLeftArgs, topLeft);
2291         ArkTSUtils::ParseAllBorder(vm, topRightArgs, topRight);
2292         ArkTSUtils::ParseAllBorder(vm, bottomLeftArgs, bottomLeft);
2293         ArkTSUtils::ParseAllBorder(vm, bottomRightArgs, bottomRight);
2294     }
2295 
2296     uint32_t size = SIZE_OF_FOUR;
2297     ArkUI_Float32 values[size];
2298     int units[size];
2299 
2300     bool isMirror = isLengthMetrics && AceApplicationInfo::GetInstance().IsRightToLeft();
2301     ParseMirrorDimen(values, units, NUM_0, isMirror ? topRight : topLeft);
2302     ParseMirrorDimen(values, units, NUM_1, isMirror ? topLeft : topRight);
2303     ParseMirrorDimen(values, units, NUM_2, isMirror ? bottomRight : bottomLeft);
2304     ParseMirrorDimen(values, units, NUM_3, isMirror ? bottomLeft : bottomRight);
2305     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBorderRadius(nativeNode, values, units, SIZE_OF_FOUR);
2306 
2307     return panda::JSValueRef::Undefined(vm);
2308 }
2309 
ResetBorderRadius(ArkUIRuntimeCallInfo * runtimeCallInfo)2310 ArkUINativeModuleValue TextAreaBridge::ResetBorderRadius(ArkUIRuntimeCallInfo *runtimeCallInfo)
2311 {
2312     EcmaVM *vm = runtimeCallInfo->GetVM();
2313     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2314     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2315     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2316     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2317     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBorderRadius(nativeNode);
2318     return panda::JSValueRef::Undefined(vm);
2319 }
2320 
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2321 ArkUINativeModuleValue TextAreaBridge::SetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2322 {
2323     EcmaVM *vm = runtimeCallInfo->GetVM();
2324     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2325     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2326     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2327     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2328     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2329     Color color;
2330     RefPtr<ResourceObject> resourceObject;
2331     auto nodeInfo = ArkTSUtils::MakeNativeNodeInfo(nativeNode);
2332     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color, resourceObject, nodeInfo)) {
2333         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBackgroundColor(nativeNode);
2334     } else {
2335         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaBackgroundColorWithColorSpace(
2336             nativeNode, color.GetValue(), color.GetColorSpace(), AceType::RawPtr(resourceObject));
2337     }
2338     return panda::JSValueRef::Undefined(vm);
2339 }
2340 
ResetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2341 ArkUINativeModuleValue TextAreaBridge::ResetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2342 {
2343     EcmaVM *vm = runtimeCallInfo->GetVM();
2344     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2345     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2346     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2347     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2348     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaBackgroundColor(nativeNode);
2349     return panda::JSValueRef::Undefined(vm);
2350 }
2351 
SetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)2352 ArkUINativeModuleValue TextAreaBridge::SetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
2353 {
2354     EcmaVM *vm = runtimeCallInfo->GetVM();
2355     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2356     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2357     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2358     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2359     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2360     Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
2361     Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
2362     Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(NUM_4);
2363 
2364     ArkUIPaddingRes marginRes;
2365     RefPtr<ResourceObject> topResObject;
2366     RefPtr<ResourceObject> rightResObject;
2367     RefPtr<ResourceObject> bottomResObject;
2368     RefPtr<ResourceObject> leftResObject;
2369     ArkUISizeType top = ArkTSUtils::ParseJsToArkUISize(vm, secondArg, topResObject);
2370     ArkUISizeType right = ArkTSUtils::ParseJsToArkUISize(vm, thirdArg, rightResObject);
2371     ArkUISizeType bottom = ArkTSUtils::ParseJsToArkUISize(vm, forthArg, bottomResObject);
2372     ArkUISizeType left = ArkTSUtils::ParseJsToArkUISize(vm, fifthArg, leftResObject);
2373 
2374     CalcDimension topDimen(0, DimensionUnit::VP);
2375     CalcDimension rightDimen(0, DimensionUnit::VP);
2376     CalcDimension bottomDimen(0, DimensionUnit::VP);
2377     CalcDimension leftDimen(0, DimensionUnit::VP);
2378 
2379     bool isLengthMetrics = false;
2380     if (secondArg->IsObject(vm)) {
2381         isLengthMetrics |= ParseLocalizedMargin(vm, secondArg, topDimen, top);
2382     }
2383     if (thirdArg->IsObject(vm)) {
2384         isLengthMetrics |= ParseLocalizedMargin(vm, thirdArg, rightDimen, right);
2385     }
2386     if (forthArg->IsObject(vm)) {
2387         isLengthMetrics |= ParseLocalizedMargin(vm, forthArg, bottomDimen, bottom);
2388     }
2389     if (fifthArg->IsObject(vm)) {
2390         isLengthMetrics |= ParseLocalizedMargin(vm, fifthArg, leftDimen, left);
2391     }
2392     if (isLengthMetrics) {
2393         auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
2394         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMargin(nativeNode, &top,
2395             isRightToLeft ? &left : &right, &bottom, isRightToLeft ? &right : &left, &marginRes);
2396         return panda::JSValueRef::Undefined(vm);
2397     }
2398     marginRes.topObj = AceType::RawPtr(topResObject);
2399     marginRes.rightObj = AceType::RawPtr(rightResObject);
2400     marginRes.bottomObj = AceType::RawPtr(bottomResObject);
2401     marginRes.leftObj = AceType::RawPtr(leftResObject);
2402     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaMargin(
2403         nativeNode, &top, &right, &bottom, &left, &marginRes);
2404     return panda::JSValueRef::Undefined(vm);
2405 }
2406 
ResetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)2407 ArkUINativeModuleValue TextAreaBridge::ResetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
2408 {
2409     EcmaVM *vm = runtimeCallInfo->GetVM();
2410     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2411     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2412     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2413     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2414     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaMargin(nativeNode);
2415     return panda::JSValueRef::Undefined(vm);
2416 }
2417 
SetOnWillChange(ArkUIRuntimeCallInfo * runtimeCallInfo)2418 ArkUINativeModuleValue TextAreaBridge::SetOnWillChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
2419 {
2420     EcmaVM *vm = runtimeCallInfo->GetVM();
2421     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2422     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2423     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
2424     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2425     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2426     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2427     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2428     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
2429         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnWillChange(nativeNode);
2430         return panda::JSValueRef::Undefined(vm);
2431     }
2432     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
2433     std::function<bool(const ChangeValueInfo&)> callback = [vm, frameNode,
2434         func = panda::CopyableGlobal(vm, func)](const ChangeValueInfo& changeValueInfo) -> bool {
2435         panda::LocalScope pandaScope(vm);
2436         panda::TryCatch trycatch(vm);
2437         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
2438         auto eventObject = CommonBridge::CreateChangeValueInfoObj(vm, changeValueInfo);
2439         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
2440         auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
2441         if (ret->IsBoolean()) {
2442             return ret->ToBoolean(vm)->Value();
2443         }
2444         return true;
2445     };
2446     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnWillChange(nativeNode,
2447         reinterpret_cast<intptr_t>(&callback));
2448     return panda::JSValueRef::Undefined(vm);
2449 }
2450 
ResetOnWillChange(ArkUIRuntimeCallInfo * runtimeCallInfo)2451 ArkUINativeModuleValue TextAreaBridge::ResetOnWillChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
2452 {
2453     EcmaVM* vm = runtimeCallInfo->GetVM();
2454     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2455     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2456     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2457     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2458     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnWillChange(nativeNode);
2459     return panda::JSValueRef::Undefined(vm);
2460 }
2461 
SetOnWillInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)2462 ArkUINativeModuleValue TextAreaBridge::SetOnWillInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
2463 {
2464     EcmaVM *vm = runtimeCallInfo->GetVM();
2465     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2466     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2467     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
2468     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2469     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2470     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2471     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2472     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
2473         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnWillInsert(nativeNode);
2474         return panda::JSValueRef::Undefined(vm);
2475     }
2476     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
2477     std::function<bool(const InsertValueInfo&)> callback = [vm, frameNode,
2478         func = panda::CopyableGlobal(vm, func)](const InsertValueInfo& insertValue) -> bool {
2479         panda::LocalScope pandaScope(vm);
2480         panda::TryCatch trycatch(vm);
2481         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
2482         const char* keys[] = { "insertOffset", "insertValue" };
2483         Local<JSValueRef> values[] = { panda::NumberRef::New(vm, insertValue.insertOffset),
2484             panda::StringRef::NewFromUtf16(vm, insertValue.insertValue.c_str()) };
2485         auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
2486         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
2487         auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
2488         if (ret->IsBoolean()) {
2489             return ret->ToBoolean(vm)->Value();
2490         }
2491         return true;
2492     };
2493     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnWillInsert(nativeNode,
2494         reinterpret_cast<intptr_t>(&callback));
2495     return panda::JSValueRef::Undefined(vm);
2496 }
2497 
ResetOnWillInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)2498 ArkUINativeModuleValue TextAreaBridge::ResetOnWillInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
2499 {
2500     EcmaVM* vm = runtimeCallInfo->GetVM();
2501     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2502     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2503     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2504     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2505     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnWillInsert(nativeNode);
2506     return panda::JSValueRef::Undefined(vm);
2507 }
2508 
SetOnDidInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)2509 ArkUINativeModuleValue TextAreaBridge::SetOnDidInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
2510 {
2511     EcmaVM *vm = runtimeCallInfo->GetVM();
2512     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2513     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2514     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
2515     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2516     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2517     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2518     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2519     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
2520         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnDidInsert(nativeNode);
2521         return panda::JSValueRef::Undefined(vm);
2522     }
2523     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
2524     std::function<void(const InsertValueInfo&)> callback = [vm, frameNode,
2525         func = panda::CopyableGlobal(vm, func)](const InsertValueInfo& insertValue) {
2526         panda::LocalScope pandaScope(vm);
2527         panda::TryCatch trycatch(vm);
2528         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
2529         const char* keys[] = { "insertOffset", "insertValue" };
2530         Local<JSValueRef> values[] = { panda::NumberRef::New(vm, insertValue.insertOffset),
2531             panda::StringRef::NewFromUtf16(vm, insertValue.insertValue.c_str()) };
2532         auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
2533         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
2534         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
2535     };
2536     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnDidInsert(
2537         nativeNode, reinterpret_cast<intptr_t>(&callback));
2538     return panda::JSValueRef::Undefined(vm);
2539 }
2540 
ResetOnDidInsert(ArkUIRuntimeCallInfo * runtimeCallInfo)2541 ArkUINativeModuleValue TextAreaBridge::ResetOnDidInsert(ArkUIRuntimeCallInfo* runtimeCallInfo)
2542 {
2543     EcmaVM* vm = runtimeCallInfo->GetVM();
2544     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2545     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2546     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2547     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2548     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnDidInsert(nativeNode);
2549     return panda::JSValueRef::Undefined(vm);
2550 }
2551 
SetOnWillDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)2552 ArkUINativeModuleValue TextAreaBridge::SetOnWillDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
2553 {
2554     EcmaVM *vm = runtimeCallInfo->GetVM();
2555     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2556     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2557     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
2558     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2559     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2560     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2561     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2562     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
2563         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnWillDelete(nativeNode);
2564         return panda::JSValueRef::Undefined(vm);
2565     }
2566     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
2567     std::function<bool(const DeleteValueInfo&)> callback = [vm, frameNode,
2568         func = panda::CopyableGlobal(vm, func)](const DeleteValueInfo& deleteValue) -> bool {
2569         panda::LocalScope pandaScope(vm);
2570         panda::TryCatch trycatch(vm);
2571         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
2572         const char* keys[] = { "deleteOffset", "direction", "deleteValue" };
2573         Local<JSValueRef> values[] = { panda::NumberRef::New(vm, deleteValue.deleteOffset),
2574             panda::NumberRef::New(vm, static_cast<int32_t>(deleteValue.direction)),
2575             panda::StringRef::NewFromUtf16(vm, deleteValue.deleteValue.c_str()) };
2576         auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
2577         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
2578         auto ret = func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
2579         if (ret->IsBoolean()) {
2580             return ret->ToBoolean(vm)->Value();
2581         }
2582         return true;
2583     };
2584     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnWillDelete(
2585         nativeNode, reinterpret_cast<intptr_t>(&callback));
2586     return panda::JSValueRef::Undefined(vm);
2587 }
2588 
ResetOnWillDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)2589 ArkUINativeModuleValue TextAreaBridge::ResetOnWillDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
2590 {
2591     EcmaVM* vm = runtimeCallInfo->GetVM();
2592     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2593     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2594     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2595     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2596     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnWillDelete(nativeNode);
2597     return panda::JSValueRef::Undefined(vm);
2598 }
2599 
SetOnDidDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)2600 ArkUINativeModuleValue TextAreaBridge::SetOnDidDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
2601 {
2602     EcmaVM *vm = runtimeCallInfo->GetVM();
2603     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2604     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2605     Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
2606     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2607     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2608     auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2609     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2610     if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
2611         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnDidDelete(nativeNode);
2612         return panda::JSValueRef::Undefined(vm);
2613     }
2614     panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
2615     std::function<void(const DeleteValueInfo&)> callback = [vm, frameNode,
2616         func = panda::CopyableGlobal(vm, func)](const DeleteValueInfo& deleteValue) {
2617         panda::LocalScope pandaScope(vm);
2618         panda::TryCatch trycatch(vm);
2619         PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
2620         const char* keys[] = { "deleteOffset", "direction", "deleteValue" };
2621         Local<JSValueRef> values[] = { panda::NumberRef::New(vm, deleteValue.deleteOffset),
2622             panda::NumberRef::New(vm, static_cast<int32_t>(deleteValue.direction)),
2623             panda::StringRef::NewFromUtf16(vm, deleteValue.deleteValue.c_str()) };
2624         auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
2625         panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = { eventObject };
2626         func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
2627     };
2628     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaOnDidDelete(
2629         nativeNode, reinterpret_cast<intptr_t>(&callback));
2630     return panda::JSValueRef::Undefined(vm);
2631 }
2632 
ResetOnDidDelete(ArkUIRuntimeCallInfo * runtimeCallInfo)2633 ArkUINativeModuleValue TextAreaBridge::ResetOnDidDelete(ArkUIRuntimeCallInfo* runtimeCallInfo)
2634 {
2635     EcmaVM* vm = runtimeCallInfo->GetVM();
2636     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2637     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2638     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2639     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2640     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaOnDidDelete(nativeNode);
2641     return panda::JSValueRef::Undefined(vm);
2642 }
2643 
SetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)2644 ArkUINativeModuleValue TextAreaBridge::SetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2645 {
2646     EcmaVM *vm = runtimeCallInfo->GetVM();
2647     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2648     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2649     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2650     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2651     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2652 
2653     if (secondArg->IsBoolean()) {
2654         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2655         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaEnablePreviewText(nativeNode, value);
2656     } else {
2657         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnablePreviewText(nativeNode);
2658     }
2659     return panda::JSValueRef::Undefined(vm);
2660 }
2661 
ResetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)2662 ArkUINativeModuleValue TextAreaBridge::ResetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2663 {
2664     EcmaVM* vm = runtimeCallInfo->GetVM();
2665     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2666     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2667     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2668     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2669     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnablePreviewText(nativeNode);
2670     return panda::JSValueRef::Undefined(vm);
2671 }
2672 
SetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)2673 ArkUINativeModuleValue TextAreaBridge::SetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
2674 {
2675     EcmaVM* vm = runtimeCallInfo->GetVM();
2676     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2677     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2678     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2679     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2680     NG::OnCreateMenuCallback onCreateMenuCallback;
2681     NG::OnMenuItemClickCallback onMenuItemClickCallback;
2682     NG::OnPrepareMenuCallback onPrepareMenuCallback;
2683     if (!ArkTSUtils::ParseSelectionMenuOptions(
2684         runtimeCallInfo, vm, onCreateMenuCallback, onMenuItemClickCallback, onPrepareMenuCallback)) {
2685         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaSelectionMenuOptions(nativeNode);
2686         return panda::JSValueRef::Undefined(vm);
2687     }
2688     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaSelectionMenuOptions(nativeNode,
2689         reinterpret_cast<void*>(&onCreateMenuCallback), reinterpret_cast<void*>(&onMenuItemClickCallback),
2690         reinterpret_cast<void*>(&onPrepareMenuCallback));
2691     return panda::JSValueRef::Undefined(vm);
2692 }
2693 
ResetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)2694 ArkUINativeModuleValue TextAreaBridge::ResetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
2695 {
2696     EcmaVM* vm = runtimeCallInfo->GetVM();
2697     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2698     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2699     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2700     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2701     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaSelectionMenuOptions(nativeNode);
2702     return panda::JSValueRef::Undefined(vm);
2703 }
2704 
SetTextAreaInitialize(ArkUIRuntimeCallInfo * runtimeCallInfo)2705 ArkUINativeModuleValue TextAreaBridge::SetTextAreaInitialize(ArkUIRuntimeCallInfo* runtimeCallInfo)
2706 {
2707     EcmaVM* vm = runtimeCallInfo->GetVM();
2708     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2709     Local<JSValueRef> nodeVal = runtimeCallInfo->GetCallArgRef(NUM_0);
2710     Local<JSValueRef> placeholderVal = runtimeCallInfo->GetCallArgRef(NUM_1);
2711     Local<JSValueRef> textVal = runtimeCallInfo->GetCallArgRef(NUM_2);
2712     Local<JSValueRef> controllerVal = runtimeCallInfo->GetCallArgRef(NUM_3);
2713     CHECK_NULL_RETURN(nodeVal->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2714     auto nativeNode = nodePtr(nodeVal->ToNativePointer(vm)->Value());
2715     std::string placeholder;
2716     if (ArkTSUtils::ParseJsString(vm, placeholderVal, placeholder)) {
2717         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaPlaceholderString(nativeNode, placeholder.c_str());
2718     } else {
2719         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaPlaceholderString(nativeNode, "");
2720     }
2721     std::string text;
2722     std::string value;
2723     auto changeEventVal = Framework::JSRef<Framework::JSVal>::Make();
2724     if (textVal->IsString(vm) && ArkTSUtils::ParseJsString(vm, textVal, text)) {
2725         value = text;
2726     } else {
2727         value = "";
2728     }
2729     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaTextString(nativeNode, value.c_str());
2730     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2731     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2732     SetControllerInternal(frameNode, controllerVal, vm);
2733     return panda::JSValueRef::Undefined(vm);
2734 }
2735 
SetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2736 ArkUINativeModuleValue TextAreaBridge::SetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2737 {
2738     EcmaVM* vm = runtimeCallInfo->GetVM();
2739     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2740     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2741     Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2742     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2743     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2744     if (TextInputBridge::ParseLayoutPolicy(vm, widthArg, true)) {
2745         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaWidth(nativeNode);
2746         return panda::JSValueRef::Undefined(vm);
2747     }
2748     auto value = widthArg->ToString(vm)->ToString(vm);
2749     if (value.empty()) {
2750         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaWidth(nativeNode);
2751         return panda::JSValueRef::Undefined(vm);
2752     }
2753     GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaWidth(
2754         nativeNode, value.c_str());
2755     return panda::JSValueRef::Undefined(vm);
2756 }
2757 
ResetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2758 ArkUINativeModuleValue TextAreaBridge::ResetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2759 {
2760     EcmaVM* vm = runtimeCallInfo->GetVM();
2761     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2762     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2763     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2764     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2765     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaWidth(nativeNode);
2766     return panda::JSValueRef::Undefined(vm);
2767 }
2768 
SetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)2769 ArkUINativeModuleValue TextAreaBridge::SetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
2770 {
2771     EcmaVM* vm = runtimeCallInfo->GetVM();
2772     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2773     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2774     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2775     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2776     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2777 
2778     if (secondArg->IsBoolean()) {
2779         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2780         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaEnableHapticFeedback(nativeNode, value);
2781     } else {
2782         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnableHapticFeedback(nativeNode);
2783     }
2784     return panda::JSValueRef::Undefined(vm);
2785 }
2786 
ResetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)2787 ArkUINativeModuleValue TextAreaBridge::ResetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
2788 {
2789     EcmaVM* vm = runtimeCallInfo->GetVM();
2790     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2791     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2792     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2793     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2794     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaEnableHapticFeedback(nativeNode);
2795     return panda::JSValueRef::Undefined(vm);
2796 }
2797 
SetEllipsisMode(ArkUIRuntimeCallInfo * runtimeCallInfo)2798 ArkUINativeModuleValue TextAreaBridge::SetEllipsisMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
2799 {
2800     EcmaVM* vm = runtimeCallInfo->GetVM();
2801     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2802     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2803     Local<JSValueRef> ellipsisModeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2804     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2805     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2806     if (ellipsisModeArg->IsNull() || ellipsisModeArg->IsUndefined() || !ellipsisModeArg->IsNumber()) {
2807         GetArkUINodeModifiers()->getTextAreaModifier()->resetEllipsisMode(nativeNode);
2808         return panda::JSValueRef::Undefined(vm);
2809     }
2810     uint32_t ellipsisMode = ellipsisModeArg->Uint32Value(vm);
2811     GetArkUINodeModifiers()->getTextAreaModifier()->setEllipsisMode(nativeNode, ellipsisMode);
2812     return panda::JSValueRef::Undefined(vm);
2813 }
2814 
ResetEllipsisMode(ArkUIRuntimeCallInfo * runtimeCallInfo)2815 ArkUINativeModuleValue TextAreaBridge::ResetEllipsisMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
2816 {
2817     EcmaVM* vm = runtimeCallInfo->GetVM();
2818     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2819     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2820     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2821     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2822     GetArkUINodeModifiers()->getTextAreaModifier()->resetEllipsisMode(nativeNode);
2823     return panda::JSValueRef::Undefined(vm);
2824 }
2825 
SetStopBackPress(ArkUIRuntimeCallInfo * runtimeCallInfo)2826 ArkUINativeModuleValue TextAreaBridge::SetStopBackPress(ArkUIRuntimeCallInfo* runtimeCallInfo)
2827 {
2828     EcmaVM* vm = runtimeCallInfo->GetVM();
2829     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2830     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2831     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2832     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2833     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2834 
2835     if (secondArg->IsBoolean()) {
2836         uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2837         GetArkUINodeModifiers()->getTextAreaModifier()->setStopBackPress(nativeNode, value);
2838     } else {
2839         GetArkUINodeModifiers()->getTextAreaModifier()->resetStopBackPress(nativeNode);
2840     }
2841     return panda::JSValueRef::Undefined(vm);
2842 }
2843 
ResetStopBackPress(ArkUIRuntimeCallInfo * runtimeCallInfo)2844 ArkUINativeModuleValue TextAreaBridge::ResetStopBackPress(ArkUIRuntimeCallInfo* runtimeCallInfo)
2845 {
2846     EcmaVM* vm = runtimeCallInfo->GetVM();
2847     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2848     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2849     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2850     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2851     GetArkUINodeModifiers()->getTextAreaModifier()->resetStopBackPress(nativeNode);
2852     return panda::JSValueRef::Undefined(vm);
2853 }
2854 
SetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2855 ArkUINativeModuleValue TextAreaBridge::SetStrokeWidth(ArkUIRuntimeCallInfo *runtimeCallInfo)
2856 {
2857     EcmaVM* vm = runtimeCallInfo->GetVM();
2858     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2859     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2860     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2861     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2862     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2863 
2864     CalcDimension value;
2865     if (!ArkTSUtils::ParseJsLengthMetrics(vm, secondArg, value)) {
2866         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaStrokeWidth(nativeNode);
2867     } else {
2868         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaStrokeWidth(
2869             nativeNode, value.Value(), static_cast<int>(value.Unit()));
2870     }
2871     return panda::JSValueRef::Undefined(vm);
2872 }
2873 
ResetStrokeWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2874 ArkUINativeModuleValue TextAreaBridge::ResetStrokeWidth(ArkUIRuntimeCallInfo *runtimeCallInfo)
2875 {
2876     EcmaVM* vm = runtimeCallInfo->GetVM();
2877     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2878     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2879     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2880     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2881     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaStrokeWidth(nativeNode);
2882     return panda::JSValueRef::Undefined(vm);
2883 }
2884 
SetStrokeColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2885 ArkUINativeModuleValue TextAreaBridge::SetStrokeColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2886 {
2887     EcmaVM *vm = runtimeCallInfo->GetVM();
2888     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2889     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2890     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2891     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2892     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2893     Color color;
2894     if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
2895         GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaStrokeColor(nativeNode);
2896     } else {
2897         GetArkUINodeModifiers()->getTextAreaModifier()->setTextAreaStrokeColor(nativeNode, color.GetValue());
2898     }
2899     return panda::JSValueRef::Undefined(vm);
2900 }
2901 
ResetStrokeColor(ArkUIRuntimeCallInfo * runtimeCallInfo)2902 ArkUINativeModuleValue TextAreaBridge::ResetStrokeColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
2903 {
2904     EcmaVM* vm = runtimeCallInfo->GetVM();
2905     CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2906     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2907     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2908     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2909     GetArkUINodeModifiers()->getTextAreaModifier()->resetTextAreaStrokeColor(nativeNode);
2910     return panda::JSValueRef::Undefined(vm);
2911 }
2912 
SetEnableAutoSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)2913 ArkUINativeModuleValue TextAreaBridge::SetEnableAutoSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
2914 {
2915     EcmaVM* vm = runtimeCallInfo->GetVM();
2916     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2917     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2918     Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
2919     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2920     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2921     uint32_t enableAutoSpacing = false;
2922     if (secondArg->IsBoolean()) {
2923         enableAutoSpacing = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2924     }
2925     GetArkUINodeModifiers()->getTextAreaModifier()->setEnableAutoSpacing(nativeNode, enableAutoSpacing);
2926     return panda::JSValueRef::Undefined(vm);
2927 }
2928 
ResetEnableAutoSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)2929 ArkUINativeModuleValue TextAreaBridge::ResetEnableAutoSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
2930 {
2931     EcmaVM* vm = runtimeCallInfo->GetVM();
2932     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2933     Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
2934     CHECK_NULL_RETURN(firstArg->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2935     auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2936     GetArkUINodeModifiers()->getTextAreaModifier()->resetEnableAutoSpacing(nativeNode);
2937     return panda::JSValueRef::Undefined(vm);
2938 }
2939 
SetController(ArkUIRuntimeCallInfo * runtimeCallInfo)2940 ArkUINativeModuleValue TextAreaBridge::SetController(ArkUIRuntimeCallInfo* runtimeCallInfo)
2941 {
2942     EcmaVM* vm = runtimeCallInfo->GetVM();
2943     CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
2944     Local<JSValueRef> nodeVal = runtimeCallInfo->GetCallArgRef(NUM_0);
2945     Local<JSValueRef> controllerVal = runtimeCallInfo->GetCallArgRef(NUM_1);
2946     CHECK_NULL_RETURN(nodeVal->IsNativePointer(vm), panda::JSValueRef::Undefined(vm));
2947     auto nativeNode = nodePtr(nodeVal->ToNativePointer(vm)->Value());
2948     auto* frameNode = reinterpret_cast<FrameNode*>(nativeNode);
2949     CHECK_NULL_RETURN(frameNode, panda::JSValueRef::Undefined(vm));
2950     SetControllerInternal(frameNode, controllerVal, vm);
2951     return panda::JSValueRef::Undefined(vm);
2952 }
2953 
SetControllerInternal(FrameNode * frameNode,Local<JSValueRef> controllerVal,EcmaVM * vm)2954 void TextAreaBridge::SetControllerInternal(FrameNode* frameNode, Local<JSValueRef> controllerVal, EcmaVM* vm)
2955 {
2956     if (!controllerVal->IsUndefined() && !controllerVal->IsNull()) {
2957         auto* jsController = Framework::JSRef<Framework::JSObject>(Framework::JSObject(controllerVal->ToObject(vm)))
2958                                  ->Unwrap<Framework::JSTextEditableController>();
2959         if (jsController) {
2960             auto pointer = TextFieldModelNG::GetJSTextEditableController(frameNode);
2961             auto preController = reinterpret_cast<Framework::JSTextEditableController*>(Referenced::RawPtr(pointer));
2962             if (preController) {
2963                 preController->SetController(nullptr);
2964             }
2965             TextFieldModelNG::SetJSTextEditableController(frameNode, Referenced::Claim((Referenced*)jsController));
2966             auto controller = TextFieldModelNG::GetOrCreateController(frameNode);
2967             jsController->SetController(controller);
2968         }
2969     } else {
2970         auto pointer = TextFieldModelNG::GetJSTextEditableController(frameNode);
2971         auto preController = reinterpret_cast<Framework::JSTextEditableController*>(Referenced::RawPtr(pointer));
2972         if (preController) {
2973             preController->SetController(nullptr);
2974         }
2975         TextFieldModelNG::SetJSTextEditableController(frameNode, nullptr);
2976     }
2977 }
2978 } // namespace OHOS::Ace::NG
2979