1 /*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "bridge/declarative_frontend/engine/jsi/nativeModule/arkts_native_text_bridge.h"
16
17 #include "base/utils/string_utils.h"
18 #include "base/utils/utils.h"
19 #include "bridge/declarative_frontend/engine/js_ref_ptr.h"
20 #include "bridge/declarative_frontend/engine/jsi/jsi_types.h"
21 #include "bridge/declarative_frontend/style_string/js_span_string.h"
22 #include "core/components/common/properties/shadow.h"
23 #include "core/components_ng/pattern/text/text_model_ng.h"
24 #include "frameworks/base/geometry/calc_dimension.h"
25 #include "frameworks/base/geometry/dimension.h"
26 #include "frameworks/bridge/declarative_frontend/engine/js_types.h"
27 #include "frameworks/bridge/declarative_frontend/engine/jsi/jsi_value_conversions.h"
28 #include "frameworks/bridge/declarative_frontend/engine/jsi/nativeModule/arkts_utils.h"
29 #include "frameworks/bridge/declarative_frontend/jsview/js_shape_abstract.h"
30 #include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h"
31 #include "frameworks/bridge/declarative_frontend/jsview/js_text.h"
32
33 namespace OHOS::Ace::NG {
34 namespace {
35 constexpr int PARAM_ARR_LENGTH_1 = 1;
36 constexpr int PARAM_ARR_LENGTH_2 = 2;
37 constexpr int SIZE_OF_TEXT_CASES = 2;
38 constexpr double DEFAULT_SPAN_FONT_SIZE = 16;
39 constexpr DimensionUnit DEFAULT_SPAN_FONT_UNIT = DimensionUnit::FP;
40 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
41 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
42 const Color DEFAULT_DECORATION_COLOR = Color::BLACK;
43 const std::string DEFAULT_FONT_WEIGHT = "400";
44 constexpr int DEFAULT_VARIABLE_FONT_WEIGHT = 400;
45 constexpr int NUM_0 = 0;
46 constexpr int NUM_1 = 1;
47 constexpr int NUM_2 = 2;
48 constexpr int NUM_3 = 3;
49 constexpr int NUM_4 = 4;
50 constexpr int NUM_5 = 5;
51 constexpr int NUM_6 = 6;
52 constexpr int NUM_7 = 7;
53 const std::vector<TextOverflow> TEXT_OVERFLOWS = { TextOverflow::NONE, TextOverflow::CLIP, TextOverflow::ELLIPSIS,
54 TextOverflow::MARQUEE };
55 const std::vector<std::string> TEXT_DETECT_TYPES = { "phoneNum", "url", "email", "location", "datetime" };
56 } // namespace
57
SetFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)58 ArkUINativeModuleValue TextBridge::SetFontWeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
59 {
60 EcmaVM* vm = runtimeCallInfo->GetVM();
61 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
62 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
63 Local<JSValueRef> weightArg = runtimeCallInfo->GetCallArgRef(NUM_1);
64 Local<JSValueRef> optionsArg = runtimeCallInfo->GetCallArgRef(NUM_2);
65 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
66
67 ArkUIFontWeightWithOptionsStruct weightInfo;
68 int32_t variableFontWeight = DEFAULT_VARIABLE_FONT_WEIGHT;
69 std::string weight = DEFAULT_FONT_WEIGHT;
70 if (!weightArg->IsNull()) {
71 if (weightArg->IsNumber()) {
72 weight = std::to_string(weightArg->Int32Value(vm));
73 variableFontWeight = weightArg->Int32Value(vm);
74 } else if (weightArg->IsString(vm)) {
75 weight = weightArg->ToString(vm)->ToString(vm);
76 variableFontWeight = StringUtils::StringToInt(weight);
77 }
78 }
79 weightInfo.weight = weight.c_str();
80 weightInfo.variableFontWeight = variableFontWeight;
81
82 if (optionsArg->IsBoolean()) {
83 weightInfo.enableVariableFontWeight = static_cast<int32_t>(optionsArg->BooleaValue(vm));
84 }
85 GetArkUINodeModifiers()->getTextModifier()->setFontWeightWithOption(nativeNode, &weightInfo);
86 return panda::JSValueRef::Undefined(vm);
87 }
88
ResetFontWeight(ArkUIRuntimeCallInfo * runtimeCallInfo)89 ArkUINativeModuleValue TextBridge::ResetFontWeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
90 {
91 EcmaVM* vm = runtimeCallInfo->GetVM();
92 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
93 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
94 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
95 GetArkUINodeModifiers()->getTextModifier()->resetFontWeight(nativeNode);
96 return panda::JSValueRef::Undefined(vm);
97 }
98
SetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)99 ArkUINativeModuleValue TextBridge::SetFontStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
100 {
101 EcmaVM* vm = runtimeCallInfo->GetVM();
102 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
103 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
104 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
105 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
106 if (secondArg->IsNumber()) {
107 uint32_t fontStyle = secondArg->Uint32Value(vm);
108 if (fontStyle < static_cast<uint32_t>(OHOS::Ace::FontStyle::NORMAL) ||
109 fontStyle > static_cast<uint32_t>(OHOS::Ace::FontStyle::ITALIC)) {
110 fontStyle = static_cast<uint32_t>(OHOS::Ace::FontStyle::NORMAL);
111 }
112 GetArkUINodeModifiers()->getTextModifier()->setFontStyle(nativeNode, fontStyle);
113 } else {
114 GetArkUINodeModifiers()->getTextModifier()->resetFontStyle(nativeNode);
115 }
116 return panda::JSValueRef::Undefined(vm);
117 }
118
ResetFontStyle(ArkUIRuntimeCallInfo * runtimeCallInfo)119 ArkUINativeModuleValue TextBridge::ResetFontStyle(ArkUIRuntimeCallInfo* runtimeCallInfo)
120 {
121 EcmaVM* vm = runtimeCallInfo->GetVM();
122 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
123 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
124 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
125 GetArkUINodeModifiers()->getTextModifier()->resetFontStyle(nativeNode);
126 return panda::JSValueRef::Undefined(vm);
127 }
128
SetTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)129 ArkUINativeModuleValue TextBridge::SetTextAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
130 {
131 EcmaVM* vm = runtimeCallInfo->GetVM();
132 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
133 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
134 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
135 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
136 if (secondArg->IsNumber()) {
137 GetArkUINodeModifiers()->getTextModifier()->setTextAlign(nativeNode, secondArg->ToNumber(vm)->Value());
138 } else {
139 GetArkUINodeModifiers()->getTextModifier()->resetTextAlign(nativeNode);
140 }
141 return panda::JSValueRef::Undefined(vm);
142 }
143
ResetTextAlign(ArkUIRuntimeCallInfo * runtimeCallInfo)144 ArkUINativeModuleValue TextBridge::ResetTextAlign(ArkUIRuntimeCallInfo* runtimeCallInfo)
145 {
146 EcmaVM* vm = runtimeCallInfo->GetVM();
147 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
148 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
149 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
150 GetArkUINodeModifiers()->getTextModifier()->resetTextAlign(nativeNode);
151 return panda::JSValueRef::Undefined(vm);
152 }
153
SetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)154 ArkUINativeModuleValue TextBridge::SetFontColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
155 {
156 EcmaVM* vm = runtimeCallInfo->GetVM();
157 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
158 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
159 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
160 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
161 Color color;
162 if (!ArkTSUtils::ParseJsColorAlpha(vm, secondArg, color)) {
163 GetArkUINodeModifiers()->getTextModifier()->resetFontColor(nativeNode);
164 } else {
165 GetArkUINodeModifiers()->getTextModifier()->setFontColor(nativeNode, color.GetValue());
166 }
167 return panda::JSValueRef::Undefined(vm);
168 }
ResetFontColor(ArkUIRuntimeCallInfo * runtimeCallInfo)169 ArkUINativeModuleValue TextBridge::ResetFontColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
170 {
171 EcmaVM* vm = runtimeCallInfo->GetVM();
172 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
173 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
174 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
175 GetArkUINodeModifiers()->getTextModifier()->resetFontColor(nativeNode);
176 return panda::JSValueRef::Undefined(vm);
177 }
178
SetForegroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)179 ArkUINativeModuleValue TextBridge::SetForegroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
180 {
181 EcmaVM *vm = runtimeCallInfo->GetVM();
182 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
183 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
184 auto colorArg = runtimeCallInfo->GetCallArgRef(1);
185 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
186
187 ForegroundColorStrategy strategy;
188 if (ArkTSUtils::ParseJsColorStrategy(vm, colorArg, strategy)) {
189 auto strategyInt = static_cast<uint32_t>(ForegroundColorStrategy::INVERT);
190 GetArkUINodeModifiers()->getTextModifier()->setTextForegroundColor(nativeNode, false, strategyInt);
191 return panda::JSValueRef::Undefined(vm);
192 }
193 Color foregroundColor;
194 if (!ArkTSUtils::ParseJsColorAlpha(vm, colorArg, foregroundColor)) {
195 GetArkUINodeModifiers()->getTextModifier()->resetTextForegroundColor(nativeNode);
196 } else {
197 GetArkUINodeModifiers()->getTextModifier()->setTextForegroundColor(
198 nativeNode, true, foregroundColor.GetValue());
199 }
200 return panda::JSValueRef::Undefined(vm);
201 }
202
ResetForegroundColor(ArkUIRuntimeCallInfo * runtimeCallInfo)203 ArkUINativeModuleValue TextBridge::ResetForegroundColor(ArkUIRuntimeCallInfo* runtimeCallInfo)
204 {
205 EcmaVM* vm = runtimeCallInfo->GetVM();
206 Local<JSValueRef> nodeArg = runtimeCallInfo->GetCallArgRef(0);
207 auto nativeNode = nodePtr(nodeArg->ToNativePointer(vm)->Value());
208 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
209 GetArkUINodeModifiers()->getTextModifier()->resetTextForegroundColor(nativeNode);
210 return panda::JSValueRef::Undefined(vm);
211 }
212
SetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)213 ArkUINativeModuleValue TextBridge::SetFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
214 {
215 EcmaVM* vm = runtimeCallInfo->GetVM();
216 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
217 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
218 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
219 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
220 CalcDimension fontSize;
221 if (!ArkTSUtils::ParseJsDimensionFpNG(vm, secondArg, fontSize, false)) {
222 GetArkUINodeModifiers()->getTextModifier()->resetFontSize(nativeNode);
223 } else {
224 GetArkUINodeModifiers()->getTextModifier()->setFontSize(
225 nativeNode, fontSize.Value(), static_cast<int>(fontSize.Unit()));
226 }
227 return panda::JSValueRef::Undefined(vm);
228 }
ResetFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)229 ArkUINativeModuleValue TextBridge::ResetFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
230 {
231 EcmaVM* vm = runtimeCallInfo->GetVM();
232 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
233 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
234 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
235 GetArkUINodeModifiers()->getTextModifier()->resetFontSize(nativeNode);
236 return panda::JSValueRef::Undefined(vm);
237 }
238
SetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)239 ArkUINativeModuleValue TextBridge::SetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
240 {
241 EcmaVM* vm = runtimeCallInfo->GetVM();
242 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
243 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
244 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
245 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
246 CalcDimension lineHeight(0.0, DEFAULT_SPAN_FONT_UNIT);
247 if (!ArkTSUtils::ParseJsDimensionFpNG(vm, secondArg, lineHeight)) {
248 lineHeight.Reset();
249 }
250 if (lineHeight.IsNegative()) {
251 lineHeight.Reset();
252 }
253 GetArkUINodeModifiers()->getTextModifier()->setTextLineHeight(
254 nativeNode, lineHeight.Value(), static_cast<int8_t>(lineHeight.Unit()));
255 return panda::JSValueRef::Undefined(vm);
256 }
257
ResetLineHeight(ArkUIRuntimeCallInfo * runtimeCallInfo)258 ArkUINativeModuleValue TextBridge::ResetLineHeight(ArkUIRuntimeCallInfo* runtimeCallInfo)
259 {
260 EcmaVM* vm = runtimeCallInfo->GetVM();
261 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
262 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
263 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
264 GetArkUINodeModifiers()->getTextModifier()->resetTextLineHeight(nativeNode);
265 return panda::JSValueRef::Undefined(vm);
266 }
267
SetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)268 ArkUINativeModuleValue TextBridge::SetTextOverflow(ArkUIRuntimeCallInfo* runtimeCallInfo)
269 {
270 EcmaVM* vm = runtimeCallInfo->GetVM();
271 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
272 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
273 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(1);
274 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
275 int32_t value;
276 if (secondArg->IsUndefined()) {
277 value = 0;
278 } else if (secondArg->IsNumber()) {
279 value = secondArg->Int32Value(vm);
280 } else {
281 return panda::JSValueRef::Undefined(vm);
282 }
283 if (value < 0 || value >= static_cast<int32_t>(TEXT_OVERFLOWS.size())) {
284 return panda::JSValueRef::Undefined(vm);
285 }
286 GetArkUINodeModifiers()->getTextModifier()->setTextOverflow(nativeNode, value);
287 return panda::JSValueRef::Undefined(vm);
288 }
289
ResetTextOverflow(ArkUIRuntimeCallInfo * runtimeCallInfo)290 ArkUINativeModuleValue TextBridge::ResetTextOverflow(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()->getTextModifier()->resetTextOverflow(nativeNode);
297 return panda::JSValueRef::Undefined(vm);
298 }
299
SetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)300 ArkUINativeModuleValue TextBridge::SetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
301 {
302 EcmaVM* vm = runtimeCallInfo->GetVM();
303 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
304 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
305 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
306 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
307 Local<JSValueRef> fourthArg = runtimeCallInfo->GetCallArgRef(NUM_3);
308 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
309 int32_t textDecoration = static_cast<int32_t>(TextDecoration::NONE);
310 Color color = DEFAULT_DECORATION_COLOR;
311 int32_t style = static_cast<int32_t>(DEFAULT_DECORATION_STYLE);
312 if (secondArg->IsInt()) {
313 textDecoration = secondArg->Int32Value(vm);
314 }
315 if (!ArkTSUtils::ParseJsColorAlpha(vm, thirdArg, color)) {
316 color = DEFAULT_DECORATION_COLOR;
317 }
318 if (fourthArg->IsInt()) {
319 style = fourthArg->Int32Value(vm);
320 }
321 GetArkUINodeModifiers()->getTextModifier()->setTextDecoration(nativeNode, textDecoration, color.GetValue(), style);
322 return panda::JSValueRef::Undefined(vm);
323 }
324
ResetDecoration(ArkUIRuntimeCallInfo * runtimeCallInfo)325 ArkUINativeModuleValue TextBridge::ResetDecoration(ArkUIRuntimeCallInfo* runtimeCallInfo)
326 {
327 EcmaVM* vm = runtimeCallInfo->GetVM();
328 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
329 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
330 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
331 GetArkUINodeModifiers()->getTextModifier()->resetTextDecoration(nativeNode);
332 return panda::JSValueRef::Undefined(vm);
333 }
334
SetTextCase(ArkUIRuntimeCallInfo * runtimeCallInfo)335 ArkUINativeModuleValue TextBridge::SetTextCase(ArkUIRuntimeCallInfo* runtimeCallInfo)
336 {
337 EcmaVM* vm = runtimeCallInfo->GetVM();
338 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
339 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
340 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
341 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
342 if (secondArg->IsNumber() && secondArg->Int32Value(vm) >= NUM_0 &&
343 secondArg->Int32Value(vm) <= SIZE_OF_TEXT_CASES) {
344 GetArkUINodeModifiers()->getTextModifier()->setTextCase(nativeNode, secondArg->Int32Value(vm));
345 } else {
346 GetArkUINodeModifiers()->getTextModifier()->resetTextCase(nativeNode);
347 }
348 return panda::JSValueRef::Undefined(vm);
349 }
350
ResetTextCase(ArkUIRuntimeCallInfo * runtimeCallInfo)351 ArkUINativeModuleValue TextBridge::ResetTextCase(ArkUIRuntimeCallInfo* runtimeCallInfo)
352 {
353 EcmaVM* vm = runtimeCallInfo->GetVM();
354 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
355 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
356 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
357 GetArkUINodeModifiers()->getTextModifier()->resetTextCase(nativeNode);
358 return panda::JSValueRef::Undefined(vm);
359 }
360
SetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)361 ArkUINativeModuleValue TextBridge::SetMaxLines(ArkUIRuntimeCallInfo* runtimeCallInfo)
362 {
363 EcmaVM* vm = runtimeCallInfo->GetVM();
364 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
365 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
366 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
367 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
368 if (secondArg->IsNumber()) {
369 uint32_t maxLine = secondArg->Uint32Value(vm);
370 GetArkUINodeModifiers()->getTextModifier()->setTextMaxLines(nativeNode, maxLine);
371 } else {
372 GetArkUINodeModifiers()->getTextModifier()->resetTextMaxLines(nativeNode);
373 }
374 return panda::JSValueRef::Undefined(vm);
375 }
376
ResetMaxLines(ArkUIRuntimeCallInfo * runtimeCallInfo)377 ArkUINativeModuleValue TextBridge::ResetMaxLines(ArkUIRuntimeCallInfo* runtimeCallInfo)
378 {
379 EcmaVM* vm = runtimeCallInfo->GetVM();
380 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
381 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
382 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
383 GetArkUINodeModifiers()->getTextModifier()->resetTextMaxLines(nativeNode);
384 return panda::JSValueRef::Undefined(vm);
385 }
386
SetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)387 ArkUINativeModuleValue TextBridge::SetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
388 {
389 EcmaVM* vm = runtimeCallInfo->GetVM();
390 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
391 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
392 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
393 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
394
395 CalcDimension fontSize;
396 if (ArkTSUtils::ParseJsDimensionFpNG(vm, secondArg, fontSize, false)) {
397 GetArkUINodeModifiers()->getTextModifier()->setTextMinFontSize(
398 nativeNode, fontSize.Value(), static_cast<int8_t>(fontSize.Unit()));
399 } else {
400 GetArkUINodeModifiers()->getTextModifier()->resetTextMinFontSize(nativeNode);
401 }
402 return panda::JSValueRef::Undefined(vm);
403 }
404
ReSetMinFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)405 ArkUINativeModuleValue TextBridge::ReSetMinFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
406 {
407 EcmaVM* vm = runtimeCallInfo->GetVM();
408 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
409 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
410 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
411 GetArkUINodeModifiers()->getTextModifier()->resetTextMinFontSize(nativeNode);
412 return panda::JSValueRef::Undefined(vm);
413 }
414
SetDraggable(ArkUIRuntimeCallInfo * runtimeCallInfo)415 ArkUINativeModuleValue TextBridge::SetDraggable(ArkUIRuntimeCallInfo* runtimeCallInfo)
416 {
417 EcmaVM* vm = runtimeCallInfo->GetVM();
418 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
419 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
420 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
421 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
422 uint32_t draggable = false;
423 if (secondArg->IsBoolean()) {
424 draggable = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
425 }
426 GetArkUINodeModifiers()->getTextModifier()->setTextDraggable(nativeNode, draggable);
427 return panda::JSValueRef::Undefined(vm);
428 }
429
ResetDraggable(ArkUIRuntimeCallInfo * runtimeCallInfo)430 ArkUINativeModuleValue TextBridge::ResetDraggable(ArkUIRuntimeCallInfo* runtimeCallInfo)
431 {
432 EcmaVM* vm = runtimeCallInfo->GetVM();
433 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
434 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
435 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
436 GetArkUINodeModifiers()->getTextModifier()->resetTextDraggable(nativeNode);
437 return panda::JSValueRef::Undefined(vm);
438 }
439
SetPrivacySensitive(ArkUIRuntimeCallInfo * runtimeCallInfo)440 ArkUINativeModuleValue TextBridge::SetPrivacySensitive(ArkUIRuntimeCallInfo* runtimeCallInfo)
441 {
442 EcmaVM* vm = runtimeCallInfo->GetVM();
443 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
444 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
445 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
446 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
447 uint32_t sensitive = false;
448 if (secondArg->IsBoolean()) {
449 sensitive = static_cast<uint32_t>(secondArg->ToBoolean(vm)->Value());
450 }
451 GetArkUINodeModifiers()->getTextModifier()->setTextPrivacySensitive(nativeNode, sensitive);
452 return panda::JSValueRef::Undefined(vm);
453 }
454
ResetPrivacySensitive(ArkUIRuntimeCallInfo * runtimeCallInfo)455 ArkUINativeModuleValue TextBridge::ResetPrivacySensitive(ArkUIRuntimeCallInfo* runtimeCallInfo)
456 {
457 EcmaVM* vm = runtimeCallInfo->GetVM();
458 CHECK_NULL_RETURN(vm, panda::JSValueRef::Undefined(vm));
459 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
460 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
461 GetArkUINodeModifiers()->getTextModifier()->resetTextPrivacySensitive(nativeNode);
462 return panda::JSValueRef::Undefined(vm);
463 }
464
SetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)465 ArkUINativeModuleValue TextBridge::SetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
466 {
467 EcmaVM* vm = runtimeCallInfo->GetVM();
468 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
469 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
470 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
471 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
472 CalcDimension fontSize;
473 if (ArkTSUtils::ParseJsDimensionFpNG(vm, secondArg, fontSize, false)) {
474 GetArkUINodeModifiers()->getTextModifier()->setTextMaxFontSize(
475 nativeNode, fontSize.Value(), static_cast<int8_t>(fontSize.Unit()));
476 } else {
477 GetArkUINodeModifiers()->getTextModifier()->resetTextMaxFontSize(nativeNode);
478 }
479
480 return panda::JSValueRef::Undefined(vm);
481 }
482
ResetMaxFontSize(ArkUIRuntimeCallInfo * runtimeCallInfo)483 ArkUINativeModuleValue TextBridge::ResetMaxFontSize(ArkUIRuntimeCallInfo* runtimeCallInfo)
484 {
485 EcmaVM* vm = runtimeCallInfo->GetVM();
486 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
487 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
488 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
489 GetArkUINodeModifiers()->getTextModifier()->resetTextMaxFontSize(nativeNode);
490 return panda::JSValueRef::Undefined(vm);
491 }
492
SetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)493 ArkUINativeModuleValue TextBridge::SetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
494 {
495 EcmaVM* vm = runtimeCallInfo->GetVM();
496 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
497 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
498 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
499 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
500 double minFontScale;
501 if (!ArkTSUtils::ParseJsDouble(vm, secondArg, minFontScale)) {
502 return panda::JSValueRef::Undefined(vm);
503 }
504 if (LessOrEqual(minFontScale, 0.0f)) {
505 GetArkUINodeModifiers()->getTextModifier()->setTextMinFontScale(nativeNode, static_cast<float>(minFontScale));
506 minFontScale = 0.0f;
507 } else if (GreatOrEqual(minFontScale, 1.0f)) {
508 minFontScale = 1.0f;
509 }
510 GetArkUINodeModifiers()->getTextModifier()->setTextMinFontScale(nativeNode, static_cast<float>(minFontScale));
511 return panda::JSValueRef::Undefined(vm);
512 }
513
ResetMinFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)514 ArkUINativeModuleValue TextBridge::ResetMinFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
515 {
516 EcmaVM* vm = runtimeCallInfo->GetVM();
517 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
518 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
519 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
520 GetArkUINodeModifiers()->getTextModifier()->resetTextMinFontScale(nativeNode);
521 return panda::JSValueRef::Undefined(vm);
522 }
523
SetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)524 ArkUINativeModuleValue TextBridge::SetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
525 {
526 EcmaVM* vm = runtimeCallInfo->GetVM();
527 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
528 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
529 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
530 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
531 double maxFontScale;
532 if (!ArkTSUtils::ParseJsDouble(vm, secondArg, maxFontScale)) {
533 return panda::JSValueRef::Undefined(vm);
534 }
535 if (LessOrEqual(maxFontScale, 1.0f)) {
536 maxFontScale = 1.0f;
537 }
538 GetArkUINodeModifiers()->getTextModifier()->setTextMaxFontScale(nativeNode, static_cast<float>(maxFontScale));
539 return panda::JSValueRef::Undefined(vm);
540 }
541
ResetMaxFontScale(ArkUIRuntimeCallInfo * runtimeCallInfo)542 ArkUINativeModuleValue TextBridge::ResetMaxFontScale(ArkUIRuntimeCallInfo* runtimeCallInfo)
543 {
544 EcmaVM* vm = runtimeCallInfo->GetVM();
545 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
546 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
547 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
548 GetArkUINodeModifiers()->getTextModifier()->resetTextMaxFontScale(nativeNode);
549 return panda::JSValueRef::Undefined(vm);
550 }
551
SetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)552 ArkUINativeModuleValue TextBridge::SetFontFamily(ArkUIRuntimeCallInfo* runtimeCallInfo)
553 {
554 EcmaVM* vm = runtimeCallInfo->GetVM();
555 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
556 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
557 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
558 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
559
560 std::vector<std::string> fontFamilies;
561 if (!ArkTSUtils::ParseJsFontFamilies(vm, secondArg, fontFamilies)) {
562 GetArkUINodeModifiers()->getTextModifier()->resetTextFontFamily(nativeNode);
563 return panda::JSValueRef::Undefined(vm);
564 }
565 auto families = std::make_unique<char* []>(fontFamilies.size());
566 for (uint32_t i = 0; i < fontFamilies.size(); i++) {
567 families[i] = const_cast<char*>(fontFamilies.at(i).c_str());
568 }
569 GetArkUINodeModifiers()->getTextModifier()->setTextFontFamily(
570 nativeNode, const_cast<const char**>(families.get()), fontFamilies.size());
571 return panda::JSValueRef::Undefined(vm);
572 }
573
ResetFontFamily(ArkUIRuntimeCallInfo * runtimeCallInfo)574 ArkUINativeModuleValue TextBridge::ResetFontFamily(ArkUIRuntimeCallInfo* runtimeCallInfo)
575 {
576 EcmaVM* vm = runtimeCallInfo->GetVM();
577 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
578 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
579 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
580
581 GetArkUINodeModifiers()->getTextModifier()->resetTextFontFamily(nativeNode);
582 return panda::JSValueRef::Undefined(vm);
583 }
584
SetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)585 ArkUINativeModuleValue TextBridge::SetCopyOption(ArkUIRuntimeCallInfo* runtimeCallInfo)
586 {
587 EcmaVM* vm = runtimeCallInfo->GetVM();
588 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
589 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
590 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
591 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
592 int32_t copyOption = static_cast<int32_t>(CopyOptions::None);
593 if (secondArg->IsInt()) {
594 copyOption = secondArg->Int32Value(vm);
595 }
596 GetArkUINodeModifiers()->getTextModifier()->setTextCopyOption(nativeNode, copyOption);
597 return panda::JSValueRef::Undefined(vm);
598 }
599
ResetCopyOption(ArkUIRuntimeCallInfo * runtimeCallInfo)600 ArkUINativeModuleValue TextBridge::ResetCopyOption(ArkUIRuntimeCallInfo* runtimeCallInfo)
601 {
602 EcmaVM* vm = runtimeCallInfo->GetVM();
603 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
604 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
605 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
606 GetArkUINodeModifiers()->getTextModifier()->resetTextCopyOption(nativeNode);
607 return panda::JSValueRef::Undefined(vm);
608 }
609
SetTextShadow(ArkUIRuntimeCallInfo * runtimeCallInfo)610 ArkUINativeModuleValue TextBridge::SetTextShadow(ArkUIRuntimeCallInfo* runtimeCallInfo)
611 {
612 EcmaVM* vm = runtimeCallInfo->GetVM();
613 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
614 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
615 Local<JSValueRef> radiusArg = runtimeCallInfo->GetCallArgRef(NUM_1);
616 Local<JSValueRef> typeArg = runtimeCallInfo->GetCallArgRef(NUM_2);
617 Local<JSValueRef> colorArg = runtimeCallInfo->GetCallArgRef(NUM_3);
618 Local<JSValueRef> offsetXArg = runtimeCallInfo->GetCallArgRef(NUM_4);
619 Local<JSValueRef> offsetYArg = runtimeCallInfo->GetCallArgRef(NUM_5);
620 Local<JSValueRef> fillArg = runtimeCallInfo->GetCallArgRef(NUM_6);
621 Local<JSValueRef> lengthArg = runtimeCallInfo->GetCallArgRef(NUM_7);
622 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
623 uint32_t length;
624 if (!lengthArg->IsNumber() || lengthArg->Uint32Value(vm) == 0) {
625 return panda::JSValueRef::Undefined(vm);
626 }
627 length = lengthArg->Uint32Value(vm);
628 auto radiusArray = std::make_unique<double[]>(length);
629 auto typeArray = std::make_unique<uint32_t[]>(length);
630 auto colorArray = std::make_unique<uint32_t[]>(length);
631 auto offsetXArray = std::make_unique<double[]>(length);
632 auto offsetYArray = std::make_unique<double[]>(length);
633 auto fillArray = std::make_unique<uint32_t[]>(length);
634 bool radiusParseResult = ArkTSUtils::ParseArray<double>(
635 vm, radiusArg, radiusArray.get(), length, ArkTSUtils::parseShadowRadius);
636 bool typeParseResult = ArkTSUtils::ParseArray<uint32_t>(
637 vm, typeArg, typeArray.get(), length, ArkTSUtils::parseShadowType);
638 bool colorParseResult = ArkTSUtils::ParseArray<uint32_t>(
639 vm, colorArg, colorArray.get(), length, ArkTSUtils::parseShadowColor);
640 bool offsetXParseResult = ArkTSUtils::ParseArray<double>(
641 vm, offsetXArg, offsetXArray.get(), length, ArkTSUtils::parseShadowOffset);
642 bool offsetYParseResult = ArkTSUtils::ParseArray<double>(
643 vm, offsetYArg, offsetYArray.get(), length, ArkTSUtils::parseShadowOffset);
644 bool fillParseResult = ArkTSUtils::ParseArray<uint32_t>(
645 vm, fillArg, fillArray.get(), length, ArkTSUtils::parseShadowFill);
646 if (!radiusParseResult || !colorParseResult || !offsetXParseResult ||
647 !offsetYParseResult || !fillParseResult || !typeParseResult) {
648 return panda::JSValueRef::Undefined(vm);
649 }
650 auto textShadowArray = std::make_unique<ArkUITextShadowStruct[]>(length);
651 CHECK_NULL_RETURN(textShadowArray.get(), panda::JSValueRef::Undefined(vm));
652 for (uint32_t i = 0; i < length; i++) {
653 textShadowArray[i].radius = radiusArray[i];
654 textShadowArray[i].type = typeArray[i];
655 textShadowArray[i].color = colorArray[i];
656 textShadowArray[i].offsetX = offsetXArray[i];
657 textShadowArray[i].offsetY = offsetYArray[i];
658 textShadowArray[i].fill = fillArray[i];
659 }
660 GetArkUINodeModifiers()->getTextModifier()->setTextShadow(nativeNode, textShadowArray.get(), length);
661 return panda::JSValueRef::Undefined(vm);
662 }
663
ResetTextShadow(ArkUIRuntimeCallInfo * runtimeCallInfo)664 ArkUINativeModuleValue TextBridge::ResetTextShadow(ArkUIRuntimeCallInfo* runtimeCallInfo)
665 {
666 EcmaVM* vm = runtimeCallInfo->GetVM();
667 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
668 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
669 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
670 GetArkUINodeModifiers()->getTextModifier()->resetTextShadow(nativeNode);
671 return panda::JSValueRef::Undefined(vm);
672 }
673
SetContent(ArkUIRuntimeCallInfo * runtimeCallInfo)674 ArkUINativeModuleValue TextBridge::SetContent(ArkUIRuntimeCallInfo* runtimeCallInfo)
675 {
676 EcmaVM* vm = runtimeCallInfo->GetVM();
677 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
678 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
679 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
680 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
681 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
682
683 Framework::JSRef<Framework::JSVal> args = info[1];
684 if (args->IsObject() && Framework::JSRef<Framework::JSObject>::Cast(args)->Unwrap<Framework::JSSpanString>()) {
685 auto* spanString = Framework::JSRef<Framework::JSObject>::Cast(args)->Unwrap<Framework::JSSpanString>();
686 auto spanStringController = spanString->GetController();
687 if (spanStringController) {
688 TextModelNG::InitSpanStringController(reinterpret_cast<FrameNode*>(nativeNode), spanStringController);
689 }
690 return panda::JSValueRef::Undefined(vm);
691 }
692 std::string content;
693 if (ArkTSUtils::ParseJsString(vm, secondArg, content)) {
694 GetArkUINodeModifiers()->getTextModifier()->setContent(nativeNode, content.c_str());
695 }
696 return panda::JSValueRef::Undefined(vm);
697 }
698
SetTextController(ArkUIRuntimeCallInfo * runtimeCallInfo)699 ArkUINativeModuleValue TextBridge::SetTextController(ArkUIRuntimeCallInfo* runtimeCallInfo)
700 {
701 EcmaVM* vm = runtimeCallInfo->GetVM();
702 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
703 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
704 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
705 Framework::JsiCallbackInfo info = Framework::JsiCallbackInfo(runtimeCallInfo);
706 Framework::JSRef<Framework::JSVal> args = info[1];
707 if (args->IsObject()) {
708 auto paramObject = Framework::JSRef<Framework::JSObject>::Cast(args);
709 auto controllerObj = paramObject->GetProperty("controller");
710 Framework::JSTextController* jsController = nullptr;
711 if (controllerObj->IsObject()) {
712 jsController =
713 Framework::JSRef<Framework::JSObject>::Cast(controllerObj)->Unwrap<Framework::JSTextController>();
714 }
715 RefPtr<TextControllerBase> controller =
716 TextModelNG::InitTextController(reinterpret_cast<FrameNode*>(nativeNode));
717 if (jsController) {
718 jsController->SetController(controller);
719 }
720 }
721 return panda::JSValueRef::Undefined(vm);
722 }
723
SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)724 ArkUINativeModuleValue TextBridge::SetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
725 {
726 EcmaVM* vm = runtimeCallInfo->GetVM();
727 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
728 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
729 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
730 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
731 if (secondArg->IsNumber()
732 && secondArg->Int32Value(vm) >= static_cast<int32_t>(TextHeightAdaptivePolicy::MAX_LINES_FIRST)
733 && secondArg->Int32Value(vm) <= static_cast<int32_t>(TextHeightAdaptivePolicy::LAYOUT_CONSTRAINT_FIRST)) {
734 auto value = secondArg->Int32Value(vm);
735 GetArkUINodeModifiers()->getTextModifier()->setTextHeightAdaptivePolicy(nativeNode, value);
736 } else {
737 GetArkUINodeModifiers()->getTextModifier()->resetTextHeightAdaptivePolicy(nativeNode);
738 }
739 return panda::JSValueRef::Undefined(vm);
740 }
741
ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo * runtimeCallInfo)742 ArkUINativeModuleValue TextBridge::ResetHeightAdaptivePolicy(ArkUIRuntimeCallInfo* runtimeCallInfo)
743 {
744 EcmaVM* vm = runtimeCallInfo->GetVM();
745 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
746 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
747 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
748 GetArkUINodeModifiers()->getTextModifier()->resetTextHeightAdaptivePolicy(nativeNode);
749 return panda::JSValueRef::Undefined(vm);
750 }
751
SetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)752 ArkUINativeModuleValue TextBridge::SetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
753 {
754 EcmaVM* vm = runtimeCallInfo->GetVM();
755 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
756 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
757 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
758 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
759 CalcDimension indent;
760 if (!ArkTSUtils::ParseJsDimensionFpNG(vm, secondArg, indent) || indent.IsNegative()) {
761 indent.Reset();
762 }
763
764 GetArkUINodeModifiers()->getTextModifier()->setTextIndent(
765 nativeNode, indent.Value(), static_cast<int8_t>(indent.Unit()));
766 return panda::JSValueRef::Undefined(vm);
767 }
768
ResetTextIndent(ArkUIRuntimeCallInfo * runtimeCallInfo)769 ArkUINativeModuleValue TextBridge::ResetTextIndent(ArkUIRuntimeCallInfo* runtimeCallInfo)
770 {
771 EcmaVM* vm = runtimeCallInfo->GetVM();
772 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
773 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
774 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
775 GetArkUINodeModifiers()->getTextModifier()->resetTextIndent(nativeNode);
776 return panda::JSValueRef::Undefined(vm);
777 }
778
SetBaselineOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)779 ArkUINativeModuleValue TextBridge::SetBaselineOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
780 {
781 EcmaVM* vm = runtimeCallInfo->GetVM();
782 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
783 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
784 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
785 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
786 CalcDimension baselineOffset;
787 if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, baselineOffset, DimensionUnit::FP, false)) {
788 baselineOffset.Reset();
789 }
790
791 GetArkUINodeModifiers()->getTextModifier()->setTextBaselineOffset(
792 nativeNode, baselineOffset.Value(), static_cast<int8_t>(baselineOffset.Unit()));
793 return panda::JSValueRef::Undefined(vm);
794 }
795
ResetBaselineOffset(ArkUIRuntimeCallInfo * runtimeCallInfo)796 ArkUINativeModuleValue TextBridge::ResetBaselineOffset(ArkUIRuntimeCallInfo* runtimeCallInfo)
797 {
798 EcmaVM* vm = runtimeCallInfo->GetVM();
799 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
800 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
801 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
802 GetArkUINodeModifiers()->getTextModifier()->resetTextBaselineOffset(nativeNode);
803 return panda::JSValueRef::Undefined(vm);
804 }
805
SetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)806 ArkUINativeModuleValue TextBridge::SetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
807 {
808 EcmaVM* vm = runtimeCallInfo->GetVM();
809 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
810 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
811 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
812 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
813 CalcDimension letterSpacing;
814 if (!ArkTSUtils::ParseJsDimensionNG(vm, secondArg, letterSpacing, DimensionUnit::FP, false)) {
815 letterSpacing.Reset();
816 }
817
818 GetArkUINodeModifiers()->getTextModifier()->setTextLetterSpacing(
819 nativeNode, letterSpacing.Value(), static_cast<int8_t>(letterSpacing.Unit()));
820 return panda::JSValueRef::Undefined(vm);
821 }
822
ResetLetterSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)823 ArkUINativeModuleValue TextBridge::ResetLetterSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
824 {
825 EcmaVM* vm = runtimeCallInfo->GetVM();
826 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
827 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
828 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
829 GetArkUINodeModifiers()->getTextModifier()->resetTextLetterSpacing(nativeNode);
830 return panda::JSValueRef::Undefined(vm);
831 }
832
SetFont(ArkUIRuntimeCallInfo * runtimeCallInfo)833 ArkUINativeModuleValue TextBridge::SetFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
834 {
835 EcmaVM* vm = runtimeCallInfo->GetVM();
836 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
837 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
838 Local<JSValueRef> sizeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
839 Local<JSValueRef> weightArg = runtimeCallInfo->GetCallArgRef(NUM_2);
840 Local<JSValueRef> familyArg = runtimeCallInfo->GetCallArgRef(NUM_3);
841 Local<JSValueRef> styleArg = runtimeCallInfo->GetCallArgRef(NUM_4);
842 Local<JSValueRef> optionsArg = runtimeCallInfo->GetCallArgRef(NUM_5);
843
844 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
845 ArkUIFontWithOptionsStruct fontInfo;
846 CalcDimension fontSize;
847 if (!ArkTSUtils::ParseJsDimensionFpNG(vm, sizeArg, fontSize, false) || sizeArg->IsNull()) {
848 fontSize.SetValue(DEFAULT_SPAN_FONT_SIZE);
849 fontSize.SetUnit(DEFAULT_SPAN_FONT_UNIT);
850 }
851 if (sizeArg->IsUndefined() || fontSize.IsNegative() || fontSize.Unit() == DimensionUnit::PERCENT) {
852 auto theme = ArkTSUtils::GetTheme<TextTheme>();
853 CHECK_NULL_RETURN(theme, panda::JSValueRef::Undefined(vm));
854 auto size = theme->GetTextStyle().GetFontSize();
855 fontInfo.fontSizeNumber = size.Value();
856 fontInfo.fontSizeUnit = static_cast<int8_t>(size.Unit());
857 } else {
858 fontInfo.fontSizeNumber = fontSize.Value();
859 fontInfo.fontSizeUnit = static_cast<int8_t>(fontSize.Unit());
860 }
861
862 int32_t variableFontWeight = DEFAULT_VARIABLE_FONT_WEIGHT;
863 std::string weight = DEFAULT_FONT_WEIGHT;
864 if (!weightArg->IsNull()) {
865 if (weightArg->IsNumber()) {
866 weight = std::to_string(weightArg->Int32Value(vm));
867 variableFontWeight = weightArg->Int32Value(vm);
868 } else if (weightArg->IsString(vm)) {
869 weight = weightArg->ToString(vm)->ToString(vm);
870 variableFontWeight = StringUtils::StringToInt(weight);
871 }
872 }
873 fontInfo.fontWeight = static_cast<uint8_t>(Framework::ConvertStrToFontWeight(weight));
874 fontInfo.variableFontWeight = variableFontWeight;
875
876 if (optionsArg->IsBoolean()) {
877 fontInfo.enableVariableFontWeight = static_cast<int32_t>(optionsArg->BooleaValue(vm));
878 }
879
880 int32_t style = static_cast<int32_t>(DEFAULT_FONT_STYLE);
881 if (styleArg->IsInt()) {
882 style = styleArg->Int32Value(vm);
883 }
884 fontInfo.fontStyle = static_cast<uint8_t>(style);
885
886 std::vector<std::string> fontFamilies;
887 fontInfo.fontFamilies = nullptr;
888 if (!familyArg->IsNull() && ArkTSUtils::ParseJsFontFamilies(vm, familyArg, fontFamilies)) {
889 fontInfo.familyLength = fontFamilies.size();
890 auto families = std::make_unique<const char* []>(fontInfo.familyLength);
891 for (uint32_t i = 0; i < fontFamilies.size(); i++) {
892 families[i] = fontFamilies[i].c_str();
893 }
894 fontInfo.fontFamilies = families.get();
895 GetArkUINodeModifiers()->getTextModifier()->setTextFont(nativeNode, &fontInfo);
896 } else {
897 GetArkUINodeModifiers()->getTextModifier()->setTextFont(nativeNode, &fontInfo);
898 }
899 return panda::JSValueRef::Undefined(vm);
900 }
901
ResetFont(ArkUIRuntimeCallInfo * runtimeCallInfo)902 ArkUINativeModuleValue TextBridge::ResetFont(ArkUIRuntimeCallInfo* runtimeCallInfo)
903 {
904 EcmaVM* vm = runtimeCallInfo->GetVM();
905 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
906 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
907 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
908 GetArkUINodeModifiers()->getTextModifier()->resetTextFont(nativeNode);
909 return panda::JSValueRef::Undefined(vm);
910 }
911
SetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)912 ArkUINativeModuleValue TextBridge::SetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
913 {
914 EcmaVM* vm = runtimeCallInfo->GetVM();
915 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
916 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
917 Local<JSValueRef> workBreakArg = runtimeCallInfo->GetCallArgRef(NUM_1);
918 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
919 if (workBreakArg->IsNull() || workBreakArg->IsUndefined() || !workBreakArg->IsNumber()) {
920 GetArkUINodeModifiers()->getTextModifier()->resetWordBreak(nativeNode);
921 return panda::JSValueRef::Undefined(vm);
922 }
923 uint32_t wordBreak = workBreakArg->Uint32Value(vm);
924 GetArkUINodeModifiers()->getTextModifier()->setWordBreak(nativeNode, wordBreak);
925 return panda::JSValueRef::Undefined(vm);
926 }
927
ResetWordBreak(ArkUIRuntimeCallInfo * runtimeCallInfo)928 ArkUINativeModuleValue TextBridge::ResetWordBreak(ArkUIRuntimeCallInfo* runtimeCallInfo)
929 {
930 EcmaVM* vm = runtimeCallInfo->GetVM();
931 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
932 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
933 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
934 GetArkUINodeModifiers()->getTextModifier()->resetWordBreak(nativeNode);
935 return panda::JSValueRef::Undefined(vm);
936 }
937
SetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)938 ArkUINativeModuleValue TextBridge::SetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
939 {
940 EcmaVM* vm = runtimeCallInfo->GetVM();
941 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
942 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
943 Local<JSValueRef> lineBreakStrategyArg = runtimeCallInfo->GetCallArgRef(NUM_1);
944 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
945 if (lineBreakStrategyArg->IsNull() || lineBreakStrategyArg->IsUndefined() || !lineBreakStrategyArg->IsNumber()) {
946 GetArkUINodeModifiers()->getTextModifier()->resetLineBreakStrategy(nativeNode);
947 return panda::JSValueRef::Undefined(vm);
948 }
949 uint32_t lineBreakStrategy = lineBreakStrategyArg->Uint32Value(vm);
950 GetArkUINodeModifiers()->getTextModifier()->setLineBreakStrategy(nativeNode, lineBreakStrategy);
951 return panda::JSValueRef::Undefined(vm);
952 }
953
ResetLineBreakStrategy(ArkUIRuntimeCallInfo * runtimeCallInfo)954 ArkUINativeModuleValue TextBridge::ResetLineBreakStrategy(ArkUIRuntimeCallInfo* runtimeCallInfo)
955 {
956 EcmaVM* vm = runtimeCallInfo->GetVM();
957 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
958 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
959 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
960 GetArkUINodeModifiers()->getTextModifier()->resetLineBreakStrategy(nativeNode);
961 return panda::JSValueRef::Undefined(vm);
962 }
963
SetEllipsisMode(ArkUIRuntimeCallInfo * runtimeCallInfo)964 ArkUINativeModuleValue TextBridge::SetEllipsisMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
965 {
966 EcmaVM* vm = runtimeCallInfo->GetVM();
967 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
968 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
969 Local<JSValueRef> ellipsisModeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
970 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
971 if (ellipsisModeArg->IsNull() || ellipsisModeArg->IsUndefined() || !ellipsisModeArg->IsNumber()) {
972 GetArkUINodeModifiers()->getTextModifier()->resetEllipsisMode(nativeNode);
973 return panda::JSValueRef::Undefined(vm);
974 }
975 uint32_t ellipsisMode = ellipsisModeArg->Uint32Value(vm);
976 GetArkUINodeModifiers()->getTextModifier()->setEllipsisMode(nativeNode, ellipsisMode);
977 return panda::JSValueRef::Undefined(vm);
978 }
979
ResetEllipsisMode(ArkUIRuntimeCallInfo * runtimeCallInfo)980 ArkUINativeModuleValue TextBridge::ResetEllipsisMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
981 {
982 EcmaVM* vm = runtimeCallInfo->GetVM();
983 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
984 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
985 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
986 GetArkUINodeModifiers()->getTextModifier()->resetEllipsisMode(nativeNode);
987 return panda::JSValueRef::Undefined(vm);
988 }
989
SetEnableDataDetector(ArkUIRuntimeCallInfo * runtimeCallInfo)990 ArkUINativeModuleValue TextBridge::SetEnableDataDetector(ArkUIRuntimeCallInfo* runtimeCallInfo)
991 {
992 EcmaVM* vm = runtimeCallInfo->GetVM();
993 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
994 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
995 Local<JSValueRef> enableDataDetectorArg = runtimeCallInfo->GetCallArgRef(NUM_1);
996 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
997 if (enableDataDetectorArg->IsNull() || enableDataDetectorArg->IsUndefined() ||
998 !enableDataDetectorArg->IsBoolean()) {
999 GetArkUINodeModifiers()->getTextModifier()->resetEnableDataDetector(nativeNode);
1000 return panda::JSValueRef::Undefined(vm);
1001 }
1002 uint32_t enableDataDetector = enableDataDetectorArg->Uint32Value(vm);
1003 GetArkUINodeModifiers()->getTextModifier()->setEnableDataDetector(nativeNode, enableDataDetector);
1004 return panda::JSValueRef::Undefined(vm);
1005 }
1006
ResetEnableDataDetector(ArkUIRuntimeCallInfo * runtimeCallInfo)1007 ArkUINativeModuleValue TextBridge::ResetEnableDataDetector(ArkUIRuntimeCallInfo* runtimeCallInfo)
1008 {
1009 EcmaVM* vm = runtimeCallInfo->GetVM();
1010 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1011 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1012 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1013 GetArkUINodeModifiers()->getTextModifier()->resetEnableDataDetector(nativeNode);
1014 return panda::JSValueRef::Undefined(vm);
1015 }
1016
SetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)1017 ArkUINativeModuleValue TextBridge::SetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
1018 {
1019 EcmaVM* vm = runtimeCallInfo->GetVM();
1020 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1021 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1022 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1023 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1024 if (secondArg->IsString(vm)) {
1025 auto value = secondArg->ToString(vm)->ToString(vm);
1026 GetArkUINodeModifiers()->getTextModifier()->setTextFontFeature(nativeNode, value.c_str());
1027 } else {
1028 GetArkUINodeModifiers()->getTextModifier()->resetTextFontFeature(nativeNode);
1029 }
1030 return panda::JSValueRef::Undefined(vm);
1031 }
1032
ResetFontFeature(ArkUIRuntimeCallInfo * runtimeCallInfo)1033 ArkUINativeModuleValue TextBridge::ResetFontFeature(ArkUIRuntimeCallInfo* runtimeCallInfo)
1034 {
1035 EcmaVM* vm = runtimeCallInfo->GetVM();
1036 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1037 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1038 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1039 GetArkUINodeModifiers()->getTextModifier()->resetTextFontFeature(nativeNode);
1040 return panda::JSValueRef::Undefined(vm);
1041 }
1042
SetLineSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1043 ArkUINativeModuleValue TextBridge::SetLineSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1044 {
1045 EcmaVM* vm = runtimeCallInfo->GetVM();
1046 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1047 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1048 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1049 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1050 CalcDimension value;
1051 if (!ArkTSUtils::ParseJsLengthMetrics(vm, secondArg, value)) {
1052 GetArkUINodeModifiers()->getTextModifier()->resetTextLineSpacing(nativeNode);
1053 } else {
1054 if (value.IsNegative()) {
1055 value.Reset();
1056 }
1057 GetArkUINodeModifiers()->getTextModifier()->setTextLineSpacing(
1058 nativeNode, value.Value(), static_cast<int>(value.Unit()));
1059 }
1060 return panda::JSValueRef::Undefined(vm);
1061 }
1062
ResetLineSpacing(ArkUIRuntimeCallInfo * runtimeCallInfo)1063 ArkUINativeModuleValue TextBridge::ResetLineSpacing(ArkUIRuntimeCallInfo* runtimeCallInfo)
1064 {
1065 EcmaVM* vm = runtimeCallInfo->GetVM();
1066 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1067 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1068 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1069 GetArkUINodeModifiers()->getTextModifier()->resetTextLineSpacing(nativeNode);
1070 return panda::JSValueRef::Undefined(vm);
1071 }
1072
SetSelection(ArkUIRuntimeCallInfo * runtimeCallInfo)1073 ArkUINativeModuleValue TextBridge::SetSelection(ArkUIRuntimeCallInfo* runtimeCallInfo)
1074 {
1075 EcmaVM* vm = runtimeCallInfo->GetVM();
1076 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1077 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1078 Local<JSValueRef> startArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1079 Local<JSValueRef> endArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1080 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1081 if (!startArg->IsNumber() || !endArg->IsNumber()) {
1082 GetArkUINodeModifiers()->getTextModifier()->resetTextSelection(nativeNode);
1083 return panda::JSValueRef::Undefined(vm);
1084 }
1085 int32_t startIndex = startArg->Int32Value(vm);
1086 int32_t endIndex = endArg->Int32Value(vm);
1087 if (startIndex >= endIndex) {
1088 GetArkUINodeModifiers()->getTextModifier()->resetTextSelection(nativeNode);
1089 return panda::JSValueRef::Undefined(vm);
1090 }
1091 GetArkUINodeModifiers()->getTextModifier()->setTextSelection(nativeNode, startIndex, endIndex);
1092 return panda::JSValueRef::Undefined(vm);
1093 }
1094
ResetSelection(ArkUIRuntimeCallInfo * runtimeCallInfo)1095 ArkUINativeModuleValue TextBridge::ResetSelection(ArkUIRuntimeCallInfo* runtimeCallInfo)
1096 {
1097 EcmaVM* vm = runtimeCallInfo->GetVM();
1098 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1099 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1100 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1101 GetArkUINodeModifiers()->getTextModifier()->resetTextSelection(nativeNode);
1102 return panda::JSValueRef::Undefined(vm);
1103 }
1104
SetTextSelectableMode(ArkUIRuntimeCallInfo * runtimeCallInfo)1105 ArkUINativeModuleValue TextBridge::SetTextSelectableMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
1106 {
1107 EcmaVM* vm = runtimeCallInfo->GetVM();
1108 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1109 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1110 Local<JSValueRef> textSelectableModeArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1111 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1112 if (textSelectableModeArg->IsNull() || textSelectableModeArg->IsUndefined() || !textSelectableModeArg->IsNumber()) {
1113 GetArkUINodeModifiers()->getTextModifier()->resetTextSelectableMode(nativeNode);
1114 return panda::JSValueRef::Undefined(vm);
1115 }
1116 uint32_t textSelectableMode = textSelectableModeArg->Uint32Value(vm);
1117 GetArkUINodeModifiers()->getTextModifier()->setTextSelectableMode(nativeNode, textSelectableMode);
1118 return panda::JSValueRef::Undefined(vm);
1119 }
1120
ResetTextSelectableMode(ArkUIRuntimeCallInfo * runtimeCallInfo)1121 ArkUINativeModuleValue TextBridge::ResetTextSelectableMode(ArkUIRuntimeCallInfo* runtimeCallInfo)
1122 {
1123 EcmaVM* vm = runtimeCallInfo->GetVM();
1124 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1125 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1126 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1127 GetArkUINodeModifiers()->getTextModifier()->resetTextSelectableMode(nativeNode);
1128 return panda::JSValueRef::Undefined(vm);
1129 }
1130
SetDataDetectorConfig(ArkUIRuntimeCallInfo * runtimeCallInfo)1131 ArkUINativeModuleValue TextBridge::SetDataDetectorConfig(ArkUIRuntimeCallInfo* runtimeCallInfo)
1132 {
1133 EcmaVM* vm = runtimeCallInfo->GetVM();
1134 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1135 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1136 Local<JSValueRef> typesArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1137 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1138 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1139 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1140 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1141 if (!typesArg->IsArray(vm)) {
1142 GetArkUINodeModifiers()->getTextModifier()->
1143 resetTextDataDetectorConfigWithEvent(nativeNode);
1144 return panda::JSValueRef::Undefined(vm);
1145 }
1146
1147 struct ArkUITextDetectConfigStruct arkUITextDetectConfig;
1148 std::string types;
1149 auto array = panda::Local<panda::ArrayRef>(typesArg);
1150 for (size_t i = 0; i < array->Length(vm); i++) {
1151 auto value = panda::ArrayRef::GetValueAt(vm, array, i);
1152 auto index = value->Int32Value(vm);
1153 if (index < 0 || index >= static_cast<int32_t>(TEXT_DETECT_TYPES.size())) {
1154 return panda::NativePointerRef::New(vm, nullptr);
1155 }
1156 if (i != 0) {
1157 types.append(",");
1158 }
1159 types.append(TEXT_DETECT_TYPES[index]);
1160 }
1161 arkUITextDetectConfig.types = types.c_str();
1162 std::function<void(const std::string&)> callback;
1163 if (callbackArg->IsFunction(vm)) {
1164 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1165 callback = [vm, frameNode, func = panda::CopyableGlobal(vm, func)](const std::string& info) {
1166 panda::LocalScope pandaScope(vm);
1167 panda::TryCatch trycatch(vm);
1168 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1169 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1170 panda::StringRef::NewFromUtf8(vm, info.c_str()) };
1171 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1172 };
1173 arkUITextDetectConfig.onResult = reinterpret_cast<void*>(&callback);
1174 }
1175 ParseAIEntityColor(runtimeCallInfo, arkUITextDetectConfig);
1176 GetArkUINodeModifiers()->getTextModifier()->
1177 setTextDataDetectorConfigWithEvent(nativeNode, &arkUITextDetectConfig);
1178 return panda::JSValueRef::Undefined(vm);
1179 }
1180
ParseAIEntityColor(ArkUIRuntimeCallInfo * runtimeCallInfo,struct ArkUITextDetectConfigStruct & arkUITextDetectConfig)1181 void TextBridge::ParseAIEntityColor(
1182 ArkUIRuntimeCallInfo* runtimeCallInfo, struct ArkUITextDetectConfigStruct& arkUITextDetectConfig)
1183 {
1184 EcmaVM* vm = runtimeCallInfo->GetVM();
1185 CHECK_NULL_VOID(vm);
1186 TextDetectConfig textDetectConfig;
1187 Local<JSValueRef> entityColorArg = runtimeCallInfo->GetCallArgRef(NUM_3);
1188 ArkTSUtils::ParseJsColorAlpha(vm, entityColorArg, textDetectConfig.entityColor);
1189 arkUITextDetectConfig.entityColor = textDetectConfig.entityColor.GetValue();
1190
1191 Local<JSValueRef> entityDecorationTypeArg = runtimeCallInfo->GetCallArgRef(NUM_4);
1192 Local<JSValueRef> entityDecorationColorArg = runtimeCallInfo->GetCallArgRef(NUM_5);
1193 Local<JSValueRef> entityDecorationStyleArg = runtimeCallInfo->GetCallArgRef(NUM_6);
1194 arkUITextDetectConfig.entityDecorationType = static_cast<int32_t>(textDetectConfig.entityDecorationType);
1195 arkUITextDetectConfig.entityDecorationColor = arkUITextDetectConfig.entityColor;
1196 arkUITextDetectConfig.entityDecorationStyle = static_cast<int32_t>(textDetectConfig.entityDecorationStyle);
1197
1198 if (entityDecorationTypeArg->IsInt()) {
1199 arkUITextDetectConfig.entityDecorationType = entityDecorationTypeArg->Int32Value(vm);
1200 }
1201 if (ArkTSUtils::ParseJsColorAlpha(vm, entityDecorationColorArg, textDetectConfig.entityDecorationColor)) {
1202 arkUITextDetectConfig.entityDecorationColor = textDetectConfig.entityDecorationColor.GetValue();
1203 }
1204 if (entityDecorationStyleArg->IsInt()) {
1205 arkUITextDetectConfig.entityDecorationStyle = entityDecorationStyleArg->Int32Value(vm);
1206 }
1207 }
1208
ResetDataDetectorConfig(ArkUIRuntimeCallInfo * runtimeCallInfo)1209 ArkUINativeModuleValue TextBridge::ResetDataDetectorConfig(ArkUIRuntimeCallInfo* runtimeCallInfo)
1210 {
1211 EcmaVM* vm = runtimeCallInfo->GetVM();
1212 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1213 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1214 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1215 GetArkUINodeModifiers()->getTextModifier()->
1216 resetTextDataDetectorConfigWithEvent(nativeNode);
1217 return panda::JSValueRef::Undefined(vm);
1218 }
1219
SetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1220 ArkUINativeModuleValue TextBridge::SetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1221 {
1222 EcmaVM *vm = runtimeCallInfo->GetVM();
1223 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1224 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1225 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1226 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1227 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1228 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1229 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1230 GetArkUINodeModifiers()->getTextModifier()->resetTextOnCopy(nativeNode);
1231 return panda::JSValueRef::Undefined(vm);
1232 }
1233 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1234 std::function<void(const std::string&)> callback = [vm, frameNode,
1235 func = panda::CopyableGlobal(vm, func)](const std::string& copyStr) {
1236 panda::LocalScope pandaScope(vm);
1237 panda::TryCatch trycatch(vm);
1238 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1239 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_1] = {
1240 panda::StringRef::NewFromUtf8(vm, copyStr.c_str()) };
1241 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_1);
1242 };
1243 GetArkUINodeModifiers()->getTextModifier()->setTextOnCopy(nativeNode, reinterpret_cast<void*>(&callback));
1244 return panda::JSValueRef::Undefined(vm);
1245 }
1246
ResetOnCopy(ArkUIRuntimeCallInfo * runtimeCallInfo)1247 ArkUINativeModuleValue TextBridge::ResetOnCopy(ArkUIRuntimeCallInfo* runtimeCallInfo)
1248 {
1249 EcmaVM* vm = runtimeCallInfo->GetVM();
1250 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1251 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1252 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1253 GetArkUINodeModifiers()->getTextModifier()->resetTextOnCopy(nativeNode);
1254 return panda::JSValueRef::Undefined(vm);
1255 }
1256
SetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1257 ArkUINativeModuleValue TextBridge::SetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1258 {
1259 EcmaVM *vm = runtimeCallInfo->GetVM();
1260 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1261 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1262 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1263 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1264 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1265 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1266 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1267 GetArkUINodeModifiers()->getTextModifier()->resetTextOnTextSelectionChange(nativeNode);
1268 return panda::JSValueRef::Undefined(vm);
1269 }
1270 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1271 std::function<void(int32_t, int32_t)> callback = [vm, frameNode,
1272 func = panda::CopyableGlobal(vm, func)](int32_t selectionStart, int32_t selectionEnd) {
1273 panda::LocalScope pandaScope(vm);
1274 panda::TryCatch trycatch(vm);
1275 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1276 panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, selectionStart);
1277 panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, selectionEnd);
1278 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { startParam, endParam };
1279 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1280 };
1281 GetArkUINodeModifiers()->getTextModifier()->setTextOnTextSelectionChange(
1282 nativeNode, reinterpret_cast<void*>(&callback));
1283 return panda::JSValueRef::Undefined(vm);
1284 }
1285
ResetOnTextSelectionChange(ArkUIRuntimeCallInfo * runtimeCallInfo)1286 ArkUINativeModuleValue TextBridge::ResetOnTextSelectionChange(ArkUIRuntimeCallInfo* runtimeCallInfo)
1287 {
1288 EcmaVM* vm = runtimeCallInfo->GetVM();
1289 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1290 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1291 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1292 GetArkUINodeModifiers()->getTextModifier()->resetTextOnTextSelectionChange(nativeNode);
1293 return panda::JSValueRef::Undefined(vm);
1294 }
1295
SetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)1296 ArkUINativeModuleValue TextBridge::SetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
1297 {
1298 EcmaVM* vm = runtimeCallInfo->GetVM();
1299 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1300 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1301 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1302 NG::OnCreateMenuCallback onCreateMenuCallback;
1303 NG::OnMenuItemClickCallback onMenuItemClickCallback;
1304 if (!ArkTSUtils::ParseSelectionMenuOptions(runtimeCallInfo, vm, onCreateMenuCallback, onMenuItemClickCallback)) {
1305 GetArkUINodeModifiers()->getTextModifier()->resetTextSelectionMenuOptions(nativeNode);
1306 return panda::JSValueRef::Undefined(vm);
1307 }
1308 GetArkUINodeModifiers()->getTextModifier()->setTextSelectionMenuOptions(
1309 nativeNode, reinterpret_cast<void*>(&onCreateMenuCallback), reinterpret_cast<void*>(&onMenuItemClickCallback));
1310 return panda::JSValueRef::Undefined(vm);
1311 }
1312
ResetSelectionMenuOptions(ArkUIRuntimeCallInfo * runtimeCallInfo)1313 ArkUINativeModuleValue TextBridge::ResetSelectionMenuOptions(ArkUIRuntimeCallInfo* runtimeCallInfo)
1314 {
1315 EcmaVM* vm = runtimeCallInfo->GetVM();
1316 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1317 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1318 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1319 GetArkUINodeModifiers()->getTextModifier()->resetTextSelectionMenuOptions(nativeNode);
1320 return panda::JSValueRef::Undefined(vm);
1321 }
1322
SetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1323 ArkUINativeModuleValue TextBridge::SetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1324 {
1325 EcmaVM* vm = runtimeCallInfo->GetVM();
1326 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1327 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1328 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1329 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1330 bool halfLeading = false;
1331 if (secondArg->IsBoolean()) {
1332 halfLeading = secondArg->ToBoolean(vm)->Value();
1333 }
1334 GetArkUINodeModifiers()->getTextModifier()->setTextHalfLeading(nativeNode, halfLeading);
1335 return panda::JSValueRef::Undefined(vm);
1336 }
1337
ResetHalfLeading(ArkUIRuntimeCallInfo * runtimeCallInfo)1338 ArkUINativeModuleValue TextBridge::ResetHalfLeading(ArkUIRuntimeCallInfo* runtimeCallInfo)
1339 {
1340 EcmaVM* vm = runtimeCallInfo->GetVM();
1341 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1342 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1343 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1344 GetArkUINodeModifiers()->getTextModifier()->resetTextHalfLeading(nativeNode);
1345 return panda::JSValueRef::Undefined(vm);
1346 }
1347
SetOnClick(ArkUIRuntimeCallInfo * runtimeCallInfo)1348 ArkUINativeModuleValue TextBridge::SetOnClick(ArkUIRuntimeCallInfo* runtimeCallInfo)
1349 {
1350 EcmaVM *vm = runtimeCallInfo->GetVM();
1351 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1352 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1353 Local<JSValueRef> callbackArg = runtimeCallInfo->GetCallArgRef(1);
1354 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1355 auto frameNode = reinterpret_cast<FrameNode*>(nativeNode);
1356 CHECK_NULL_RETURN(frameNode, panda::NativePointerRef::New(vm, nullptr));
1357 if (callbackArg->IsUndefined() || callbackArg->IsNull() || !callbackArg->IsFunction(vm)) {
1358 GetArkUINodeModifiers()->getTextModifier()->resetTextOnClick(nativeNode);
1359 return panda::JSValueRef::Undefined(vm);
1360 }
1361 panda::Local<panda::FunctionRef> func = callbackArg->ToObject(vm);
1362 std::function<void(int32_t, int32_t)> callback = [vm, frameNode,
1363 func = panda::CopyableGlobal(vm, func)](int32_t selectionStart, int32_t selectionEnd) {
1364 panda::LocalScope pandaScope(vm);
1365 panda::TryCatch trycatch(vm);
1366 PipelineContext::SetCallBackNode(AceType::WeakClaim(frameNode));
1367 panda::Local<panda::NumberRef> startParam = panda::NumberRef::New(vm, selectionStart);
1368 panda::Local<panda::NumberRef> endParam = panda::NumberRef::New(vm, selectionEnd);
1369 panda::Local<panda::JSValueRef> params[PARAM_ARR_LENGTH_2] = { startParam, endParam };
1370 func->Call(vm, func.ToLocal(), params, PARAM_ARR_LENGTH_2);
1371 };
1372 GetArkUINodeModifiers()->getTextModifier()->setTextOnClick(
1373 nativeNode, reinterpret_cast<void*>(&callback));
1374 return panda::JSValueRef::Undefined(vm);
1375 }
1376
ResetOnClick(ArkUIRuntimeCallInfo * runtimeCallInfo)1377 ArkUINativeModuleValue TextBridge::ResetOnClick(ArkUIRuntimeCallInfo* runtimeCallInfo)
1378 {
1379 EcmaVM* vm = runtimeCallInfo->GetVM();
1380 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1381 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1382 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1383 GetArkUINodeModifiers()->getTextModifier()->resetTextOnClick(nativeNode);
1384 return panda::JSValueRef::Undefined(vm);
1385 }
1386
SetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)1387 ArkUINativeModuleValue TextBridge::SetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
1388 {
1389 EcmaVM* vm = runtimeCallInfo->GetVM();
1390 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1391 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(NUM_0);
1392 Local<JSValueRef> secondArg = runtimeCallInfo->GetCallArgRef(NUM_1);
1393 Local<JSValueRef> thirdArg = runtimeCallInfo->GetCallArgRef(NUM_2);
1394 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1395 int32_t length = thirdArg->Int32Value(vm);
1396 ArkUI_Float32 regionArray[length];
1397 int32_t regionUnits[length];
1398 if (!ArkTSUtils::ParseResponseRegion(vm, secondArg, regionArray, regionUnits, length)) {
1399 GetArkUINodeModifiers()->getTextModifier()->resetTextResponseRegion(nativeNode);
1400 return panda::JSValueRef::Undefined(vm);
1401 }
1402 GetArkUINodeModifiers()->getTextModifier()->setTextResponseRegion(nativeNode, regionArray, regionUnits, length);
1403 return panda::JSValueRef::Undefined(vm);
1404 }
1405
ResetResponseRegion(ArkUIRuntimeCallInfo * runtimeCallInfo)1406 ArkUINativeModuleValue TextBridge::ResetResponseRegion(ArkUIRuntimeCallInfo* runtimeCallInfo)
1407 {
1408 EcmaVM* vm = runtimeCallInfo->GetVM();
1409 CHECK_NULL_RETURN(vm, panda::NativePointerRef::New(vm, nullptr));
1410 Local<JSValueRef> firstArg = runtimeCallInfo->GetCallArgRef(0);
1411 auto nativeNode = nodePtr(firstArg->ToNativePointer(vm)->Value());
1412 GetArkUINodeModifiers()->getTextModifier()->resetTextResponseRegion(nativeNode);
1413 return panda::JSValueRef::Undefined(vm);
1414 }
1415 } // namespace OHOS::Ace::NG
1416