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