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