1 /*
2 * Copyright (c) 2023-2024 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_input_bridge.h"
16
17 #include "base/utils/utils.h"
18 #include "core/components/common/layout/constants.h"
19 #include "core/components/text_field/textfield_theme.h"
20 #include "core/components_ng/pattern/text_field/text_field_model.h"
21 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
22 #include <string>
23 #include "jsnapi_expo.h"
24 #include "bridge/declarative_frontend/jsview/js_text_editable_controller.h"
25 #include "frameworks/bridge/declarative_frontend/jsview/js_textfield.h"
26 namespace OHOS::Ace::NG {
27 constexpr int16_t DEFAULT_ALPHA = 255;
28 constexpr double DEFAULT_OPACITY = 0.2;
29 constexpr double DEFAULT_FONT_SIZE = 16.0;
30 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
31 const std::string DEFAULT_FONT_WEIGHT = "400";
32 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
33 constexpr int CALL_ARG_0 = 0;
34 constexpr int CALL_ARG_1 = 1;
35 constexpr int CALL_ARG_2 = 2;
36 constexpr int CALL_ARG_3 = 3;
37 constexpr int CALL_ARG_4 = 4;
38 constexpr int PARAM_ARR_LENGTH_1 = 1;
39 constexpr int PARAM_ARR_LENGTH_2 = 2;
40 constexpr int32_t ARG_GROUP_LENGTH = 4;
41 constexpr int32_t DEFAULT_MODE = -1;
42 constexpr uint32_t ILLEGAL_VALUE = 0;
43 const int32_t MINI_VALID_VALUE = 1;
44 const int32_t MAX_VALID_VALUE = 100;
45 constexpr uint32_t DEFAULT_OVERFLOW = 4;
46 const std::vector<TextHeightAdaptivePolicy> HEIGHT_ADAPTIVE_POLICY = { TextHeightAdaptivePolicy::MAX_LINES_FIRST,
47 TextHeightAdaptivePolicy::MIN_FONT_SIZE_FIRST, TextHeightAdaptivePolicy::LAYOUT_CONSTRAINT_FIRST };
48 const std::vector<TextOverflow> TEXT_OVERFLOWS = { TextOverflow::NONE, TextOverflow::CLIP, TextOverflow::ELLIPSIS,
49 TextOverflow::MARQUEE, TextOverflow::DEFAULT };
50
SetCaretColor(ArkUIRuntimeCallInfo * runtimeCallInfo)51 ArkUINativeModuleValue TextInputBridge::SetCaretColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
52 {
53 EcmaVM *vm = runtimeCallInfo->GetVM();
54 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
55 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
56 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
57 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
58 Color color;
59 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
60 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretColor(nativeNode);
61 } else {
62 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaretColor(nativeNode, color.GetValue());
63 }
64 return panda::JSValueRef::Undefined(vm);
65 }
66
ResetCaretColor(ArkUIRuntimeCallInfo * runtimeCallInfo)67 ArkUINativeModuleValue TextInputBridge::ResetCaretColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
68 {
69 EcmaVM *vm = runtimeCallInfo->GetVM();
70 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
71 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
72 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
73 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretColor(nativeNode);
74 return panda::JSValueRef::Undefined(vm);
75 }
76
SetType(ArkUIRuntimeCallInfo * runtimeCallInfo)77 ArkUINativeModuleValue TextInputBridge::SetType(ArkUIRuntimeCallInfo *runtimeCallInfo)
78 {
79 EcmaVM *vm = runtimeCallInfo->GetVM();
80 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
81 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
82 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
83 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
84 if (secondArg->IsNumber()) {
85 int32_t value = secondArg->Int32Value(vm);
86 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputType(nativeNode, value);
87 } else {
88 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputType(nativeNode);
89 }
90
91 return panda::JSValueRef::Undefined(vm);
92 }
93
ResetType(ArkUIRuntimeCallInfo * runtimeCallInfo)94 ArkUINativeModuleValue TextInputBridge::ResetType(ArkUIRuntimeCallInfo *runtimeCallInfo)
95 {
96 EcmaVM *vm = runtimeCallInfo->GetVM();
97 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
98 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
99 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
100 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputType(nativeNode);
101 return panda::JSValueRef::Undefined(vm);
102 }
103
SetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)104 ArkUINativeModuleValue TextInputBridge::SetMaxLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
105 {
106 EcmaVM *vm = runtimeCallInfo->GetVM();
107 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
108 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
109 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
110 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
111 if (secondArg->IsNumber()) {
112 uint32_t value = secondArg->Uint32Value(vm);
113 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMaxLines(nativeNode, value);
114 } else {
115 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLines(nativeNode);
116 }
117 return panda::JSValueRef::Undefined(vm);
118 }
119
ResetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)120 ArkUINativeModuleValue TextInputBridge::ResetMaxLines(ArkUIRuntimeCallInfo *runtimeCallInfo)
121 {
122 EcmaVM *vm = runtimeCallInfo->GetVM();
123 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
124 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
125 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
126 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLines(nativeNode);
127 return panda::JSValueRef::Undefined(vm);
128 }
129
SetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)130 ArkUINativeModuleValue TextInputBridge::SetPlaceholderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
131 {
132 EcmaVM *vm = runtimeCallInfo->GetVM();
133 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
134 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
135 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
136 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
137 Color color;
138 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
139 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPlaceholderColor(nativeNode);
140 } else {
141 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderColor(nativeNode, color.GetValue());
142 }
143 return panda::JSValueRef::Undefined(vm);
144 }
145
ResetPlaceholderColor(ArkUIRuntimeCallInfo * runtimeCallInfo)146 ArkUINativeModuleValue TextInputBridge::ResetPlaceholderColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
147 {
148 EcmaVM *vm = runtimeCallInfo->GetVM();
149 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
150 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
151 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
152 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPlaceholderColor(nativeNode);
153 return panda::JSValueRef::Undefined(vm);
154 }
155
SetCaretPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)156 ArkUINativeModuleValue TextInputBridge::SetCaretPosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
157 {
158 EcmaVM *vm = runtimeCallInfo->GetVM();
159 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
160 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
161 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
162 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
163 if (secondArg->IsInt() && secondArg->Int32Value(vm) >= 0) {
164 int32_t caretPosition = secondArg->Int32Value(vm);
165 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaretPosition(nativeNode, caretPosition);
166 } else {
167 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretPosition(nativeNode);
168 }
169 return panda::JSValueRef::Undefined(vm);
170 }
171
ResetCaretPosition(ArkUIRuntimeCallInfo * runtimeCallInfo)172 ArkUINativeModuleValue TextInputBridge::ResetCaretPosition(ArkUIRuntimeCallInfo *runtimeCallInfo)
173 {
174 EcmaVM *vm = runtimeCallInfo->GetVM();
175 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
176 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
177 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
178 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretPosition(nativeNode);
179 return panda::JSValueRef::Undefined(vm);
180 }
181
SetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)182 ArkUINativeModuleValue TextInputBridge::SetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo)
183 {
184 EcmaVM *vm = runtimeCallInfo->GetVM();
185 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
186 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
187 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
188 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
189 if (secondArg->IsNumber()) {
190 int32_t option = secondArg->Int32Value(vm);
191 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCopyOption(nativeNode, option);
192 } else {
193 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCopyOption(nativeNode);
194 }
195
196 return panda::JSValueRef::Undefined(vm);
197 }
198
ResetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)199 ArkUINativeModuleValue TextInputBridge::ResetCopyOption(ArkUIRuntimeCallInfo *runtimeCallInfo)
200 {
201 EcmaVM *vm = runtimeCallInfo->GetVM();
202 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
203 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
204 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
205 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCopyOption(nativeNode);
206 return panda::JSValueRef::Undefined(vm);
207 }
208
SetShowPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)209 ArkUINativeModuleValue TextInputBridge::SetShowPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
210 {
211 EcmaVM *vm = runtimeCallInfo->GetVM();
212 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
213 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
214 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
215 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
216
217 if (secondArg->IsBoolean()) {
218 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
219 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowPasswordIcon(nativeNode, value);
220 } else {
221 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPasswordIcon(nativeNode);
222 }
223 return panda::JSValueRef::Undefined(vm);
224 }
225
ResetShowPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)226 ArkUINativeModuleValue TextInputBridge::ResetShowPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
227 {
228 EcmaVM *vm = runtimeCallInfo->GetVM();
229 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
230 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
231 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
232 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPasswordIcon(nativeNode);
233 return panda::JSValueRef::Undefined(vm);
234 }
235
SetShowPassword(ArkUIRuntimeCallInfo * runtimeCallInfo)236 ArkUINativeModuleValue TextInputBridge::SetShowPassword(ArkUIRuntimeCallInfo *runtimeCallInfo)
237 {
238 EcmaVM *vm = runtimeCallInfo->GetVM();
239 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
240 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
241 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
242 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
243
244 if (secondArg->IsBoolean()) {
245 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
246 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowPassword(nativeNode, value);
247 } else {
248 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPassword(nativeNode);
249 }
250 return panda::JSValueRef::Undefined(vm);
251 }
252
ResetShowPassword(ArkUIRuntimeCallInfo * runtimeCallInfo)253 ArkUINativeModuleValue TextInputBridge::ResetShowPassword(ArkUIRuntimeCallInfo *runtimeCallInfo)
254 {
255 EcmaVM *vm = runtimeCallInfo->GetVM();
256 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
257 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
258 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
259 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPassword(nativeNode);
260 return panda::JSValueRef::Undefined(vm);
261 }
262
SetPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)263 ArkUINativeModuleValue TextInputBridge::SetPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
264 {
265 EcmaVM *vm = runtimeCallInfo->GetVM();
266 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
267 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
268 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
269 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(2);
270 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
271
272 PasswordIcon passwordIcon;
273 struct ArkUIPasswordIconType value = {"", "", "", "", "", ""};
274 if (!ArkTSUtils::GetJsPasswordIcon(vm, secondArg, thirdArg, passwordIcon)) {
275 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordIcon(nativeNode);
276 } else {
277 value.showResult = passwordIcon.showResult.c_str();
278 value.hideResult = passwordIcon.hideResult.c_str();
279 value.showBundleName = passwordIcon.showBundleName.c_str();
280 value.showModuleName = passwordIcon.showModuleName.c_str();
281 value.hideBundleName = passwordIcon.hideBundleName.c_str();
282 value.hideModuleName = passwordIcon.hideModuleName.c_str();
283 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPasswordIcon(nativeNode, &value);
284 }
285 return panda::JSValueRef::Undefined(vm);
286 }
287
ResetPasswordIcon(ArkUIRuntimeCallInfo * runtimeCallInfo)288 ArkUINativeModuleValue TextInputBridge::ResetPasswordIcon(ArkUIRuntimeCallInfo *runtimeCallInfo)
289 {
290 EcmaVM *vm = runtimeCallInfo->GetVM();
291 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
292 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
293 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
294 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordIcon(nativeNode);
295 return panda::JSValueRef::Undefined(vm);
296 }
297
SetTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)298 ArkUINativeModuleValue TextInputBridge::SetTextAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
299 {
300 EcmaVM *vm = runtimeCallInfo->GetVM();
301 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
302 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
303 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
304 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
305
306 if (secondArg->IsNumber()) {
307 int32_t value = secondArg->Int32Value(vm);
308 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextAlign(nativeNode, value);
309 } else {
310 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextAlign(nativeNode);
311 }
312 return panda::JSValueRef::Undefined(vm);
313 }
314
ResetTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)315 ArkUINativeModuleValue TextInputBridge::ResetTextAlign(ArkUIRuntimeCallInfo *runtimeCallInfo)
316 {
317 EcmaVM *vm = runtimeCallInfo->GetVM();
318 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
319 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
320 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
321 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextAlign(nativeNode);
322 return panda::JSValueRef::Undefined(vm);
323 }
324
SetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)325 ArkUINativeModuleValue TextInputBridge::SetStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
326 {
327 EcmaVM *vm = runtimeCallInfo->GetVM();
328 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
329 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
330 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
331 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
332 if (secondArg->IsString(vm) && secondArg->ToString(vm)->ToString(vm) == "Inline") {
333 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputStyle(nativeNode,
334 static_cast<int32_t>(InputStyle::INLINE));
335 } else {
336 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputStyle(nativeNode);
337 }
338 return panda::JSValueRef::Undefined(vm);
339 }
340
ResetStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)341 ArkUINativeModuleValue TextInputBridge::ResetStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
342 {
343 EcmaVM *vm = runtimeCallInfo->GetVM();
344 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
345 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
346 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
347 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputStyle(nativeNode);
348 return panda::JSValueRef::Undefined(vm);
349 }
350
SetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)351 ArkUINativeModuleValue TextInputBridge::SetSelectionMenuHidden(ArkUIRuntimeCallInfo *runtimeCallInfo)
352 {
353 EcmaVM *vm = runtimeCallInfo->GetVM();
354 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
355 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
356 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
357 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
358
359 if (secondArg->IsBoolean()) {
360 uint32_t menuHiddenValue = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
361 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectionMenuHidden(nativeNode, menuHiddenValue);
362 } else {
363 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuHidden(nativeNode);
364 }
365
366 return panda::JSValueRef::Undefined(vm);
367 }
368
ResetSelectionMenuHidden(ArkUIRuntimeCallInfo * runtimeCallInfo)369 ArkUINativeModuleValue TextInputBridge::ResetSelectionMenuHidden(ArkUIRuntimeCallInfo *runtimeCallInfo)
370 {
371 EcmaVM *vm = runtimeCallInfo->GetVM();
372 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
373 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
374 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
375 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuHidden(nativeNode);
376 return panda::JSValueRef::Undefined(vm);
377 }
378
SetTextInputShowUnderline(ArkUIRuntimeCallInfo * runtimeCallInfo)379 ArkUINativeModuleValue TextInputBridge::SetTextInputShowUnderline(ArkUIRuntimeCallInfo *runtimeCallInfo)
380 {
381 EcmaVM *vm = runtimeCallInfo->GetVM();
382 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
383 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
384 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
385 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
386
387 if (secondArg->IsBoolean()) {
388 uint32_t showUnderLine = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
389 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowUnderline(nativeNode, showUnderLine);
390 } else {
391 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowUnderline(nativeNode);
392 }
393
394 return panda::JSValueRef::Undefined(vm);
395 }
396
ResetTextInputShowUnderline(ArkUIRuntimeCallInfo * runtimeCallInfo)397 ArkUINativeModuleValue TextInputBridge::ResetTextInputShowUnderline(ArkUIRuntimeCallInfo *runtimeCallInfo)
398 {
399 EcmaVM *vm = runtimeCallInfo->GetVM();
400 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
401 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
402 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
403 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowUnderline(nativeNode);
404 return panda::JSValueRef::Undefined(vm);
405 }
406
SetPasswordRules(ArkUIRuntimeCallInfo * runtimeCallInfo)407 ArkUINativeModuleValue TextInputBridge::SetPasswordRules(ArkUIRuntimeCallInfo* runtimeCallInfo)
408 {
409 EcmaVM* vm = runtimeCallInfo->GetVM();
410 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
411 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
412 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
413 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
414 if (secondArg->IsString(vm)) {
415 auto value = secondArg->ToString(vm)->ToString(vm);
416 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPasswordRules(nativeNode, value.c_str());
417 } else {
418 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordRules(nativeNode);
419 }
420 return panda::JSValueRef::Undefined(vm);
421 }
422
ResetPasswordRules(ArkUIRuntimeCallInfo * runtimeCallInfo)423 ArkUINativeModuleValue TextInputBridge::ResetPasswordRules(ArkUIRuntimeCallInfo* runtimeCallInfo)
424 {
425 EcmaVM* vm = runtimeCallInfo->GetVM();
426 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
427 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
428 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
429 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPasswordRules(nativeNode);
430 return panda::JSValueRef::Undefined(vm);
431 }
432
SetEnableAutoFill(ArkUIRuntimeCallInfo * runtimeCallInfo)433 ArkUINativeModuleValue TextInputBridge::SetEnableAutoFill(ArkUIRuntimeCallInfo *runtimeCallInfo)
434 {
435 EcmaVM *vm = runtimeCallInfo->GetVM();
436 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
437 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
438 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
439 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
440
441 if (secondArg->IsBoolean()) {
442 uint32_t enableAutoFill = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
443 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnableAutoFill(nativeNode, enableAutoFill);
444 } else {
445 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableAutoFill(nativeNode);
446 }
447
448 return panda::JSValueRef::Undefined(vm);
449 }
450
ResetEnableAutoFill(ArkUIRuntimeCallInfo * runtimeCallInfo)451 ArkUINativeModuleValue TextInputBridge::ResetEnableAutoFill(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()->getTextInputModifier()->resetTextInputEnableAutoFill(nativeNode);
458 return panda::JSValueRef::Undefined(vm);
459 }
460
SetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)461 ArkUINativeModuleValue TextInputBridge::SetCaretStyle(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> caretWidthArg = runtimeCallInfo->GetCallArgRef(1);
467 Local<JSValueRef> caretColorArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
468 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
469 auto textFieldTheme = ArkTSUtils::GetTheme<TextFieldTheme>();
470 CHECK_NULL_RETURN(textFieldTheme, panda::JSValueRef::Undefined(vm));
471 CalcDimension caretWidth = textFieldTheme->GetCursorWidth();
472 if (!ArkTSUtils::ParseJsDimensionVpNG(vm, caretWidthArg, caretWidth, false) ||
473 LessNotEqual(caretWidth.Value(), 0.0)) {
474 caretWidth = textFieldTheme->GetCursorWidth();
475 }
476 Color color;
477 uint32_t caretColor;
478 if (!caretColorArg->IsUndefined()) {
479 if (ArkTSUtils::ParseJsColorAlpha(vm, caretColorArg, color)) {
480 caretColor = color.GetValue();
481 } else {
482 caretColor = textFieldTheme->GetCursorColor().GetValue();
483 }
484 } else {
485 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaret(
486 nativeNode, caretWidth.Value(), static_cast<int8_t>(caretWidth.Unit()));
487 return panda::JSValueRef::Undefined(vm);
488 }
489 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCaretStyle(
490 nativeNode, caretWidth.Value(), static_cast<int8_t>(caretWidth.Unit()), caretColor);
491 return panda::JSValueRef::Undefined(vm);
492 }
493
ResetCaretStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)494 ArkUINativeModuleValue TextInputBridge::ResetCaretStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
495 {
496 EcmaVM *vm = runtimeCallInfo->GetVM();
497 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
498 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
499 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
500 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCaretStyle(nativeNode);
501 return panda::JSValueRef::Undefined(vm);
502 }
503
SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)504 ArkUINativeModuleValue TextInputBridge::SetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
505 {
506 EcmaVM *vm = runtimeCallInfo->GetVM();
507 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
508 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
509 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
510 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
511
512 if (secondArg->IsBoolean()) {
513 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
514 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnableKeyboardOnFocus(nativeNode, value);
515 } else {
516 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowPasswordIcon(nativeNode);
517 }
518
519 return panda::JSValueRef::Undefined(vm);
520 }
521
ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo * runtimeCallInfo)522 ArkUINativeModuleValue TextInputBridge::ResetEnableKeyboardOnFocus(ArkUIRuntimeCallInfo *runtimeCallInfo)
523 {
524 EcmaVM *vm = runtimeCallInfo->GetVM();
525 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
526 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
527 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
528 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableKeyboardOnFocus(nativeNode);
529 return panda::JSValueRef::Undefined(vm);
530 }
531
SetBarState(ArkUIRuntimeCallInfo * runtimeCallInfo)532 ArkUINativeModuleValue TextInputBridge::SetBarState(ArkUIRuntimeCallInfo *runtimeCallInfo)
533 {
534 EcmaVM *vm = runtimeCallInfo->GetVM();
535 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
536 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
537 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
538 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
539
540 if (secondArg->IsNumber()) {
541 int32_t value = secondArg->Int32Value(vm);
542 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputBarState(nativeNode, value);
543 } else {
544 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBarState(nativeNode);
545 }
546
547 return panda::JSValueRef::Undefined(vm);
548 }
549
ResetBarState(ArkUIRuntimeCallInfo * runtimeCallInfo)550 ArkUINativeModuleValue TextInputBridge::ResetBarState(ArkUIRuntimeCallInfo *runtimeCallInfo)
551 {
552 EcmaVM *vm = runtimeCallInfo->GetVM();
553 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
554 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
555 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
556 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBarState(nativeNode);
557 return panda::JSValueRef::Undefined(vm);
558 }
559
SetTextInputEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)560 ArkUINativeModuleValue TextInputBridge::SetTextInputEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
561 {
562 EcmaVM *vm = runtimeCallInfo->GetVM();
563 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
564 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
565 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
566 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
567
568 if (secondArg->IsNumber()) {
569 int32_t value = secondArg->Int32Value(vm);
570 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnterKeyType(nativeNode, value);
571 } else {
572 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnterKeyType(nativeNode);
573 }
574 return panda::JSValueRef::Undefined(vm);
575 }
576
ResetTextInputEnterKeyType(ArkUIRuntimeCallInfo * runtimeCallInfo)577 ArkUINativeModuleValue TextInputBridge::ResetTextInputEnterKeyType(ArkUIRuntimeCallInfo *runtimeCallInfo)
578 {
579 EcmaVM *vm = runtimeCallInfo->GetVM();
580 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
581 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
582 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
583 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnterKeyType(nativeNode);
584 return panda::JSValueRef::Undefined(vm);
585 }
586
SetTextInputFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)587 ArkUINativeModuleValue TextInputBridge::SetTextInputFontWeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
588 {
589 EcmaVM *vm = runtimeCallInfo->GetVM();
590 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
591 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
592 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
593 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
594 std::string weight;
595 if (secondArg->IsString(vm)) {
596 weight = secondArg->ToString(vm)->ToString(vm);
597 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontWeightStr(nativeNode, weight.c_str());
598 } else if (secondArg->IsNumber()) {
599 weight = std::to_string(secondArg->Int32Value(vm));
600 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontWeightStr(nativeNode, weight.c_str());
601 } else {
602 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontWeight(nativeNode);
603 }
604
605 return panda::JSValueRef::Undefined(vm);
606 }
607
ResetTextInputFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)608 ArkUINativeModuleValue TextInputBridge::ResetTextInputFontWeight(ArkUIRuntimeCallInfo *runtimeCallInfo)
609 {
610 EcmaVM *vm = runtimeCallInfo->GetVM();
611 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
612 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
613 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
614 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontWeight(nativeNode);
615 return panda::JSValueRef::Undefined(vm);
616 }
617
SetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)618 ArkUINativeModuleValue TextInputBridge::SetFontSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
619 {
620 EcmaVM *vm = runtimeCallInfo->GetVM();
621 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
622 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
623 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
624 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
625
626 CalcDimension fontSize;
627 ArkUILengthType value{ nullptr, 0.0, static_cast<int8_t>(DimensionUnit::FP) };
628 if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, fontSize, DimensionUnit::FP, false)) {
629 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontSize(nativeNode);
630 } else {
631 value.unit = static_cast<int8_t>(fontSize.Unit());
632 if (fontSize.CalcValue() != "") {
633 value.string = fontSize.CalcValue().c_str();
634 } else {
635 value.number = fontSize.Value();
636 }
637 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontSize(nativeNode, &value);
638 }
639 return panda::JSValueRef::Undefined(vm);
640 }
641
ResetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)642 ArkUINativeModuleValue TextInputBridge::ResetFontSize(ArkUIRuntimeCallInfo *runtimeCallInfo)
643 {
644 EcmaVM *vm = runtimeCallInfo->GetVM();
645 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
646 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
647 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
648 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontSize(nativeNode);
649 return panda::JSValueRef::Undefined(vm);
650 }
651
SetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)652 ArkUINativeModuleValue TextInputBridge::SetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
653 {
654 EcmaVM *vm = runtimeCallInfo->GetVM();
655 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
656 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
657 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
658 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
659 if (!secondArg->IsNumber()) {
660 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLength(nativeNode);
661 } else {
662 uint32_t maxLength = secondArg->Uint32Value(vm);
663 if (std::isinf(static_cast<float>(secondArg->ToNumber(vm)->Value()))) {
664 maxLength = INT32_MAX; // Infinity
665 }
666 if (GreatOrEqual(maxLength, 0)) {
667 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMaxLength(nativeNode, maxLength);
668 } else {
669 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLength(nativeNode);
670 }
671 }
672 return panda::JSValueRef::Undefined(vm);
673 }
674
ResetMaxLength(ArkUIRuntimeCallInfo * runtimeCallInfo)675 ArkUINativeModuleValue TextInputBridge::ResetMaxLength(ArkUIRuntimeCallInfo *runtimeCallInfo)
676 {
677 EcmaVM *vm = runtimeCallInfo->GetVM();
678 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
679 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
680 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
681 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMaxLength(nativeNode);
682 return panda::JSValueRef::Undefined(vm);
683 }
684
SetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)685 ArkUINativeModuleValue TextInputBridge::SetSelectedBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
686 {
687 EcmaVM *vm = runtimeCallInfo->GetVM();
688 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
689 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
690 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
691 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
692 Color color;
693 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
694 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectedBackgroundColor(nativeNode);
695 } else {
696 if (color.GetAlpha() == DEFAULT_ALPHA) {
697 color = color.ChangeOpacity(DEFAULT_OPACITY);
698 }
699 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectedBackgroundColor(
700 nativeNode, color.GetValue());
701 }
702 return panda::JSValueRef::Undefined(vm);
703 }
704
ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)705 ArkUINativeModuleValue TextInputBridge::ResetSelectedBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
706 {
707 EcmaVM *vm = runtimeCallInfo->GetVM();
708 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
709 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
710 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
711 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectedBackgroundColor(nativeNode);
712 return panda::JSValueRef::Undefined(vm);
713 }
714
SetShowError(ArkUIRuntimeCallInfo * runtimeCallInfo)715 ArkUINativeModuleValue TextInputBridge::SetShowError(ArkUIRuntimeCallInfo *runtimeCallInfo)
716 {
717 EcmaVM *vm = runtimeCallInfo->GetVM();
718 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
719 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
720 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
721 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
722 bool visible = false;
723 std::string error;
724 if (ArkTSUtils::ParseJsString(vm, secondArg, error)) {
725 visible = true;
726 }
727
728 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowError(nativeNode, error.c_str(),
729 static_cast<uint32_t>(visible));
730
731 return panda::JSValueRef::Undefined(vm);
732 }
733
ResetShowError(ArkUIRuntimeCallInfo * runtimeCallInfo)734 ArkUINativeModuleValue TextInputBridge::ResetShowError(ArkUIRuntimeCallInfo *runtimeCallInfo)
735 {
736 EcmaVM *vm = runtimeCallInfo->GetVM();
737 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
738 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
739 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
740 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowError(nativeNode);
741 return panda::JSValueRef::Undefined(vm);
742 }
743
SetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)744 ArkUINativeModuleValue TextInputBridge::SetPlaceholderFont(ArkUIRuntimeCallInfo *runtimeCallInfo)
745 {
746 EcmaVM *vm = runtimeCallInfo->GetVM();
747 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
748 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
749 Local<JSValueRef> jsSize = runtimeCallInfo->GetCallArgRef(1);
750 Local<JSValueRef> jsWeight = runtimeCallInfo->GetCallArgRef(2);
751 Local<JSValueRef> jsFamily = runtimeCallInfo->GetCallArgRef(3);
752 Local<JSValueRef> jsStyle = runtimeCallInfo->GetCallArgRef(4);
753 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
754 ArkUILengthType length{ nullptr, DEFAULT_FONT_SIZE, static_cast<int8_t>(DimensionUnit::FP) };
755 CalcDimension size(DEFAULT_FONT_SIZE, DimensionUnit::FP);
756 if (!ArkTSUtils::ParseJsDimensionFp(vm, jsSize, size) || size.Unit() == DimensionUnit::PERCENT) {
757 auto theme = ArkTSUtils::GetTheme<TextFieldTheme>();
758 if (theme != nullptr) {
759 size = theme->GetFontSize();
760 }
761 }
762 length.unit = static_cast<int8_t>(size.Unit());
763 if (size.CalcValue() != "") {
764 length.string = size.CalcValue().c_str();
765 } else {
766 length.number = size.Value();
767 }
768
769 std::string weight = DEFAULT_FONT_WEIGHT;
770 if (!jsWeight->IsNull()) {
771 if (jsWeight->IsString(vm)) {
772 weight = jsWeight->ToString(vm)->ToString(vm);
773 }
774 if (jsWeight->IsNumber()) {
775 weight = std::to_string(jsWeight->Int32Value(vm));
776 }
777 }
778
779 int32_t style = static_cast<int32_t>(DEFAULT_FONT_STYLE);
780 if (jsStyle->IsNumber()) {
781 style = jsStyle->ToNumber(vm)->Value();
782 }
783
784 struct ArkUIPlaceholderFontType placeholderFont;
785 placeholderFont.size = &length;
786 placeholderFont.weight = weight.c_str();
787 placeholderFont.style = style;
788 std::vector<std::string> fontFamilies;
789 bool isSuccess = !ArkTSUtils::ParseJsFontFamilies(vm, jsFamily, fontFamilies);
790 auto families = std::make_unique<char* []>(fontFamilies.size());
791 if (isSuccess) {
792 placeholderFont.fontFamilies = nullptr;
793 placeholderFont.length = 0;
794 } else {
795 for (uint32_t i = 0; i < fontFamilies.size(); i++) {
796 families[i] = const_cast<char*>(fontFamilies.at(i).c_str());
797 }
798 placeholderFont.fontFamilies = const_cast<const char**>(families.get());
799 placeholderFont.length = fontFamilies.size();
800 }
801
802 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderFont(
803 nativeNode, &placeholderFont);
804 return panda::JSValueRef::Undefined(vm);
805 }
806
ResetPlaceholderFont(ArkUIRuntimeCallInfo * runtimeCallInfo)807 ArkUINativeModuleValue TextInputBridge::ResetPlaceholderFont(ArkUIRuntimeCallInfo *runtimeCallInfo)
808 {
809 EcmaVM *vm = runtimeCallInfo->GetVM();
810 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
811 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
812 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
813 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPlaceholderFont(nativeNode);
814 return panda::JSValueRef::Undefined(vm);
815 }
816
SetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)817 ArkUINativeModuleValue TextInputBridge::SetFontColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
818 {
819 EcmaVM *vm = runtimeCallInfo->GetVM();
820 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
821 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
822 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
823 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
824 Color color;
825 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
826 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontColor(nativeNode);
827 } else {
828 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontColor(nativeNode, color.GetValue());
829 }
830 return panda::JSValueRef::Undefined(vm);
831 }
832
ResetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)833 ArkUINativeModuleValue TextInputBridge::ResetFontColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
834 {
835 EcmaVM *vm = runtimeCallInfo->GetVM();
836 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
837 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
838 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
839 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontColor(nativeNode);
840 return panda::JSValueRef::Undefined(vm);
841 }
842
SetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)843 ArkUINativeModuleValue TextInputBridge::SetFontStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
844 {
845 EcmaVM *vm = runtimeCallInfo->GetVM();
846 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
847 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
848 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
849 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
850 if (secondArg->IsNumber()) {
851 uint32_t fontStyle = secondArg->Uint32Value(vm);
852 if (fontStyle < static_cast<uint32_t>(OHOS::Ace::FontStyle::NORMAL) ||
853 fontStyle > static_cast<uint32_t>(OHOS::Ace::FontStyle::ITALIC)) {
854 fontStyle = static_cast<uint32_t>(OHOS::Ace::FontStyle::NORMAL);
855 }
856 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontStyle(nativeNode, fontStyle);
857 } else {
858 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontStyle(nativeNode);
859 }
860 return panda::JSValueRef::Undefined(vm);
861 }
862
ResetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)863 ArkUINativeModuleValue TextInputBridge::ResetFontStyle(ArkUIRuntimeCallInfo *runtimeCallInfo)
864 {
865 EcmaVM *vm = runtimeCallInfo->GetVM();
866 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
867 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
868 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
869 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontStyle(nativeNode);
870 return panda::JSValueRef::Undefined(vm);
871 }
872
SetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)873 ArkUINativeModuleValue TextInputBridge::SetFontFamily(ArkUIRuntimeCallInfo *runtimeCallInfo)
874 {
875 EcmaVM *vm = runtimeCallInfo->GetVM();
876 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
877 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
878 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
879 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
880
881 std::vector<std::string> fontFamilies;
882 if (!ArkTSUtils::ParseJsFontFamilies(vm, secondArg, fontFamilies)) {
883 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFamily(nativeNode);
884 } else {
885 auto families = std::make_unique<char* []>(fontFamilies.size());
886 for (uint32_t i = 0; i < fontFamilies.size(); i++) {
887 families[i] = const_cast<char*>(fontFamilies.at(i).c_str());
888 }
889 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontFamily(nativeNode,
890 const_cast<const char**>(families.get()), fontFamilies.size());
891 }
892 return panda::JSValueRef::Undefined(vm);
893 }
894
ResetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)895 ArkUINativeModuleValue TextInputBridge::ResetFontFamily(ArkUIRuntimeCallInfo *runtimeCallInfo)
896 {
897 EcmaVM *vm = runtimeCallInfo->GetVM();
898 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
899 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
900 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
901 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFamily(nativeNode);
902 return panda::JSValueRef::Undefined(vm);
903 }
904
SetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)905 ArkUINativeModuleValue TextInputBridge::SetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
906 {
907 EcmaVM* vm = runtimeCallInfo->GetVM();
908 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
909 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
910 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
911 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
912 if (secondArg->IsString(vm)) {
913 auto value = secondArg->ToString(vm)->ToString(vm);
914 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFontFeature(nativeNode, value.c_str());
915 } else {
916 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFeature(nativeNode);
917 }
918 return panda::JSValueRef::Undefined(vm);
919 }
920
ResetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)921 ArkUINativeModuleValue TextInputBridge::ResetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
922 {
923 EcmaVM* vm = runtimeCallInfo->GetVM();
924 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
925 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
926 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
927 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFontFeature(nativeNode);
928 return panda::JSValueRef::Undefined(vm);
929 }
930
SetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)931 ArkUINativeModuleValue TextInputBridge::SetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
932 {
933 EcmaVM* vm = runtimeCallInfo->GetVM();
934 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
935 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
936 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1); // 1: textInputDecoration value
937 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2); // 2: color value
938 Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
939 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
940 auto container = Container::Current();
941 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
942 auto pipelineContext = container->GetPipelineContext();
943 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
944 auto themeManager = pipelineContext->GetThemeManager();
945 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
946 auto theme = themeManager->GetTheme<TextFieldTheme>();
947 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
948 Color color = theme->GetTextStyle().GetTextDecorationColor();
949 int32_t textInputDecoration = static_cast<int32_t>(theme->GetTextStyle().GetTextDecoration());
950 if (secondArg->IsInt()) {
951 textInputDecoration = secondArg->Int32Value(vm);
952 }
953 ArkTSUtils::ParseJsColorAlpha(vm, thirdArg, color, Color::BLACK);
954 int32_t textDecorationStyle = static_cast<int32_t>(DEFAULT_DECORATION_STYLE);
955 if (fourthArg->IsInt()) {
956 textDecorationStyle = fourthArg->Int32Value(vm);
957 }
958 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputDecoration(
959 nativeNode, textInputDecoration, color.GetValue(), textDecorationStyle);
960 return panda::JSValueRef::Undefined(vm);
961 }
962
ResetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)963 ArkUINativeModuleValue TextInputBridge::ResetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
964 {
965 EcmaVM* vm = runtimeCallInfo->GetVM();
966 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
967 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
968 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
969 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputDecoration(nativeNode);
970 return panda::JSValueRef::Undefined(vm);
971 }
972
SetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)973 ArkUINativeModuleValue TextInputBridge::SetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
974 {
975 EcmaVM* vm = runtimeCallInfo->GetVM();
976 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
977 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
978 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
979 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
980 CalcDimension value;
981 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, false)) {
982 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLetterSpacing(nativeNode);
983 } else {
984 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputLetterSpacing(
985 nativeNode, value.Value(), static_cast<int>(value.Unit()));
986 }
987 return panda::JSValueRef::Undefined(vm);
988 }
989
ResetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)990 ArkUINativeModuleValue TextInputBridge::ResetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
991 {
992 EcmaVM* vm = runtimeCallInfo->GetVM();
993 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
994 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
995 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
996 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLetterSpacing(nativeNode);
997 return panda::JSValueRef::Undefined(vm);
998 }
999
SetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1000 ArkUINativeModuleValue TextInputBridge::SetLineHeight(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 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1007 CalcDimension value;
1008 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, true)) {
1009 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineHeight(nativeNode);
1010 } else {
1011 if (value.IsNegative()) {
1012 value.Reset();
1013 }
1014 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputLineHeight(
1015 nativeNode, value.Value(), static_cast<int>(value.Unit()));
1016 }
1017 return panda::JSValueRef::Undefined(vm);
1018 }
1019
ResetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)1020 ArkUINativeModuleValue TextInputBridge::ResetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
1021 {
1022 EcmaVM* vm = runtimeCallInfo->GetVM();
1023 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1024 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1025 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1026 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineHeight(nativeNode);
1027 return panda::JSValueRef::Undefined(vm);
1028 }
1029
SetUnderlineColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1030 ArkUINativeModuleValue TextInputBridge::SetUnderlineColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1031 {
1032 EcmaVM *vm = runtimeCallInfo->GetVM();
1033 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1034 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1035 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1036 Local<JSValueRef> underlineColorArg = runtimeCallInfo->GetCallArgRef(1); // 1: underlineColor value
1037 Local<JSValueRef> normalArg = runtimeCallInfo->GetCallArgRef(2); // 2: normal value
1038 Local<JSValueRef> typingArg = runtimeCallInfo->GetCallArgRef(3); // 3: typing value
1039 Local<JSValueRef> errorArg = runtimeCallInfo->GetCallArgRef(4); // 4: error value
1040 Local<JSValueRef> disableArg = runtimeCallInfo->GetCallArgRef(5); // 5: disable value
1041
1042 Color underlineColor;
1043 if (!underlineColorArg->IsUndefined() && ArkTSUtils::ParseJsColorAlpha(vm, underlineColorArg, underlineColor)) {
1044 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputNormalUnderlineColor(
1045 nativeNode, underlineColor.GetValue());
1046 } else if (!normalArg->IsUndefined() || !typingArg->IsUndefined() ||
1047 !errorArg->IsUndefined() || !disableArg->IsUndefined()) {
1048 UserUnderlineColor userColor = UserUnderlineColor();
1049 Color typingColor;
1050 if (ArkTSUtils::ParseJsColorAlpha(vm, typingArg, typingColor)) {
1051 userColor.typing = typingColor;
1052 }
1053 Color normalColor;
1054 if (ArkTSUtils::ParseJsColorAlpha(vm, normalArg, normalColor)) {
1055 userColor.normal = normalColor;
1056 }
1057 Color errorColor;
1058 if (ArkTSUtils::ParseJsColorAlpha(vm, errorArg, errorColor)) {
1059 userColor.error = errorColor;
1060 }
1061 Color disableColor;
1062 if (ArkTSUtils::ParseJsColorAlpha(vm, disableArg, disableColor)) {
1063 userColor.disable = disableColor;
1064 }
1065 ArkUI_Uint32 values[ARG_GROUP_LENGTH];
1066 values[CALL_ARG_0] = userColor.typing->GetValue();
1067 values[CALL_ARG_1] = userColor.normal->GetValue();
1068 values[CALL_ARG_2] = userColor.error->GetValue();
1069 values[CALL_ARG_3] = userColor.disable->GetValue();
1070 ArkUI_Bool hasValues[ARG_GROUP_LENGTH];
1071 hasValues[CALL_ARG_0] = userColor.typing.has_value();
1072 hasValues[CALL_ARG_1] = userColor.normal.has_value();
1073 hasValues[CALL_ARG_2] = userColor.error.has_value();
1074 hasValues[CALL_ARG_3] = userColor.disable.has_value();
1075 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputUserUnderlineColor(
1076 nativeNode, values, hasValues, ARG_GROUP_LENGTH);
1077 } else {
1078 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputUserUnderlineColor(nativeNode);
1079 }
1080 return panda::JSValueRef::Undefined(vm);
1081 }
1082
ResetUnderlineColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1083 ArkUINativeModuleValue TextInputBridge::ResetUnderlineColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
1084 {
1085 EcmaVM *vm = runtimeCallInfo->GetVM();
1086 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1087 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1088 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1089 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputUserUnderlineColor(nativeNode);
1090 return panda::JSValueRef::Undefined(vm);
1091 }
1092
SetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1093 ArkUINativeModuleValue TextInputBridge::SetMinFontSize(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 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1100 CalcDimension value;
1101 auto pipelineContext = PipelineBase::GetCurrentContext();
1102 CHECK_NULL_RETURN(pipelineContext, panda::NativePointerRef::New(vm, nullptr));
1103 auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1104 CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
1105 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, false)) {
1106 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMinFontSize(nativeNode);
1107 } else {
1108 if (value.IsNegative()) {
1109 value = theme->GetTextStyle().GetAdaptMinFontSize();
1110 }
1111 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputAdaptMinFontSize(
1112 nativeNode, value.Value(), static_cast<int32_t>(value.Unit()));
1113 }
1114 return panda::JSValueRef::Undefined(vm);
1115 }
1116
ResetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1117 ArkUINativeModuleValue TextInputBridge::ResetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1118 {
1119 EcmaVM* vm = runtimeCallInfo->GetVM();
1120 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1121 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1122 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1123 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMinFontSize(nativeNode);
1124 return panda::JSValueRef::Undefined(vm);
1125 }
1126
SetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1127 ArkUINativeModuleValue TextInputBridge::SetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1128 {
1129 EcmaVM* vm = runtimeCallInfo->GetVM();
1130 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1131 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1132 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1133 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1134 CalcDimension value;
1135 auto pipelineContext = PipelineBase::GetCurrentContext();
1136 CHECK_NULL_RETURN(pipelineContext, panda::NativePointerRef::New(vm, nullptr));
1137 auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1138 CHECK_NULL_RETURN(theme, panda::NativePointerRef::New(vm, nullptr));
1139 if (!ArkTSUtils::ParseJsDimensionNG(vm, valueArg, value, DimensionUnit::FP, false)) {
1140 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMaxFontSize(nativeNode);
1141 } else {
1142 if (value.IsNegative()) {
1143 value = theme->GetTextStyle().GetAdaptMaxFontSize();
1144 }
1145 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputAdaptMaxFontSize(
1146 nativeNode, value.Value(), static_cast<int32_t>(value.Unit()));
1147 }
1148 return panda::JSValueRef::Undefined(vm);
1149 }
1150
SetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)1151 ArkUINativeModuleValue TextInputBridge::SetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
1152 {
1153 EcmaVM* vm = runtimeCallInfo->GetVM();
1154 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1155 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1156 Local<JSValueRef> workBreakArg = runtimeCallInfo->GetCallArgRef(1);
1157 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1158 if (workBreakArg->IsNull() || workBreakArg->IsUndefined() || !workBreakArg->IsNumber()) {
1159 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWordBreak(nativeNode);
1160 return panda::JSValueRef::Undefined(vm);
1161 }
1162 uint32_t wordBreak = workBreakArg->Uint32Value(vm);
1163 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputWordBreak(nativeNode, wordBreak);
1164 return panda::JSValueRef::Undefined(vm);
1165 }
1166
ResetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)1167 ArkUINativeModuleValue TextInputBridge::ResetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
1168 {
1169 EcmaVM* vm = runtimeCallInfo->GetVM();
1170 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1171 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1172 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1173 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWordBreak(nativeNode);
1174 return panda::JSValueRef::Undefined(vm);
1175 }
1176
SetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)1177 ArkUINativeModuleValue TextInputBridge::SetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1178 {
1179 EcmaVM* vm = runtimeCallInfo->GetVM();
1180 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1181 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1182 Local<JSValueRef> lineBreakStrategyArg = runtimeCallInfo->GetCallArgRef(1);
1183 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1184 if (lineBreakStrategyArg->IsNull() || lineBreakStrategyArg->IsUndefined() || !lineBreakStrategyArg->IsNumber()) {
1185 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineBreakStrategy(nativeNode);
1186 return panda::JSValueRef::Undefined(vm);
1187 }
1188 uint32_t lineBreakStrategy = lineBreakStrategyArg->Uint32Value(vm);
1189 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputLineBreakStrategy(nativeNode, lineBreakStrategy);
1190 return panda::JSValueRef::Undefined(vm);
1191 }
1192
ResetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)1193 ArkUINativeModuleValue TextInputBridge::ResetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1194 {
1195 EcmaVM* vm = runtimeCallInfo->GetVM();
1196 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1197 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1198 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1199 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputLineBreakStrategy(nativeNode);
1200 return panda::JSValueRef::Undefined(vm);
1201 }
1202
ResetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)1203 ArkUINativeModuleValue TextInputBridge::ResetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
1204 {
1205 EcmaVM* vm = runtimeCallInfo->GetVM();
1206 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1207 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1208 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1209 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputAdaptMaxFontSize(nativeNode);
1210 return panda::JSValueRef::Undefined(vm);
1211 }
1212
SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)1213 ArkUINativeModuleValue TextInputBridge::SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1214 {
1215 EcmaVM* vm = runtimeCallInfo->GetVM();
1216 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1217 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1218 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1219 Local<JSValueRef> valueArg = runtimeCallInfo->GetCallArgRef(1);
1220 int32_t value = valueArg->ToNumber(vm)->Value();
1221 if (value < 0 || value >= static_cast<int32_t>(HEIGHT_ADAPTIVE_POLICY.size())) {
1222 value = 0;
1223 }
1224 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputHeightAdaptivePolicy(nativeNode, value);
1225 return panda::JSValueRef::Undefined(vm);
1226 }
1227
ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)1228 ArkUINativeModuleValue TextInputBridge::ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1229 {
1230 EcmaVM* vm = runtimeCallInfo->GetVM();
1231 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1232 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1233 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1234 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputHeightAdaptivePolicy(nativeNode);
1235 return panda::JSValueRef::Undefined(vm);
1236 }
1237
SetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)1238 ArkUINativeModuleValue TextInputBridge::SetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
1239 {
1240 EcmaVM* vm = runtimeCallInfo->GetVM();
1241 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1242 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1243 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1244 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1245 int32_t value;
1246 if (secondArg->IsUndefined()) {
1247 value = DEFAULT_OVERFLOW;
1248 } else if (secondArg->IsNumber()) {
1249 value = secondArg->Int32Value(vm);
1250 } else {
1251 value = DEFAULT_OVERFLOW;
1252 }
1253 if (value < 0 || value >= static_cast<int32_t>(TEXT_OVERFLOWS.size())) {
1254 value = DEFAULT_OVERFLOW;
1255 }
1256 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextOverflow(nativeNode, value);
1257 return panda::JSValueRef::Undefined(vm);
1258 }
1259
ResetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)1260 ArkUINativeModuleValue TextInputBridge::ResetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
1261 {
1262 EcmaVM* vm = runtimeCallInfo->GetVM();
1263 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1264 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1265 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1266 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextOverflow(nativeNode);
1267 return panda::JSValueRef::Undefined(vm);
1268 }
1269
SetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1270 ArkUINativeModuleValue TextInputBridge::SetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1271 {
1272 EcmaVM* vm = runtimeCallInfo->GetVM();
1273 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1274 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1275 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1276 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1277 CalcDimension indent;
1278 if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, indent, DimensionUnit::VP, true)) {
1279 indent.Reset();
1280 }
1281
1282 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextIndent(
1283 nativeNode, indent.Value(), static_cast<int8_t>(indent.Unit()));
1284 return panda::JSValueRef::Undefined(vm);
1285 }
1286
ResetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)1287 ArkUINativeModuleValue TextInputBridge::ResetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
1288 {
1289 EcmaVM* vm = runtimeCallInfo->GetVM();
1290 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1291 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1292 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1293 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputTextIndent(nativeNode);
1294 return panda::JSValueRef::Undefined(vm);
1295 }
1296
ConvertStrToCancelButtonStyle(const std::string & value)1297 static CancelButtonStyle ConvertStrToCancelButtonStyle(const std::string& value)
1298 {
1299 if (value == "CONSTANT") {
1300 return CancelButtonStyle::CONSTANT;
1301 } else if (value == "INVISIBLE") {
1302 return CancelButtonStyle::INVISIBLE;
1303 } else {
1304 return CancelButtonStyle::INPUT;
1305 }
1306 }
1307
SetCancelButton(ArkUIRuntimeCallInfo * runtimeCallInfo)1308 ArkUINativeModuleValue TextInputBridge::SetCancelButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
1309 {
1310 EcmaVM* vm = runtimeCallInfo->GetVM();
1311 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1312 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1313 Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1314 Local<JSValueRef> sizeArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
1315 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
1316 Local<JSValueRef> srcArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_4);
1317
1318 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1319 auto container = Container::Current();
1320 CHECK_NULL_RETURN(container, panda::JSValueRef::Undefined(vm));
1321 auto pipelineContext = container->GetPipelineContext();
1322 CHECK_NULL_RETURN(pipelineContext, panda::JSValueRef::Undefined(vm));
1323 auto themeManager = pipelineContext->GetThemeManager();
1324 CHECK_NULL_RETURN(themeManager, panda::JSValueRef::Undefined(vm));
1325 auto theme = themeManager->GetTheme<TextFieldTheme>();
1326 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
1327
1328 int32_t style = static_cast<int32_t>(theme->GetCancelButtonStyle());
1329 if (styleArg->IsString(vm)) {
1330 CancelButtonStyle cancelButtonStyle = ConvertStrToCancelButtonStyle(styleArg->ToString(vm)->ToString(vm));
1331 style = static_cast<int32_t>(cancelButtonStyle);
1332 }
1333
1334 CalcDimension iconSize;
1335 if (!sizeArg->IsUndefined() && !sizeArg->IsNull() &&
1336 ArkTSUtils::ParseJsDimensionVpNG(vm, sizeArg, iconSize, false)) {
1337 if (LessNotEqual(iconSize.Value(), 0.0) || iconSize.Unit() == DimensionUnit::PERCENT) {
1338 iconSize = theme->GetIconSize();
1339 }
1340 } else {
1341 iconSize = theme->GetIconSize();
1342 }
1343
1344 Color value;
1345 uint32_t color;
1346 if (!colorArg->IsUndefined() && !colorArg->IsNull() &&
1347 ArkTSUtils::ParseJsColorAlpha(vm, colorArg, value)) {
1348 color = value.GetValue();
1349 } else {
1350 color = theme->GetCancelButtonIconColor().GetValue();
1351 }
1352
1353 std::string srcStr;
1354 if (srcArg->IsUndefined() || srcArg->IsNull() ||
1355 !ArkTSUtils::ParseJsMedia(vm, srcArg, srcStr)) {
1356 srcStr = "";
1357 }
1358
1359 struct ArkUISizeType size = {iconSize.Value(), static_cast<int8_t>(iconSize.Unit())};
1360 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputCancelButton(nativeNode,
1361 style, &size, color, srcStr.c_str());
1362 return panda::JSValueRef::Undefined(vm);
1363 }
1364
ResetCancelButton(ArkUIRuntimeCallInfo * runtimeCallInfo)1365 ArkUINativeModuleValue TextInputBridge::ResetCancelButton(ArkUIRuntimeCallInfo* runtimeCallInfo)
1366 {
1367 EcmaVM* vm = runtimeCallInfo->GetVM();
1368 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1369 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1370 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1371 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputCancelButton(nativeNode);
1372 return panda::JSValueRef::Undefined(vm);
1373 }
1374
SetSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)1375 ArkUINativeModuleValue TextInputBridge::SetSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1376 {
1377 EcmaVM* vm = runtimeCallInfo->GetVM();
1378 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1379 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1380 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1381
1382 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1383 if (secondArg->IsBoolean()) {
1384 uint32_t enableSelectAll = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
1385 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectAll(nativeNode, enableSelectAll);
1386 } else {
1387 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectAll(nativeNode);
1388 }
1389 return panda::JSValueRef::Undefined(vm);
1390 }
1391
ResetSelectAll(ArkUIRuntimeCallInfo * runtimeCallInfo)1392 ArkUINativeModuleValue TextInputBridge::ResetSelectAll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1393 {
1394 EcmaVM* vm = runtimeCallInfo->GetVM();
1395 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1396 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1397 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1398 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectAll(nativeNode);
1399 return panda::JSValueRef::Undefined(vm);
1400 }
1401
SetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)1402 ArkUINativeModuleValue TextInputBridge::SetShowCounter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1403 {
1404 EcmaVM *vm = runtimeCallInfo->GetVM();
1405 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1406 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1407 Local<JSValueRef> showCounterArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1408 Local<JSValueRef> highlightBorderArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
1409 Local<JSValueRef> thresholdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
1410 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1411 auto showCounter = false;
1412 if (showCounterArg->IsBoolean()) {
1413 showCounter = showCounterArg->BooleaValue(vm);
1414 }
1415 auto highlightBorder = true;
1416 if (highlightBorderArg->IsBoolean()) {
1417 highlightBorder = highlightBorderArg->BooleaValue(vm);
1418 }
1419 int32_t thresholdValue = DEFAULT_MODE;
1420 if (thresholdArg->IsNumber()) {
1421 thresholdValue = thresholdArg->Int32Value(vm);
1422 if (thresholdValue < MINI_VALID_VALUE || thresholdValue > MAX_VALID_VALUE) {
1423 thresholdValue = ILLEGAL_VALUE;
1424 showCounter = false;
1425 }
1426 }
1427 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputShowCounter(
1428 nativeNode, static_cast<uint32_t>(showCounter), thresholdValue, static_cast<uint32_t>(highlightBorder));
1429 return panda::JSValueRef::Undefined(vm);
1430 }
1431
ResetShowCounter(ArkUIRuntimeCallInfo * runtimeCallInfo)1432 ArkUINativeModuleValue TextInputBridge::ResetShowCounter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1433 {
1434 EcmaVM* vm = runtimeCallInfo->GetVM();
1435 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1436 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1437 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1438 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputShowCounter(nativeNode);
1439 return panda::JSValueRef::Undefined(vm);
1440 }
1441
SetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1442 ArkUINativeModuleValue TextInputBridge::SetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1443 {
1444 EcmaVM *vm = runtimeCallInfo->GetVM();
1445 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1446 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1447 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1448 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1449 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1450 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1451 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1452 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnEditChange(nativeNode);
1453 return panda::JSValueRef::Undefined(vm);
1454 }
1455 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1456 std::function<void(bool)> callback = [vm, frameNode,
1457 func = panda::CopyableGlobal(vm, func)](bool isInEditStatus) {
1458 panda::LocalScope pandaScope(vm);
1459 panda::TryCatch trycatch(vm);
1460 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1461 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1462 panda::BooleanRef::New(vm, isInEditStatus) };
1463 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1464 };
1465 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnEditChange(
1466 nativeNode, reinterpret_cast<void*>(&callback));
1467 return panda::JSValueRef::Undefined(vm);
1468 }
1469
ResetOnEditChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1470 ArkUINativeModuleValue TextInputBridge::ResetOnEditChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1471 {
1472 EcmaVM* vm = runtimeCallInfo->GetVM();
1473 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1474 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1475 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1476 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnEditChange(nativeNode);
1477 return panda::JSValueRef::Undefined(vm);
1478 }
1479
SetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1480 ArkUINativeModuleValue TextInputBridge::SetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1481 {
1482 EcmaVM *vm = runtimeCallInfo->GetVM();
1483 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1484 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1485 Local<JSValueRef> inputFilterArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1486 Local<JSValueRef> errorCallbackArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
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 (inputFilterArg->IsUndefined() || inputFilterArg->IsNull() || !inputFilterArg->IsString(vm)) {
1491 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFilter(nativeNode);
1492 return panda::JSValueRef::Undefined(vm);
1493 }
1494 std::string inputFilter = inputFilterArg->ToString(vm)->ToString(vm);
1495 if (errorCallbackArg->IsUndefined() || errorCallbackArg->IsNull() ||
1496 !errorCallbackArg->IsFunction(vm)) {
1497 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputFilter(nativeNode, inputFilter.c_str(), nullptr);
1498 } else {
1499 panda::Local<panda::FunctionRef> func = errorCallbackArg->ToObject(vm);
1500 std::function<void(const std::string&)> callback = [vm, frameNode,
1501 func = panda::CopyableGlobal(vm, func)](const std::string& info) {
1502 panda::LocalScope pandaScope(vm);
1503 panda::TryCatch trycatch(vm);
1504 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1505 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1506 panda::StringRef::NewFromUtf8(vm, info.c_str()) };
1507 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1508 };
1509 GetArkUINodeModifiers()->getTextInputModifier()->
1510 setTextInputFilter(nativeNode, inputFilter.c_str(), reinterpret_cast<void*>(&callback));
1511 }
1512 return panda::JSValueRef::Undefined(vm);
1513 }
1514
ResetInputFilter(ArkUIRuntimeCallInfo * runtimeCallInfo)1515 ArkUINativeModuleValue TextInputBridge::ResetInputFilter(ArkUIRuntimeCallInfo* runtimeCallInfo)
1516 {
1517 EcmaVM* vm = runtimeCallInfo->GetVM();
1518 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1519 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1520 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1521 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputFilter(nativeNode);
1522 return panda::JSValueRef::Undefined(vm);
1523 }
1524
SetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1525 ArkUINativeModuleValue TextInputBridge::SetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1526 {
1527 EcmaVM *vm = runtimeCallInfo->GetVM();
1528 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1529 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1530 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1531 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1532 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1533 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1534 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1535 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnSubmitWithEvent(nativeNode);
1536 return panda::JSValueRef::Undefined(vm);
1537 }
1538 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1539 std::function<void(int32_t, NG::TextFieldCommonEvent&)> callback = [vm, frameNode,
1540 func = panda::CopyableGlobal(vm, func)](int32_t key, NG::TextFieldCommonEvent& event) {
1541 panda::LocalScope pandaScope(vm);
1542 panda::TryCatch trycatch(vm);
1543 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1544 const char* keys[] = { "text", "keepEditableState" };
1545 Local<JSValueRef> values[] = { panda::StringRef::NewFromUtf8(vm, event.GetText().c_str()),
1546 panda::FunctionRef::New(vm, Framework::JSTextField::JsKeepEditableState) };
1547 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1548 eventObject->SetNativePointerFieldCount(vm, 1);
1549 eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&event));
1550 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1551 panda::IntegerRef::New(vm, key), eventObject };
1552 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1553 };
1554 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnSubmitWithEvent(
1555 nativeNode, reinterpret_cast<void*>(&callback));
1556 return panda::JSValueRef::Undefined(vm);
1557 }
1558
ResetOnSubmit(ArkUIRuntimeCallInfo * runtimeCallInfo)1559 ArkUINativeModuleValue TextInputBridge::ResetOnSubmit(ArkUIRuntimeCallInfo* runtimeCallInfo)
1560 {
1561 EcmaVM* vm = runtimeCallInfo->GetVM();
1562 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1563 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1564 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1565 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnSubmitWithEvent(nativeNode);
1566 return panda::JSValueRef::Undefined(vm);
1567 }
1568
SetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1569 ArkUINativeModuleValue TextInputBridge::SetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1570 {
1571 EcmaVM *vm = runtimeCallInfo->GetVM();
1572 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1573 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1574 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1575 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1576 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1577 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1578 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1579 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnChange(nativeNode);
1580 return panda::JSValueRef::Undefined(vm);
1581 }
1582 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1583 std::function<void(const std::string&, PreviewText&)> callback = [vm, frameNode,
1584 func = panda::CopyableGlobal(vm, func)](const std::string& changeValue, PreviewText& previewText) {
1585 panda::LocalScope pandaScope(vm);
1586 panda::TryCatch trycatch(vm);
1587 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1588 const char* keys[] = { "offset", "value" };
1589 Local<JSValueRef> values[] = { panda::NumberRef::New(vm, previewText.offset),
1590 panda::StringRef::NewFromUtf8(vm, previewText.value.c_str()) };
1591 auto eventObject = panda::ObjectRef::NewWithNamedProperties(vm, ArraySize(keys), keys, values);
1592 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1593 panda::StringRef::NewFromUtf8(vm, changeValue.c_str()), eventObject };
1594 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1595 };
1596 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnChange(
1597 nativeNode, reinterpret_cast<void*>(&callback));
1598 return panda::JSValueRef::Undefined(vm);
1599 }
1600
ResetOnChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1601 ArkUINativeModuleValue TextInputBridge::ResetOnChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1602 {
1603 EcmaVM* vm = runtimeCallInfo->GetVM();
1604 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1605 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1606 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1607 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnChange(nativeNode);
1608 return panda::JSValueRef::Undefined(vm);
1609 }
1610
SetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1611 ArkUINativeModuleValue TextInputBridge::SetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1612 {
1613 EcmaVM *vm = runtimeCallInfo->GetVM();
1614 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1615 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1616 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1617 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1618 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1619 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1620 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1621 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnTextSelectionChange(nativeNode);
1622 return panda::JSValueRef::Undefined(vm);
1623 }
1624 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1625 std::function<void(int32_t, int32_t)> callback = [vm, frameNode,
1626 func = panda::CopyableGlobal(vm, func)](int32_t selectionStart, int selectionEnd) {
1627 panda::LocalScope pandaScope(vm);
1628 panda::TryCatch trycatch(vm);
1629 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1630 panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, selectionStart);
1631 panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, selectionEnd);
1632 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { startParam, endParam };
1633 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1634 };
1635 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnTextSelectionChange(
1636 nativeNode, reinterpret_cast<void*>(&callback));
1637 return panda::JSValueRef::Undefined(vm);
1638 }
1639
ResetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1640 ArkUINativeModuleValue TextInputBridge::ResetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1641 {
1642 EcmaVM* vm = runtimeCallInfo->GetVM();
1643 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1644 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1645 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1646 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnTextSelectionChange(nativeNode);
1647 return panda::JSValueRef::Undefined(vm);
1648 }
1649
SetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1650 ArkUINativeModuleValue TextInputBridge::SetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1651 {
1652 EcmaVM *vm = runtimeCallInfo->GetVM();
1653 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1654 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1655 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1656 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1657 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1658 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1659 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1660 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnContentScroll(nativeNode);
1661 return panda::JSValueRef::Undefined(vm);
1662 }
1663 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1664 std::function<void(float, float)> callback = [vm, frameNode,
1665 func = panda::CopyableGlobal(vm, func)](float totalOffsetX, float totalOffsetY) {
1666 panda::LocalScope pandaScope(vm);
1667 panda::TryCatch trycatch(vm);
1668 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1669 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1670 panda::NumberRef::New(vm, totalOffsetX), panda::NumberRef::New(vm, totalOffsetY) };
1671 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1672 };
1673 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnContentScroll(
1674 nativeNode, reinterpret_cast<void*>(&callback));
1675 return panda::JSValueRef::Undefined(vm);
1676 }
1677
ResetOnContentScroll(ArkUIRuntimeCallInfo * runtimeCallInfo)1678 ArkUINativeModuleValue TextInputBridge::ResetOnContentScroll(ArkUIRuntimeCallInfo* runtimeCallInfo)
1679 {
1680 EcmaVM* vm = runtimeCallInfo->GetVM();
1681 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1682 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1683 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1684 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnContentScroll(nativeNode);
1685 return panda::JSValueRef::Undefined(vm);
1686 }
1687
SetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1688 ArkUINativeModuleValue TextInputBridge::SetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1689 {
1690 EcmaVM *vm = runtimeCallInfo->GetVM();
1691 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1692 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1693 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1694 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1695 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1696 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1697 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1698 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnCopy(nativeNode);
1699 return panda::JSValueRef::Undefined(vm);
1700 }
1701 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1702 std::function<void(const std::string&)> callback = [vm, frameNode,
1703 func = panda::CopyableGlobal(vm, func)](const std::string& copyStr) {
1704 panda::LocalScope pandaScope(vm);
1705 panda::TryCatch trycatch(vm);
1706 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1707 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1708 panda::StringRef::NewFromUtf8(vm, copyStr.c_str()) };
1709 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1710 };
1711 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnCopy(nativeNode, reinterpret_cast<void*>(&callback));
1712 return panda::JSValueRef::Undefined(vm);
1713 }
1714
ResetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1715 ArkUINativeModuleValue TextInputBridge::ResetOnCopy(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()->getTextInputModifier()->resetTextInputOnCopy(nativeNode);
1722 return panda::JSValueRef::Undefined(vm);
1723 }
1724
SetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1725 ArkUINativeModuleValue TextInputBridge::SetOnCut(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()->getTextInputModifier()->resetTextInputOnCut(nativeNode);
1736 return panda::JSValueRef::Undefined(vm);
1737 }
1738 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1739 std::function<void(const std::string&)> callback = [vm, frameNode,
1740 func = panda::CopyableGlobal(vm, func)](const std::string& cutStr) {
1741 panda::LocalScope pandaScope(vm);
1742 panda::TryCatch trycatch(vm);
1743 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1744 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1745 panda::StringRef::NewFromUtf8(vm, cutStr.c_str()) };
1746 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1747 };
1748 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnCut(nativeNode, reinterpret_cast<void*>(&callback));
1749 return panda::JSValueRef::Undefined(vm);
1750 }
1751
ResetOnCut(ArkUIRuntimeCallInfo * runtimeCallInfo)1752 ArkUINativeModuleValue TextInputBridge::ResetOnCut(ArkUIRuntimeCallInfo* runtimeCallInfo)
1753 {
1754 EcmaVM* vm = runtimeCallInfo->GetVM();
1755 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1756 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1757 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1758 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnCut(nativeNode);
1759 return panda::JSValueRef::Undefined(vm);
1760 }
1761
SetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1762 ArkUINativeModuleValue TextInputBridge::SetOnPaste(ArkUIRuntimeCallInfo* runtimeCallInfo)
1763 {
1764 EcmaVM *vm = runtimeCallInfo->GetVM();
1765 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1766 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1767 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1768 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1769 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1770 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1771 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1772 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnPaste(nativeNode);
1773 return panda::JSValueRef::Undefined(vm);
1774 }
1775 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1776 std::function<void(const std::string&, NG::TextCommonEvent&)> callback = [vm, frameNode,
1777 func = panda::CopyableGlobal(vm, func)](const std::string& val, NG::TextCommonEvent& info) {
1778 panda::LocalScope pandaScope(vm);
1779 panda::TryCatch trycatch(vm);
1780 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1781 auto eventObject = panda::ObjectRef::New(vm);
1782 eventObject->SetNativePointerFieldCount(vm, 1);
1783 eventObject->Set(vm, panda::StringRef::NewFromUtf8(vm, "preventDefault"),
1784 panda::FunctionRef::New(vm, Framework::JsPreventDefault));
1785 eventObject->SetNativePointerField(vm, 0, static_cast<void*>(&info));
1786 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = {
1787 panda::StringRef::NewFromUtf8(vm, val.c_str()), eventObject };
1788 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1789 };
1790 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputOnPaste(
1791 nativeNode, reinterpret_cast<void*>(&callback));
1792 return panda::JSValueRef::Undefined(vm);
1793 }
1794
ResetOnPaste(ArkUIRuntimeCallInfo * runtimeCallInfo)1795 ArkUINativeModuleValue TextInputBridge::ResetOnPaste(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 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1801 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputOnPaste(nativeNode);
1802 return panda::JSValueRef::Undefined(vm);
1803 }
1804
SetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)1805 ArkUINativeModuleValue TextInputBridge::SetPadding(ArkUIRuntimeCallInfo *runtimeCallInfo)
1806 {
1807 EcmaVM *vm = runtimeCallInfo->GetVM();
1808 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1809 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1810 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1811 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1812 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
1813 Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
1814 Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_4);
1815
1816 struct ArkUISizeType top = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
1817 struct ArkUISizeType right = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
1818 struct ArkUISizeType bottom = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
1819 struct ArkUISizeType left = { 0.0, static_cast<int8_t>(DimensionUnit::VP) };
1820
1821 CalcDimension topDimen(0, DimensionUnit::VP);
1822 CalcDimension rightDimen(0, DimensionUnit::VP);
1823 CalcDimension bottomDimen(0, DimensionUnit::VP);
1824 CalcDimension leftDimen(0, DimensionUnit::VP);
1825
1826 ArkTSUtils::ParsePadding(vm, secondArg, topDimen, top);
1827 ArkTSUtils::ParsePadding(vm, thirdArg, rightDimen, right);
1828 ArkTSUtils::ParsePadding(vm, forthArg, bottomDimen, bottom);
1829 ArkTSUtils::ParsePadding(vm, fifthArg, leftDimen, left);
1830 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPadding(nativeNode, &top, &right, &bottom, &left);
1831 return panda::JSValueRef::Undefined(vm);
1832 }
1833
ResetPadding(ArkUIRuntimeCallInfo * runtimeCallInfo)1834 ArkUINativeModuleValue TextInputBridge::ResetPadding(ArkUIRuntimeCallInfo* runtimeCallInfo)
1835 {
1836 EcmaVM *vm = runtimeCallInfo->GetVM();
1837 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1838 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1839 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1840 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputPadding(nativeNode);
1841 return panda::JSValueRef::Undefined(vm);
1842 }
1843
SetContentType(ArkUIRuntimeCallInfo * runtimeCallInfo)1844 ArkUINativeModuleValue TextInputBridge::SetContentType(ArkUIRuntimeCallInfo *runtimeCallInfo)
1845 {
1846 EcmaVM *vm = runtimeCallInfo->GetVM();
1847 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1848 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1849 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1850 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1851
1852 if (secondArg->IsNumber()) {
1853 uint32_t value = secondArg->Uint32Value(vm);
1854 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputContentType(nativeNode, value);
1855 } else {
1856 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputContentType(nativeNode);
1857 }
1858 return panda::JSValueRef::Undefined(vm);
1859 }
1860
ResetContentType(ArkUIRuntimeCallInfo * runtimeCallInfo)1861 ArkUINativeModuleValue TextInputBridge::ResetContentType(ArkUIRuntimeCallInfo *runtimeCallInfo)
1862 {
1863 EcmaVM *vm = runtimeCallInfo->GetVM();
1864 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1865 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1866 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1867 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputContentType(nativeNode);
1868 return panda::JSValueRef::Undefined(vm);
1869 }
1870
SetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1871 ArkUINativeModuleValue TextInputBridge::SetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
1872 {
1873 EcmaVM *vm = runtimeCallInfo->GetVM();
1874 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1875 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1876 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1877 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1878 Color color;
1879 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
1880 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBackgroundColor(nativeNode);
1881 } else {
1882 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputBackgroundColor(nativeNode, color.GetValue());
1883 }
1884 return panda::JSValueRef::Undefined(vm);
1885 }
1886
ResetBackgroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)1887 ArkUINativeModuleValue TextInputBridge::ResetBackgroundColor(ArkUIRuntimeCallInfo *runtimeCallInfo)
1888 {
1889 EcmaVM *vm = runtimeCallInfo->GetVM();
1890 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1891 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1892 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1893 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputBackgroundColor(nativeNode);
1894 return panda::JSValueRef::Undefined(vm);
1895 }
1896
SetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)1897 ArkUINativeModuleValue TextInputBridge::SetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
1898 {
1899 EcmaVM *vm = runtimeCallInfo->GetVM();
1900 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1901 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
1902 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1903 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
1904 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_2);
1905 Local<JSValueRef> forthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_3);
1906 Local<JSValueRef> fifthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_4);
1907 ArkUISizeType top = ArkTSUtils::ParseJsToArkUISize(vm, secondArg);
1908 ArkUISizeType right = ArkTSUtils::ParseJsToArkUISize(vm, thirdArg);
1909 ArkUISizeType bottom = ArkTSUtils::ParseJsToArkUISize(vm, forthArg);
1910 ArkUISizeType left = ArkTSUtils::ParseJsToArkUISize(vm, fifthArg);
1911 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputMargin(nativeNode, &top, &right, &bottom, &left);
1912 return panda::JSValueRef::Undefined(vm);
1913 }
1914
ResetMargin(ArkUIRuntimeCallInfo * runtimeCallInfo)1915 ArkUINativeModuleValue TextInputBridge::ResetMargin(ArkUIRuntimeCallInfo *runtimeCallInfo)
1916 {
1917 EcmaVM *vm = runtimeCallInfo->GetVM();
1918 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1919 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1920 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1921 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputMargin(nativeNode);
1922 return panda::JSValueRef::Undefined(vm);
1923 }
1924
SetText(ArkUIRuntimeCallInfo * runtimeCallInfo)1925 ArkUINativeModuleValue TextInputBridge::SetText(ArkUIRuntimeCallInfo* runtimeCallInfo)
1926 {
1927 EcmaVM* vm = runtimeCallInfo->GetVM();
1928 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1929 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1930 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1931
1932 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1933 if (secondArg->IsString(vm)) {
1934 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextString(nativeNode, secondArg->ToString(vm)->
1935 ToString(vm).c_str());
1936 } else {
1937 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextString(nativeNode, "");
1938 }
1939 return panda::JSValueRef::Undefined(vm);
1940 }
ResetText(ArkUIRuntimeCallInfo * runtimeCallInfo)1941 ArkUINativeModuleValue TextInputBridge::ResetText(ArkUIRuntimeCallInfo* runtimeCallInfo)
1942 {
1943 EcmaVM* vm = runtimeCallInfo->GetVM();
1944 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1945 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1946 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1947 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputTextString(nativeNode, "");
1948 return panda::JSValueRef::Undefined(vm);
1949 }
SetPlaceholder(ArkUIRuntimeCallInfo * runtimeCallInfo)1950 ArkUINativeModuleValue TextInputBridge::SetPlaceholder(ArkUIRuntimeCallInfo* runtimeCallInfo)
1951 {
1952 EcmaVM* vm = runtimeCallInfo->GetVM();
1953 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1954 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1955 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
1956
1957 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1958 if (secondArg->IsString(vm)) {
1959 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderString(nativeNode, secondArg->
1960 ToString(vm)->ToString(vm).c_str());
1961 } else {
1962 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderString(nativeNode, "");
1963 }
1964 return panda::JSValueRef::Undefined(vm);
1965 }
ResetPlaceholder(ArkUIRuntimeCallInfo * runtimeCallInfo)1966 ArkUINativeModuleValue TextInputBridge::ResetPlaceholder(ArkUIRuntimeCallInfo* runtimeCallInfo)
1967 {
1968 EcmaVM* vm = runtimeCallInfo->GetVM();
1969 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1970 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1971 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1972 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputPlaceholderString(nativeNode, "");
1973 return panda::JSValueRef::Undefined(vm);
1974 }
SetController(ArkUIRuntimeCallInfo * runtimeCallInfo)1975 ArkUINativeModuleValue TextInputBridge::SetController(ArkUIRuntimeCallInfo* runtimeCallInfo)
1976 {
1977 EcmaVM* vm = runtimeCallInfo->GetVM();
1978 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1979 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
1980 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
1981
1982 auto nodePtr = GetArkUINodeModifiers()->getTextInputModifier()->getTextInputController(nativeNode);
1983 auto node = AceType::Claim(reinterpret_cast<TextFieldController*>(nodePtr));
1984
1985 OHOS::Ace::Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
1986 OHOS::Ace::Framework::JSTextEditableController* jsController =
1987 OHOS::Ace::Framework::JSRef<OHOS::Ace::Framework::JSObject>::Cast(info[1])->Unwrap<OHOS::Ace::Framework::
1988 JSTextEditableController>();
1989 if (jsController) {
1990 jsController->SetController(node);
1991 }
1992 return panda::JSValueRef::Undefined(vm);
1993 }
ResetController(ArkUIRuntimeCallInfo * runtimeCallInfo)1994 ArkUINativeModuleValue TextInputBridge::ResetController(ArkUIRuntimeCallInfo* runtimeCallInfo)
1995 {
1996 EcmaVM* vm = runtimeCallInfo->GetVM();
1997 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1998 return panda::JSValueRef::Undefined(vm);
1999 }
2000
SetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)2001 ArkUINativeModuleValue TextInputBridge::SetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2002 {
2003 EcmaVM *vm = runtimeCallInfo->GetVM();
2004 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2005 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2006 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
2007 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2008
2009 if (secondArg->IsBoolean()) {
2010 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2011 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnablePreviewText(nativeNode, value);
2012 } else {
2013 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnablePreviewText(nativeNode);
2014 }
2015 return panda::JSValueRef::Undefined(vm);
2016 }
2017
ResetEnablePreviewText(ArkUIRuntimeCallInfo * runtimeCallInfo)2018 ArkUINativeModuleValue TextInputBridge::ResetEnablePreviewText(ArkUIRuntimeCallInfo* runtimeCallInfo)
2019 {
2020 EcmaVM* vm = runtimeCallInfo->GetVM();
2021 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2022 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
2023 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2024 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnablePreviewText(nativeNode);
2025 return panda::JSValueRef::Undefined(vm);
2026 }
2027
SetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)2028 ArkUINativeModuleValue TextInputBridge::SetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
2029 {
2030 EcmaVM* vm = runtimeCallInfo->GetVM();
2031 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2032 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2033 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2034 NG::OnCreateMenuCallback onCreateMenuCallback;
2035 NG::OnMenuItemClickCallback onMenuItemClickCallback;
2036 if (!ArkTSUtils::ParseSelectionMenuOptions(runtimeCallInfo, vm, onCreateMenuCallback, onMenuItemClickCallback)) {
2037 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuOptions(nativeNode);
2038 return panda::JSValueRef::Undefined(vm);
2039 }
2040 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputSelectionMenuOptions(
2041 nativeNode, reinterpret_cast<void*>(&onCreateMenuCallback), reinterpret_cast<void*>(&onMenuItemClickCallback));
2042 return panda::JSValueRef::Undefined(vm);
2043 }
2044
ResetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)2045 ArkUINativeModuleValue TextInputBridge::ResetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
2046 {
2047 EcmaVM* vm = runtimeCallInfo->GetVM();
2048 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2049 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2050 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2051 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputSelectionMenuOptions(nativeNode);
2052 return panda::JSValueRef::Undefined(vm);
2053 }
2054
SetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2055 ArkUINativeModuleValue TextInputBridge::SetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2056 {
2057 EcmaVM* vm = runtimeCallInfo->GetVM();
2058 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2059 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2060 Local<JSValueRef> widthArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2061 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2062 auto value = widthArg->ToString(vm)->ToString(vm);
2063 if (value.empty()) {
2064 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWidth(nativeNode);
2065 return panda::JSValueRef::Undefined(vm);
2066 }
2067 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputWidth(
2068 nativeNode, value.c_str());
2069 return panda::JSValueRef::Undefined(vm);
2070 }
2071
ResetWidth(ArkUIRuntimeCallInfo * runtimeCallInfo)2072 ArkUINativeModuleValue TextInputBridge::ResetWidth(ArkUIRuntimeCallInfo* runtimeCallInfo)
2073 {
2074 EcmaVM* vm = runtimeCallInfo->GetVM();
2075 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2076 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2077 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2078 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputWidth(nativeNode);
2079 return panda::JSValueRef::Undefined(vm);
2080 }
2081
SetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)2082 ArkUINativeModuleValue TextInputBridge::SetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
2083 {
2084 EcmaVM* vm = runtimeCallInfo->GetVM();
2085 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2086 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2087 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_1);
2088 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2089
2090 if (secondArg->IsBoolean()) {
2091 uint32_t value = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
2092 GetArkUINodeModifiers()->getTextInputModifier()->setTextInputEnableHapticFeedback(nativeNode, value);
2093 } else {
2094 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableHapticFeedback(nativeNode);
2095 }
2096 return panda::JSValueRef::Undefined(vm);
2097 }
2098
ResetEnableHapticFeedback(ArkUIRuntimeCallInfo * runtimeCallInfo)2099 ArkUINativeModuleValue TextInputBridge::ResetEnableHapticFeedback(ArkUIRuntimeCallInfo* runtimeCallInfo)
2100 {
2101 EcmaVM* vm = runtimeCallInfo->GetVM();
2102 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
2103 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(CALL_ARG_0);
2104 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
2105 GetArkUINodeModifiers()->getTextInputModifier()->resetTextInputEnableHapticFeedback(nativeNode);
2106 return panda::JSValueRef::Undefined(vm);
2107 }
2108 } // namespace OHOS::Ace::NG
2109