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