• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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