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 "core/interfaces/native/node/node_text_area_modifier.h"
16
17 #include "bridge/common/utils/utils.h"
18 #include "base/utils/utf_helper.h"
19 #include "core/components/text_field/textfield_theme.h"
20 #include "core/components_ng/pattern/text_field/text_field_model_ng.h"
21 #include "core/components/common/properties/text_style_parser.h"
22 #include "interfaces/native/node/node_model.h"
23
24 namespace OHOS::Ace::NG {
25 namespace {
26 constexpr int NUM_0 = 0;
27 constexpr int NUM_1 = 1;
28 constexpr int NUM_2 = 2;
29 constexpr int NUM_3 = 3;
30 constexpr int NUM_4 = 4;
31 constexpr int NUM_16 = 16;
32 constexpr int NUM_24 = 24;
33 constexpr int NUM_36 = 36;
34 constexpr int DEFAULT_LENGTH = 4;
35 constexpr InputStyle DEFAULT_TEXT_AREA_STYLE = InputStyle::DEFAULT;
36 constexpr bool DEFAULT_SELECTION_MENU_HIDDEN = false;
37 constexpr uint32_t DEFAULT_MAX_VIEW_LINE = 3;
38 constexpr uint32_t DEFAULT_MIN_LINE = 1;
39 constexpr CopyOptions DEFAULT_COPY_OPTIONS_VALUE = CopyOptions::Local;
40 constexpr FontWeight DEFAULT_FONT_WEIGHT = FontWeight::NORMAL;
41 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
42 constexpr DisplayMode DEFAULT_BAR_STATE_VALUE = DisplayMode::AUTO;
43 constexpr bool DEFAULT_KEY_BOARD_VALUE = true;
44 constexpr bool DEFAULT_ENABLE_AUTO_FILL = true;
45 constexpr float DEFAULT_MIN_FONT_SCALE = 0.0f;
46 constexpr float DEFAULT_MAX_FONT_SCALE = static_cast<float>(INT32_MAX);
47 constexpr char DEFAULT_FONT_FAMILY[] = "HarmonyOS Sans";
48 const double DEFAULT_DASH_DIMENSION = -1;
49 const uint32_t ERROR_UINT_CODE = -1;
50 const int32_t ERROR_INT_CODE = -1;
51 constexpr TextDecoration DEFAULT_TEXT_DECORATION = TextDecoration::NONE;
52 constexpr Color DEFAULT_DECORATION_COLOR = Color(0xff000000);
53 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
54 const std::vector<EllipsisMode> ELLIPSIS_MODALS = { EllipsisMode::HEAD, EllipsisMode::MIDDLE, EllipsisMode::TAIL };
55 constexpr int16_t DEFAULT_ALPHA = 255;
56 constexpr double DEFAULT_OPACITY = 0.2;
57 const float ERROR_FLOAT_CODE = -1.0f;
58 thread_local std::string g_strValue;
59 constexpr bool DEFAULT_ENABLE_PREVIEW_TEXT_VALUE = true;
60 constexpr bool DEFAULT_ENABLE_HAPTIC_FEEDBACK_VALUE = true;
61 constexpr int32_t ELLIPSIS_MODE_TAIL = 2;
62
SetTextAreaStyle(ArkUINodeHandle node,ArkUI_Int32 style)63 void SetTextAreaStyle(ArkUINodeHandle node, ArkUI_Int32 style)
64 {
65 auto *frameNode = reinterpret_cast<FrameNode *>(node);
66 CHECK_NULL_VOID(frameNode);
67 TextFieldModelNG::SetInputStyle(frameNode, static_cast<InputStyle>(style));
68 }
69
ResetTextAreaStyle(ArkUINodeHandle node)70 void ResetTextAreaStyle(ArkUINodeHandle node)
71 {
72 auto *frameNode = reinterpret_cast<FrameNode *>(node);
73 CHECK_NULL_VOID(frameNode);
74 TextFieldModelNG::SetInputStyle(frameNode, DEFAULT_TEXT_AREA_STYLE);
75 }
76
SetTextAreaSelectionMenuHidden(ArkUINodeHandle node,ArkUI_Uint32 contextMenuHidden)77 void SetTextAreaSelectionMenuHidden(ArkUINodeHandle node, ArkUI_Uint32 contextMenuHidden)
78 {
79 auto *frameNode = reinterpret_cast<FrameNode *>(node);
80 CHECK_NULL_VOID(frameNode);
81 TextFieldModelNG::SetSelectionMenuHidden(frameNode, static_cast<bool>(contextMenuHidden));
82 }
83
ResetTextAreaSelectionMenuHidden(ArkUINodeHandle node)84 void ResetTextAreaSelectionMenuHidden(ArkUINodeHandle node)
85 {
86 auto *frameNode = reinterpret_cast<FrameNode *>(node);
87 CHECK_NULL_VOID(frameNode);
88 TextFieldModelNG::SetSelectionMenuHidden(frameNode, DEFAULT_SELECTION_MENU_HIDDEN);
89 }
90
SetTextAreaMaxLines(ArkUINodeHandle node,ArkUI_Uint32 maxLine,ArkUI_Uint32 overflowMode)91 void SetTextAreaMaxLines(ArkUINodeHandle node, ArkUI_Uint32 maxLine, ArkUI_Uint32 overflowMode)
92 {
93 auto *frameNode = reinterpret_cast<FrameNode *>(node);
94 CHECK_NULL_VOID(frameNode);
95 auto inlineMaxViewLines = maxLine;
96 inlineMaxViewLines = inlineMaxViewLines > 0 ? inlineMaxViewLines : DEFAULT_MAX_VIEW_LINE;
97 TextFieldModelNG::SetMaxViewLines(frameNode, inlineMaxViewLines);
98 TextFieldModelNG::SetNormalMaxViewLines(frameNode, maxLine);
99 TextFieldModelNG::SetOverflowMode(frameNode, static_cast<OverflowMode>(overflowMode));
100 }
101
SetTextAreaMinLines(ArkUINodeHandle node,ArkUI_Uint32 minLine)102 void SetTextAreaMinLines(ArkUINodeHandle node, ArkUI_Uint32 minLine)
103 {
104 auto *frameNode = reinterpret_cast<FrameNode *>(node);
105 CHECK_NULL_VOID(frameNode);
106 TextFieldModelNG::SetMinLines(frameNode, minLine);
107 }
108
SetTextAreaMinFontScale(ArkUINodeHandle node,ArkUI_Float32 number,void * resRawPtr)109 void SetTextAreaMinFontScale(ArkUINodeHandle node, ArkUI_Float32 number, void* resRawPtr)
110 {
111 auto* frameNode = reinterpret_cast<FrameNode*>(node);
112 CHECK_NULL_VOID(frameNode);
113 TextFieldModelNG::SetMinFontScale(frameNode, number);
114 if (SystemProperties::ConfigChangePerform()) {
115 auto pattern = frameNode->GetPattern();
116 CHECK_NULL_VOID(pattern);
117 if (resRawPtr) {
118 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
119 pattern->RegisterResource<float>("minFontScale", resObj, number);
120 } else {
121 pattern->UnRegisterResource("minFontScale");
122 }
123 }
124 }
125
ResetTextAreaMinFontScale(ArkUINodeHandle node)126 void ResetTextAreaMinFontScale(ArkUINodeHandle node)
127 {
128 auto* frameNode = reinterpret_cast<FrameNode*>(node);
129 CHECK_NULL_VOID(frameNode);
130 TextFieldModelNG::SetMinFontScale(frameNode, DEFAULT_MIN_FONT_SCALE);
131 if (SystemProperties::ConfigChangePerform()) {
132 auto pattern = frameNode->GetPattern();
133 CHECK_NULL_VOID(pattern);
134 pattern->UnRegisterResource("minFontScale");
135 }
136 }
137
SetTextAreaMaxFontScale(ArkUINodeHandle node,ArkUI_Float32 number,void * resRawPtr)138 void SetTextAreaMaxFontScale(ArkUINodeHandle node, ArkUI_Float32 number, void* resRawPtr)
139 {
140 auto* frameNode = reinterpret_cast<FrameNode*>(node);
141 CHECK_NULL_VOID(frameNode);
142 TextFieldModelNG::SetMaxFontScale(frameNode, number);
143 auto pattern = frameNode->GetPattern();
144 CHECK_NULL_VOID(pattern);
145 if (SystemProperties::ConfigChangePerform() && resRawPtr) {
146 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
147 pattern->RegisterResource<float>("maxFontScale", resObj, number);
148 } else {
149 pattern->UnRegisterResource("maxFontScale");
150 }
151 }
152
ResetTextAreaMaxFontScale(ArkUINodeHandle node)153 void ResetTextAreaMaxFontScale(ArkUINodeHandle node)
154 {
155 auto* frameNode = reinterpret_cast<FrameNode*>(node);
156 CHECK_NULL_VOID(frameNode);
157 TextFieldModelNG::SetMaxFontScale(frameNode, DEFAULT_MAX_FONT_SCALE);
158 if (SystemProperties::ConfigChangePerform()) {
159 auto pattern = frameNode->GetPattern();
160 CHECK_NULL_VOID(pattern);
161 pattern->UnRegisterResource("maxFontScale");
162 }
163 }
164
ResetTextAreaMaxLines(ArkUINodeHandle node)165 void ResetTextAreaMaxLines(ArkUINodeHandle node)
166 {
167 auto *frameNode = reinterpret_cast<FrameNode *>(node);
168 CHECK_NULL_VOID(frameNode);
169 TextFieldModelNG::SetMaxViewLines(frameNode, DEFAULT_MAX_VIEW_LINE);
170 TextFieldModelNG::SetNormalMaxViewLines(frameNode, Infinity<uint32_t>());
171 }
172
ResetTextAreaMinLines(ArkUINodeHandle node)173 void ResetTextAreaMinLines(ArkUINodeHandle node)
174 {
175 auto *frameNode = reinterpret_cast<FrameNode *>(node);
176 CHECK_NULL_VOID(frameNode);
177 TextFieldModelNG::SetMinLines(frameNode, DEFAULT_MIN_LINE);
178 }
179
SetTextAreaCopyOption(ArkUINodeHandle node,ArkUI_Int32 value)180 void SetTextAreaCopyOption(ArkUINodeHandle node, ArkUI_Int32 value)
181 {
182 auto *frameNode = reinterpret_cast<FrameNode *>(node);
183 CHECK_NULL_VOID(frameNode);
184 TextFieldModelNG::SetCopyOption(frameNode, static_cast<CopyOptions>(value));
185 }
186
ResetTextAreaCopyOption(ArkUINodeHandle node)187 void ResetTextAreaCopyOption(ArkUINodeHandle node)
188 {
189 auto *frameNode = reinterpret_cast<FrameNode *>(node);
190 CHECK_NULL_VOID(frameNode);
191 TextFieldModelNG::SetCopyOption(frameNode, DEFAULT_COPY_OPTIONS_VALUE);
192 }
193
SetTextAreaPlaceholderColor(ArkUINodeHandle node,ArkUI_Uint32 color,void * resRawPtr)194 void SetTextAreaPlaceholderColor(ArkUINodeHandle node, ArkUI_Uint32 color, void* resRawPtr)
195 {
196 auto *frameNode = reinterpret_cast<FrameNode *>(node);
197 CHECK_NULL_VOID(frameNode);
198 TextFieldModelNG::SetPlaceholderColor(frameNode, Color(color));
199 auto pattern = frameNode->GetPattern();
200 CHECK_NULL_VOID(pattern);
201 if (SystemProperties::ConfigChangePerform() && resRawPtr) {
202 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
203 pattern->RegisterResource<Color>("placeholderColor", resObj, Color(color));
204 } else {
205 pattern->UnRegisterResource("placeholderColor");
206 }
207 }
208
ResetTextAreaPlaceholderColor(ArkUINodeHandle node)209 void ResetTextAreaPlaceholderColor(ArkUINodeHandle node)
210 {
211 auto *frameNode = reinterpret_cast<FrameNode *>(node);
212 CHECK_NULL_VOID(frameNode);
213 TextFieldModelNG::ResetPlaceholderColor(frameNode);
214 if (SystemProperties::ConfigChangePerform()) {
215 auto pattern = frameNode->GetPattern();
216 CHECK_NULL_VOID(pattern);
217 pattern->UnRegisterResource("placeholderColor");
218 }
219 }
220
SetTextAreaTextAlign(ArkUINodeHandle node,ArkUI_Int32 value)221 void SetTextAreaTextAlign(ArkUINodeHandle node, ArkUI_Int32 value)
222 {
223 auto *frameNode = reinterpret_cast<FrameNode *>(node);
224 CHECK_NULL_VOID(frameNode);
225 TextAlign value_textAlign = static_cast<TextAlign>(value);
226 TextFieldModelNG::SetTextAlign(frameNode, value_textAlign);
227 }
228
ResetTextAreaTextAlign(ArkUINodeHandle node)229 void ResetTextAreaTextAlign(ArkUINodeHandle node)
230 {
231 auto *frameNode = reinterpret_cast<FrameNode *>(node);
232 CHECK_NULL_VOID(frameNode);
233 TextFieldModelNG::SetTextAlign(frameNode, TextAlign::START);
234 }
235
SetTextAreaPlaceholderFont(ArkUINodeHandle node,const struct ArkUIResourceLength * size,ArkUI_CharPtr weight,ArkUI_CharPtr family,ArkUI_Int32 style,void * fontSizeRawPtr,void * fontfamilyRawPtr)236 void SetTextAreaPlaceholderFont(ArkUINodeHandle node, const struct ArkUIResourceLength *size, ArkUI_CharPtr weight,
237 ArkUI_CharPtr family, ArkUI_Int32 style, void* fontSizeRawPtr, void* fontfamilyRawPtr)
238 {
239 auto *frameNode = reinterpret_cast<FrameNode *>(node);
240 CHECK_NULL_VOID(frameNode);
241 Font font;
242 CalcDimension fontSize;
243 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(size->unit);
244 if (size->unit >= 0) {
245 if (unitEnum == DimensionUnit::CALC) {
246 fontSize = CalcDimension(size->string, DimensionUnit::CALC);
247 } else {
248 fontSize = CalcDimension(size->value, unitEnum);
249 }
250 font.fontSize = fontSize;
251 } else {
252 auto pipeline = frameNode->GetContext();
253 CHECK_NULL_VOID(pipeline);
254 auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
255 CHECK_NULL_VOID(theme);
256 font.fontSize = theme->GetFontSize();
257 }
258
259 if (weight != nullptr) {
260 font.fontWeight = Framework::ConvertStrToFontWeight(weight);
261 } else {
262 font.fontWeight = DEFAULT_FONT_WEIGHT;
263 }
264
265 if (family != nullptr) {
266 font.fontFamilies = Framework::ConvertStrToFontFamilies(std::string(family));
267 } else {
268 std::vector<std::string> fontFamilies;
269 fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
270 font.fontFamilies = fontFamilies;
271 }
272
273 if (style >= 0) {
274 font.fontStyle = static_cast<Ace::FontStyle>(style);
275 } else {
276 font.fontStyle = DEFAULT_FONT_STYLE;
277 }
278 TextFieldModelNG::SetPlaceholderFont(frameNode, font);
279 if (SystemProperties::ConfigChangePerform()) {
280 auto pattern = frameNode->GetPattern();
281 CHECK_NULL_VOID(pattern);
282 if (fontSizeRawPtr) {
283 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(fontSizeRawPtr));
284 pattern->RegisterResource<CalcDimension>("placeholderFontSize", resObj, fontSize);
285 } else {
286 pattern->UnRegisterResource("placeholderFontSize");
287 }
288 if (fontfamilyRawPtr) {
289 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(fontfamilyRawPtr));
290 pattern->RegisterResource<std::vector<std::string>>("placeholderFontFamily", resObj, font.fontFamilies);
291 } else {
292 pattern->UnRegisterResource("placeholderFontFamily");
293 }
294 }
295 }
296
SetTextAreaPlaceholderFontEnum(ArkUINodeHandle node,const struct ArkUIResourceLength * size,ArkUI_Int32 weight,ArkUI_CharPtr family,ArkUI_Int32 style)297 void SetTextAreaPlaceholderFontEnum(ArkUINodeHandle node, const struct ArkUIResourceLength* size, ArkUI_Int32 weight,
298 ArkUI_CharPtr family, ArkUI_Int32 style)
299 {
300 auto *frameNode = reinterpret_cast<FrameNode *>(node);
301 CHECK_NULL_VOID(frameNode);
302 Font font;
303 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(size->unit);
304 if (size->unit >= 0) {
305 if (unitEnum == DimensionUnit::CALC) {
306 font.fontSize = CalcDimension(size->string, DimensionUnit::CALC);
307 } else {
308 font.fontSize = CalcDimension(size->value, unitEnum);
309 }
310 } else {
311 auto pipeline = frameNode->GetContext();
312 CHECK_NULL_VOID(pipeline);
313 auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
314 CHECK_NULL_VOID(theme);
315 font.fontSize = theme->GetFontSize();
316 }
317
318 if (weight > -1) {
319 font.fontWeight = static_cast<FontWeight>(weight);
320 } else {
321 font.fontWeight = DEFAULT_FONT_WEIGHT;
322 }
323
324 if (family != nullptr) {
325 font.fontFamilies = Framework::ConvertStrToFontFamilies(std::string(family));
326 } else {
327 std::vector<std::string> fontFamilies;
328 fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
329 font.fontFamilies = fontFamilies;
330 }
331
332 if (style >= 0) {
333 font.fontStyle = static_cast<Ace::FontStyle>(style);
334 } else {
335 font.fontStyle = DEFAULT_FONT_STYLE;
336 }
337 TextFieldModelNG::SetPlaceholderFont(frameNode, font);
338 }
339
ResetTextAreaPlaceholderFont(ArkUINodeHandle node)340 void ResetTextAreaPlaceholderFont(ArkUINodeHandle node)
341 {
342 auto *frameNode = reinterpret_cast<FrameNode *>(node);
343 CHECK_NULL_VOID(frameNode);
344 auto pipeline = frameNode->GetContext();
345 CHECK_NULL_VOID(pipeline);
346 auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
347 CHECK_NULL_VOID(theme);
348 Font font;
349 font.fontSize = theme->GetFontSize();
350 font.fontWeight = DEFAULT_FONT_WEIGHT;
351 font.fontStyle = DEFAULT_FONT_STYLE;
352 std::vector<std::string> fontFamilies;
353 fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
354 font.fontFamilies = fontFamilies;
355 TextFieldModelNG::SetPlaceholderFont(frameNode, font);
356 if (SystemProperties::ConfigChangePerform()) {
357 auto pattern = frameNode->GetPattern();
358 CHECK_NULL_VOID(pattern);
359 pattern->UnRegisterResource("placeholderFontSize");
360 pattern->UnRegisterResource("placeholderFontfamily");
361 }
362 }
363
SetTextAreaBarState(ArkUINodeHandle node,ArkUI_Uint32 barStateValue)364 void SetTextAreaBarState(ArkUINodeHandle node, ArkUI_Uint32 barStateValue)
365 {
366 auto *frameNode = reinterpret_cast<FrameNode *>(node);
367 CHECK_NULL_VOID(frameNode);
368 DisplayMode displayMode = static_cast<DisplayMode>(barStateValue);
369 TextFieldModelNG::SetBarState(frameNode, displayMode);
370 }
371
ResetTextAreaBarState(ArkUINodeHandle node)372 void ResetTextAreaBarState(ArkUINodeHandle node)
373 {
374 auto *frameNode = reinterpret_cast<FrameNode *>(node);
375 CHECK_NULL_VOID(frameNode);
376 TextFieldModelNG::SetBarState(frameNode, DEFAULT_BAR_STATE_VALUE);
377 }
378
SetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node,ArkUI_Uint32 keyboardOnFocusValue)379 void SetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node, ArkUI_Uint32 keyboardOnFocusValue)
380 {
381 auto *frameNode = reinterpret_cast<FrameNode *>(node);
382 CHECK_NULL_VOID(frameNode);
383 TextFieldModelNG::RequestKeyboardOnFocus(frameNode, static_cast<bool>(keyboardOnFocusValue));
384 }
385
ResetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node)386 void ResetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node)
387 {
388 auto *frameNode = reinterpret_cast<FrameNode *>(node);
389 CHECK_NULL_VOID(frameNode);
390 TextFieldModelNG::RequestKeyboardOnFocus(frameNode, DEFAULT_KEY_BOARD_VALUE);
391 }
392
SetTextAreaFontFamily(ArkUINodeHandle node,ArkUI_CharPtr fontFamily,void * resRawPtr)393 void SetTextAreaFontFamily(ArkUINodeHandle node, ArkUI_CharPtr fontFamily, void* resRawPtr)
394 {
395 auto *frameNode = reinterpret_cast<FrameNode *>(node);
396 CHECK_NULL_VOID(frameNode);
397 std::vector<std::string> fontFamilies;
398 fontFamilies = Framework::ConvertStrToFontFamilies(std::string(fontFamily));
399 TextFieldModelNG::SetFontFamily(frameNode, fontFamilies);
400 auto pattern = frameNode->GetPattern();
401 CHECK_NULL_VOID(pattern);
402 if (SystemProperties::ConfigChangePerform()) {
403 if (resRawPtr) {
404 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
405 pattern->RegisterResource<std::vector<std::string>>("fontFamily", resObj, fontFamilies);
406 } else {
407 pattern->UnRegisterResource("fontFamily");
408 }
409 }
410 }
411
ResetTextAreaFontFamily(ArkUINodeHandle node)412 void ResetTextAreaFontFamily(ArkUINodeHandle node)
413 {
414 auto *frameNode = reinterpret_cast<FrameNode *>(node);
415 CHECK_NULL_VOID(frameNode);
416 std::vector<std::string> fontFamilies;
417 fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
418 TextFieldModelNG::SetFontFamily(frameNode, fontFamilies);
419 if (SystemProperties::ConfigChangePerform()) {
420 auto pattern = frameNode->GetPattern();
421 CHECK_NULL_VOID(pattern);
422 pattern->UnRegisterResource("placeholderFontfamily");
423 }
424 }
425
SetTextAreaShowCounter(ArkUINodeHandle node,ArkUI_Uint32 value)426 void SetTextAreaShowCounter(ArkUINodeHandle node, ArkUI_Uint32 value)
427 {
428 auto *frameNode = reinterpret_cast<FrameNode *>(node);
429 CHECK_NULL_VOID(frameNode);
430 TextFieldModelNG::SetShowCounter(frameNode, static_cast<bool>(value));
431 }
432
ResetTextAreaShowCounter(ArkUINodeHandle node)433 void ResetTextAreaShowCounter(ArkUINodeHandle node)
434 {
435 auto *frameNode = reinterpret_cast<FrameNode *>(node);
436 CHECK_NULL_VOID(frameNode);
437 TextFieldModelNG::SetShowCounter(frameNode, false);
438 }
439
SetTextAreaCaretColor(ArkUINodeHandle node,ArkUI_Uint32 color,void * colorRawPtr)440 void SetTextAreaCaretColor(ArkUINodeHandle node, ArkUI_Uint32 color, void* colorRawPtr)
441 {
442 auto *frameNode = reinterpret_cast<FrameNode *>(node);
443 CHECK_NULL_VOID(frameNode);
444 TextFieldModelNG::SetCaretColor(frameNode, Color(color));
445 if (SystemProperties::ConfigChangePerform()) {
446 auto pattern = frameNode->GetPattern();
447 CHECK_NULL_VOID(pattern);
448 if (colorRawPtr) {
449 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(colorRawPtr));
450 pattern->RegisterResource<Color>("caretColor", resObj, Color(color));
451 } else {
452 pattern->UnRegisterResource("caretColor");
453 }
454 }
455 }
456
ResetTextAreaCaretColor(ArkUINodeHandle node)457 void ResetTextAreaCaretColor(ArkUINodeHandle node)
458 {
459 auto *frameNode = reinterpret_cast<FrameNode *>(node);
460 CHECK_NULL_VOID(frameNode);
461 TextFieldModelNG::ResetCaretColor(frameNode);
462 if (SystemProperties::ConfigChangePerform()) {
463 auto pattern = frameNode->GetPattern();
464 CHECK_NULL_VOID(pattern);
465 pattern->UnRegisterResource("caretColor");
466 }
467 }
468
SetTextAreaMaxLength(ArkUINodeHandle node,ArkUI_Int32 value)469 void SetTextAreaMaxLength(ArkUINodeHandle node, ArkUI_Int32 value)
470 {
471 auto *frameNode = reinterpret_cast<FrameNode *>(node);
472 CHECK_NULL_VOID(frameNode);
473 TextFieldModelNG::SetMaxLength(frameNode, value);
474 }
475
ResetTextAreaMaxLength(ArkUINodeHandle node)476 void ResetTextAreaMaxLength(ArkUINodeHandle node)
477 {
478 auto *frameNode = reinterpret_cast<FrameNode *>(node);
479 CHECK_NULL_VOID(frameNode);
480 TextFieldModelNG::ResetMaxLength(frameNode);
481 }
482
SetTextAreaFontColor(ArkUINodeHandle node,ArkUI_Uint32 color,void * resRawPtr)483 void SetTextAreaFontColor(ArkUINodeHandle node, ArkUI_Uint32 color, void* resRawPtr)
484 {
485 auto *frameNode = reinterpret_cast<FrameNode *>(node);
486 CHECK_NULL_VOID(frameNode);
487 TextFieldModelNG::SetTextColor(frameNode, Color(color));
488 if (SystemProperties::ConfigChangePerform()) {
489 auto pattern = frameNode->GetPattern();
490 CHECK_NULL_VOID(pattern);
491 if (resRawPtr) {
492 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
493 pattern->RegisterResource<Color>("fontColor", resObj, Color(color));
494 } else {
495 pattern->UnRegisterResource("fontColor");
496 }
497 }
498 }
499
ResetTextAreaFontColor(ArkUINodeHandle node)500 void ResetTextAreaFontColor(ArkUINodeHandle node)
501 {
502 auto *frameNode = reinterpret_cast<FrameNode *>(node);
503 CHECK_NULL_VOID(frameNode);
504 TextFieldModelNG::ResetTextColor(frameNode);
505 if (SystemProperties::ConfigChangePerform()) {
506 auto pattern = frameNode->GetPattern();
507 CHECK_NULL_VOID(pattern);
508 pattern->UnRegisterResource("fontColor");
509 }
510 }
511
SetTextAreaFontStyle(ArkUINodeHandle node,ArkUI_Uint32 value)512 void SetTextAreaFontStyle(ArkUINodeHandle node, ArkUI_Uint32 value)
513 {
514 auto *frameNode = reinterpret_cast<FrameNode *>(node);
515 CHECK_NULL_VOID(frameNode);
516 TextFieldModelNG::SetFontStyle(frameNode, static_cast<Ace::FontStyle>(value));
517 }
518
ResetTextAreaFontStyle(ArkUINodeHandle node)519 void ResetTextAreaFontStyle(ArkUINodeHandle node)
520 {
521 auto *frameNode = reinterpret_cast<FrameNode *>(node);
522 CHECK_NULL_VOID(frameNode);
523 TextFieldModelNG::SetFontStyle(frameNode, OHOS::Ace::FontStyle::NORMAL);
524 }
525
SetTextAreaFontWeightStr(ArkUINodeHandle node,ArkUI_CharPtr fontWeight,void * fontWeightRawPtr)526 void SetTextAreaFontWeightStr(ArkUINodeHandle node, ArkUI_CharPtr fontWeight, void* fontWeightRawPtr)
527 {
528 auto *frameNode = reinterpret_cast<FrameNode *>(node);
529 CHECK_NULL_VOID(frameNode);
530 TextFieldModelNG::SetFontWeight(frameNode, Framework::ConvertStrToFontWeight(fontWeight));
531 if (SystemProperties::ConfigChangePerform()) {
532 auto pattern = frameNode->GetPattern();
533 CHECK_NULL_VOID(pattern);
534 if (fontWeightRawPtr) {
535 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(fontWeightRawPtr));
536 pattern->RegisterResource<std::string>("fontWeight", resObj, fontWeight);
537 } else {
538 pattern->UnRegisterResource("fontWeight");
539 }
540 }
541 }
542
SetTextAreaFontWeight(ArkUINodeHandle node,ArkUI_Int32 fontWeight)543 void SetTextAreaFontWeight(ArkUINodeHandle node, ArkUI_Int32 fontWeight)
544 {
545 auto *frameNode = reinterpret_cast<FrameNode *>(node);
546 CHECK_NULL_VOID(frameNode);
547 TextFieldModelNG::SetFontWeight(frameNode, static_cast<FontWeight>(fontWeight));
548 }
549
ResetTextAreaFontWeight(ArkUINodeHandle node)550 void ResetTextAreaFontWeight(ArkUINodeHandle node)
551 {
552 auto *frameNode = reinterpret_cast<FrameNode *>(node);
553 CHECK_NULL_VOID(frameNode);
554 TextFieldModelNG::SetFontWeight(frameNode, OHOS::Ace::FontWeight::NORMAL);
555 if (SystemProperties::ConfigChangePerform()) {
556 auto pattern = frameNode->GetPattern();
557 CHECK_NULL_VOID(pattern);
558 pattern->UnRegisterResource("fontWeight");
559 }
560 }
561
SetTextAreaFontSize(ArkUINodeHandle node,const struct ArkUIResourceLength * size,void * resRawPtr)562 void SetTextAreaFontSize(ArkUINodeHandle node, const struct ArkUIResourceLength *size, void* resRawPtr)
563 {
564 auto *frameNode = reinterpret_cast<FrameNode *>(node);
565 CHECK_NULL_VOID(frameNode);
566 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(size->unit);
567 CalcDimension fontSize;
568 if (unitEnum == DimensionUnit::CALC) {
569 fontSize = CalcDimension(size->string, DimensionUnit::CALC);
570 } else {
571 fontSize = CalcDimension(size->value, unitEnum);
572 }
573 TextFieldModelNG::SetFontSize(frameNode, fontSize);
574 if (SystemProperties::ConfigChangePerform()) {
575 auto pattern = frameNode->GetPattern();
576 CHECK_NULL_VOID(pattern);
577 if (resRawPtr) {
578 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
579 pattern->RegisterResource<CalcDimension>("fontSize", resObj, fontSize);
580 } else {
581 pattern->UnRegisterResource("fontSize");
582 }
583 }
584 }
585
ResetTextAreaFontSize(ArkUINodeHandle node)586 void ResetTextAreaFontSize(ArkUINodeHandle node)
587 {
588 auto *frameNode = reinterpret_cast<FrameNode *>(node);
589 CHECK_NULL_VOID(frameNode);
590 auto pipeline = frameNode->GetContext();
591 CHECK_NULL_VOID(pipeline);
592 auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
593 CHECK_NULL_VOID(theme);
594 TextFieldModelNG::SetFontSize(frameNode, Dimension(theme->GetFontSize()));
595 if (SystemProperties::ConfigChangePerform()) {
596 auto pattern = frameNode->GetPattern();
597 CHECK_NULL_VOID(pattern);
598 pattern->UnRegisterResource("fontSize");
599 }
600 }
601
SetCounterType(ArkUINodeHandle node,ArkUI_Int32 value)602 void SetCounterType(ArkUINodeHandle node, ArkUI_Int32 value)
603 {
604 auto *frameNode = reinterpret_cast<FrameNode *>(node);
605 CHECK_NULL_VOID(frameNode);
606 TextFieldModelNG::SetCounterType(frameNode, value);
607 }
608
SetTextAreaPlaceholderString(ArkUINodeHandle node,ArkUI_CharPtr value)609 void SetTextAreaPlaceholderString(ArkUINodeHandle node, ArkUI_CharPtr value)
610 {
611 auto *frameNode = reinterpret_cast<FrameNode *>(node);
612 CHECK_NULL_VOID(frameNode);
613 std::string placeholderStr(value);
614 TextFieldModelNG::SetTextFieldPlaceHolder(frameNode, UtfUtils::Str8DebugToStr16(placeholderStr));
615 }
616
SetTextAreaTextString(ArkUINodeHandle node,ArkUI_CharPtr value)617 void SetTextAreaTextString(ArkUINodeHandle node, ArkUI_CharPtr value)
618 {
619 auto *frameNode = reinterpret_cast<FrameNode *>(node);
620 CHECK_NULL_VOID(frameNode);
621 std::string textStr(value);
622 TextFieldModelNG::SetTextFieldText(frameNode, UtfUtils::Str8DebugToStr16(textStr));
623 }
624
StopTextAreaTextEditing(ArkUINodeHandle node)625 void StopTextAreaTextEditing(ArkUINodeHandle node)
626 {
627 auto *frameNode = reinterpret_cast<FrameNode *>(node);
628 CHECK_NULL_VOID(frameNode);
629 TextFieldModelNG::StopTextFieldEditing(frameNode);
630 }
631
GetTextAreaPlaceholder(ArkUINodeHandle node)632 ArkUI_CharPtr GetTextAreaPlaceholder(ArkUINodeHandle node)
633 {
634 auto *frameNode = reinterpret_cast<FrameNode *>(node);
635 CHECK_NULL_RETURN(frameNode, "");
636 g_strValue = UtfUtils::Str16DebugToStr8(TextFieldModelNG::GetPlaceholderText(frameNode));
637 return g_strValue.c_str();
638 }
639
GetTextAreaText(ArkUINodeHandle node)640 ArkUI_CharPtr GetTextAreaText(ArkUINodeHandle node)
641 {
642 auto *frameNode = reinterpret_cast<FrameNode *>(node);
643 CHECK_NULL_RETURN(frameNode, "");
644 g_strValue = UtfUtils::Str16DebugToStr8(TextFieldModelNG::GetTextFieldText(frameNode));
645 return g_strValue.c_str();
646 }
647
GetTextAreaCaretColor(ArkUINodeHandle node)648 ArkUI_Uint32 GetTextAreaCaretColor(ArkUINodeHandle node)
649 {
650 auto *frameNode = reinterpret_cast<FrameNode *>(node);
651 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
652 return TextFieldModelNG::GetCaretColor(frameNode).GetValue();
653 }
654
GetTextAreaMaxLength(ArkUINodeHandle node)655 ArkUI_Uint32 GetTextAreaMaxLength(ArkUINodeHandle node)
656 {
657 auto *frameNode = reinterpret_cast<FrameNode *>(node);
658 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
659 return TextFieldModelNG::GetMaxLength(frameNode);
660 }
661
GetTextAreaPlaceholderColor(ArkUINodeHandle node)662 ArkUI_Uint32 GetTextAreaPlaceholderColor(ArkUINodeHandle node)
663 {
664 auto *frameNode = reinterpret_cast<FrameNode *>(node);
665 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
666 return TextFieldModelNG::GetPlaceholderColor(frameNode).GetValue();
667 }
668
GetTextAreaPlaceholderFont(ArkUINodeHandle node,ArkUITextFont * font)669 void GetTextAreaPlaceholderFont(ArkUINodeHandle node, ArkUITextFont* font)
670 {
671 auto* frameNode = reinterpret_cast<FrameNode*>(node);
672 CHECK_NULL_VOID(frameNode);
673 Font value = TextFieldModelNG::GetPlaceholderFont(frameNode);
674 if (value.fontSize.has_value()) {
675 font->fontSize = value.fontSize.value().GetNativeValue(static_cast<DimensionUnit>(font->fontSizeUnit));
676 }
677 if (value.fontWeight.has_value()) {
678 font->fontWeight = static_cast<ArkUI_Int32>(value.fontWeight.value());
679 }
680 if (!value.fontFamilies.empty()) {
681 std::string families;
682 uint32_t index = 0;
683 for (auto& family : value.fontFamilies) {
684 families += family;
685 if (index != value.fontFamilies.size() - 1) {
686 families += ",";
687 }
688 index ++;
689 }
690 g_strValue = families;
691 font->fontFamilies = g_strValue.c_str();
692 }
693 if (value.fontStyle.has_value()) {
694 font->fontStyle = static_cast<ArkUI_Int32>(value.fontStyle.value());
695 }
696 }
697
GetTextAreaEditing(ArkUINodeHandle node)698 ArkUI_Bool GetTextAreaEditing(ArkUINodeHandle node)
699 {
700 auto *frameNode = reinterpret_cast<FrameNode *>(node);
701 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
702 return TextFieldModelNG::GetTextFieldEditing(frameNode);
703 }
704
SetTextAreaBackgroundColor(ArkUINodeHandle node,uint32_t color,void * resRawPtr)705 void SetTextAreaBackgroundColor(ArkUINodeHandle node, uint32_t color, void* resRawPtr)
706 {
707 auto* frameNode = reinterpret_cast<FrameNode*>(node);
708 CHECK_NULL_VOID(frameNode);
709 TextFieldModelNG::SetBackgroundColor(frameNode, Color(color));
710 if (SystemProperties::ConfigChangePerform()) {
711 auto pattern = frameNode->GetPattern();
712 CHECK_NULL_VOID(pattern);
713 if (resRawPtr) {
714 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
715 pattern->RegisterResource<Color>("backgroundColor", resObj, Color(color));
716 } else {
717 pattern->UnRegisterResource("backgroundColor");
718 }
719 }
720 }
721
SetTextAreaBackgroundColorWithColorSpace(ArkUINodeHandle node,ArkUI_Uint32 color,ArkUI_Int32 colorSpace,void * resRawPtr)722 void SetTextAreaBackgroundColorWithColorSpace(ArkUINodeHandle node, ArkUI_Uint32 color,
723 ArkUI_Int32 colorSpace, void* resRawPtr)
724 {
725 auto* frameNode = reinterpret_cast<FrameNode*>(node);
726 CHECK_NULL_VOID(frameNode);
727 Color backgroundColor { color };
728 if (ColorSpace::DISPLAY_P3 == colorSpace) {
729 backgroundColor.SetColorSpace(ColorSpace::DISPLAY_P3);
730 } else {
731 backgroundColor.SetColorSpace(ColorSpace::SRGB);
732 }
733 TextFieldModelNG::SetBackgroundColor(frameNode, backgroundColor);
734 if (SystemProperties::ConfigChangePerform()) {
735 auto pattern = frameNode->GetPattern();
736 CHECK_NULL_VOID(pattern);
737 if (resRawPtr) {
738 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
739 pattern->RegisterResource<Color>("backgroundColor", resObj, backgroundColor);
740 } else {
741 pattern->UnRegisterResource("backgroundColor");
742 }
743 }
744 }
745
ResetTextAreaBackgroundColor(ArkUINodeHandle node)746 void ResetTextAreaBackgroundColor(ArkUINodeHandle node)
747 {
748 auto* frameNode = reinterpret_cast<FrameNode*>(node);
749 CHECK_NULL_VOID(frameNode);
750 TextFieldModelNG::ResetBackgroundColor(frameNode);
751 if (SystemProperties::ConfigChangePerform()) {
752 auto pattern = frameNode->GetPattern();
753 CHECK_NULL_VOID(pattern);
754 pattern->UnRegisterResource("backgroundColor");
755 }
756 }
757
SetTextAreaType(ArkUINodeHandle node,ArkUI_Int32 type)758 void SetTextAreaType(ArkUINodeHandle node, ArkUI_Int32 type)
759 {
760 auto* frameNode = reinterpret_cast<FrameNode*>(node);
761 CHECK_NULL_VOID(frameNode);
762 TextFieldModelNG::SetType(frameNode, CastToTextInputType(type));
763 }
764
ResetTextAreaType(ArkUINodeHandle node)765 void ResetTextAreaType(ArkUINodeHandle node)
766 {
767 auto* frameNode = reinterpret_cast<FrameNode*>(node);
768 CHECK_NULL_VOID(frameNode);
769 TextFieldModelNG::SetType(frameNode, Ace::TextInputType::TEXT);
770 }
771
GetTextAreaType(ArkUINodeHandle node)772 ArkUI_Int32 GetTextAreaType(ArkUINodeHandle node)
773 {
774 auto *frameNode = reinterpret_cast<FrameNode *>(node);
775 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
776 return static_cast<ArkUI_Int32>(TextFieldModelNG::GetType(frameNode));
777 }
778
GetTextAreaTextAlign(ArkUINodeHandle node)779 ArkUI_Int32 GetTextAreaTextAlign(ArkUINodeHandle node)
780 {
781 auto *frameNode = reinterpret_cast<FrameNode *>(node);
782 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
783 return static_cast<ArkUI_Int32>(TextFieldModelNG::GetTextAlign(frameNode));
784 }
785
SetTextAreaShowCounterOptions(ArkUINodeHandle node,ArkUI_Bool open,ArkUI_Int32 thresholdPercentage,ArkUI_Bool highlightBorder)786 void SetTextAreaShowCounterOptions(
787 ArkUINodeHandle node, ArkUI_Bool open, ArkUI_Int32 thresholdPercentage, ArkUI_Bool highlightBorder)
788 {
789 auto* frameNode = reinterpret_cast<FrameNode*>(node);
790 CHECK_NULL_VOID(frameNode);
791 TextFieldModelNG::SetShowCounter(frameNode, open);
792 TextFieldModelNG::SetCounterType(frameNode, thresholdPercentage);
793 TextFieldModelNG::SetShowCounterBorder(frameNode, highlightBorder);
794 }
795
ResetTextAreaShowCounterOptions(ArkUINodeHandle node)796 void ResetTextAreaShowCounterOptions(ArkUINodeHandle node)
797 {
798 auto *frameNode = reinterpret_cast<FrameNode *>(node);
799 CHECK_NULL_VOID(frameNode);
800 TextFieldModelNG::SetShowCounter(frameNode, false);
801 TextFieldModelNG::SetCounterType(frameNode, -1);
802 TextFieldModelNG::SetShowCounterBorder(frameNode, true);
803 }
804
GetTextAreaShowCounterOptions(ArkUINodeHandle node,ArkUIShowCountOptions * options)805 void GetTextAreaShowCounterOptions(ArkUINodeHandle node, ArkUIShowCountOptions* options)
806 {
807 auto *frameNode = reinterpret_cast<FrameNode *>(node);
808 CHECK_NULL_VOID(frameNode);
809 options->open = TextFieldModelNG::GetShowCounter(frameNode);
810 options->thresholdPercentage = TextFieldModelNG::GetCounterType(frameNode);
811 options->highlightBorder = TextFieldModelNG::GetShowCounterBorder(frameNode);
812 }
813
SetTextAreaFontFeature(ArkUINodeHandle node,ArkUI_CharPtr value)814 void SetTextAreaFontFeature(ArkUINodeHandle node, ArkUI_CharPtr value)
815 {
816 auto* frameNode = reinterpret_cast<FrameNode*>(node);
817 CHECK_NULL_VOID(frameNode);
818 std::string strValue = value;
819 TextFieldModelNG::SetFontFeature(frameNode, ParseFontFeatureSettings(strValue));
820 }
821
ResetTextAreaFontFeature(ArkUINodeHandle node)822 void ResetTextAreaFontFeature(ArkUINodeHandle node)
823 {
824 auto* frameNode = reinterpret_cast<FrameNode*>(node);
825 std::string strValue = "";
826 TextFieldModelNG::SetFontFeature(frameNode, ParseFontFeatureSettings(strValue));
827 }
828
GetTextAreaMinLines(ArkUINodeHandle node)829 ArkUI_Uint32 GetTextAreaMinLines(ArkUINodeHandle node)
830 {
831 auto* frameNode = reinterpret_cast<FrameNode*>(node);
832 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
833 return TextFieldModelNG::GetMinLines(frameNode);
834 }
835
SetTextAreaDecoration(ArkUINodeHandle node,ArkUI_Int32 decoration,ArkUI_Uint32 color,ArkUI_Int32 style,void * resRawPtr)836 void SetTextAreaDecoration(ArkUINodeHandle node, ArkUI_Int32 decoration, ArkUI_Uint32 color,
837 ArkUI_Int32 style, void* resRawPtr)
838 {
839 auto* frameNode = reinterpret_cast<FrameNode*>(node);
840 CHECK_NULL_VOID(frameNode);
841 TextFieldModelNG::SetTextDecoration(frameNode, static_cast<TextDecoration>(decoration));
842 TextFieldModelNG::SetTextDecorationColor(frameNode, Color(color));
843 TextFieldModelNG::SetTextDecorationStyle(frameNode, static_cast<TextDecorationStyle>(style));
844 if (SystemProperties::ConfigChangePerform()) {
845 auto pattern = frameNode->GetPattern();
846 CHECK_NULL_VOID(pattern);
847 if (resRawPtr) {
848 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
849 pattern->RegisterResource<Color>("decorationColor", resObj, Color(color));
850 } else {
851 pattern->UnRegisterResource("decorationColor");
852 }
853 }
854 }
855
ResetTextAreaDecoration(ArkUINodeHandle node)856 void ResetTextAreaDecoration(ArkUINodeHandle node)
857 {
858 auto* frameNode = reinterpret_cast<FrameNode*>(node);
859 CHECK_NULL_VOID(frameNode);
860 TextFieldModelNG::SetTextDecoration(frameNode, DEFAULT_TEXT_DECORATION);
861 TextFieldModelNG::SetTextDecorationColor(frameNode, DEFAULT_DECORATION_COLOR);
862 TextFieldModelNG::SetTextDecorationStyle(frameNode, DEFAULT_DECORATION_STYLE);
863 if (SystemProperties::ConfigChangePerform()) {
864 auto pattern = frameNode->GetPattern();
865 CHECK_NULL_VOID(pattern);
866 pattern->UnRegisterResource("decorationColor");
867 }
868 }
869
SetTextAreaLetterSpacing(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,void * resRawPtr)870 void SetTextAreaLetterSpacing(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* resRawPtr)
871 {
872 auto* frameNode = reinterpret_cast<FrameNode*>(node);
873 CHECK_NULL_VOID(frameNode);
874 TextFieldModelNG::SetLetterSpacing(frameNode, CalcDimension(value, (DimensionUnit)unit));
875 if (SystemProperties::ConfigChangePerform()) {
876 auto pattern = frameNode->GetPattern();
877 CHECK_NULL_VOID(pattern);
878 if (resRawPtr) {
879 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
880 pattern->RegisterResource<CalcDimension>(
881 "letterSpacing", resObj, CalcDimension(value, (DimensionUnit)unit));
882 } else {
883 pattern->UnRegisterResource("letterSpacing");
884 }
885 }
886 }
887
ResetTextAreaLetterSpacing(ArkUINodeHandle node)888 void ResetTextAreaLetterSpacing(ArkUINodeHandle node)
889 {
890 auto* frameNode = reinterpret_cast<FrameNode*>(node);
891 CHECK_NULL_VOID(frameNode);
892 CalcDimension value;
893 value.Reset();
894 TextFieldModelNG::SetLetterSpacing(frameNode, value);
895 if (SystemProperties::ConfigChangePerform()) {
896 auto pattern = frameNode->GetPattern();
897 CHECK_NULL_VOID(pattern);
898 pattern->UnRegisterResource("letterSpacing");
899 }
900 }
901
GetTextAreaLetterSpacing(ArkUINodeHandle node)902 ArkUI_Float32 GetTextAreaLetterSpacing(ArkUINodeHandle node)
903 {
904 auto* frameNode = reinterpret_cast<FrameNode*>(node);
905 CHECK_NULL_RETURN(frameNode, 0.0f);
906 return TextFieldModelNG::GetLetterSpacing(frameNode).ConvertToFp();
907 }
908
SetTextAreaLineHeight(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,void * resRawPtr)909 void SetTextAreaLineHeight(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* resRawPtr)
910 {
911 auto* frameNode = reinterpret_cast<FrameNode*>(node);
912 CHECK_NULL_VOID(frameNode);
913 TextFieldModelNG::SetLineHeight(frameNode,
914 CalcDimension(LessNotEqual(value, 0.0f) ? 0.0f : value, (DimensionUnit)unit));
915 if (SystemProperties::ConfigChangePerform()) {
916 auto pattern = frameNode->GetPattern();
917 CHECK_NULL_VOID(pattern);
918 if (resRawPtr) {
919 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
920 pattern->RegisterResource<CalcDimension>("lineHeight", resObj,
921 CalcDimension(LessNotEqual(value, 0.0f) ? 0.0f : value, (DimensionUnit)unit));
922 } else {
923 pattern->UnRegisterResource("lineHeight");
924 }
925 }
926 }
927
ResetTextAreaLineHeight(ArkUINodeHandle node)928 void ResetTextAreaLineHeight(ArkUINodeHandle node)
929 {
930 auto* frameNode = reinterpret_cast<FrameNode*>(node);
931 CHECK_NULL_VOID(frameNode);
932 CalcDimension value;
933 value.Reset();
934 TextFieldModelNG::SetLineHeight(frameNode, value);
935 if (SystemProperties::ConfigChangePerform()) {
936 auto pattern = frameNode->GetPattern();
937 CHECK_NULL_VOID(pattern);
938 pattern->UnRegisterResource("lineHeight");
939 }
940 }
941
SetTextAreaHalfLeading(ArkUINodeHandle node,ArkUI_Uint32 halfLeading)942 void SetTextAreaHalfLeading(ArkUINodeHandle node, ArkUI_Uint32 halfLeading)
943 {
944 auto* frameNode = reinterpret_cast<FrameNode*>(node);
945 CHECK_NULL_VOID(frameNode);
946 TextFieldModelNG::SetHalfLeading(frameNode, static_cast<bool>(halfLeading));
947 }
948
ResetTextAreaHalfLeading(ArkUINodeHandle node)949 void ResetTextAreaHalfLeading(ArkUINodeHandle node)
950 {
951 auto* frameNode = reinterpret_cast<FrameNode*>(node);
952 CHECK_NULL_VOID(frameNode);
953 bool value = false;
954 TextFieldModelNG::SetHalfLeading(frameNode, value);
955 }
956
SetTextAreaKeyboardAppearance(ArkUINodeHandle node,ArkUI_Uint32 keyboardAppearance)957 void SetTextAreaKeyboardAppearance(ArkUINodeHandle node, ArkUI_Uint32 keyboardAppearance)
958 {
959 auto* frameNode = reinterpret_cast<FrameNode*>(node);
960 CHECK_NULL_VOID(frameNode);
961 auto value = static_cast<KeyboardAppearance>(keyboardAppearance);
962 TextFieldModelNG::SetKeyboardAppearance(frameNode, value);
963 }
964
ResetTextAreaKeyboardAppearance(ArkUINodeHandle node)965 void ResetTextAreaKeyboardAppearance(ArkUINodeHandle node)
966 {
967 auto* frameNode = reinterpret_cast<FrameNode*>(node);
968 CHECK_NULL_VOID(frameNode);
969 auto value = KeyboardAppearance::NONE_IMMERSIVE;
970 TextFieldModelNG::SetKeyboardAppearance(frameNode, value);
971 }
972
SetTextAreaWordBreak(ArkUINodeHandle node,ArkUI_Uint32 wordBreak)973 void SetTextAreaWordBreak(ArkUINodeHandle node, ArkUI_Uint32 wordBreak)
974 {
975 auto* frameNode = reinterpret_cast<FrameNode*>(node);
976 CHECK_NULL_VOID(frameNode);
977 if (wordBreak < 0 || wordBreak >= WORD_BREAK_TYPES.size()) {
978 wordBreak = 2; // 2 is the default value of WordBreak::BREAK_WORD
979 }
980 TextFieldModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[wordBreak]);
981 }
982
ResetTextAreaWordBreak(ArkUINodeHandle node)983 void ResetTextAreaWordBreak(ArkUINodeHandle node)
984 {
985 auto* frameNode = reinterpret_cast<FrameNode*>(node);
986 CHECK_NULL_VOID(frameNode);
987 TextFieldModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[2]); // 2 is the default value of WordBreak::BREAK_WORD
988 }
989
SetTextAreaAdaptMinFontSize(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,void * resRawPtr)990 void SetTextAreaAdaptMinFontSize(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* resRawPtr)
991 {
992 auto *frameNode = reinterpret_cast<FrameNode *>(node);
993 CHECK_NULL_VOID(frameNode);
994 TextFieldModelNG::SetAdaptMinFontSize(frameNode, CalcDimension(value, (DimensionUnit)unit));
995 if (SystemProperties::ConfigChangePerform()) {
996 auto pattern = frameNode->GetPattern();
997 CHECK_NULL_VOID(pattern);
998 if (resRawPtr) {
999 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
1000 pattern->RegisterResource<CalcDimension>("minFontSize", resObj, CalcDimension(value, (DimensionUnit)unit));
1001 } else {
1002 pattern->UnRegisterResource("minFontSize");
1003 }
1004 }
1005 }
1006
ResetTextAreaAdaptMinFontSize(ArkUINodeHandle node)1007 void ResetTextAreaAdaptMinFontSize(ArkUINodeHandle node)
1008 {
1009 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1010 CHECK_NULL_VOID(frameNode);
1011 auto pipelineContext = frameNode->GetContext();
1012 CHECK_NULL_VOID(pipelineContext);
1013 auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1014 CHECK_NULL_VOID(theme);
1015 CalcDimension minFontSize = theme->GetTextStyle().GetAdaptMinFontSize();
1016 TextFieldModelNG::SetAdaptMinFontSize(frameNode, minFontSize);
1017 if (SystemProperties::ConfigChangePerform()) {
1018 auto pattern = frameNode->GetPattern();
1019 CHECK_NULL_VOID(pattern);
1020 pattern->UnRegisterResource("minFontSize");
1021 }
1022 }
1023
SetTextAreaAdaptMaxFontSize(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,void * resRawPtr)1024 void SetTextAreaAdaptMaxFontSize(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* resRawPtr)
1025 {
1026 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1027 CHECK_NULL_VOID(frameNode);
1028 TextFieldModelNG::SetAdaptMaxFontSize(frameNode, CalcDimension(value, (DimensionUnit)unit));
1029 if (SystemProperties::ConfigChangePerform()) {
1030 auto pattern = frameNode->GetPattern();
1031 CHECK_NULL_VOID(pattern);
1032 if (resRawPtr) {
1033 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
1034 pattern->RegisterResource<CalcDimension>("maxFontSize", resObj, CalcDimension(value, (DimensionUnit)unit));
1035 } else {
1036 pattern->UnRegisterResource("maxFontSize");
1037 }
1038 }
1039 }
1040
ResetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)1041 void ResetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)
1042 {
1043 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1044 CHECK_NULL_VOID(frameNode);
1045 auto pipelineContext = frameNode->GetContext();
1046 CHECK_NULL_VOID(pipelineContext);
1047 auto theme = pipelineContext->GetTheme<TextFieldTheme>();
1048 CHECK_NULL_VOID(theme);
1049 CalcDimension maxFontSize = theme->GetTextStyle().GetAdaptMaxFontSize();
1050 TextFieldModelNG::SetAdaptMaxFontSize(frameNode, maxFontSize);
1051 if (SystemProperties::ConfigChangePerform()) {
1052 auto pattern = frameNode->GetPattern();
1053 CHECK_NULL_VOID(pattern);
1054 pattern->UnRegisterResource("maxFontSize");
1055 }
1056 }
1057
SetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node,ArkUI_Int32 value)1058 void SetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node, ArkUI_Int32 value)
1059 {
1060 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1061 CHECK_NULL_VOID(frameNode);
1062 TextFieldModelNG::SetHeightAdaptivePolicy(frameNode, static_cast<Ace::TextHeightAdaptivePolicy>(value));
1063 }
1064
ResetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node)1065 void ResetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node)
1066 {
1067 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1068 CHECK_NULL_VOID(frameNode);
1069 TextFieldModelNG::SetHeightAdaptivePolicy(frameNode, TextHeightAdaptivePolicy::MAX_LINES_FIRST);
1070 }
1071
GetTextAreaSelectionMenuHidden(ArkUINodeHandle node)1072 ArkUI_Bool GetTextAreaSelectionMenuHidden(ArkUINodeHandle node)
1073 {
1074 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1075 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
1076 return TextFieldModelNG::GetSelectionMenuHidden(frameNode);
1077 }
1078
SetTextAreaSelectedBackgroundColor(ArkUINodeHandle node,ArkUI_Uint32 color,void * resRawPtr)1079 void SetTextAreaSelectedBackgroundColor(ArkUINodeHandle node, ArkUI_Uint32 color, void* resRawPtr)
1080 {
1081 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1082 CHECK_NULL_VOID(frameNode);
1083 Color selectedColor = Color(color);
1084 if (selectedColor.GetAlpha() == DEFAULT_ALPHA) {
1085 // Default setting of 20% opacity
1086 selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
1087 }
1088 TextFieldModelNG::SetSelectedBackgroundColor(frameNode, Color(color));
1089 if (SystemProperties::ConfigChangePerform()) {
1090 auto pattern = frameNode->GetPattern();
1091 CHECK_NULL_VOID(pattern);
1092 if (resRawPtr) {
1093 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
1094 pattern->RegisterResource<Color>("selectedBackgroundColor", resObj, selectedColor);
1095 } else {
1096 pattern->UnRegisterResource("selectedBackgroundColor");
1097 }
1098 }
1099 }
1100
ResetTextAreaSelectedBackgroundColor(ArkUINodeHandle node)1101 void ResetTextAreaSelectedBackgroundColor(ArkUINodeHandle node)
1102 {
1103 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1104 CHECK_NULL_VOID(frameNode);
1105 Color selectedColor;
1106 auto pipeline = frameNode->GetContext();
1107 CHECK_NULL_VOID(pipeline);
1108 auto theme = pipeline->GetTheme<TextFieldTheme>();
1109 CHECK_NULL_VOID(theme);
1110 selectedColor = theme->GetSelectedColor();
1111 if (selectedColor.GetAlpha() == DEFAULT_ALPHA) {
1112 // Default setting of 20% opacity
1113 selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
1114 }
1115 TextFieldModelNG::SetSelectedBackgroundColor(frameNode, selectedColor);
1116 if (SystemProperties::ConfigChangePerform()) {
1117 auto pattern = frameNode->GetPattern();
1118 CHECK_NULL_VOID(pattern);
1119 pattern->UnRegisterResource("selectedBackgroundColor");
1120 }
1121 }
1122
SetTextAreaCaret(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,void * resRawPtr)1123 void SetTextAreaCaret(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, void* resRawPtr)
1124 {
1125 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1126 CHECK_NULL_VOID(frameNode);
1127 CaretStyle caretStyle;
1128 caretStyle.caretWidth = CalcDimension(value, (DimensionUnit)unit);
1129 TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
1130 if (SystemProperties::ConfigChangePerform()) {
1131 auto pattern = frameNode->GetPattern();
1132 CHECK_NULL_VOID(pattern);
1133 if (resRawPtr) {
1134 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
1135 pattern->RegisterResource<CalcDimension>("caretWidth", resObj, CalcDimension(value, (DimensionUnit)unit));
1136 } else {
1137 pattern->UnRegisterResource("caretWidth");
1138 }
1139 }
1140 }
1141
SetTextAreaCaretStyle(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_Uint32 caretColor,void * widthRawPtr,void * colorRawPtr)1142 void SetTextAreaCaretStyle(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_Uint32 caretColor,
1143 void* widthRawPtr, void* colorRawPtr)
1144 {
1145 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1146 CHECK_NULL_VOID(frameNode);
1147 CaretStyle caretStyle;
1148 caretStyle.caretWidth = CalcDimension(value, (DimensionUnit)unit);
1149 TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
1150 TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
1151 if (SystemProperties::ConfigChangePerform()) {
1152 auto pattern = frameNode->GetPattern();
1153 CHECK_NULL_VOID(pattern);
1154 if (widthRawPtr) {
1155 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(widthRawPtr));
1156 pattern->RegisterResource<CalcDimension>("caretWidth", resObj, CalcDimension(value, (DimensionUnit)unit));
1157 } else {
1158 pattern->UnRegisterResource("caretWidth");
1159 }
1160 if (colorRawPtr) {
1161 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(colorRawPtr));
1162 pattern->RegisterResource<Color>("caretColor", resObj, Color(caretColor));
1163 } else {
1164 pattern->UnRegisterResource("caretColor");
1165 }
1166 }
1167 }
1168
ResetTextAreaCaretStyle(ArkUINodeHandle node)1169 void ResetTextAreaCaretStyle(ArkUINodeHandle node)
1170 {
1171 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1172 auto pipeline = frameNode->GetContext();
1173 CHECK_NULL_VOID(pipeline);
1174 auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
1175 CHECK_NULL_VOID(theme);
1176 CaretStyle caretStyle;
1177 caretStyle.caretWidth = theme->GetCursorWidth();
1178 uint32_t caretColor = theme->GetCursorColor().GetValue();
1179 TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
1180 TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
1181 if (SystemProperties::ConfigChangePerform()) {
1182 auto pattern = frameNode->GetPattern();
1183 CHECK_NULL_VOID(pattern);
1184 pattern->UnRegisterResource("caretWidth");
1185 pattern->UnRegisterResource("caretColor");
1186 }
1187 }
1188
SetTextAreaTextOverflow(ArkUINodeHandle node,ArkUI_Int32 value)1189 void SetTextAreaTextOverflow(ArkUINodeHandle node, ArkUI_Int32 value)
1190 {
1191 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1192 CHECK_NULL_VOID(frameNode);
1193 TextOverflow valueTextOverflow = static_cast<TextOverflow>(value);
1194 TextFieldModelNG::SetTextOverflow(frameNode, valueTextOverflow);
1195 }
1196
ResetTextAreaTextOverflow(ArkUINodeHandle node)1197 void ResetTextAreaTextOverflow(ArkUINodeHandle node)
1198 {
1199 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1200 CHECK_NULL_VOID(frameNode);
1201 TextFieldModelNG::SetTextOverflow(frameNode, TextOverflow::DEFAULT);
1202 }
1203
SetTextAreaTextIndent(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit,void * resRawPtr)1204 void SetTextAreaTextIndent(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit, void* resRawPtr)
1205 {
1206 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1207 CHECK_NULL_VOID(frameNode);
1208 TextFieldModelNG::SetTextIndent(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
1209 if (SystemProperties::ConfigChangePerform()) {
1210 auto pattern = frameNode->GetPattern();
1211 CHECK_NULL_VOID(pattern);
1212 if (resRawPtr) {
1213 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(resRawPtr));
1214 pattern->RegisterResource<CalcDimension>("textIndent", resObj,
1215 Dimension(number, static_cast<DimensionUnit>(unit)));
1216 } else {
1217 pattern->UnRegisterResource("textIndent");
1218 }
1219 }
1220 }
1221
ResetTextAreaTextIndent(ArkUINodeHandle node)1222 void ResetTextAreaTextIndent(ArkUINodeHandle node)
1223 {
1224 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1225 CHECK_NULL_VOID(frameNode);
1226 TextFieldModelNG::SetTextIndent(frameNode, CalcDimension(0, DimensionUnit::VP));
1227 if (SystemProperties::ConfigChangePerform()) {
1228 auto pattern = frameNode->GetPattern();
1229 CHECK_NULL_VOID(pattern);
1230 pattern->UnRegisterResource("textIndent");
1231 }
1232 }
1233
GetTextAreaLineSpacing(ArkUINodeHandle node)1234 ArkUI_Float32 GetTextAreaLineSpacing(ArkUINodeHandle node)
1235 {
1236 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1237 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
1238 return TextFieldModelNG::GetLineSpacing(frameNode);
1239 }
1240
GetTextAreaFontFeature(ArkUINodeHandle node)1241 ArkUI_CharPtr GetTextAreaFontFeature(ArkUINodeHandle node)
1242 {
1243 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1244 CHECK_NULL_RETURN(frameNode, nullptr);
1245 g_strValue = UnParseFontFeatureSetting(TextFieldModelNG::GetFontFeature(frameNode));
1246 return g_strValue.c_str();
1247 }
1248
GetTextAreaAdaptMinFontSize(ArkUINodeHandle node)1249 ArkUI_Float32 GetTextAreaAdaptMinFontSize(ArkUINodeHandle node)
1250 {
1251 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1252 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
1253 return TextFieldModelNG::GetAdaptMinFontSize(frameNode).Value();
1254 }
1255
GetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)1256 ArkUI_Float32 GetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)
1257 {
1258 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1259 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
1260 return TextFieldModelNG::GetAdaptMaxFontSize(frameNode).Value();
1261 }
1262
GetTextAreaLineHeight(ArkUINodeHandle node)1263 ArkUI_Float32 GetTextAreaLineHeight(ArkUINodeHandle node)
1264 {
1265 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1266 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
1267 return TextFieldModelNG::GetLineHeight(frameNode).Value();
1268 }
1269
GetTextAreaHalfLeading(ArkUINodeHandle node)1270 ArkUI_Bool GetTextAreaHalfLeading(ArkUINodeHandle node)
1271 {
1272 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1273 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
1274 return static_cast<ArkUI_Bool>(TextFieldModelNG::GetHalfLeading(frameNode));
1275 }
SetTextAreaLineSpacing(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_Bool isOnlyBetweenLines)1276 void SetTextAreaLineSpacing(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_Bool isOnlyBetweenLines)
1277 {
1278 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1279 CHECK_NULL_VOID(frameNode);
1280 TextFieldModelNG::SetLineSpacing(frameNode, CalcDimension(value, (DimensionUnit)unit), isOnlyBetweenLines);
1281 }
1282
ResetTextAreaLineSpacing(ArkUINodeHandle node)1283 void ResetTextAreaLineSpacing(ArkUINodeHandle node)
1284 {
1285 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1286 CHECK_NULL_VOID(frameNode);
1287 CalcDimension value;
1288 value.Reset();
1289 bool isOnlyBetweenLines = false;
1290 TextFieldModelNG::SetLineSpacing(frameNode, value, isOnlyBetweenLines);
1291 }
1292
GetTextAreaMaxLines(ArkUINodeHandle node)1293 ArkUI_Int32 GetTextAreaMaxLines(ArkUINodeHandle node)
1294 {
1295 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1296 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
1297 return TextFieldModelNG::GetMaxLines(frameNode);
1298 }
1299
RegisterPaddingResource(FrameNode * frameNode,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left,ArkUIPaddingRes * paddingRes)1300 void RegisterPaddingResource(FrameNode* frameNode, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
1301 const struct ArkUISizeType* bottom, const struct ArkUISizeType* left, ArkUIPaddingRes* paddingRes)
1302 {
1303 CHECK_NULL_VOID(SystemProperties::ConfigChangePerform());
1304 auto pattern = frameNode->GetPattern();
1305 CHECK_NULL_VOID(pattern);
1306 if (paddingRes && paddingRes->topObj) {
1307 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(paddingRes->topObj));
1308 pattern->RegisterResource<CalcDimension>("paddingTop", resObj,
1309 CalcDimension(top->value, static_cast<DimensionUnit>(top->unit)));
1310 } else {
1311 pattern->UnRegisterResource("paddingTop");
1312 }
1313 if (paddingRes && paddingRes->bottomObj) {
1314 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(paddingRes->bottomObj));
1315 pattern->RegisterResource<CalcDimension>("paddingBottom", resObj,
1316 CalcDimension(bottom->value, static_cast<DimensionUnit>(bottom->unit)));
1317 } else {
1318 pattern->UnRegisterResource("paddingBottom");
1319 }
1320 if (paddingRes && paddingRes->leftObj) {
1321 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(paddingRes->leftObj));
1322 pattern->RegisterResource<CalcDimension>("paddingLeft", resObj,
1323 CalcDimension(left->value, static_cast<DimensionUnit>(left->unit)));
1324 } else {
1325 pattern->UnRegisterResource("paddingLeft");
1326 }
1327 if (paddingRes && paddingRes->rightObj) {
1328 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(paddingRes->rightObj));
1329 pattern->RegisterResource<CalcDimension>("paddingRight", resObj,
1330 CalcDimension(right->value, static_cast<DimensionUnit>(right->unit)));
1331 } else {
1332 pattern->UnRegisterResource("paddingRight");
1333 }
1334 }
1335
SetTextAreaPadding(ArkUINodeHandle node,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left,ArkUIPaddingRes * paddingRes)1336 void SetTextAreaPadding(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
1337 const struct ArkUISizeType* bottom, const struct ArkUISizeType* left, ArkUIPaddingRes* paddingRes)
1338 {
1339 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1340 CHECK_NULL_VOID(frameNode);
1341 CalcLength topDimen;
1342 CalcLength rightDimen;
1343 CalcLength bottomDimen;
1344 CalcLength leftDimen;
1345 if (top->string != nullptr) {
1346 topDimen = CalcLength(top->string);
1347 } else {
1348 topDimen = CalcLength(top->value, static_cast<DimensionUnit>(top->unit));
1349 }
1350 if (right->string != nullptr) {
1351 rightDimen = CalcLength(right->string);
1352 } else {
1353 rightDimen = CalcLength(right->value, static_cast<DimensionUnit>(right->unit));
1354 }
1355 if (bottom->string != nullptr) {
1356 bottomDimen = CalcLength(bottom->string);
1357 } else {
1358 bottomDimen = CalcLength(bottom->value, static_cast<DimensionUnit>(bottom->unit));
1359 }
1360 if (left->string != nullptr) {
1361 leftDimen = CalcLength(left->string);
1362 } else {
1363 leftDimen = CalcLength(left->value, static_cast<DimensionUnit>(left->unit));
1364 }
1365 NG::PaddingProperty paddings;
1366 paddings.top = std::optional<CalcLength>(topDimen);
1367 paddings.bottom = std::optional<CalcLength>(bottomDimen);
1368 paddings.left = std::optional<CalcLength>(leftDimen);
1369 paddings.right = std::optional<CalcLength>(rightDimen);
1370 TextFieldModelNG::SetPadding(frameNode, paddings);
1371 RegisterPaddingResource(frameNode, top, right, bottom, left, paddingRes);
1372 }
1373
ResetTextAreaPadding(ArkUINodeHandle node)1374 void ResetTextAreaPadding(ArkUINodeHandle node)
1375 {
1376 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1377 CHECK_NULL_VOID(frameNode);
1378 auto pipeline = frameNode->GetContext();
1379 CHECK_NULL_VOID(pipeline);
1380 auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
1381 CHECK_NULL_VOID(theme);
1382 auto textFieldPadding = theme->GetPadding();
1383 NG::PaddingProperty paddings;
1384 paddings.top = NG::CalcLength(textFieldPadding.Top());
1385 paddings.bottom = NG::CalcLength(textFieldPadding.Bottom());
1386 paddings.left = NG::CalcLength(textFieldPadding.Left());
1387 paddings.right = NG::CalcLength(textFieldPadding.Right());
1388 TextFieldModelNG::SetPadding(frameNode, paddings);
1389 if (SystemProperties::ConfigChangePerform()) {
1390 auto pattern = frameNode->GetPattern();
1391 CHECK_NULL_VOID(pattern);
1392 pattern->UnRegisterResource("paddingTop");
1393 pattern->UnRegisterResource("paddingBottom");
1394 pattern->UnRegisterResource("paddingLeft");
1395 pattern->UnRegisterResource("paddingRight");
1396 }
1397 }
1398
SetTextAreaOnChange(ArkUINodeHandle node,void * callback)1399 void SetTextAreaOnChange(ArkUINodeHandle node, void* callback)
1400 {
1401 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1402 CHECK_NULL_VOID(frameNode);
1403 if (callback) {
1404 auto onChange = reinterpret_cast<std::function<void(const ChangeValueInfo&)>*>(callback);
1405 TextFieldModelNG::SetOnChange(frameNode, std::move(*onChange));
1406 } else {
1407 TextFieldModelNG::SetOnChange(frameNode, nullptr);
1408 }
1409 }
1410
ResetTextAreaOnChange(ArkUINodeHandle node)1411 void ResetTextAreaOnChange(ArkUINodeHandle node)
1412 {
1413 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1414 CHECK_NULL_VOID(frameNode);
1415 TextFieldModelNG::SetOnChange(frameNode, nullptr);
1416 }
1417
SetTextAreaEnterKeyType(ArkUINodeHandle node,ArkUI_Int32 value)1418 void SetTextAreaEnterKeyType(ArkUINodeHandle node, ArkUI_Int32 value)
1419 {
1420 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1421 CHECK_NULL_VOID(frameNode);
1422 TextFieldModelNG::SetEnterKeyType(frameNode, CastToTextInputAction(value));
1423 }
1424
ResetTextAreaEnterKeyType(ArkUINodeHandle node)1425 void ResetTextAreaEnterKeyType(ArkUINodeHandle node)
1426 {
1427 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1428 CHECK_NULL_VOID(frameNode);
1429 TextFieldModelNG::SetEnterKeyType(frameNode, TextInputAction::NEW_LINE);
1430 }
1431
SetTextAreaAutoCapitalizationMode(ArkUINodeHandle node,ArkUI_Int32 value)1432 void SetTextAreaAutoCapitalizationMode(ArkUINodeHandle node, ArkUI_Int32 value)
1433 {
1434 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1435 CHECK_NULL_VOID(frameNode);
1436 TextFieldModelNG::SetAutoCapitalizationMode(frameNode, CastToAutoCapitalizationMode(value));
1437 }
1438
ResetTextAreaAutoCapitalizationMode(ArkUINodeHandle node)1439 void ResetTextAreaAutoCapitalizationMode(ArkUINodeHandle node)
1440 {
1441 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1442 CHECK_NULL_VOID(frameNode);
1443 TextFieldModelNG::SetAutoCapitalizationMode(frameNode, AutoCapitalizationMode::NONE);
1444 }
1445
SetTextAreaInputFilter(ArkUINodeHandle node,ArkUI_CharPtr value,void * callback)1446 void SetTextAreaInputFilter(ArkUINodeHandle node, ArkUI_CharPtr value, void* callback)
1447 {
1448 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1449 CHECK_NULL_VOID(frameNode);
1450 std::string inputFilter(value);
1451 if (callback) {
1452 auto onError = reinterpret_cast<std::function<void(const std::u16string&)>*>(callback);
1453 TextFieldModelNG::SetInputFilter(frameNode, inputFilter, *onError);
1454 } else {
1455 TextFieldModelNG::SetInputFilter(frameNode, inputFilter, nullptr);
1456 }
1457 }
1458
ResetTextAreaInputFilter(ArkUINodeHandle node)1459 void ResetTextAreaInputFilter(ArkUINodeHandle node)
1460 {
1461 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1462 CHECK_NULL_VOID(frameNode);
1463 TextFieldModelNG::SetInputFilter(frameNode, "", nullptr);
1464 }
1465
SetTextAreaOnTextSelectionChange(ArkUINodeHandle node,void * callback)1466 void SetTextAreaOnTextSelectionChange(ArkUINodeHandle node, void* callback)
1467 {
1468 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1469 CHECK_NULL_VOID(frameNode);
1470 if (callback) {
1471 auto onChange = reinterpret_cast<std::function<void(int32_t, int32_t)>*>(callback);
1472 TextFieldModelNG::SetOnTextSelectionChange(frameNode, std::move(*onChange));
1473 } else {
1474 TextFieldModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1475 }
1476 }
1477
ResetTextAreaOnTextSelectionChange(ArkUINodeHandle node)1478 void ResetTextAreaOnTextSelectionChange(ArkUINodeHandle node)
1479 {
1480 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1481 CHECK_NULL_VOID(frameNode);
1482 TextFieldModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1483 }
1484
SetTextAreaOnContentScroll(ArkUINodeHandle node,void * callback)1485 void SetTextAreaOnContentScroll(ArkUINodeHandle node, void* callback)
1486 {
1487 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1488 CHECK_NULL_VOID(frameNode);
1489 if (callback) {
1490 auto onScroll = reinterpret_cast<std::function<void(float, float)>*>(callback);
1491 TextFieldModelNG::SetOnContentScroll(frameNode, std::move(*onScroll));
1492 } else {
1493 TextFieldModelNG::SetOnContentScroll(frameNode, nullptr);
1494 }
1495 }
1496
ResetTextAreaOnContentScroll(ArkUINodeHandle node)1497 void ResetTextAreaOnContentScroll(ArkUINodeHandle node)
1498 {
1499 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1500 CHECK_NULL_VOID(frameNode);
1501 TextFieldModelNG::SetOnContentScroll(frameNode, nullptr);
1502 }
1503
SetTextAreaOnEditChange(ArkUINodeHandle node,void * callback)1504 void SetTextAreaOnEditChange(ArkUINodeHandle node, void* callback)
1505 {
1506 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1507 CHECK_NULL_VOID(frameNode);
1508 if (callback) {
1509 auto onEditChange = reinterpret_cast<std::function<void(bool)>*>(callback);
1510 TextFieldModelNG::SetOnEditChange(frameNode, std::move(*onEditChange));
1511 } else {
1512 TextFieldModelNG::SetOnEditChange(frameNode, nullptr);
1513 }
1514 }
1515
ResetTextAreaOnEditChange(ArkUINodeHandle node)1516 void ResetTextAreaOnEditChange(ArkUINodeHandle node)
1517 {
1518 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1519 CHECK_NULL_VOID(frameNode);
1520 TextFieldModelNG::SetOnEditChange(frameNode, nullptr);
1521 }
1522
SetTextAreaOnCopy(ArkUINodeHandle node,void * callback)1523 void SetTextAreaOnCopy(ArkUINodeHandle node, void* callback)
1524 {
1525 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1526 CHECK_NULL_VOID(frameNode);
1527 if (callback) {
1528 auto onCopy = reinterpret_cast<std::function<void(const std::u16string&)>*>(callback);
1529 TextFieldModelNG::SetOnCopy(frameNode, std::move(*onCopy));
1530 } else {
1531 TextFieldModelNG::SetOnCopy(frameNode, nullptr);
1532 }
1533 }
1534
ResetTextAreaOnCopy(ArkUINodeHandle node)1535 void ResetTextAreaOnCopy(ArkUINodeHandle node)
1536 {
1537 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1538 CHECK_NULL_VOID(frameNode);
1539 TextFieldModelNG::SetOnCopy(frameNode, nullptr);
1540 }
1541
SetTextAreaOnCut(ArkUINodeHandle node,void * callback)1542 void SetTextAreaOnCut(ArkUINodeHandle node, void* callback)
1543 {
1544 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1545 CHECK_NULL_VOID(frameNode);
1546 if (callback) {
1547 auto onCut = reinterpret_cast<std::function<void(const std::u16string&)>*>(callback);
1548 TextFieldModelNG::SetOnCut(frameNode, std::move(*onCut));
1549 } else {
1550 TextFieldModelNG::SetOnCut(frameNode, nullptr);
1551 }
1552 }
1553
ResetTextAreaOnCut(ArkUINodeHandle node)1554 void ResetTextAreaOnCut(ArkUINodeHandle node)
1555 {
1556 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1557 CHECK_NULL_VOID(frameNode);
1558 TextFieldModelNG::SetOnCut(frameNode, nullptr);
1559 }
1560
SetTextAreaOnPaste(ArkUINodeHandle node,void * callback)1561 void SetTextAreaOnPaste(ArkUINodeHandle node, void* callback)
1562 {
1563 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1564 CHECK_NULL_VOID(frameNode);
1565 if (callback) {
1566 auto onPasteWithEvent = reinterpret_cast<std::function<void(
1567 const std::u16string&, NG::TextCommonEvent&)>*>(callback);
1568 TextFieldModelNG::SetOnPasteWithEvent(frameNode, std::move(*onPasteWithEvent));
1569 } else {
1570 TextFieldModelNG::SetOnPasteWithEvent(frameNode, nullptr);
1571 }
1572 }
1573
ResetTextAreaOnPaste(ArkUINodeHandle node)1574 void ResetTextAreaOnPaste(ArkUINodeHandle node)
1575 {
1576 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1577 CHECK_NULL_VOID(frameNode);
1578 TextFieldModelNG::SetOnPasteWithEvent(frameNode, nullptr);
1579 }
1580
SetTextAreaLineBreakStrategy(ArkUINodeHandle node,ArkUI_Uint32 lineBreakStrategy)1581 void SetTextAreaLineBreakStrategy(ArkUINodeHandle node, ArkUI_Uint32 lineBreakStrategy)
1582 {
1583 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1584 CHECK_NULL_VOID(frameNode);
1585 if (lineBreakStrategy < 0 || lineBreakStrategy >= LINE_BREAK_STRATEGY_TYPES.size()) {
1586 lineBreakStrategy = 0; // 0 is the default value of LineBreakStrategy::GREEDY
1587 }
1588 TextFieldModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[lineBreakStrategy]);
1589 }
1590
ResetTextAreaLineBreakStrategy(ArkUINodeHandle node)1591 void ResetTextAreaLineBreakStrategy(ArkUINodeHandle node)
1592 {
1593 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1594 CHECK_NULL_VOID(frameNode);
1595 // 0 is the default value of LineBreakStrategy::GREEDY
1596 TextFieldModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[0]);
1597 }
1598
SetTextAreaOnSubmitWithEvent(ArkUINodeHandle node,void * callback)1599 void SetTextAreaOnSubmitWithEvent(ArkUINodeHandle node, void* callback)
1600 {
1601 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1602 CHECK_NULL_VOID(frameNode);
1603 if (callback) {
1604 auto onSubmit = reinterpret_cast<std::function<void(int32_t, NG::TextFieldCommonEvent&)>*>(callback);
1605 TextFieldModelNG::SetOnSubmit(frameNode, std::move(*onSubmit));
1606 } else {
1607 TextFieldModelNG::SetOnSubmit(frameNode, nullptr);
1608 }
1609 }
1610
ResetTextAreaOnSubmitWithEvent(ArkUINodeHandle node)1611 void ResetTextAreaOnSubmitWithEvent(ArkUINodeHandle node)
1612 {
1613 auto *frameNode = reinterpret_cast<FrameNode*>(node);
1614 CHECK_NULL_VOID(frameNode);
1615 TextFieldModelNG::SetOnSubmit(frameNode, nullptr);
1616 }
1617
SetTextAreaContentType(ArkUINodeHandle node,ArkUI_Int32 contentType)1618 void SetTextAreaContentType(ArkUINodeHandle node, ArkUI_Int32 contentType)
1619 {
1620 auto *frameNode = reinterpret_cast<FrameNode*>(node);
1621 CHECK_NULL_VOID(frameNode);
1622 if (contentType < 0 || contentType > static_cast<ArkUI_Int32>(TextContentType::END)) {
1623 contentType = -1;
1624 }
1625 TextFieldModelNG::SetContentType(frameNode, static_cast<NG::TextContentType>(contentType));
1626 }
1627
ResetTextAreaContentType(ArkUINodeHandle node)1628 void ResetTextAreaContentType(ArkUINodeHandle node)
1629 {
1630 auto *frameNode = reinterpret_cast<FrameNode*>(node);
1631 CHECK_NULL_VOID(frameNode);
1632 TextFieldModelNG::SetContentType(frameNode, static_cast<NG::TextContentType>(TextContentType::UNSPECIFIED));
1633 }
1634
SetTextAreaEnableAutoFill(ArkUINodeHandle node,ArkUI_Uint32 enableAutoFill)1635 void SetTextAreaEnableAutoFill(ArkUINodeHandle node, ArkUI_Uint32 enableAutoFill)
1636 {
1637 auto *frameNode = reinterpret_cast<FrameNode*>(node);
1638 CHECK_NULL_VOID(frameNode);
1639 TextFieldModelNG::SetEnableAutoFill(frameNode, static_cast<bool>(enableAutoFill));
1640 }
1641
ResetTextAreaEnableAutoFill(ArkUINodeHandle node)1642 void ResetTextAreaEnableAutoFill(ArkUINodeHandle node)
1643 {
1644 auto *frameNode = reinterpret_cast<FrameNode*>(node);
1645 CHECK_NULL_VOID(frameNode);
1646 TextFieldModelNG::SetEnableAutoFill(frameNode, DEFAULT_ENABLE_AUTO_FILL);
1647 }
1648
ConvertBorderStyle(int32_t value)1649 BorderStyle ConvertBorderStyle(int32_t value)
1650 {
1651 auto style = static_cast<BorderStyle>(value);
1652 if (style < BorderStyle::SOLID || style > BorderStyle::NONE) {
1653 style = BorderStyle::SOLID;
1654 }
1655 return style;
1656 }
1657
SetOptionalBorder(std::optional<Dimension> & optionalDimension,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1658 void SetOptionalBorder(std::optional<Dimension>& optionalDimension, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
1659 ArkUI_Int32& offset)
1660 {
1661 bool hasValue = static_cast<bool>(values[offset]);
1662 if (hasValue) {
1663 optionalDimension =
1664 Dimension(values[offset + NUM_1], static_cast<OHOS::Ace::DimensionUnit>(values[offset + NUM_2]));
1665 }
1666 offset = offset + NUM_3;
1667 }
1668
SetAllWidthOptionalBorder(NG::BorderWidthProperty & borderWidth,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1669 void SetAllWidthOptionalBorder(NG::BorderWidthProperty& borderWidth, const ArkUI_Float32* values,
1670 ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1671 {
1672 SetOptionalBorder(borderWidth.leftDimen, values, valuesSize, offset);
1673 SetOptionalBorder(borderWidth.rightDimen, values, valuesSize, offset);
1674 SetOptionalBorder(borderWidth.topDimen, values, valuesSize, offset);
1675 SetOptionalBorder(borderWidth.bottomDimen, values, valuesSize, offset);
1676 }
1677
SetAllRadiusOptionalBorder(NG::BorderRadiusProperty & borderRadius,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1678 void SetAllRadiusOptionalBorder(NG::BorderRadiusProperty& borderRadius, const ArkUI_Float32* values,
1679 ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1680 {
1681 SetOptionalBorder(borderRadius.radiusTopLeft, values, valuesSize, offset);
1682 SetOptionalBorder(borderRadius.radiusTopRight, values, valuesSize, offset);
1683 SetOptionalBorder(borderRadius.radiusBottomLeft, values, valuesSize, offset);
1684 SetOptionalBorder(borderRadius.radiusBottomRight, values, valuesSize, offset);
1685 }
1686
SetOptionalBorderColor(std::optional<Color> & optionalColor,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1687 void SetOptionalBorderColor(
1688 std::optional<Color>& optionalColor, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1689 {
1690 auto hasValue = values[offset];
1691 if (static_cast<bool>(hasValue)) {
1692 optionalColor = Color(values[offset + NUM_1]);
1693 }
1694 offset = offset + NUM_2;
1695 }
1696
SetAllOptionalBorderColor(NG::BorderColorProperty & borderColors,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1697 void SetAllOptionalBorderColor(
1698 NG::BorderColorProperty& borderColors, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1699 {
1700 SetOptionalBorderColor(borderColors.leftColor, values, valuesSize, offset);
1701 SetOptionalBorderColor(borderColors.rightColor, values, valuesSize, offset);
1702 SetOptionalBorderColor(borderColors.topColor, values, valuesSize, offset);
1703 SetOptionalBorderColor(borderColors.bottomColor, values, valuesSize, offset);
1704 }
1705
SetOptionalBorderStyle(std::optional<BorderStyle> & optionalStyle,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1706 void SetOptionalBorderStyle(
1707 std::optional<BorderStyle>& optionalStyle, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1708 {
1709 auto hasValue = values[offset];
1710 if (static_cast<bool>(hasValue)) {
1711 optionalStyle = ConvertBorderStyle(values[offset + NUM_1]);
1712 }
1713 offset = offset + NUM_2;
1714 }
1715
SetAllOptionalBorderStyle(NG::BorderStyleProperty & borderStyles,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1716 void SetAllOptionalBorderStyle(
1717 NG::BorderStyleProperty& borderStyles, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1718 {
1719 SetOptionalBorderStyle(borderStyles.styleLeft, values, valuesSize, offset);
1720 SetOptionalBorderStyle(borderStyles.styleRight, values, valuesSize, offset);
1721 SetOptionalBorderStyle(borderStyles.styleTop, values, valuesSize, offset);
1722 SetOptionalBorderStyle(borderStyles.styleBottom, values, valuesSize, offset);
1723 }
1724
SetTextAreaBorder(ArkUINodeHandle node,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,const uint32_t * colorAndStyle,int32_t colorAndStyleSize)1725 void SetTextAreaBorder(ArkUINodeHandle node, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
1726 const uint32_t* colorAndStyle, int32_t colorAndStyleSize)
1727 {
1728 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1729 CHECK_NULL_VOID(frameNode);
1730 if ((values == nullptr) || (valuesSize != NUM_24) || (colorAndStyle == nullptr) || colorAndStyleSize != NUM_16) {
1731 return;
1732 }
1733
1734 int32_t offset = NUM_0;
1735 NG::BorderWidthProperty borderWidth;
1736 SetAllWidthOptionalBorder(borderWidth, values, valuesSize, offset);
1737 borderWidth.multiValued = true;
1738 if (borderWidth.leftDimen.has_value() || borderWidth.rightDimen.has_value() || borderWidth.topDimen.has_value() ||
1739 borderWidth.bottomDimen.has_value()) {
1740 TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1741 }
1742
1743 NG::BorderRadiusProperty borderRadius;
1744 SetAllRadiusOptionalBorder(borderRadius, values, valuesSize, offset);
1745 borderRadius.multiValued = true;
1746 if (borderRadius.radiusTopLeft.has_value() || borderRadius.radiusTopRight.has_value() ||
1747 borderRadius.radiusBottomLeft.has_value() || borderRadius.radiusBottomRight.has_value()) {
1748 TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1749 }
1750
1751 int32_t colorAndStyleOffset = NUM_0;
1752 NG::BorderColorProperty borderColors;
1753 SetAllOptionalBorderColor(borderColors, colorAndStyle,
1754 colorAndStyleSize, colorAndStyleOffset);
1755 borderColors.multiValued = true;
1756 TextFieldModelNG::SetBorderColor(frameNode, borderColors);
1757
1758 NG::BorderStyleProperty borderStyles;
1759 SetAllOptionalBorderStyle(borderStyles, colorAndStyle,
1760 colorAndStyleSize, colorAndStyleOffset);
1761 borderStyles.multiValued = true;
1762 TextFieldModelNG::SetBorderStyle(frameNode, borderStyles);
1763 }
1764
SetTextAreaBorderDash(ArkUINodeHandle node,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize)1765 void SetTextAreaBorderDash(ArkUINodeHandle node, const ArkUI_Float32* values, ArkUI_Int32 valuesSize)
1766 {
1767 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1768 CHECK_NULL_VOID(frameNode);
1769 if ((values == nullptr) || (valuesSize != NUM_36)) {
1770 return;
1771 }
1772 auto isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft();
1773 int32_t offset = NUM_0;
1774 NG::BorderWidthProperty borderDashGap;
1775 SetOptionalBorder(borderDashGap.leftDimen, values, valuesSize, offset);
1776 SetOptionalBorder(borderDashGap.rightDimen, values, valuesSize, offset);
1777 SetOptionalBorder(borderDashGap.topDimen, values, valuesSize, offset);
1778 SetOptionalBorder(borderDashGap.bottomDimen, values, valuesSize, offset);
1779 if (isRightToLeft) {
1780 SetOptionalBorder(borderDashGap.rightDimen, values, valuesSize, offset);
1781 SetOptionalBorder(borderDashGap.leftDimen, values, valuesSize, offset);
1782 } else {
1783 SetOptionalBorder(borderDashGap.leftDimen, values, valuesSize, offset);
1784 SetOptionalBorder(borderDashGap.rightDimen, values, valuesSize, offset);
1785 }
1786 borderDashGap.multiValued = true;
1787 if (borderDashGap.leftDimen.has_value() || borderDashGap.rightDimen.has_value() ||
1788 borderDashGap.topDimen.has_value() || borderDashGap.bottomDimen.has_value()) {
1789 ViewAbstract::SetDashGap(frameNode, borderDashGap);
1790 } else {
1791 ViewAbstract::SetDashGap(frameNode, Dimension(DEFAULT_DASH_DIMENSION));
1792 }
1793
1794 NG::BorderWidthProperty borderDashWidth;
1795 SetOptionalBorder(borderDashWidth.leftDimen, values, valuesSize, offset);
1796 SetOptionalBorder(borderDashWidth.rightDimen, values, valuesSize, offset);
1797 SetOptionalBorder(borderDashWidth.topDimen, values, valuesSize, offset);
1798 SetOptionalBorder(borderDashWidth.bottomDimen, values, valuesSize, offset);
1799 if (isRightToLeft) {
1800 SetOptionalBorder(borderDashWidth.rightDimen, values, valuesSize, offset);
1801 SetOptionalBorder(borderDashWidth.leftDimen, values, valuesSize, offset);
1802 } else {
1803 SetOptionalBorder(borderDashWidth.leftDimen, values, valuesSize, offset);
1804 SetOptionalBorder(borderDashWidth.rightDimen, values, valuesSize, offset);
1805 }
1806 borderDashWidth.multiValued = true;
1807 if (borderDashWidth.leftDimen.has_value() || borderDashWidth.rightDimen.has_value() ||
1808 borderDashWidth.topDimen.has_value() || borderDashWidth.bottomDimen.has_value()) {
1809 ViewAbstract::SetDashWidth(frameNode, borderDashWidth);
1810 } else {
1811 ViewAbstract::SetDashWidth(frameNode, Dimension(DEFAULT_DASH_DIMENSION));
1812 }
1813 }
1814
ResetTextAreaBorder(ArkUINodeHandle node)1815 void ResetTextAreaBorder(ArkUINodeHandle node)
1816 {
1817 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1818 CHECK_NULL_VOID(frameNode);
1819 BorderWidthProperty borderWidth;
1820 borderWidth.SetBorderWidth(Dimension(0));
1821 TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1822
1823 BorderRadiusProperty borderRadius;
1824 borderRadius.SetRadius(Dimension(0));
1825 TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1826
1827 BorderColorProperty borderColor;
1828 borderColor.SetColor(Color::BLACK);
1829 TextFieldModelNG::SetBorderColor(frameNode, borderColor);
1830
1831 BorderStyleProperty borderStyle;
1832 borderStyle.SetBorderStyle(BorderStyle::SOLID);
1833 TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1834 }
1835
SetTextAreaBorderWidth(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)1836 void SetTextAreaBorderWidth(ArkUINodeHandle node, const ArkUI_Float32* values,
1837 const ArkUI_Int32* units, ArkUI_Int32 length)
1838 {
1839 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1840 CHECK_NULL_VOID(frameNode);
1841 if (length != DEFAULT_LENGTH) {
1842 return;
1843 }
1844 std::optional<CalcDimension> topDimen;
1845 std::optional<CalcDimension> rightDimen;
1846 std::optional<CalcDimension> bottomDimen;
1847 std::optional<CalcDimension> leftDimen;
1848
1849 if (values[NUM_0] != -1 &&
1850 static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]) != OHOS::Ace::DimensionUnit::INVALID) {
1851 topDimen = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
1852 }
1853 if (values[NUM_1] != -1 &&
1854 static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]) != OHOS::Ace::DimensionUnit::INVALID) {
1855 rightDimen = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
1856 }
1857 if (values[NUM_2] != -1 &&
1858 static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]) != OHOS::Ace::DimensionUnit::INVALID) {
1859 bottomDimen = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
1860 }
1861 if (values[NUM_3] != -1 &&
1862 static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]) != OHOS::Ace::DimensionUnit::INVALID) {
1863 leftDimen = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
1864 }
1865
1866 NG::BorderWidthProperty borderWidth;
1867 borderWidth.leftDimen = leftDimen;
1868 borderWidth.rightDimen = rightDimen;
1869 borderWidth.topDimen = topDimen;
1870 borderWidth.bottomDimen = bottomDimen;
1871 borderWidth.multiValued = true;
1872 TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1873 }
1874
ResetTextAreaBorderWidth(ArkUINodeHandle node)1875 void ResetTextAreaBorderWidth(ArkUINodeHandle node)
1876 {
1877 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1878 CHECK_NULL_VOID(frameNode);
1879 BorderWidthProperty borderWidth;
1880 borderWidth.SetBorderWidth(Dimension(0));
1881 TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1882 }
1883
SetTextAreaBorderColor(ArkUINodeHandle node,uint32_t topColorInt,uint32_t rightColorInt,uint32_t bottomColorInt,uint32_t leftColorInt)1884 void SetTextAreaBorderColor(ArkUINodeHandle node, uint32_t topColorInt,
1885 uint32_t rightColorInt, uint32_t bottomColorInt, uint32_t leftColorInt)
1886 {
1887 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1888 CHECK_NULL_VOID(frameNode);
1889 NG::BorderColorProperty borderColors;
1890 borderColors.topColor = Color(topColorInt);
1891 borderColors.rightColor = Color(rightColorInt);
1892 borderColors.bottomColor = Color(bottomColorInt);
1893 borderColors.leftColor = Color(leftColorInt);
1894 borderColors.multiValued = true;
1895 TextFieldModelNG::SetBorderColor(frameNode, borderColors);
1896 }
1897
ResetTextAreaBorderColor(ArkUINodeHandle node)1898 void ResetTextAreaBorderColor(ArkUINodeHandle node)
1899 {
1900 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1901 CHECK_NULL_VOID(frameNode);
1902 BorderColorProperty borderColor;
1903 borderColor.SetColor(Color::BLACK);
1904 TextFieldModelNG::SetBorderColor(frameNode, borderColor);
1905 }
1906
SetTextAreaBorderStyle(ArkUINodeHandle node,const ArkUI_Int32 * styles,ArkUI_Int32 length)1907 void SetTextAreaBorderStyle(ArkUINodeHandle node, const ArkUI_Int32* styles, ArkUI_Int32 length)
1908 {
1909 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1910 CHECK_NULL_VOID(frameNode);
1911 if (length == NUM_1) {
1912 BorderStyleProperty borderStyle;
1913 borderStyle.SetBorderStyle(ConvertBorderStyle(styles[NUM_0]));
1914 TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1915 return;
1916 }
1917 if (length == NUM_4) {
1918 NG::BorderStyleProperty borderStyles;
1919 borderStyles.styleLeft = ConvertBorderStyle(styles[NUM_3]);
1920 borderStyles.styleRight = ConvertBorderStyle(styles[NUM_1]);
1921 borderStyles.styleTop = ConvertBorderStyle(styles[NUM_0]);
1922 borderStyles.styleBottom = ConvertBorderStyle(styles[NUM_2]);
1923 borderStyles.multiValued = true;
1924 TextFieldModelNG::SetBorderStyle(frameNode, borderStyles);
1925 }
1926 }
1927
ResetTextAreaBorderStyle(ArkUINodeHandle node)1928 void ResetTextAreaBorderStyle(ArkUINodeHandle node)
1929 {
1930 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1931 CHECK_NULL_VOID(frameNode);
1932 BorderStyleProperty borderStyle;
1933 borderStyle.SetBorderStyle(BorderStyle::SOLID);
1934 TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1935 }
1936
SetTextAreaBorderRadius(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)1937 void SetTextAreaBorderRadius(ArkUINodeHandle node, const ArkUI_Float32* values,
1938 const ArkUI_Int32* units, ArkUI_Int32 length)
1939 {
1940 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1941 CHECK_NULL_VOID(frameNode);
1942 if (length != DEFAULT_LENGTH) {
1943 return;
1944 }
1945 NG::BorderRadiusProperty borderRadius;
1946 borderRadius.radiusTopLeft = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
1947 borderRadius.radiusTopRight = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
1948 borderRadius.radiusBottomLeft = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
1949 borderRadius.radiusBottomRight = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
1950 borderRadius.multiValued = true;
1951 TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1952 }
1953
ResetTextAreaBorderRadius(ArkUINodeHandle node)1954 void ResetTextAreaBorderRadius(ArkUINodeHandle node)
1955 {
1956 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1957 CHECK_NULL_VOID(frameNode);
1958 BorderRadiusProperty borderRadius;
1959 borderRadius.SetRadius(Dimension(0));
1960 TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1961 }
1962
RegisterMarginResource(FrameNode * frameNode,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left,ArkUIPaddingRes * marginRes)1963 void RegisterMarginResource(FrameNode* frameNode, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
1964 const struct ArkUISizeType* bottom, const struct ArkUISizeType* left, ArkUIPaddingRes* marginRes)
1965 {
1966 CHECK_NULL_VOID(SystemProperties::ConfigChangePerform());
1967 auto pattern = frameNode->GetPattern();
1968 CHECK_NULL_VOID(pattern);
1969 if (marginRes && marginRes->topObj) {
1970 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(marginRes->topObj));
1971 pattern->RegisterResource<CalcDimension>("marginTop", resObj,
1972 CalcDimension(top->value, static_cast<DimensionUnit>(top->unit)));
1973 } else {
1974 pattern->UnRegisterResource("marginTop");
1975 }
1976 if (marginRes && marginRes->bottomObj) {
1977 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(marginRes->bottomObj));
1978 pattern->RegisterResource<CalcDimension>("marginBottom", resObj,
1979 CalcDimension(bottom->value, static_cast<DimensionUnit>(bottom->unit)));
1980 } else {
1981 pattern->UnRegisterResource("marginBottom");
1982 }
1983 if (marginRes && marginRes->leftObj) {
1984 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(marginRes->leftObj));
1985 pattern->RegisterResource<CalcDimension>("marginLeft", resObj,
1986 CalcDimension(left->value, static_cast<DimensionUnit>(left->unit)));
1987 } else {
1988 pattern->UnRegisterResource("marginLeft");
1989 }
1990 if (marginRes && marginRes->rightObj) {
1991 auto resObj = AceType::Claim(reinterpret_cast<ResourceObject*>(marginRes->rightObj));
1992 pattern->RegisterResource<CalcDimension>("marginRight", resObj,
1993 CalcDimension(right->value, static_cast<DimensionUnit>(right->unit)));
1994 } else {
1995 pattern->UnRegisterResource("marginRight");
1996 }
1997 }
1998
SetTextAreaMargin(ArkUINodeHandle node,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left,ArkUIPaddingRes * marginRes)1999 void SetTextAreaMargin(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
2000 const struct ArkUISizeType* bottom, const struct ArkUISizeType* left, ArkUIPaddingRes* marginRes)
2001 {
2002 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2003 CHECK_NULL_VOID(frameNode);
2004 CalcLength topDimen;
2005 CalcLength rightDimen;
2006 CalcLength bottomDimen;
2007 CalcLength leftDimen;
2008 if (top->string != nullptr) {
2009 topDimen = CalcLength(top->string);
2010 } else {
2011 topDimen = CalcLength(top->value, static_cast<DimensionUnit>(top->unit));
2012 }
2013 if (right->string != nullptr) {
2014 rightDimen = CalcLength(right->string);
2015 } else {
2016 rightDimen = CalcLength(right->value, static_cast<DimensionUnit>(right->unit));
2017 }
2018 if (bottom->string != nullptr) {
2019 bottomDimen = CalcLength(bottom->string);
2020 } else {
2021 bottomDimen = CalcLength(bottom->value, static_cast<DimensionUnit>(bottom->unit));
2022 }
2023 if (left->string != nullptr) {
2024 leftDimen = CalcLength(left->string);
2025 } else {
2026 leftDimen = CalcLength(left->value, static_cast<DimensionUnit>(left->unit));
2027 }
2028 NG::PaddingProperty paddings;
2029 paddings.top = std::optional<CalcLength>(topDimen);
2030 paddings.bottom = std::optional<CalcLength>(bottomDimen);
2031 paddings.left = std::optional<CalcLength>(leftDimen);
2032 paddings.right = std::optional<CalcLength>(rightDimen);
2033 TextFieldModelNG::SetMargin(frameNode, paddings);
2034 RegisterMarginResource(frameNode, top, right, bottom, left, marginRes);
2035 }
2036
ResetTextAreaMargin(ArkUINodeHandle node)2037 void ResetTextAreaMargin(ArkUINodeHandle node)
2038 {
2039 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2040 CHECK_NULL_VOID(frameNode);
2041 NG::PaddingProperty paddings;
2042 paddings.top = NG::CalcLength(0.0);
2043 paddings.bottom = NG::CalcLength(0.0);
2044 paddings.left = NG::CalcLength(0.0);
2045 paddings.right = NG::CalcLength(0.0);
2046 TextFieldModelNG::SetMargin(frameNode, paddings);
2047 if (SystemProperties::ConfigChangePerform()) {
2048 auto pattern = frameNode->GetPattern();
2049 CHECK_NULL_VOID(pattern);
2050 pattern->UnRegisterResource("marginTop");
2051 pattern->UnRegisterResource("marginBottom");
2052 pattern->UnRegisterResource("marginLeft");
2053 pattern->UnRegisterResource("marginRight");
2054 }
2055 }
2056
GetTextAreaMargin(ArkUINodeHandle node,ArkUI_Float32 (* values)[4],ArkUI_Int32 length,ArkUI_Int32 unit)2057 void GetTextAreaMargin(ArkUINodeHandle node, ArkUI_Float32 (*values)[4], ArkUI_Int32 length, ArkUI_Int32 unit)
2058 {
2059 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2060 CHECK_NULL_VOID(frameNode);
2061 auto margin = TextFieldModelNG::GetMargin(frameNode);
2062 (*values)[NUM_0] = margin.top->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
2063 (*values)[NUM_1] = margin.right->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
2064 (*values)[NUM_2] = margin.bottom->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
2065 (*values)[NUM_3] = margin.left->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
2066 }
2067
SetTextAreaOnWillChange(ArkUINodeHandle node,ArkUI_Int64 callback)2068 void SetTextAreaOnWillChange(ArkUINodeHandle node, ArkUI_Int64 callback)
2069 {
2070 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2071 CHECK_NULL_VOID(frameNode);
2072 if (callback) {
2073 auto onWillChange = reinterpret_cast<std::function<bool(const ChangeValueInfo&)>*>(callback);
2074 TextFieldModelNG::SetOnWillChangeEvent(frameNode, std::move(*onWillChange));
2075 } else {
2076 TextFieldModelNG::SetOnWillChangeEvent(frameNode, nullptr);
2077 }
2078 }
2079
ResetTextAreaOnWillChange(ArkUINodeHandle node)2080 void ResetTextAreaOnWillChange(ArkUINodeHandle node)
2081 {
2082 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2083 CHECK_NULL_VOID(frameNode);
2084 TextFieldModelNG::SetOnWillChangeEvent(frameNode, nullptr);
2085 }
2086
SetTextAreaOnWillInsert(ArkUINodeHandle node,ArkUI_Int64 callback)2087 void SetTextAreaOnWillInsert(ArkUINodeHandle node, ArkUI_Int64 callback)
2088 {
2089 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2090 CHECK_NULL_VOID(frameNode);
2091 if (callback) {
2092 auto onWillInsert = reinterpret_cast<std::function<bool(const InsertValueInfo&)>*>(callback);
2093 TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, std::move(*onWillInsert));
2094 } else {
2095 TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, nullptr);
2096 }
2097 }
2098
ResetTextAreaOnWillInsert(ArkUINodeHandle node)2099 void ResetTextAreaOnWillInsert(ArkUINodeHandle node)
2100 {
2101 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2102 CHECK_NULL_VOID(frameNode);
2103 TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, nullptr);
2104 }
2105
SetTextAreaOnDidInsert(ArkUINodeHandle node,ArkUI_Int64 callback)2106 void SetTextAreaOnDidInsert(ArkUINodeHandle node, ArkUI_Int64 callback)
2107 {
2108 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2109 CHECK_NULL_VOID(frameNode);
2110 if (callback) {
2111 auto onDidInsert = reinterpret_cast<std::function<void(const InsertValueInfo&)>*>(callback);
2112 TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, std::move(*onDidInsert));
2113 } else {
2114 TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, nullptr);
2115 }
2116 }
2117
ResetTextAreaOnDidInsert(ArkUINodeHandle node)2118 void ResetTextAreaOnDidInsert(ArkUINodeHandle node)
2119 {
2120 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2121 CHECK_NULL_VOID(frameNode);
2122 TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, nullptr);
2123 }
2124
SetTextAreaOnWillDelete(ArkUINodeHandle node,ArkUI_Int64 callback)2125 void SetTextAreaOnWillDelete(ArkUINodeHandle node, ArkUI_Int64 callback)
2126 {
2127 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2128 CHECK_NULL_VOID(frameNode);
2129 if (callback) {
2130 auto onWillDelete = reinterpret_cast<std::function<bool(const DeleteValueInfo&)>*>(callback);
2131 TextFieldModelNG::SetOnWillDeleteEvent(frameNode, std::move(*onWillDelete));
2132 } else {
2133 TextFieldModelNG::SetOnWillDeleteEvent(frameNode, nullptr);
2134 }
2135 }
2136
ResetTextAreaOnWillDelete(ArkUINodeHandle node)2137 void ResetTextAreaOnWillDelete(ArkUINodeHandle node)
2138 {
2139 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2140 CHECK_NULL_VOID(frameNode);
2141 TextFieldModelNG::SetOnWillDeleteEvent(frameNode, nullptr);
2142 }
2143
SetTextAreaOnDidDelete(ArkUINodeHandle node,ArkUI_Int64 callback)2144 void SetTextAreaOnDidDelete(ArkUINodeHandle node, ArkUI_Int64 callback)
2145 {
2146 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2147 CHECK_NULL_VOID(frameNode);
2148 if (callback) {
2149 auto onDidDelete = reinterpret_cast<std::function<void(const DeleteValueInfo&)>*>(callback);
2150 TextFieldModelNG::SetOnDidDeleteEvent(frameNode, std::move(*onDidDelete));
2151 } else {
2152 TextFieldModelNG::SetOnDidDeleteEvent(frameNode, nullptr);
2153 }
2154 }
2155
ResetTextAreaOnDidDelete(ArkUINodeHandle node)2156 void ResetTextAreaOnDidDelete(ArkUINodeHandle node)
2157 {
2158 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2159 CHECK_NULL_VOID(frameNode);
2160 TextFieldModelNG::SetOnDidDeleteEvent(frameNode, nullptr);
2161 }
2162
SetTextAreaEnablePreviewText(ArkUINodeHandle node,ArkUI_Uint32 value)2163 void SetTextAreaEnablePreviewText(ArkUINodeHandle node, ArkUI_Uint32 value)
2164 {
2165 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2166 CHECK_NULL_VOID(frameNode);
2167 TextFieldModelNG::SetEnablePreviewText(frameNode, static_cast<bool>(value));
2168 }
2169
ResetTextAreaEnablePreviewText(ArkUINodeHandle node)2170 void ResetTextAreaEnablePreviewText(ArkUINodeHandle node)
2171 {
2172 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2173 CHECK_NULL_VOID(frameNode);
2174 TextFieldModelNG::SetEnablePreviewText(frameNode, DEFAULT_ENABLE_PREVIEW_TEXT_VALUE);
2175 }
2176
GetTextAreaEnablePreviewText(ArkUINodeHandle node)2177 ArkUI_Bool GetTextAreaEnablePreviewText(ArkUINodeHandle node)
2178 {
2179 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2180 CHECK_NULL_RETURN(frameNode, false);
2181 return static_cast<int>(TextFieldModelNG::GetEnablePreviewText(frameNode));
2182 }
2183
GetTextAreaPadding(ArkUINodeHandle node,ArkUI_Float32 (* values)[4],ArkUI_Int32 length,ArkUI_Int32 unit)2184 void GetTextAreaPadding(ArkUINodeHandle node, ArkUI_Float32 (*values)[4], ArkUI_Int32 length, ArkUI_Int32 unit)
2185 {
2186 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2187 CHECK_NULL_VOID(frameNode);
2188 auto padding = TextFieldModelNG::GetPadding(frameNode);
2189 (*values)[NUM_0] = padding.top->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
2190 (*values)[NUM_1] = padding.right->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
2191 (*values)[NUM_2] = padding.bottom->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
2192 (*values)[NUM_3] = padding.left->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
2193 }
2194
SetTextAreaSelectionMenuOptions(ArkUINodeHandle node,void * onCreateMenuCallback,void * onMenuItemClickCallback,void * onPrepareMenuCallback)2195 void SetTextAreaSelectionMenuOptions(
2196 ArkUINodeHandle node, void* onCreateMenuCallback, void* onMenuItemClickCallback, void* onPrepareMenuCallback)
2197 {
2198 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2199 CHECK_NULL_VOID(frameNode);
2200 if (onCreateMenuCallback) {
2201 NG::OnCreateMenuCallback onCreateMenu = *(reinterpret_cast<NG::OnCreateMenuCallback*>(onCreateMenuCallback));
2202 TextFieldModelNG::OnCreateMenuCallbackUpdate(frameNode, std::move(onCreateMenu));
2203 } else {
2204 TextFieldModelNG::OnCreateMenuCallbackUpdate(frameNode, nullptr);
2205 }
2206 if (onMenuItemClickCallback) {
2207 NG::OnMenuItemClickCallback onMenuItemClick =
2208 *(reinterpret_cast<NG::OnMenuItemClickCallback*>(onMenuItemClickCallback));
2209 TextFieldModelNG::OnMenuItemClickCallbackUpdate(frameNode, std::move(onMenuItemClick));
2210 } else {
2211 TextFieldModelNG::OnMenuItemClickCallbackUpdate(frameNode, nullptr);
2212 }
2213 if (onPrepareMenuCallback) {
2214 NG::OnPrepareMenuCallback onPrepareMenu =
2215 *(reinterpret_cast<NG::OnPrepareMenuCallback*>(onPrepareMenuCallback));
2216 TextFieldModelNG::OnPrepareMenuCallbackUpdate(frameNode, std::move(onPrepareMenu));
2217 } else {
2218 TextFieldModelNG::OnPrepareMenuCallbackUpdate(frameNode, nullptr);
2219 }
2220 }
2221
ResetTextAreaSelectionMenuOptions(ArkUINodeHandle node)2222 void ResetTextAreaSelectionMenuOptions(ArkUINodeHandle node)
2223 {
2224 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2225 CHECK_NULL_VOID(frameNode);
2226 NG::OnCreateMenuCallback onCreateMenuCallback;
2227 NG::OnMenuItemClickCallback onMenuItemClick;
2228 NG::OnPrepareMenuCallback onPrepareMenuCallback;
2229 TextFieldModelNG::OnCreateMenuCallbackUpdate(frameNode, std::move(onCreateMenuCallback));
2230 TextFieldModelNG::OnMenuItemClickCallbackUpdate(frameNode, std::move(onMenuItemClick));
2231 TextFieldModelNG::OnPrepareMenuCallbackUpdate(frameNode, std::move(onPrepareMenuCallback));
2232 }
2233
SetTextAreaWidth(ArkUINodeHandle node,ArkUI_CharPtr value)2234 void SetTextAreaWidth(ArkUINodeHandle node, ArkUI_CharPtr value)
2235 {
2236 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2237 CHECK_NULL_VOID(frameNode);
2238 auto widthValue = std::string(value);
2239 TextFieldModelNG::SetWidth(frameNode, widthValue);
2240 }
2241
ResetTextAreaWidth(ArkUINodeHandle node)2242 void ResetTextAreaWidth(ArkUINodeHandle node)
2243 {
2244 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2245 CHECK_NULL_VOID(frameNode);
2246 TextFieldModelNG::ClearWidth(frameNode);
2247 }
2248
SetTextAreaEnableHapticFeedback(ArkUINodeHandle node,ArkUI_Uint32 value)2249 void SetTextAreaEnableHapticFeedback(ArkUINodeHandle node, ArkUI_Uint32 value)
2250 {
2251 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2252 CHECK_NULL_VOID(frameNode);
2253 TextFieldModelNG::SetEnableHapticFeedback(frameNode, static_cast<bool>(value));
2254 }
2255
ResetTextAreaEnableHapticFeedback(ArkUINodeHandle node)2256 void ResetTextAreaEnableHapticFeedback(ArkUINodeHandle node)
2257 {
2258 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2259 CHECK_NULL_VOID(frameNode);
2260 TextFieldModelNG::SetEnableHapticFeedback(frameNode, DEFAULT_ENABLE_HAPTIC_FEEDBACK_VALUE);
2261 }
2262
SetEllipsisMode(ArkUINodeHandle node,ArkUI_Uint32 ellipsisMode)2263 void SetEllipsisMode(ArkUINodeHandle node, ArkUI_Uint32 ellipsisMode)
2264 {
2265 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2266 CHECK_NULL_VOID(frameNode);
2267 if (ellipsisMode < 0 || ellipsisMode >= ELLIPSIS_MODALS.size()) {
2268 ellipsisMode = ELLIPSIS_MODE_TAIL;
2269 }
2270 TextFieldModelNG::SetEllipsisMode(frameNode, ELLIPSIS_MODALS[ellipsisMode]);
2271 }
2272
ResetEllipsisMode(ArkUINodeHandle node)2273 void ResetEllipsisMode(ArkUINodeHandle node)
2274 {
2275 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2276 CHECK_NULL_VOID(frameNode);
2277 TextFieldModelNG::SetEllipsisMode(frameNode, ELLIPSIS_MODALS[ELLIPSIS_MODE_TAIL]);
2278 }
2279
SetStopBackPress(ArkUINodeHandle node,ArkUI_Uint32 value)2280 void SetStopBackPress(ArkUINodeHandle node, ArkUI_Uint32 value)
2281 {
2282 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2283 CHECK_NULL_VOID(frameNode);
2284 TextFieldModelNG::SetStopBackPress(frameNode, static_cast<bool>(value));
2285 }
2286
ResetStopBackPress(ArkUINodeHandle node)2287 void ResetStopBackPress(ArkUINodeHandle node)
2288 {
2289 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2290 CHECK_NULL_VOID(frameNode);
2291 TextFieldModelNG::SetStopBackPress(frameNode, true);
2292 }
2293
SetTextAreaStrokeWidth(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)2294 void SetTextAreaStrokeWidth(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
2295 {
2296 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2297 CHECK_NULL_VOID(frameNode);
2298 TextFieldModelNG::SetStrokeWidth(frameNode, CalcDimension(value, (DimensionUnit)unit));
2299 }
2300
ResetTextAreaStrokeWidth(ArkUINodeHandle node)2301 void ResetTextAreaStrokeWidth(ArkUINodeHandle node)
2302 {
2303 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2304 CHECK_NULL_VOID(frameNode);
2305 TextFieldModelNG::SetStrokeWidth(frameNode, 0.0_px);
2306 }
2307
GetTextAreaStrokeWidth(ArkUINodeHandle node)2308 ArkUI_Float32 GetTextAreaStrokeWidth(ArkUINodeHandle node)
2309 {
2310 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2311 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
2312 return TextFieldModelNG::GetStrokeWidth(frameNode).Value();
2313 }
2314
SetTextAreaStrokeColor(ArkUINodeHandle node,ArkUI_Uint32 color)2315 void SetTextAreaStrokeColor(ArkUINodeHandle node, ArkUI_Uint32 color)
2316 {
2317 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2318 CHECK_NULL_VOID(frameNode);
2319 TextFieldModelNG::SetStrokeColor(frameNode, Color(color));
2320 }
2321
ResetTextAreaStrokeColor(ArkUINodeHandle node)2322 void ResetTextAreaStrokeColor(ArkUINodeHandle node)
2323 {
2324 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2325 CHECK_NULL_VOID(frameNode);
2326 TextFieldModelNG::ResetStrokeColor(frameNode);
2327 }
2328
GetTextAreaStrokeColor(ArkUINodeHandle node)2329 ArkUI_Uint32 GetTextAreaStrokeColor(ArkUINodeHandle node)
2330 {
2331 auto *frameNode = reinterpret_cast<FrameNode *>(node);
2332 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
2333 return TextFieldModelNG::GetStrokeColor(frameNode).GetValue();
2334 }
2335
SetEnableAutoSpacing(ArkUINodeHandle node,ArkUI_Bool enableAutoSpacing)2336 void SetEnableAutoSpacing(ArkUINodeHandle node, ArkUI_Bool enableAutoSpacing)
2337 {
2338 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2339 CHECK_NULL_VOID(frameNode);
2340 TextFieldModelNG::SetEnableAutoSpacing(frameNode, static_cast<bool>(enableAutoSpacing));
2341 }
2342
ResetEnableAutoSpacing(ArkUINodeHandle node)2343 void ResetEnableAutoSpacing(ArkUINodeHandle node)
2344 {
2345 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2346 CHECK_NULL_VOID(frameNode);
2347 TextFieldModelNG::SetEnableAutoSpacing(frameNode, false);
2348 }
2349 } // namespace
2350
2351 namespace NodeModifier {
GetTextAreaModifier()2352 const ArkUITextAreaModifier* GetTextAreaModifier()
2353 {
2354 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
2355 static const ArkUITextAreaModifier modifier = {
2356 .setTextAreaStyle = SetTextAreaStyle,
2357 .resetTextAreaStyle = ResetTextAreaStyle,
2358 .setTextAreaSelectionMenuHidden = SetTextAreaSelectionMenuHidden,
2359 .resetTextAreaSelectionMenuHidden = ResetTextAreaSelectionMenuHidden,
2360 .setTextAreaMaxLines = SetTextAreaMaxLines,
2361 .resetTextAreaMaxLines = ResetTextAreaMaxLines,
2362 .setTextAreaMinLines = SetTextAreaMinLines,
2363 .resetTextAreaMinLines = ResetTextAreaMinLines,
2364 .setTextAreaCopyOption = SetTextAreaCopyOption,
2365 .resetTextAreaCopyOption = ResetTextAreaCopyOption,
2366 .setTextAreaPlaceholderColor = SetTextAreaPlaceholderColor,
2367 .resetTextAreaPlaceholderColor = ResetTextAreaPlaceholderColor,
2368 .setTextAreaTextAlign = SetTextAreaTextAlign,
2369 .resetTextAreaTextAlign = ResetTextAreaTextAlign,
2370 .setTextAreaPlaceholderFont = SetTextAreaPlaceholderFont,
2371 .resetTextAreaPlaceholderFont = ResetTextAreaPlaceholderFont,
2372 .setTextAreaBarState = SetTextAreaBarState,
2373 .resetTextAreaBarState = ResetTextAreaBarState,
2374 .setTextAreaEnableKeyboardOnFocus = SetTextAreaEnableKeyboardOnFocus,
2375 .resetTextAreaEnableKeyboardOnFocus = ResetTextAreaEnableKeyboardOnFocus,
2376 .setTextAreaFontFamily = SetTextAreaFontFamily,
2377 .resetTextAreaFontFamily = ResetTextAreaFontFamily,
2378 .setTextAreaShowCounter = SetTextAreaShowCounter,
2379 .resetTextAreaShowCounter = ResetTextAreaShowCounter,
2380 .setTextAreaCaretColor = SetTextAreaCaretColor,
2381 .resetTextAreaCaretColor = ResetTextAreaCaretColor,
2382 .setTextAreaMaxLength = SetTextAreaMaxLength,
2383 .resetTextAreaMaxLength = ResetTextAreaMaxLength,
2384 .setTextAreaFontColor = SetTextAreaFontColor,
2385 .resetTextAreaFontColor = ResetTextAreaFontColor,
2386 .setTextAreaFontStyle = SetTextAreaFontStyle,
2387 .resetTextAreaFontStyle = ResetTextAreaFontStyle,
2388 .setTextAreaFontWeight = SetTextAreaFontWeight,
2389 .resetTextAreaFontWeight = ResetTextAreaFontWeight,
2390 .setTextAreaFontSize = SetTextAreaFontSize,
2391 .resetTextAreaFontSize = ResetTextAreaFontSize,
2392 .setCounterType = SetCounterType,
2393 .setTextAreaPlaceholderString = SetTextAreaPlaceholderString,
2394 .setTextAreaTextString = SetTextAreaTextString,
2395 .stopTextAreaTextEditing = StopTextAreaTextEditing,
2396 .setTextAreaFontWeightStr = SetTextAreaFontWeightStr,
2397 .setTextAreaPlaceholderFontEnum = SetTextAreaPlaceholderFontEnum,
2398 .getTextAreaPlaceholder = GetTextAreaPlaceholder,
2399 .getTextAreaText = GetTextAreaText,
2400 .getTextAreaCaretColor = GetTextAreaCaretColor,
2401 .getTextAreaMaxLength = GetTextAreaMaxLength,
2402 .getTextAreaPlaceholderColor = GetTextAreaPlaceholderColor,
2403 .getTextAreaPlaceholderFont = GetTextAreaPlaceholderFont,
2404 .getTextAreaEditing = GetTextAreaEditing,
2405 .setTextAreaBackgroundColor = SetTextAreaBackgroundColor,
2406 .setTextAreaBackgroundColorWithColorSpace = SetTextAreaBackgroundColorWithColorSpace,
2407 .resetTextAreaBackgroundColor = ResetTextAreaBackgroundColor,
2408 .setTextAreaType = SetTextAreaType,
2409 .resetTextAreaType = ResetTextAreaType,
2410 .getTextAreaType = GetTextAreaType,
2411 .getTextAreaTextAlign = GetTextAreaTextAlign,
2412 .setTextAreaShowCounterOptions = SetTextAreaShowCounterOptions,
2413 .resetTextAreaShowCounterOptions = ResetTextAreaShowCounterOptions,
2414 .getTextAreaShowCounterOptions = GetTextAreaShowCounterOptions,
2415 .setTextAreaDecoration = SetTextAreaDecoration,
2416 .resetTextAreaDecoration = ResetTextAreaDecoration,
2417 .setTextAreaLetterSpacing = SetTextAreaLetterSpacing,
2418 .resetTextAreaLetterSpacing = ResetTextAreaLetterSpacing,
2419 .setTextAreaLineHeight = SetTextAreaLineHeight,
2420 .resetTextAreaLineHeight = ResetTextAreaLineHeight,
2421 .setTextAreaHalfLeading = SetTextAreaHalfLeading,
2422 .resetTextAreaHalfLeading = ResetTextAreaHalfLeading,
2423 .setTextAreaFontFeature = SetTextAreaFontFeature,
2424 .resetTextAreaFontFeature = ResetTextAreaFontFeature,
2425 .setTextAreaWordBreak = SetTextAreaWordBreak,
2426 .resetTextAreaWordBreak = ResetTextAreaWordBreak,
2427 .setTextAreaAdaptMinFontSize = SetTextAreaAdaptMinFontSize,
2428 .resetTextAreaAdaptMinFontSize = ResetTextAreaAdaptMinFontSize,
2429 .setTextAreaAdaptMaxFontSize = SetTextAreaAdaptMaxFontSize,
2430 .resetTextAreaAdaptMaxFontSize = ResetTextAreaAdaptMaxFontSize,
2431 .setTextAreaHeightAdaptivePolicy = SetTextAreaHeightAdaptivePolicy,
2432 .resetTextAreaHeightAdaptivePolicy = ResetTextAreaHeightAdaptivePolicy,
2433 .setTextAreaSelectedBackgroundColor = SetTextAreaSelectedBackgroundColor,
2434 .resetTextAreaSelectedBackgroundColor = ResetTextAreaSelectedBackgroundColor,
2435 .setTextAreaCaretStyle = SetTextAreaCaretStyle,
2436 .resetTextAreaCaretStyle = ResetTextAreaCaretStyle,
2437 .setTextAreaTextOverflow = SetTextAreaTextOverflow,
2438 .resetTextAreaTextOverflow = ResetTextAreaTextOverflow,
2439 .setTextAreaTextIndent = SetTextAreaTextIndent,
2440 .resetTextAreaTextIndent = ResetTextAreaTextIndent,
2441 .setTextAreaLineSpacing = SetTextAreaLineSpacing,
2442 .resetTextAreaLineSpacing = ResetTextAreaLineSpacing,
2443 .getTextAreaLineSpacing = GetTextAreaLineSpacing,
2444 .getTextAreaSelectionMenuHidden = GetTextAreaSelectionMenuHidden,
2445 .getTextAreaAdaptMinFontSize = GetTextAreaAdaptMinFontSize,
2446 .getTextAreaAdaptMaxFontSize = GetTextAreaAdaptMaxFontSize,
2447 .getTextAreaLineHeight = GetTextAreaLineHeight,
2448 .getTextAreaHalfLeading = GetTextAreaHalfLeading,
2449 .getTextAreaMaxLines = GetTextAreaMaxLines,
2450 .getTextAreaMinLines = GetTextAreaMinLines,
2451 .setTextAreaPadding = SetTextAreaPadding,
2452 .resetTextAreaPadding = ResetTextAreaPadding,
2453 .getTextAreaFontFeature = GetTextAreaFontFeature,
2454 .setTextAreaOnChange = SetTextAreaOnChange,
2455 .resetTextAreaOnChange = ResetTextAreaOnChange,
2456 .setTextAreaEnterKeyType = SetTextAreaEnterKeyType,
2457 .resetTextAreaEnterKeyType = ResetTextAreaEnterKeyType,
2458 .setTextAreaInputFilter = SetTextAreaInputFilter,
2459 .resetTextAreaInputFilter = ResetTextAreaInputFilter,
2460 .setTextAreaOnTextSelectionChange = SetTextAreaOnTextSelectionChange,
2461 .resetTextAreaOnTextSelectionChange = ResetTextAreaOnTextSelectionChange,
2462 .setTextAreaOnContentScroll = SetTextAreaOnContentScroll,
2463 .resetTextAreaOnContentScroll = ResetTextAreaOnContentScroll,
2464 .setTextAreaOnEditChange = SetTextAreaOnEditChange,
2465 .resetTextAreaOnEditChange = ResetTextAreaOnEditChange,
2466 .setTextAreaOnCopy = SetTextAreaOnCopy,
2467 .resetTextAreaOnCopy = ResetTextAreaOnCopy,
2468 .setTextAreaOnCut = SetTextAreaOnCut,
2469 .resetTextAreaOnCut = ResetTextAreaOnCut,
2470 .setTextAreaOnPaste = SetTextAreaOnPaste,
2471 .resetTextAreaOnPaste = ResetTextAreaOnPaste,
2472 .setTextAreaLineBreakStrategy = SetTextAreaLineBreakStrategy,
2473 .resetTextAreaLineBreakStrategy = ResetTextAreaLineBreakStrategy,
2474 .setTextAreaOnSubmitWithEvent = SetTextAreaOnSubmitWithEvent,
2475 .resetTextAreaOnSubmitWithEvent = ResetTextAreaOnSubmitWithEvent,
2476 .setTextAreaContentType = SetTextAreaContentType,
2477 .resetTextAreaContentType = ResetTextAreaContentType,
2478 .setTextAreaEnableAutoFill = SetTextAreaEnableAutoFill,
2479 .resetTextAreaEnableAutoFill = ResetTextAreaEnableAutoFill,
2480 .setTextAreaBorder = SetTextAreaBorder,
2481 .resetTextAreaBorder = ResetTextAreaBorder,
2482 .setTextAreaBorderWidth = SetTextAreaBorderWidth,
2483 .resetTextAreaBorderWidth = ResetTextAreaBorderWidth,
2484 .setTextAreaBorderColor = SetTextAreaBorderColor,
2485 .resetTextAreaBorderColor = ResetTextAreaBorderColor,
2486 .setTextAreaBorderStyle = SetTextAreaBorderStyle,
2487 .resetTextAreaBorderStyle = ResetTextAreaBorderStyle,
2488 .setTextAreaBorderRadius = SetTextAreaBorderRadius,
2489 .resetTextAreaBorderRadius = ResetTextAreaBorderRadius,
2490 .setTextAreaMargin = SetTextAreaMargin,
2491 .resetTextAreaMargin = ResetTextAreaMargin,
2492 .getTextAreaMargin = GetTextAreaMargin,
2493 .setTextAreaCaret = SetTextAreaCaret,
2494 .setTextAreaOnWillChange = SetTextAreaOnWillChange,
2495 .resetTextAreaOnWillChange = ResetTextAreaOnWillChange,
2496 .setTextAreaOnWillInsert = SetTextAreaOnWillInsert,
2497 .resetTextAreaOnWillInsert = ResetTextAreaOnWillInsert,
2498 .setTextAreaOnDidInsert = SetTextAreaOnDidInsert,
2499 .resetTextAreaOnDidInsert = ResetTextAreaOnDidInsert,
2500 .setTextAreaOnWillDelete = SetTextAreaOnWillDelete,
2501 .resetTextAreaOnWillDelete = ResetTextAreaOnWillDelete,
2502 .setTextAreaOnDidDelete = SetTextAreaOnDidDelete,
2503 .resetTextAreaOnDidDelete = ResetTextAreaOnDidDelete,
2504 .setTextAreaEnablePreviewText = SetTextAreaEnablePreviewText,
2505 .resetTextAreaEnablePreviewText = ResetTextAreaEnablePreviewText,
2506 .getTextAreaPadding = GetTextAreaPadding,
2507 .setTextAreaSelectionMenuOptions = SetTextAreaSelectionMenuOptions,
2508 .resetTextAreaSelectionMenuOptions = ResetTextAreaSelectionMenuOptions,
2509 .setTextAreaWidth = SetTextAreaWidth,
2510 .resetTextAreaWidth = ResetTextAreaWidth,
2511 .setTextAreaEnableHapticFeedback = SetTextAreaEnableHapticFeedback,
2512 .resetTextAreaEnableHapticFeedback = ResetTextAreaEnableHapticFeedback,
2513 .setTextAreaAutoCapitalizationMode = SetTextAreaAutoCapitalizationMode,
2514 .resetTextAreaAutoCapitalizationMode = ResetTextAreaAutoCapitalizationMode,
2515 .getTextAreaLetterSpacing = GetTextAreaLetterSpacing,
2516 .getTextAreaEnablePreviewText = GetTextAreaEnablePreviewText,
2517 .setTextAreaBorderDash = SetTextAreaBorderDash,
2518 .setEllipsisMode = SetEllipsisMode,
2519 .resetEllipsisMode = ResetEllipsisMode,
2520 .setTextAreaMinFontScale = SetTextAreaMinFontScale,
2521 .resetTextAreaMinFontScale = ResetTextAreaMinFontScale,
2522 .setTextAreaMaxFontScale = SetTextAreaMaxFontScale,
2523 .resetTextAreaMaxFontScale = ResetTextAreaMaxFontScale,
2524 .setStopBackPress = SetStopBackPress,
2525 .resetStopBackPress = ResetStopBackPress,
2526 .setTextAreaKeyboardAppearance = SetTextAreaKeyboardAppearance,
2527 .resetTextAreaKeyboardAppearance = ResetTextAreaKeyboardAppearance,
2528 .setTextAreaStrokeWidth = SetTextAreaStrokeWidth,
2529 .resetTextAreaStrokeWidth = ResetTextAreaStrokeWidth,
2530 .getTextAreaStrokeWidth = GetTextAreaStrokeWidth,
2531 .setTextAreaStrokeColor = SetTextAreaStrokeColor,
2532 .resetTextAreaStrokeColor = ResetTextAreaStrokeColor,
2533 .getTextAreaStrokeColor = GetTextAreaStrokeColor,
2534 .setEnableAutoSpacing = SetEnableAutoSpacing,
2535 .resetEnableAutoSpacing = ResetEnableAutoSpacing,
2536 };
2537 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
2538 return &modifier;
2539 }
2540
GetCJUITextAreaModifier()2541 const CJUITextAreaModifier* GetCJUITextAreaModifier()
2542 {
2543 CHECK_INITIALIZED_FIELDS_BEGIN(); // don't move this line
2544 static const CJUITextAreaModifier modifier = {
2545 .setTextAreaStyle = SetTextAreaStyle,
2546 .resetTextAreaStyle = ResetTextAreaStyle,
2547 .setTextAreaSelectionMenuHidden = SetTextAreaSelectionMenuHidden,
2548 .resetTextAreaSelectionMenuHidden = ResetTextAreaSelectionMenuHidden,
2549 .setTextAreaMaxLines = SetTextAreaMaxLines,
2550 .resetTextAreaMaxLines = ResetTextAreaMaxLines,
2551 .setTextAreaCopyOption = SetTextAreaCopyOption,
2552 .resetTextAreaCopyOption = ResetTextAreaCopyOption,
2553 .setTextAreaPlaceholderColor = SetTextAreaPlaceholderColor,
2554 .resetTextAreaPlaceholderColor = ResetTextAreaPlaceholderColor,
2555 .setTextAreaTextAlign = SetTextAreaTextAlign,
2556 .resetTextAreaTextAlign = ResetTextAreaTextAlign,
2557 .setTextAreaPlaceholderFont = SetTextAreaPlaceholderFont,
2558 .resetTextAreaPlaceholderFont = ResetTextAreaPlaceholderFont,
2559 .setTextAreaBarState = SetTextAreaBarState,
2560 .resetTextAreaBarState = ResetTextAreaBarState,
2561 .setTextAreaEnableKeyboardOnFocus = SetTextAreaEnableKeyboardOnFocus,
2562 .resetTextAreaEnableKeyboardOnFocus = ResetTextAreaEnableKeyboardOnFocus,
2563 .setTextAreaFontFamily = SetTextAreaFontFamily,
2564 .resetTextAreaFontFamily = ResetTextAreaFontFamily,
2565 .setTextAreaShowCounter = SetTextAreaShowCounter,
2566 .resetTextAreaShowCounter = ResetTextAreaShowCounter,
2567 .setTextAreaCaretColor = SetTextAreaCaretColor,
2568 .resetTextAreaCaretColor = ResetTextAreaCaretColor,
2569 .setTextAreaMaxLength = SetTextAreaMaxLength,
2570 .resetTextAreaMaxLength = ResetTextAreaMaxLength,
2571 .setTextAreaFontColor = SetTextAreaFontColor,
2572 .resetTextAreaFontColor = ResetTextAreaFontColor,
2573 .setTextAreaFontStyle = SetTextAreaFontStyle,
2574 .resetTextAreaFontStyle = ResetTextAreaFontStyle,
2575 .setTextAreaFontWeight = SetTextAreaFontWeight,
2576 .resetTextAreaFontWeight = ResetTextAreaFontWeight,
2577 .setTextAreaFontSize = SetTextAreaFontSize,
2578 .resetTextAreaFontSize = ResetTextAreaFontSize,
2579 .setCounterType = SetCounterType,
2580 .setTextAreaPlaceholderString = SetTextAreaPlaceholderString,
2581 .setTextAreaTextString = SetTextAreaTextString,
2582 .stopTextAreaTextEditing = StopTextAreaTextEditing,
2583 .setTextAreaFontWeightStr = SetTextAreaFontWeightStr,
2584 .setTextAreaPlaceholderFontEnum = SetTextAreaPlaceholderFontEnum,
2585 .getTextAreaPlaceholder = GetTextAreaPlaceholder,
2586 .getTextAreaText = GetTextAreaText,
2587 .getTextAreaCaretColor = GetTextAreaCaretColor,
2588 .getTextAreaMaxLength = GetTextAreaMaxLength,
2589 .getTextAreaPlaceholderColor = GetTextAreaPlaceholderColor,
2590 .getTextAreaPlaceholderFont = GetTextAreaPlaceholderFont,
2591 .getTextAreaEditing = GetTextAreaEditing,
2592 .setTextAreaBackgroundColor = SetTextAreaBackgroundColor,
2593 .setTextAreaBackgroundColorWithColorSpace = SetTextAreaBackgroundColorWithColorSpace,
2594 .resetTextAreaBackgroundColor = ResetTextAreaBackgroundColor,
2595 .setTextAreaType = SetTextAreaType,
2596 .resetTextAreaType = ResetTextAreaType,
2597 .getTextAreaType = GetTextAreaType,
2598 .getTextAreaTextAlign = GetTextAreaTextAlign,
2599 .setTextAreaShowCounterOptions = SetTextAreaShowCounterOptions,
2600 .resetTextAreaShowCounterOptions = ResetTextAreaShowCounterOptions,
2601 .getTextAreaShowCounterOptions = GetTextAreaShowCounterOptions,
2602 .setTextAreaDecoration = SetTextAreaDecoration,
2603 .resetTextAreaDecoration = ResetTextAreaDecoration,
2604 .setTextAreaLetterSpacing = SetTextAreaLetterSpacing,
2605 .resetTextAreaLetterSpacing = ResetTextAreaLetterSpacing,
2606 .setTextAreaLineHeight = SetTextAreaLineHeight,
2607 .resetTextAreaLineHeight = ResetTextAreaLineHeight,
2608 .setTextAreaFontFeature = SetTextAreaFontFeature,
2609 .resetTextAreaFontFeature = ResetTextAreaFontFeature,
2610 .setTextAreaWordBreak = SetTextAreaWordBreak,
2611 .resetTextAreaWordBreak = ResetTextAreaWordBreak,
2612 .setTextAreaAdaptMinFontSize = SetTextAreaAdaptMinFontSize,
2613 .resetTextAreaAdaptMinFontSize = ResetTextAreaAdaptMinFontSize,
2614 .setTextAreaAdaptMaxFontSize = SetTextAreaAdaptMaxFontSize,
2615 .resetTextAreaAdaptMaxFontSize = ResetTextAreaAdaptMaxFontSize,
2616 .setTextAreaHeightAdaptivePolicy = SetTextAreaHeightAdaptivePolicy,
2617 .resetTextAreaHeightAdaptivePolicy = ResetTextAreaHeightAdaptivePolicy,
2618 .setTextAreaSelectedBackgroundColor = SetTextAreaSelectedBackgroundColor,
2619 .resetTextAreaSelectedBackgroundColor = ResetTextAreaSelectedBackgroundColor,
2620 .setTextAreaCaretStyle = SetTextAreaCaretStyle,
2621 .resetTextAreaCaretStyle = ResetTextAreaCaretStyle,
2622 .setTextAreaTextOverflow = SetTextAreaTextOverflow,
2623 .resetTextAreaTextOverflow = ResetTextAreaTextOverflow,
2624 .setTextAreaTextIndent = SetTextAreaTextIndent,
2625 .resetTextAreaTextIndent = ResetTextAreaTextIndent,
2626 .setTextAreaLineSpacing = SetTextAreaLineSpacing,
2627 .resetTextAreaLineSpacing = ResetTextAreaLineSpacing,
2628 .getTextAreaSelectionMenuHidden = GetTextAreaSelectionMenuHidden,
2629 .getTextAreaAdaptMinFontSize = GetTextAreaAdaptMinFontSize,
2630 .getTextAreaAdaptMaxFontSize = GetTextAreaAdaptMaxFontSize,
2631 .getTextAreaLineHeight = GetTextAreaLineHeight,
2632 .getTextAreaMaxLines = GetTextAreaMaxLines,
2633 .setTextAreaPadding = SetTextAreaPadding,
2634 .resetTextAreaPadding = ResetTextAreaPadding,
2635 .getTextAreaFontFeature = GetTextAreaFontFeature,
2636 .setTextAreaOnChange = SetTextAreaOnChange,
2637 .resetTextAreaOnChange = ResetTextAreaOnChange,
2638 .setTextAreaEnterKeyType = SetTextAreaEnterKeyType,
2639 .resetTextAreaEnterKeyType = ResetTextAreaEnterKeyType,
2640 .setTextAreaInputFilter = SetTextAreaInputFilter,
2641 .resetTextAreaInputFilter = ResetTextAreaInputFilter,
2642 .setTextAreaOnTextSelectionChange = SetTextAreaOnTextSelectionChange,
2643 .resetTextAreaOnTextSelectionChange = ResetTextAreaOnTextSelectionChange,
2644 .setTextAreaOnContentScroll = SetTextAreaOnContentScroll,
2645 .resetTextAreaOnContentScroll = ResetTextAreaOnContentScroll,
2646 .setTextAreaOnEditChange = SetTextAreaOnEditChange,
2647 .resetTextAreaOnEditChange = ResetTextAreaOnEditChange,
2648 .setTextAreaOnCopy = SetTextAreaOnCopy,
2649 .resetTextAreaOnCopy = ResetTextAreaOnCopy,
2650 .setTextAreaOnCut = SetTextAreaOnCut,
2651 .resetTextAreaOnCut = ResetTextAreaOnCut,
2652 .setTextAreaOnPaste = SetTextAreaOnPaste,
2653 .resetTextAreaOnPaste = ResetTextAreaOnPaste,
2654 .setTextAreaLineBreakStrategy = SetTextAreaLineBreakStrategy,
2655 .resetTextAreaLineBreakStrategy = ResetTextAreaLineBreakStrategy,
2656 .setTextAreaOnSubmitWithEvent = SetTextAreaOnSubmitWithEvent,
2657 .resetTextAreaOnSubmitWithEvent = ResetTextAreaOnSubmitWithEvent,
2658 .setTextAreaContentType = SetTextAreaContentType,
2659 .resetTextAreaContentType = ResetTextAreaContentType,
2660 .setTextAreaEnableAutoFill = SetTextAreaEnableAutoFill,
2661 .resetTextAreaEnableAutoFill = ResetTextAreaEnableAutoFill,
2662 .setTextAreaBorder = SetTextAreaBorder,
2663 .resetTextAreaBorder = ResetTextAreaBorder,
2664 .setTextAreaBorderWidth = SetTextAreaBorderWidth,
2665 .resetTextAreaBorderWidth = ResetTextAreaBorderWidth,
2666 .setTextAreaBorderColor = SetTextAreaBorderColor,
2667 .resetTextAreaBorderColor = ResetTextAreaBorderColor,
2668 .setTextAreaBorderStyle = SetTextAreaBorderStyle,
2669 .resetTextAreaBorderStyle = ResetTextAreaBorderStyle,
2670 .setTextAreaBorderRadius = SetTextAreaBorderRadius,
2671 .resetTextAreaBorderRadius = ResetTextAreaBorderRadius,
2672 .setTextAreaMargin = SetTextAreaMargin,
2673 .resetTextAreaMargin = ResetTextAreaMargin,
2674 .getTextAreaMargin = GetTextAreaMargin,
2675 .setTextAreaCaret = SetTextAreaCaret,
2676 .setTextAreaOnWillInsert = SetTextAreaOnWillInsert,
2677 .resetTextAreaOnWillInsert = ResetTextAreaOnWillInsert,
2678 .setTextAreaOnDidInsert = SetTextAreaOnDidInsert,
2679 .resetTextAreaOnDidInsert = ResetTextAreaOnDidInsert,
2680 .setTextAreaOnWillDelete = SetTextAreaOnWillDelete,
2681 .resetTextAreaOnWillDelete = ResetTextAreaOnWillDelete,
2682 .setTextAreaOnDidDelete = SetTextAreaOnDidDelete,
2683 .resetTextAreaOnDidDelete = ResetTextAreaOnDidDelete,
2684 .setTextAreaEnablePreviewText = SetTextAreaEnablePreviewText,
2685 .resetTextAreaEnablePreviewText = ResetTextAreaEnablePreviewText,
2686 .getTextAreaPadding = GetTextAreaPadding,
2687 };
2688 CHECK_INITIALIZED_FIELDS_END(modifier, 0, 0, 0); // don't move this line
2689 return &modifier;
2690 }
2691
SetOnTextAreaChange(ArkUINodeHandle node,void * extraParam)2692 void SetOnTextAreaChange(ArkUINodeHandle node, void* extraParam)
2693 {
2694 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2695 CHECK_NULL_VOID(frameNode);
2696 auto onChange = [node, extraParam](const ChangeValueInfo& info) {
2697 ArkUINodeEvent event;
2698 std::string utf8Str = UtfUtils::Str16DebugToStr8(info.value);
2699 event.kind = TEXT_INPUT;
2700 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2701 event.textInputEvent.subKind = ON_TEXTAREA_CHANGE;
2702 event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(utf8Str.c_str());
2703 SendArkUISyncEvent(&event);
2704 };
2705 TextFieldModelNG::SetOnChange(frameNode, std::move(onChange));
2706 }
2707
SetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node,void * extraParam)2708 void SetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node, void* extraParam)
2709 {
2710 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2711 CHECK_NULL_VOID(frameNode);
2712 auto onChange = [node, extraParam](const ChangeValueInfo& info) {
2713 ArkUINodeEvent eventWithPreview;
2714 eventWithPreview.kind = TEXT_INPUT_CHANGE;
2715 std::string utf8StrValue = UtfUtils::Str16DebugToStr8(info.value);
2716 std::string utf8Str = UtfUtils::Str16DebugToStr8(info.previewText.value);
2717 eventWithPreview.extraParam = reinterpret_cast<intptr_t>(extraParam);
2718 eventWithPreview.textChangeEvent.subKind = ON_TEXT_AREA_CHANGE_WITH_PREVIEW_TEXT;
2719 eventWithPreview.textChangeEvent.nativeStringPtr = const_cast<char*>(utf8StrValue.c_str());
2720 eventWithPreview.textChangeEvent.extendStringPtr = const_cast<char*>(utf8Str.c_str());
2721 eventWithPreview.textChangeEvent.numArgs = info.previewText.offset;
2722 SendArkUISyncEvent(&eventWithPreview);
2723 };
2724 TextFieldModelNG::SetOnChange(frameNode, std::move(onChange));
2725 }
2726
SetOnTextAreaPaste(ArkUINodeHandle node,void * extraParam)2727 void SetOnTextAreaPaste(ArkUINodeHandle node, void* extraParam)
2728 {
2729 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2730 CHECK_NULL_VOID(frameNode);
2731 auto onPaste = [node, extraParam](const std::u16string& str, NG::TextCommonEvent& commonEvent) {
2732 ArkUINodeEvent event;
2733 std::string utf8Str = UtfUtils::Str16DebugToStr8(str);
2734 event.kind = TEXT_INPUT;
2735 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2736 event.textInputEvent.subKind = ON_TEXTAREA_PASTE;
2737 event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(utf8Str.c_str());
2738 SendArkUISyncEvent(&event);
2739 };
2740 TextFieldModelNG::SetOnPasteWithEvent(frameNode, std::move(onPaste));
2741 }
2742
SetOnTextAreaSelectionChange(ArkUINodeHandle node,void * extraParam)2743 void SetOnTextAreaSelectionChange(ArkUINodeHandle node, void* extraParam)
2744 {
2745 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2746 CHECK_NULL_VOID(frameNode);
2747 auto onSelectionChange = [node, extraParam](int start, int end) {
2748 ArkUINodeEvent event;
2749 event.kind = COMPONENT_ASYNC_EVENT;
2750 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2751 event.componentAsyncEvent.subKind = ON_TEXTAREA_TEXT_SELECTION_CHANGE;
2752 event.componentAsyncEvent.data[0].i32 = static_cast<int>(start);
2753 event.componentAsyncEvent.data[1].i32 = static_cast<int>(end);
2754 SendArkUISyncEvent(&event);
2755 };
2756 TextFieldModelNG::SetOnTextSelectionChange(frameNode, std::move(onSelectionChange));
2757 }
2758
SetOnTextAreaEditChange(ArkUINodeHandle node,void * extraParam)2759 void SetOnTextAreaEditChange(ArkUINodeHandle node, void* extraParam)
2760 {
2761 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2762 CHECK_NULL_VOID(frameNode);
2763 auto onChange = [node, extraParam](bool isEditing) {
2764 ArkUINodeEvent event;
2765 event.kind = COMPONENT_ASYNC_EVENT;
2766 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2767 event.componentAsyncEvent.subKind = ON_TEXTAREA_EDIT_CHANGE;
2768 event.componentAsyncEvent.data[0].i32 = static_cast<int32_t>(isEditing);
2769 SendArkUISyncEvent(&event);
2770 };
2771 TextFieldModelNG::SetOnEditChanged(frameNode, std::move(onChange));
2772 }
2773
SetOnTextAreaContentSizeChange(ArkUINodeHandle node,void * extraParam)2774 void SetOnTextAreaContentSizeChange(ArkUINodeHandle node, void* extraParam)
2775 {
2776 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2777 CHECK_NULL_VOID(frameNode);
2778 auto onChange = [node, extraParam](float width, float height) {
2779 ArkUINodeEvent event;
2780 event.kind = COMPONENT_ASYNC_EVENT;
2781 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2782 event.componentAsyncEvent.subKind = ON_TEXTAREA_CONTENT_SIZE_CHANGE;
2783 bool usePx = NodeModel::UsePXUnit(reinterpret_cast<ArkUI_Node*>(extraParam));
2784 double density = usePx ? 1 : PipelineBase::GetCurrentDensity();
2785 //0 width
2786 event.componentAsyncEvent.data[0].f32 = NearEqual(density, 0.0) ? 0.0f : width / density;
2787 //1 height
2788 event.componentAsyncEvent.data[1].f32 = NearEqual(density, 0.0) ? 0.0f : height / density;
2789 SendArkUISyncEvent(&event);
2790 };
2791 TextFieldModelNG::SetOnContentSizeChange(frameNode, std::move(onChange));
2792 }
2793
SetOnTextAreaInputFilterError(ArkUINodeHandle node,void * extraParam)2794 void SetOnTextAreaInputFilterError(ArkUINodeHandle node, void* extraParam)
2795 {
2796 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2797 CHECK_NULL_VOID(frameNode);
2798 auto onInputFilterError = [node, extraParam](const std::u16string& str) {
2799 ArkUINodeEvent event;
2800 std::string utf8Str = UtfUtils::Str16DebugToStr8(str);
2801 event.kind = TEXT_INPUT;
2802 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2803 event.textInputEvent.subKind = ON_TEXT_AREA_INPUT_FILTER_ERROR;
2804 event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(utf8Str.c_str());
2805 SendArkUISyncEvent(&event);
2806 };
2807 TextFieldModelNG::SetInputFilterError(frameNode, std::move(onInputFilterError));
2808 }
2809
SetTextAreaOnTextContentScroll(ArkUINodeHandle node,void * extraParam)2810 void SetTextAreaOnTextContentScroll(ArkUINodeHandle node, void* extraParam)
2811 {
2812 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2813 CHECK_NULL_VOID(frameNode);
2814 auto onScroll = [node, extraParam](float totalOffsetX, float totalOffsetY) {
2815 ArkUINodeEvent event;
2816 event.kind = COMPONENT_ASYNC_EVENT;
2817 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2818 event.componentAsyncEvent.subKind = ON_TEXT_AREA_CONTENT_SCROLL;
2819 event.componentAsyncEvent.data[0].f32 = totalOffsetX;
2820 event.componentAsyncEvent.data[1].f32 = totalOffsetY;
2821 SendArkUISyncEvent(&event);
2822 };
2823 TextFieldModelNG::SetOnContentScroll(frameNode, std::move(onScroll));
2824 }
2825
SetTextAreaOnSubmit(ArkUINodeHandle node,void * extraParam)2826 void SetTextAreaOnSubmit(ArkUINodeHandle node, void* extraParam)
2827 {
2828 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2829 CHECK_NULL_VOID(frameNode);
2830 auto onEvent = [node, extraParam](int32_t value, NG::TextFieldCommonEvent& commonEvent) {
2831 ArkUINodeEvent event;
2832 event.kind = COMPONENT_ASYNC_EVENT;
2833 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2834 event.componentAsyncEvent.subKind = ON_TEXTAREA_ON_SUBMIT;
2835 event.componentAsyncEvent.data[0].i32 = value;
2836 SendArkUISyncEvent(&event);
2837 };
2838 TextFieldModelNG::SetOnSubmit(frameNode, std::move(onEvent));
2839 }
2840
ResetOnTextAreaChange(ArkUINodeHandle node)2841 void ResetOnTextAreaChange(ArkUINodeHandle node)
2842 {
2843 GetTextAreaModifier()->resetTextAreaOnChange(node);
2844 }
ResetOnTextAreaPaste(ArkUINodeHandle node)2845 void ResetOnTextAreaPaste(ArkUINodeHandle node)
2846 {
2847 GetTextAreaModifier()->resetTextAreaOnPaste(node);
2848 }
ResetOnTextAreaSelectionChange(ArkUINodeHandle node)2849 void ResetOnTextAreaSelectionChange(ArkUINodeHandle node)
2850 {
2851 GetTextAreaModifier()->resetTextAreaOnTextSelectionChange(node);
2852 }
ResetOnTextAreaEditChange(ArkUINodeHandle node)2853 void ResetOnTextAreaEditChange(ArkUINodeHandle node)
2854 {
2855 GetTextAreaModifier()->resetTextAreaOnEditChange(node);
2856 }
ResetOnTextAreaContentSizeChange(ArkUINodeHandle node)2857 void ResetOnTextAreaContentSizeChange(ArkUINodeHandle node)
2858 {
2859 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2860 CHECK_NULL_VOID(frameNode);
2861 TextFieldModelNG::SetOnContentSizeChange(frameNode, nullptr);
2862 }
ResetOnTextAreaInputFilterError(ArkUINodeHandle node)2863 void ResetOnTextAreaInputFilterError(ArkUINodeHandle node)
2864 {
2865 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2866 CHECK_NULL_VOID(frameNode);
2867 TextFieldModelNG::SetInputFilterError(frameNode, nullptr);
2868 }
ResetTextAreaOnTextContentScroll(ArkUINodeHandle node)2869 void ResetTextAreaOnTextContentScroll(ArkUINodeHandle node)
2870 {
2871 GetTextAreaModifier()->resetTextAreaOnContentScroll(node);
2872 }
ResetTextAreaOnSubmit(ArkUINodeHandle node)2873 void ResetTextAreaOnSubmit(ArkUINodeHandle node)
2874 {
2875 GetTextAreaModifier()->resetTextAreaOnSubmitWithEvent(node);
2876 }
ResetOnTextAreaWillChange(ArkUINodeHandle node)2877 void ResetOnTextAreaWillChange(ArkUINodeHandle node)
2878 {
2879 GetTextAreaModifier()->resetTextAreaOnWillChange(node);
2880 }
2881
SetOnTextAreaWillChange(ArkUINodeHandle node,void * extraParam)2882 void SetOnTextAreaWillChange(ArkUINodeHandle node, void* extraParam)
2883 {
2884 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2885 CHECK_NULL_VOID(frameNode);
2886 auto onWillChange = [node, extraParam](const ChangeValueInfo& info) -> bool {
2887 ArkUINodeEvent event;
2888 event.kind = TEXT_INPUT_CHANGE;
2889 std::string utf8StrValue = UtfUtils::Str16DebugToStr8(info.value);
2890 std::string utf8Str = UtfUtils::Str16DebugToStr8(info.previewText.value);
2891 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2892 event.textChangeEvent.subKind = ON_TEXT_AREA_WILL_CHANGE;
2893 event.textChangeEvent.nativeStringPtr = const_cast<char*>(utf8StrValue.c_str());
2894 event.textChangeEvent.extendStringPtr = const_cast<char*>(utf8Str.c_str());
2895 event.textChangeEvent.numArgs = info.previewText.offset;
2896 SendArkUISyncEvent(&event);
2897 return true;
2898 };
2899 TextFieldModelNG::SetOnWillChangeEvent(frameNode, std::move(onWillChange));
2900 }
2901
SetTextAreaOnWillInsertValue(ArkUINodeHandle node,void * extraParam)2902 void SetTextAreaOnWillInsertValue(ArkUINodeHandle node, void* extraParam)
2903 {
2904 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2905 CHECK_NULL_VOID(frameNode);
2906 std::function<bool(const InsertValueInfo&)> onWillInsert = [node, extraParam](
2907 const InsertValueInfo& Info) -> bool {
2908 ArkUINodeEvent event;
2909 std::string insertValueUtf8 = UtfUtils::Str16DebugToStr8(Info.insertValue);
2910 event.kind = MIXED_EVENT;
2911 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2912 event.mixedEvent.subKind = ON_TEXT_AREA_WILL_INSERT;
2913 event.mixedEvent.numberData[0].f32 = Info.insertOffset;
2914 event.mixedEvent.numberDataLength = 1;
2915 event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(insertValueUtf8.c_str());
2916 event.mixedEvent.stringPtrDataLength = 1;
2917 SendArkUISyncEvent(&event);
2918 return event.mixedEvent.numberReturnData[0].i32;
2919 };
2920 TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, std::move(onWillInsert));
2921 }
2922
SetTextAreaOnDidInsertValue(ArkUINodeHandle node,void * extraParam)2923 void SetTextAreaOnDidInsertValue(ArkUINodeHandle node, void* extraParam)
2924 {
2925 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2926 CHECK_NULL_VOID(frameNode);
2927 auto onDidInsert = [node, extraParam](const InsertValueInfo& Info) {
2928 ArkUINodeEvent event;
2929 std::string insertValueUtf8 = UtfUtils::Str16DebugToStr8(Info.insertValue);
2930 event.kind = MIXED_EVENT;
2931 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2932 event.mixedEvent.subKind = ON_TEXT_AREA_DID_INSERT;
2933 event.mixedEvent.numberData[0].f32 = Info.insertOffset;
2934 event.mixedEvent.numberDataLength = 1;
2935 event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(insertValueUtf8.c_str());
2936 event.mixedEvent.stringPtrDataLength = 1;
2937 SendArkUISyncEvent(&event);
2938 };
2939 TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, std::move(onDidInsert));
2940 }
2941
SetTextAreaOnWillDeleteValue(ArkUINodeHandle node,void * extraParam)2942 void SetTextAreaOnWillDeleteValue(ArkUINodeHandle node, void* extraParam)
2943 {
2944 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2945 CHECK_NULL_VOID(frameNode);
2946 auto onWillDelete = [node, extraParam](const DeleteValueInfo& Info) -> bool {
2947 ArkUINodeEvent event;
2948 std::string deleteValueUtf8 = UtfUtils::Str16DebugToStr8(Info.deleteValue);
2949 event.kind = MIXED_EVENT;
2950 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2951 event.mixedEvent.subKind = ON_TEXT_AREA_WILL_DELETE;
2952 event.mixedEvent.numberData[0].f32 = Info.deleteOffset;
2953 event.mixedEvent.numberData[1].i32 = static_cast<int32_t>(Info.direction);
2954 event.mixedEvent.numberDataLength = 2;
2955 event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(deleteValueUtf8.c_str());
2956 event.mixedEvent.stringPtrDataLength = 1;
2957 SendArkUISyncEvent(&event);
2958 return event.mixedEvent.numberReturnData[0].i32;
2959 };
2960 TextFieldModelNG::SetOnWillDeleteEvent(frameNode, std::move(onWillDelete));
2961 }
2962
SetTextAreaOnDidDeleteValue(ArkUINodeHandle node,void * extraParam)2963 void SetTextAreaOnDidDeleteValue(ArkUINodeHandle node, void* extraParam)
2964 {
2965 auto* frameNode = reinterpret_cast<FrameNode*>(node);
2966 CHECK_NULL_VOID(frameNode);
2967 auto onDidDelete = [node, extraParam](const DeleteValueInfo& Info) {
2968 ArkUINodeEvent event;
2969 std::string deleteValueUtf8 = UtfUtils::Str16DebugToStr8(Info.deleteValue);
2970 event.kind = MIXED_EVENT;
2971 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2972 event.mixedEvent.subKind = ON_TEXT_AREA_DID_DELETE;
2973 event.mixedEvent.numberData[0].f32 = Info.deleteOffset;
2974 event.mixedEvent.numberData[1].i32 = static_cast<int32_t>(Info.direction);
2975 event.mixedEvent.numberDataLength = 2;
2976 event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(deleteValueUtf8.c_str());
2977 event.mixedEvent.stringPtrDataLength = 1;
2978 SendArkUISyncEvent(&event);
2979 };
2980 TextFieldModelNG::SetOnDidDeleteEvent(frameNode, std::move(onDidDelete));
2981 }
ResetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node)2982 void ResetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node)
2983 {
2984 GetTextAreaModifier()->resetTextAreaOnChange(node);
2985 }
2986 } // namespace NodeModifier
2987 } // namespace OHOS::Ace::NG
2988