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 #include <cstdint>
17 #include "bridge/common/utils/utils.h"
18 #include "core/components/common/layout/constants.h"
19 #include "core/components/common/properties/alignment.h"
20 #include "core/components/common/properties/text_style.h"
21 #include "core/components/text_field/textfield_theme.h"
22 #include "core/components_ng/base/frame_node.h"
23 #include "core/components_ng/base/view_abstract.h"
24 #include "core/components_ng/pattern/text_field/text_field_model.h"
25 #include "core/components_ng/pattern/text_field/text_field_model_ng.h"
26 #include "core/interfaces/arkoala/arkoala_api.h"
27 #include "core/pipeline/base/element_register.h"
28 #include "core/interfaces/native/node/node_api.h"
29 #include "core/components/common/properties/text_style_parser.h"
30 #include "interfaces/native/node/node_model.h"
31 
32 namespace OHOS::Ace::NG {
33 namespace {
34 constexpr int NUM_0 = 0;
35 constexpr int NUM_1 = 1;
36 constexpr int NUM_2 = 2;
37 constexpr int NUM_3 = 3;
38 constexpr int NUM_4 = 4;
39 constexpr int NUM_16 = 16;
40 constexpr int NUM_24 = 24;
41 constexpr int DEFAULT_LENGTH = 4;
42 constexpr InputStyle DEFAULT_TEXT_AREA_STYLE = InputStyle::DEFAULT;
43 constexpr bool DEFAULT_SELECTION_MENU_HIDDEN = false;
44 constexpr uint32_t DEFAULT_MAX_VIEW_LINE = 3;
45 constexpr CopyOptions DEFAULT_COPY_OPTIONS_VALUE = CopyOptions::Local;
46 constexpr FontWeight DEFAULT_FONT_WEIGHT = FontWeight::NORMAL;
47 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
48 constexpr DisplayMode DEFAULT_BAR_STATE_VALUE = DisplayMode::AUTO;
49 constexpr bool DEFAULT_KEY_BOARD_VALUE = true;
50 constexpr bool DEFAULT_ENABLE_AUTO_FILL = true;
51 constexpr char DEFAULT_FONT_FAMILY[] = "HarmonyOS Sans";
52 const uint32_t ERROR_UINT_CODE = -1;
53 const int32_t ERROR_INT_CODE = -1;
54 constexpr TextDecoration DEFAULT_TEXT_DECORATION = TextDecoration::NONE;
55 constexpr Color DEFAULT_DECORATION_COLOR = Color(0xff000000);
56 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
57 constexpr int16_t DEFAULT_ALPHA = 255;
58 constexpr double DEFAULT_OPACITY = 0.2;
59 const float ERROR_FLOAT_CODE = -1.0f;
60 std::string g_strValue;
61 constexpr bool DEFAULT_ENABLE_PREVIEW_TEXT_VALUE = true;
62 constexpr bool DEFAULT_ENABLE_HAPTIC_FEEDBACK_VALUE = true;
63 
SetTextAreaStyle(ArkUINodeHandle node,ArkUI_Int32 style)64 void SetTextAreaStyle(ArkUINodeHandle node, ArkUI_Int32 style)
65 {
66     auto *frameNode = reinterpret_cast<FrameNode *>(node);
67     CHECK_NULL_VOID(frameNode);
68     TextFieldModelNG::SetInputStyle(frameNode, static_cast<InputStyle>(style));
69 }
70 
ResetTextAreaStyle(ArkUINodeHandle node)71 void ResetTextAreaStyle(ArkUINodeHandle node)
72 {
73     auto *frameNode = reinterpret_cast<FrameNode *>(node);
74     CHECK_NULL_VOID(frameNode);
75     TextFieldModelNG::SetInputStyle(frameNode, DEFAULT_TEXT_AREA_STYLE);
76 }
77 
SetTextAreaSelectionMenuHidden(ArkUINodeHandle node,ArkUI_Uint32 contextMenuHidden)78 void SetTextAreaSelectionMenuHidden(ArkUINodeHandle node, ArkUI_Uint32 contextMenuHidden)
79 {
80     auto *frameNode = reinterpret_cast<FrameNode *>(node);
81     CHECK_NULL_VOID(frameNode);
82     TextFieldModelNG::SetSelectionMenuHidden(frameNode, static_cast<bool>(contextMenuHidden));
83 }
84 
ResetTextAreaSelectionMenuHidden(ArkUINodeHandle node)85 void ResetTextAreaSelectionMenuHidden(ArkUINodeHandle node)
86 {
87     auto *frameNode = reinterpret_cast<FrameNode *>(node);
88     CHECK_NULL_VOID(frameNode);
89     TextFieldModelNG::SetSelectionMenuHidden(frameNode, DEFAULT_SELECTION_MENU_HIDDEN);
90 }
91 
SetTextAreaMaxLines(ArkUINodeHandle node,ArkUI_Uint32 maxLine)92 void SetTextAreaMaxLines(ArkUINodeHandle node, ArkUI_Uint32 maxLine)
93 {
94     auto *frameNode = reinterpret_cast<FrameNode *>(node);
95     CHECK_NULL_VOID(frameNode);
96     TextFieldModelNG::SetMaxViewLines(frameNode, maxLine);
97     TextFieldModelNG::SetNormalMaxViewLines(frameNode, maxLine);
98 }
99 
ResetTextAreaMaxLines(ArkUINodeHandle node)100 void ResetTextAreaMaxLines(ArkUINodeHandle node)
101 {
102     auto *frameNode = reinterpret_cast<FrameNode *>(node);
103     CHECK_NULL_VOID(frameNode);
104     TextFieldModelNG::SetMaxViewLines(frameNode, DEFAULT_MAX_VIEW_LINE);
105     TextFieldModelNG::SetNormalMaxViewLines(frameNode, Infinity<uint32_t>());
106 }
107 
SetTextAreaCopyOption(ArkUINodeHandle node,ArkUI_Int32 value)108 void SetTextAreaCopyOption(ArkUINodeHandle node, ArkUI_Int32 value)
109 {
110     auto *frameNode = reinterpret_cast<FrameNode *>(node);
111     CHECK_NULL_VOID(frameNode);
112     TextFieldModelNG::SetCopyOption(frameNode, static_cast<CopyOptions>(value));
113 }
114 
ResetTextAreaCopyOption(ArkUINodeHandle node)115 void ResetTextAreaCopyOption(ArkUINodeHandle node)
116 {
117     auto *frameNode = reinterpret_cast<FrameNode *>(node);
118     CHECK_NULL_VOID(frameNode);
119     TextFieldModelNG::SetCopyOption(frameNode, DEFAULT_COPY_OPTIONS_VALUE);
120 }
121 
SetTextAreaPlaceholderColor(ArkUINodeHandle node,ArkUI_Uint32 color)122 void SetTextAreaPlaceholderColor(ArkUINodeHandle node, ArkUI_Uint32 color)
123 {
124     auto *frameNode = reinterpret_cast<FrameNode *>(node);
125     CHECK_NULL_VOID(frameNode);
126     TextFieldModelNG::SetPlaceholderColor(frameNode, Color(color));
127 }
128 
ResetTextAreaPlaceholderColor(ArkUINodeHandle node)129 void ResetTextAreaPlaceholderColor(ArkUINodeHandle node)
130 {
131     auto *frameNode = reinterpret_cast<FrameNode *>(node);
132     CHECK_NULL_VOID(frameNode);
133     auto pipeline = frameNode->GetContext();
134     CHECK_NULL_VOID(pipeline);
135     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
136     CHECK_NULL_VOID(theme);
137     uint32_t color = theme->GetPlaceholderColor().GetValue();
138     TextFieldModelNG::SetPlaceholderColor(frameNode, Color(color));
139 }
140 
SetTextAreaTextAlign(ArkUINodeHandle node,ArkUI_Int32 value)141 void SetTextAreaTextAlign(ArkUINodeHandle node, ArkUI_Int32 value)
142 {
143     auto *frameNode = reinterpret_cast<FrameNode *>(node);
144     CHECK_NULL_VOID(frameNode);
145     TextAlign value_textAlign = static_cast<TextAlign>(value);
146     TextFieldModelNG::SetTextAlign(frameNode, value_textAlign);
147 }
148 
ResetTextAreaTextAlign(ArkUINodeHandle node)149 void ResetTextAreaTextAlign(ArkUINodeHandle node)
150 {
151     auto *frameNode = reinterpret_cast<FrameNode *>(node);
152     CHECK_NULL_VOID(frameNode);
153     TextFieldModelNG::SetTextAlign(frameNode, TextAlign::START);
154 }
155 
SetTextAreaPlaceholderFont(ArkUINodeHandle node,const struct ArkUIResourceLength * size,ArkUI_CharPtr weight,ArkUI_CharPtr family,ArkUI_Int32 style)156 void SetTextAreaPlaceholderFont(ArkUINodeHandle node, const struct ArkUIResourceLength *size, ArkUI_CharPtr weight,
157     ArkUI_CharPtr family, ArkUI_Int32 style)
158 {
159     auto *frameNode = reinterpret_cast<FrameNode *>(node);
160     CHECK_NULL_VOID(frameNode);
161     Font font;
162     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(size->unit);
163     if (size->unit >= 0) {
164         if (unitEnum == DimensionUnit::CALC) {
165             font.fontSize = CalcDimension(size->string, DimensionUnit::CALC);
166         } else {
167             font.fontSize = CalcDimension(size->value, unitEnum);
168         }
169     } else {
170         auto pipeline = frameNode->GetContext();
171         CHECK_NULL_VOID(pipeline);
172         auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
173         CHECK_NULL_VOID(theme);
174         font.fontSize = theme->GetFontSize();
175     }
176 
177     if (weight != nullptr) {
178         font.fontWeight = Framework::ConvertStrToFontWeight(weight);
179     } else {
180         font.fontWeight = DEFAULT_FONT_WEIGHT;
181     }
182 
183     if (family != nullptr) {
184         font.fontFamilies = Framework::ConvertStrToFontFamilies(std::string(family));
185     } else {
186         std::vector<std::string> fontFamilies;
187         fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
188         font.fontFamilies = fontFamilies;
189     }
190 
191     if (style >= 0) {
192         font.fontStyle = static_cast<Ace::FontStyle>(style);
193     } else {
194         font.fontStyle = DEFAULT_FONT_STYLE;
195     }
196     TextFieldModelNG::SetPlaceholderFont(frameNode, font);
197 }
198 
SetTextAreaPlaceholderFontEnum(ArkUINodeHandle node,const struct ArkUIResourceLength * size,ArkUI_Int32 weight,ArkUI_CharPtr family,ArkUI_Int32 style)199 void SetTextAreaPlaceholderFontEnum(ArkUINodeHandle node, const struct ArkUIResourceLength* size, ArkUI_Int32 weight,
200     ArkUI_CharPtr family, ArkUI_Int32 style)
201 {
202     auto *frameNode = reinterpret_cast<FrameNode *>(node);
203     CHECK_NULL_VOID(frameNode);
204     Font font;
205     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(size->unit);
206     if (size->unit >= 0) {
207         if (unitEnum == DimensionUnit::CALC) {
208             font.fontSize = CalcDimension(size->string, DimensionUnit::CALC);
209         } else {
210             font.fontSize = CalcDimension(size->value, unitEnum);
211         }
212     } else {
213         auto pipeline = frameNode->GetContext();
214         CHECK_NULL_VOID(pipeline);
215         auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
216         CHECK_NULL_VOID(theme);
217         font.fontSize = theme->GetFontSize();
218     }
219 
220     if (weight > -1) {
221         font.fontWeight = static_cast<FontWeight>(weight);
222     } else {
223         font.fontWeight = DEFAULT_FONT_WEIGHT;
224     }
225 
226     if (family != nullptr) {
227         font.fontFamilies = Framework::ConvertStrToFontFamilies(std::string(family));
228     } else {
229         std::vector<std::string> fontFamilies;
230         fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
231         font.fontFamilies = fontFamilies;
232     }
233 
234     if (style >= 0) {
235         font.fontStyle = static_cast<Ace::FontStyle>(style);
236     } else {
237         font.fontStyle = DEFAULT_FONT_STYLE;
238     }
239     TextFieldModelNG::SetPlaceholderFont(frameNode, font);
240 }
241 
ResetTextAreaPlaceholderFont(ArkUINodeHandle node)242 void ResetTextAreaPlaceholderFont(ArkUINodeHandle node)
243 {
244     auto *frameNode = reinterpret_cast<FrameNode *>(node);
245     CHECK_NULL_VOID(frameNode);
246     auto pipeline = frameNode->GetContext();
247     CHECK_NULL_VOID(pipeline);
248     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
249     CHECK_NULL_VOID(theme);
250     Font font;
251     font.fontSize = theme->GetFontSize();
252     font.fontWeight = DEFAULT_FONT_WEIGHT;
253     font.fontStyle = DEFAULT_FONT_STYLE;
254     std::vector<std::string> fontFamilies;
255     fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
256     font.fontFamilies = fontFamilies;
257     TextFieldModelNG::SetPlaceholderFont(frameNode, font);
258 }
259 
SetTextAreaBarState(ArkUINodeHandle node,ArkUI_Uint32 barStateValue)260 void SetTextAreaBarState(ArkUINodeHandle node, ArkUI_Uint32 barStateValue)
261 {
262     auto *frameNode = reinterpret_cast<FrameNode *>(node);
263     CHECK_NULL_VOID(frameNode);
264     DisplayMode displayMode = static_cast<DisplayMode>(barStateValue);
265     TextFieldModelNG::SetBarState(frameNode, displayMode);
266 }
267 
ResetTextAreaBarState(ArkUINodeHandle node)268 void ResetTextAreaBarState(ArkUINodeHandle node)
269 {
270     auto *frameNode = reinterpret_cast<FrameNode *>(node);
271     CHECK_NULL_VOID(frameNode);
272     TextFieldModelNG::SetBarState(frameNode, DEFAULT_BAR_STATE_VALUE);
273 }
274 
SetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node,ArkUI_Uint32 keyboardOnFocusValue)275 void SetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node, ArkUI_Uint32 keyboardOnFocusValue)
276 {
277     auto *frameNode = reinterpret_cast<FrameNode *>(node);
278     CHECK_NULL_VOID(frameNode);
279     TextFieldModelNG::RequestKeyboardOnFocus(frameNode, static_cast<bool>(keyboardOnFocusValue));
280 }
281 
ResetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node)282 void ResetTextAreaEnableKeyboardOnFocus(ArkUINodeHandle node)
283 {
284     auto *frameNode = reinterpret_cast<FrameNode *>(node);
285     CHECK_NULL_VOID(frameNode);
286     TextFieldModelNG::RequestKeyboardOnFocus(frameNode, DEFAULT_KEY_BOARD_VALUE);
287 }
288 
SetTextAreaFontFamily(ArkUINodeHandle node,ArkUI_CharPtr fontFamily)289 void SetTextAreaFontFamily(ArkUINodeHandle node, ArkUI_CharPtr fontFamily)
290 {
291     auto *frameNode = reinterpret_cast<FrameNode *>(node);
292     CHECK_NULL_VOID(frameNode);
293     std::vector<std::string> fontFamilies;
294     fontFamilies = Framework::ConvertStrToFontFamilies(std::string(fontFamily));
295     TextFieldModelNG::SetFontFamily(frameNode, fontFamilies);
296 }
297 
ResetTextAreaFontFamily(ArkUINodeHandle node)298 void ResetTextAreaFontFamily(ArkUINodeHandle node)
299 {
300     auto *frameNode = reinterpret_cast<FrameNode *>(node);
301     CHECK_NULL_VOID(frameNode);
302     std::vector<std::string> fontFamilies;
303     fontFamilies.emplace_back(std::string(DEFAULT_FONT_FAMILY));
304     TextFieldModelNG::SetFontFamily(frameNode, fontFamilies);
305 }
306 
SetTextAreaShowCounter(ArkUINodeHandle node,ArkUI_Uint32 value)307 void SetTextAreaShowCounter(ArkUINodeHandle node, ArkUI_Uint32 value)
308 {
309     auto *frameNode = reinterpret_cast<FrameNode *>(node);
310     CHECK_NULL_VOID(frameNode);
311     TextFieldModelNG::SetShowCounter(frameNode, static_cast<bool>(value));
312 }
313 
ResetTextAreaShowCounter(ArkUINodeHandle node)314 void ResetTextAreaShowCounter(ArkUINodeHandle node)
315 {
316     auto *frameNode = reinterpret_cast<FrameNode *>(node);
317     CHECK_NULL_VOID(frameNode);
318     TextFieldModelNG::SetShowCounter(frameNode, false);
319 }
320 
SetTextAreaCaretColor(ArkUINodeHandle node,ArkUI_Uint32 color)321 void SetTextAreaCaretColor(ArkUINodeHandle node, ArkUI_Uint32 color)
322 {
323     auto *frameNode = reinterpret_cast<FrameNode *>(node);
324     CHECK_NULL_VOID(frameNode);
325     TextFieldModelNG::SetCaretColor(frameNode, Color(color));
326 }
327 
ResetTextAreaCaretColor(ArkUINodeHandle node)328 void ResetTextAreaCaretColor(ArkUINodeHandle node)
329 {
330     auto *frameNode = reinterpret_cast<FrameNode *>(node);
331     CHECK_NULL_VOID(frameNode);
332     auto pipeline = frameNode->GetContext();
333     CHECK_NULL_VOID(pipeline);
334     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
335     CHECK_NULL_VOID(theme);
336     auto caretColor = static_cast<int32_t>(theme->GetCursorColor().GetValue());
337     TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
338 }
339 
SetTextAreaMaxLength(ArkUINodeHandle node,ArkUI_Int32 value)340 void SetTextAreaMaxLength(ArkUINodeHandle node, ArkUI_Int32 value)
341 {
342     auto *frameNode = reinterpret_cast<FrameNode *>(node);
343     CHECK_NULL_VOID(frameNode);
344     TextFieldModelNG::SetMaxLength(frameNode, value);
345 }
346 
ResetTextAreaMaxLength(ArkUINodeHandle node)347 void ResetTextAreaMaxLength(ArkUINodeHandle node)
348 {
349     auto *frameNode = reinterpret_cast<FrameNode *>(node);
350     CHECK_NULL_VOID(frameNode);
351     TextFieldModelNG::ResetMaxLength(frameNode);
352 }
353 
SetTextAreaFontColor(ArkUINodeHandle node,ArkUI_Uint32 color)354 void SetTextAreaFontColor(ArkUINodeHandle node, ArkUI_Uint32 color)
355 {
356     auto *frameNode = reinterpret_cast<FrameNode *>(node);
357     CHECK_NULL_VOID(frameNode);
358     TextFieldModelNG::SetTextColor(frameNode, Color(color));
359 }
360 
ResetTextAreaFontColor(ArkUINodeHandle node)361 void ResetTextAreaFontColor(ArkUINodeHandle node)
362 {
363     auto *frameNode = reinterpret_cast<FrameNode *>(node);
364     CHECK_NULL_VOID(frameNode);
365     int32_t textColor = 0;
366     auto pipeline = frameNode->GetContext();
367     CHECK_NULL_VOID(pipeline);
368     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
369     textColor = static_cast<int32_t>(theme->GetTextColor().GetValue());
370     TextFieldModelNG::SetTextColor(frameNode, Color(textColor));
371 }
372 
SetTextAreaFontStyle(ArkUINodeHandle node,ArkUI_Uint32 value)373 void SetTextAreaFontStyle(ArkUINodeHandle node, ArkUI_Uint32 value)
374 {
375     auto *frameNode = reinterpret_cast<FrameNode *>(node);
376     CHECK_NULL_VOID(frameNode);
377     TextFieldModelNG::SetFontStyle(frameNode, static_cast<Ace::FontStyle>(value));
378 }
379 
ResetTextAreaFontStyle(ArkUINodeHandle node)380 void ResetTextAreaFontStyle(ArkUINodeHandle node)
381 {
382     auto *frameNode = reinterpret_cast<FrameNode *>(node);
383     CHECK_NULL_VOID(frameNode);
384     TextFieldModelNG::SetFontStyle(frameNode, OHOS::Ace::FontStyle::NORMAL);
385 }
386 
SetTextAreaFontWeightStr(ArkUINodeHandle node,ArkUI_CharPtr fontWeight)387 void SetTextAreaFontWeightStr(ArkUINodeHandle node, ArkUI_CharPtr fontWeight)
388 {
389     auto *frameNode = reinterpret_cast<FrameNode *>(node);
390     CHECK_NULL_VOID(frameNode);
391     TextFieldModelNG::SetFontWeight(frameNode, Framework::ConvertStrToFontWeight(fontWeight));
392 }
393 
SetTextAreaFontWeight(ArkUINodeHandle node,ArkUI_Int32 fontWeight)394 void SetTextAreaFontWeight(ArkUINodeHandle node, ArkUI_Int32 fontWeight)
395 {
396     auto *frameNode = reinterpret_cast<FrameNode *>(node);
397     CHECK_NULL_VOID(frameNode);
398     TextFieldModelNG::SetFontWeight(frameNode, static_cast<FontWeight>(fontWeight));
399 }
400 
ResetTextAreaFontWeight(ArkUINodeHandle node)401 void ResetTextAreaFontWeight(ArkUINodeHandle node)
402 {
403     auto *frameNode = reinterpret_cast<FrameNode *>(node);
404     CHECK_NULL_VOID(frameNode);
405     TextFieldModelNG::SetFontWeight(frameNode, OHOS::Ace::FontWeight::NORMAL);
406 }
407 
SetTextAreaFontSize(ArkUINodeHandle node,const struct ArkUIResourceLength * size)408 void SetTextAreaFontSize(ArkUINodeHandle node, const struct ArkUIResourceLength *size)
409 {
410     auto *frameNode = reinterpret_cast<FrameNode *>(node);
411     CHECK_NULL_VOID(frameNode);
412     auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(size->unit);
413     if (unitEnum == DimensionUnit::CALC) {
414         TextFieldModelNG::SetFontSize(frameNode, CalcDimension(size->string, DimensionUnit::CALC));
415     } else {
416         TextFieldModelNG::SetFontSize(frameNode, CalcDimension(size->value, unitEnum));
417     }
418 }
419 
ResetTextAreaFontSize(ArkUINodeHandle node)420 void ResetTextAreaFontSize(ArkUINodeHandle node)
421 {
422     auto *frameNode = reinterpret_cast<FrameNode *>(node);
423     CHECK_NULL_VOID(frameNode);
424     auto pipeline = frameNode->GetContext();
425     CHECK_NULL_VOID(pipeline);
426     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
427     CHECK_NULL_VOID(theme);
428     TextFieldModelNG::SetFontSize(frameNode, Dimension(theme->GetFontSize()));
429 }
430 
SetCounterType(ArkUINodeHandle node,ArkUI_Int32 value)431 void SetCounterType(ArkUINodeHandle node, ArkUI_Int32 value)
432 {
433     auto *frameNode = reinterpret_cast<FrameNode *>(node);
434     CHECK_NULL_VOID(frameNode);
435     TextFieldModelNG::SetCounterType(frameNode, value);
436 }
437 
SetTextAreaPlaceholderString(ArkUINodeHandle node,ArkUI_CharPtr value)438 void SetTextAreaPlaceholderString(ArkUINodeHandle node, ArkUI_CharPtr value)
439 {
440     auto *frameNode = reinterpret_cast<FrameNode *>(node);
441     CHECK_NULL_VOID(frameNode);
442     std::string placeholderStr(value);
443     TextFieldModelNG::SetTextFieldPlaceHolder(frameNode, placeholderStr);
444 }
445 
SetTextAreaTextString(ArkUINodeHandle node,ArkUI_CharPtr value)446 void SetTextAreaTextString(ArkUINodeHandle node, ArkUI_CharPtr value)
447 {
448     auto *frameNode = reinterpret_cast<FrameNode *>(node);
449     CHECK_NULL_VOID(frameNode);
450     std::string textStr(value);
451     TextFieldModelNG::SetTextFieldText(frameNode, textStr);
452 }
453 
StopTextAreaTextEditing(ArkUINodeHandle node)454 void StopTextAreaTextEditing(ArkUINodeHandle node)
455 {
456     auto *frameNode = reinterpret_cast<FrameNode *>(node);
457     CHECK_NULL_VOID(frameNode);
458     TextFieldModelNG::StopTextFieldEditing(frameNode);
459 }
460 
GetTextAreaPlaceholder(ArkUINodeHandle node)461 ArkUI_CharPtr GetTextAreaPlaceholder(ArkUINodeHandle node)
462 {
463     auto *frameNode = reinterpret_cast<FrameNode *>(node);
464     CHECK_NULL_RETURN(frameNode, "");
465     g_strValue = TextFieldModelNG::GetPlaceholderText(frameNode);
466     return g_strValue.c_str();
467 }
468 
GetTextAreaText(ArkUINodeHandle node)469 ArkUI_CharPtr GetTextAreaText(ArkUINodeHandle node)
470 {
471     auto *frameNode = reinterpret_cast<FrameNode *>(node);
472     CHECK_NULL_RETURN(frameNode, "");
473     g_strValue = TextFieldModelNG::GetTextFieldText(frameNode);
474     return g_strValue.c_str();
475 }
476 
GetTextAreaCaretColor(ArkUINodeHandle node)477 ArkUI_Uint32 GetTextAreaCaretColor(ArkUINodeHandle node)
478 {
479     auto *frameNode = reinterpret_cast<FrameNode *>(node);
480     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
481     return TextFieldModelNG::GetCaretColor(frameNode).GetValue();
482 }
483 
GetTextAreaMaxLength(ArkUINodeHandle node)484 ArkUI_Uint32 GetTextAreaMaxLength(ArkUINodeHandle node)
485 {
486     auto *frameNode = reinterpret_cast<FrameNode *>(node);
487     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
488     return TextFieldModelNG::GetMaxLength(frameNode);
489 }
490 
GetTextAreaPlaceholderColor(ArkUINodeHandle node)491 ArkUI_Uint32 GetTextAreaPlaceholderColor(ArkUINodeHandle node)
492 {
493     auto *frameNode = reinterpret_cast<FrameNode *>(node);
494     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
495     return TextFieldModelNG::GetPlaceholderColor(frameNode).GetValue();
496 }
497 
GetTextAreaPlaceholderFont(ArkUINodeHandle node,ArkUITextFont * font)498 void GetTextAreaPlaceholderFont(ArkUINodeHandle node, ArkUITextFont* font)
499 {
500     auto* frameNode = reinterpret_cast<FrameNode*>(node);
501     CHECK_NULL_VOID(frameNode);
502     Font value = TextFieldModelNG::GetPlaceholderFont(frameNode);
503     if (value.fontSize.has_value()) {
504         font->fontSize = value.fontSize.value().GetNativeValue(static_cast<DimensionUnit>(font->fontSizeUnit));
505     }
506     if (value.fontWeight.has_value()) {
507         font->fontWeight = static_cast<ArkUI_Int32>(value.fontWeight.value());
508     }
509     if (!value.fontFamilies.empty()) {
510         std::string families;
511         uint32_t index = 0;
512         for (auto& family : value.fontFamilies) {
513             families += family;
514             if (index != value.fontFamilies.size() - 1) {
515                 families += ",";
516             }
517             index ++;
518         }
519         g_strValue = families;
520         font->fontFamilies = g_strValue.c_str();
521     }
522     if (value.fontStyle.has_value()) {
523         font->fontStyle = static_cast<ArkUI_Int32>(value.fontStyle.value());
524     }
525 }
526 
GetTextAreaEditing(ArkUINodeHandle node)527 ArkUI_Bool GetTextAreaEditing(ArkUINodeHandle node)
528 {
529     auto *frameNode = reinterpret_cast<FrameNode *>(node);
530     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
531     return TextFieldModelNG::GetTextFieldEditing(frameNode);
532 }
533 
SetTextAreaBackgroundColor(ArkUINodeHandle node,uint32_t color)534 void SetTextAreaBackgroundColor(ArkUINodeHandle node, uint32_t color)
535 {
536     auto* frameNode = reinterpret_cast<FrameNode*>(node);
537     CHECK_NULL_VOID(frameNode);
538     TextFieldModelNG::SetBackgroundColor(frameNode, Color(color));
539 }
540 
ResetTextAreaBackgroundColor(ArkUINodeHandle node)541 void ResetTextAreaBackgroundColor(ArkUINodeHandle node)
542 {
543     auto* frameNode = reinterpret_cast<FrameNode*>(node);
544     CHECK_NULL_VOID(frameNode);
545     Color backgroundColor;
546     auto pipeline = frameNode->GetContext();
547     CHECK_NULL_VOID(pipeline);
548     auto buttonTheme = pipeline->GetTheme<TextFieldTheme>();
549     CHECK_NULL_VOID(buttonTheme);
550     backgroundColor = buttonTheme->GetBgColor();
551     TextFieldModelNG::SetBackgroundColor(frameNode, backgroundColor);
552 }
553 
SetTextAreaType(ArkUINodeHandle node,ArkUI_Int32 type)554 void SetTextAreaType(ArkUINodeHandle node, ArkUI_Int32 type)
555 {
556     auto* frameNode = reinterpret_cast<FrameNode*>(node);
557     CHECK_NULL_VOID(frameNode);
558     TextFieldModelNG::SetType(frameNode, CastToTextInputType(type));
559 }
560 
ResetTextAreaType(ArkUINodeHandle node)561 void ResetTextAreaType(ArkUINodeHandle node)
562 {
563     auto* frameNode = reinterpret_cast<FrameNode*>(node);
564     CHECK_NULL_VOID(frameNode);
565     TextFieldModelNG::SetType(frameNode, Ace::TextInputType::TEXT);
566 }
567 
GetTextAreaType(ArkUINodeHandle node)568 ArkUI_Int32 GetTextAreaType(ArkUINodeHandle node)
569 {
570     auto *frameNode = reinterpret_cast<FrameNode *>(node);
571     CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
572     return static_cast<ArkUI_Int32>(TextFieldModelNG::GetType(frameNode));
573 }
574 
GetTextAreaTextAlign(ArkUINodeHandle node)575 ArkUI_Int32 GetTextAreaTextAlign(ArkUINodeHandle node)
576 {
577     auto *frameNode = reinterpret_cast<FrameNode *>(node);
578     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
579     return static_cast<ArkUI_Int32>(TextFieldModelNG::GetTextAlign(frameNode));
580 }
581 
SetTextAreaShowCounterOptions(ArkUINodeHandle node,ArkUI_Bool open,ArkUI_Int32 thresholdPercentage,ArkUI_Bool highlightBorder)582 void SetTextAreaShowCounterOptions(
583     ArkUINodeHandle node, ArkUI_Bool open, ArkUI_Int32 thresholdPercentage, ArkUI_Bool highlightBorder)
584 {
585     auto* frameNode = reinterpret_cast<FrameNode*>(node);
586     CHECK_NULL_VOID(frameNode);
587     TextFieldModelNG::SetShowCounter(frameNode, open);
588     TextFieldModelNG::SetCounterType(frameNode, thresholdPercentage);
589     TextFieldModelNG::SetShowCounterBorder(frameNode, highlightBorder);
590 }
591 
ResetTextAreaShowCounterOptions(ArkUINodeHandle node)592 void ResetTextAreaShowCounterOptions(ArkUINodeHandle node)
593 {
594     auto *frameNode = reinterpret_cast<FrameNode *>(node);
595     CHECK_NULL_VOID(frameNode);
596     TextFieldModelNG::SetShowCounter(frameNode, false);
597     TextFieldModelNG::SetCounterType(frameNode, -1);
598     TextFieldModelNG::SetShowCounterBorder(frameNode, true);
599 }
600 
GetTextAreaShowCounterOptions(ArkUINodeHandle node,ArkUIShowCountOptions * options)601 void GetTextAreaShowCounterOptions(ArkUINodeHandle node, ArkUIShowCountOptions* options)
602 {
603     auto *frameNode = reinterpret_cast<FrameNode *>(node);
604     CHECK_NULL_VOID(frameNode);
605     options->open = TextFieldModelNG::GetShowCounter(frameNode);
606     options->thresholdPercentage = TextFieldModelNG::GetCounterType(frameNode);
607     options->highlightBorder = TextFieldModelNG::GetShowCounterBorder(frameNode);
608 }
609 
SetTextAreaFontFeature(ArkUINodeHandle node,ArkUI_CharPtr value)610 void SetTextAreaFontFeature(ArkUINodeHandle node, ArkUI_CharPtr value)
611 {
612     auto* frameNode = reinterpret_cast<FrameNode*>(node);
613     CHECK_NULL_VOID(frameNode);
614     std::string strValue = value;
615     TextFieldModelNG::SetFontFeature(frameNode, ParseFontFeatureSettings(strValue));
616 }
617 
ResetTextAreaFontFeature(ArkUINodeHandle node)618 void ResetTextAreaFontFeature(ArkUINodeHandle node)
619 {
620     auto* frameNode = reinterpret_cast<FrameNode*>(node);
621     std::string strValue = "";
622     TextFieldModelNG::SetFontFeature(frameNode, ParseFontFeatureSettings(strValue));
623 }
624 
SetTextAreaDecoration(ArkUINodeHandle node,ArkUI_Int32 decoration,ArkUI_Uint32 color,ArkUI_Int32 style)625 void SetTextAreaDecoration(ArkUINodeHandle node, ArkUI_Int32 decoration, ArkUI_Uint32 color, ArkUI_Int32 style)
626 {
627     auto* frameNode = reinterpret_cast<FrameNode*>(node);
628     CHECK_NULL_VOID(frameNode);
629     TextFieldModelNG::SetTextDecoration(frameNode, static_cast<TextDecoration>(decoration));
630     TextFieldModelNG::SetTextDecorationColor(frameNode, Color(color));
631     TextFieldModelNG::SetTextDecorationStyle(frameNode, static_cast<TextDecorationStyle>(style));
632 }
633 
ResetTextAreaDecoration(ArkUINodeHandle node)634 void ResetTextAreaDecoration(ArkUINodeHandle node)
635 {
636     auto* frameNode = reinterpret_cast<FrameNode*>(node);
637     CHECK_NULL_VOID(frameNode);
638     TextFieldModelNG::SetTextDecoration(frameNode, DEFAULT_TEXT_DECORATION);
639     TextFieldModelNG::SetTextDecorationColor(frameNode, DEFAULT_DECORATION_COLOR);
640     TextFieldModelNG::SetTextDecorationStyle(frameNode, DEFAULT_DECORATION_STYLE);
641 }
642 
SetTextAreaLetterSpacing(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)643 void SetTextAreaLetterSpacing(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
644 {
645     auto* frameNode = reinterpret_cast<FrameNode*>(node);
646     CHECK_NULL_VOID(frameNode);
647     TextFieldModelNG::SetLetterSpacing(frameNode, CalcDimension(value, (DimensionUnit)unit));
648 }
649 
ResetTextAreaLetterSpacing(ArkUINodeHandle node)650 void ResetTextAreaLetterSpacing(ArkUINodeHandle node)
651 {
652     auto* frameNode = reinterpret_cast<FrameNode*>(node);
653     CHECK_NULL_VOID(frameNode);
654     CalcDimension value;
655     value.Reset();
656     TextFieldModelNG::SetLetterSpacing(frameNode, value);
657 }
658 
SetTextAreaLineHeight(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)659 void SetTextAreaLineHeight(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
660 {
661     auto* frameNode = reinterpret_cast<FrameNode*>(node);
662     CHECK_NULL_VOID(frameNode);
663     TextFieldModelNG::SetLineHeight(frameNode, CalcDimension(value, (DimensionUnit)unit));
664 }
665 
ResetTextAreaLineHeight(ArkUINodeHandle node)666 void ResetTextAreaLineHeight(ArkUINodeHandle node)
667 {
668     auto* frameNode = reinterpret_cast<FrameNode*>(node);
669     CHECK_NULL_VOID(frameNode);
670     CalcDimension value;
671     value.Reset();
672     TextFieldModelNG::SetLineHeight(frameNode, value);
673 }
674 
SetTextAreaWordBreak(ArkUINodeHandle node,ArkUI_Uint32 wordBreak)675 void SetTextAreaWordBreak(ArkUINodeHandle node, ArkUI_Uint32 wordBreak)
676 {
677     auto* frameNode = reinterpret_cast<FrameNode*>(node);
678     CHECK_NULL_VOID(frameNode);
679     if (wordBreak < 0 || wordBreak >= WORD_BREAK_TYPES.size()) {
680         wordBreak = 2; // 2 is the default value of WordBreak::BREAK_WORD
681     }
682     TextFieldModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[wordBreak]);
683 }
684 
ResetTextAreaWordBreak(ArkUINodeHandle node)685 void ResetTextAreaWordBreak(ArkUINodeHandle node)
686 {
687     auto* frameNode = reinterpret_cast<FrameNode*>(node);
688     CHECK_NULL_VOID(frameNode);
689     TextFieldModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[2]); // 2 is the default value of WordBreak::BREAK_WORD
690 }
691 
SetTextAreaAdaptMinFontSize(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)692 void SetTextAreaAdaptMinFontSize(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
693 {
694     auto *frameNode = reinterpret_cast<FrameNode *>(node);
695     CHECK_NULL_VOID(frameNode);
696     TextFieldModelNG::SetAdaptMinFontSize(frameNode, CalcDimension(value, (DimensionUnit)unit));
697 }
698 
ResetTextAreaAdaptMinFontSize(ArkUINodeHandle node)699 void ResetTextAreaAdaptMinFontSize(ArkUINodeHandle node)
700 {
701     auto *frameNode = reinterpret_cast<FrameNode *>(node);
702     CHECK_NULL_VOID(frameNode);
703     auto pipelineContext = frameNode->GetContext();
704     CHECK_NULL_VOID(pipelineContext);
705     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
706     CHECK_NULL_VOID(theme);
707     CalcDimension minFontSize = theme->GetTextStyle().GetAdaptMinFontSize();
708     TextFieldModelNG::SetAdaptMinFontSize(frameNode, minFontSize);
709 }
710 
SetTextAreaAdaptMaxFontSize(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)711 void SetTextAreaAdaptMaxFontSize(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
712 {
713     auto *frameNode = reinterpret_cast<FrameNode *>(node);
714     CHECK_NULL_VOID(frameNode);
715     TextFieldModelNG::SetAdaptMaxFontSize(frameNode, CalcDimension(value, (DimensionUnit)unit));
716 }
717 
ResetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)718 void ResetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)
719 {
720     auto *frameNode = reinterpret_cast<FrameNode *>(node);
721     CHECK_NULL_VOID(frameNode);
722     auto pipelineContext = frameNode->GetContext();
723     CHECK_NULL_VOID(pipelineContext);
724     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
725     CHECK_NULL_VOID(theme);
726     CalcDimension maxFontSize = theme->GetTextStyle().GetAdaptMaxFontSize();
727     TextFieldModelNG::SetAdaptMaxFontSize(frameNode, maxFontSize);
728 }
729 
SetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node,ArkUI_Int32 value)730 void SetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node, ArkUI_Int32 value)
731 {
732     auto *frameNode = reinterpret_cast<FrameNode *>(node);
733     CHECK_NULL_VOID(frameNode);
734     TextFieldModelNG::SetHeightAdaptivePolicy(frameNode, static_cast<Ace::TextHeightAdaptivePolicy>(value));
735 }
736 
ResetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node)737 void ResetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node)
738 {
739     auto *frameNode = reinterpret_cast<FrameNode *>(node);
740     CHECK_NULL_VOID(frameNode);
741     TextFieldModelNG::SetHeightAdaptivePolicy(frameNode, TextHeightAdaptivePolicy::MAX_LINES_FIRST);
742 }
743 
GetTextAreaSelectionMenuHidden(ArkUINodeHandle node)744 ArkUI_Bool GetTextAreaSelectionMenuHidden(ArkUINodeHandle node)
745 {
746     auto* frameNode = reinterpret_cast<FrameNode*>(node);
747     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
748     return TextFieldModelNG::GetSelectionMenuHidden(frameNode);
749 }
750 
SetTextAreaSelectedBackgroundColor(ArkUINodeHandle node,ArkUI_Uint32 color)751 void SetTextAreaSelectedBackgroundColor(ArkUINodeHandle node, ArkUI_Uint32 color)
752 {
753     auto* frameNode = reinterpret_cast<FrameNode*>(node);
754     CHECK_NULL_VOID(frameNode);
755     Color selectedColor = Color(color);
756     if (selectedColor.GetAlpha() == DEFAULT_ALPHA) {
757         // Default setting of 20% opacity
758         selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
759     }
760     TextFieldModelNG::SetSelectedBackgroundColor(frameNode, Color(color));
761 }
762 
ResetTextAreaSelectedBackgroundColor(ArkUINodeHandle node)763 void ResetTextAreaSelectedBackgroundColor(ArkUINodeHandle node)
764 {
765     auto* frameNode = reinterpret_cast<FrameNode*>(node);
766     CHECK_NULL_VOID(frameNode);
767     Color selectedColor;
768     auto pipeline = frameNode->GetContext();
769     CHECK_NULL_VOID(pipeline);
770     auto theme = pipeline->GetTheme<TextFieldTheme>();
771     CHECK_NULL_VOID(theme);
772     selectedColor = theme->GetSelectedColor();
773     if (selectedColor.GetAlpha() == DEFAULT_ALPHA) {
774         // Default setting of 20% opacity
775         selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
776     }
777     TextFieldModelNG::SetSelectedBackgroundColor(frameNode, selectedColor);
778 }
779 
SetTextAreaCaret(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)780 void SetTextAreaCaret(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
781 {
782     auto* frameNode = reinterpret_cast<FrameNode*>(node);
783     CHECK_NULL_VOID(frameNode);
784     CaretStyle caretStyle;
785     caretStyle.caretWidth = CalcDimension(value, (DimensionUnit)unit);
786     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
787 }
788 
SetTextAreaCaretStyle(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_Uint32 caretColor)789 void SetTextAreaCaretStyle(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_Uint32 caretColor)
790 {
791     auto* frameNode = reinterpret_cast<FrameNode*>(node);
792     CHECK_NULL_VOID(frameNode);
793     CaretStyle caretStyle;
794     caretStyle.caretWidth = CalcDimension(value, (DimensionUnit)unit);
795     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
796     TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
797 }
798 
ResetTextAreaCaretStyle(ArkUINodeHandle node)799 void ResetTextAreaCaretStyle(ArkUINodeHandle node)
800 {
801     auto* frameNode = reinterpret_cast<FrameNode*>(node);
802     auto pipeline = frameNode->GetContext();
803     CHECK_NULL_VOID(pipeline);
804     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
805     CHECK_NULL_VOID(theme);
806     CaretStyle caretStyle;
807     caretStyle.caretWidth = theme->GetCursorWidth();
808     uint32_t caretColor = theme->GetCursorColor().GetValue();
809     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
810     TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
811 }
812 
SetTextAreaTextOverflow(ArkUINodeHandle node,ArkUI_Int32 value)813 void SetTextAreaTextOverflow(ArkUINodeHandle node, ArkUI_Int32 value)
814 {
815     auto* frameNode = reinterpret_cast<FrameNode*>(node);
816     CHECK_NULL_VOID(frameNode);
817     TextOverflow valueTextOverflow = static_cast<TextOverflow>(value);
818     TextFieldModelNG::SetTextOverflow(frameNode, valueTextOverflow);
819 }
820 
ResetTextAreaTextOverflow(ArkUINodeHandle node)821 void ResetTextAreaTextOverflow(ArkUINodeHandle node)
822 {
823     auto* frameNode = reinterpret_cast<FrameNode*>(node);
824     CHECK_NULL_VOID(frameNode);
825     TextFieldModelNG::SetTextOverflow(frameNode, TextOverflow::DEFAULT);
826 }
827 
SetTextAreaTextIndent(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)828 void SetTextAreaTextIndent(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
829 {
830     auto* frameNode = reinterpret_cast<FrameNode*>(node);
831     CHECK_NULL_VOID(frameNode);
832     TextFieldModelNG::SetTextIndent(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
833 }
834 
ResetTextAreaTextIndent(ArkUINodeHandle node)835 void ResetTextAreaTextIndent(ArkUINodeHandle node)
836 {
837     auto* frameNode = reinterpret_cast<FrameNode*>(node);
838     CHECK_NULL_VOID(frameNode);
839     TextFieldModelNG::SetTextIndent(frameNode, CalcDimension(0, DimensionUnit::VP));
840 }
841 
GetTextAreaFontFeature(ArkUINodeHandle node)842 ArkUI_CharPtr GetTextAreaFontFeature(ArkUINodeHandle node)
843 {
844     auto* frameNode = reinterpret_cast<FrameNode*>(node);
845     CHECK_NULL_RETURN(frameNode, nullptr);
846     g_strValue = UnParseFontFeatureSetting(TextFieldModelNG::GetFontFeature(frameNode));
847     return g_strValue.c_str();
848 }
849 
GetTextAreaAdaptMinFontSize(ArkUINodeHandle node)850 ArkUI_Float32 GetTextAreaAdaptMinFontSize(ArkUINodeHandle node)
851 {
852     auto* frameNode = reinterpret_cast<FrameNode*>(node);
853     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
854     return TextFieldModelNG::GetAdaptMinFontSize(frameNode).Value();
855 }
856 
GetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)857 ArkUI_Float32 GetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)
858 {
859     auto* frameNode = reinterpret_cast<FrameNode*>(node);
860     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
861     return TextFieldModelNG::GetAdaptMaxFontSize(frameNode).Value();
862 }
863 
GetTextAreaLineHeight(ArkUINodeHandle node)864 ArkUI_Float32 GetTextAreaLineHeight(ArkUINodeHandle node)
865 {
866     auto* frameNode = reinterpret_cast<FrameNode*>(node);
867     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
868     return TextFieldModelNG::GetLineHeight(frameNode).Value();
869 }
870 
GetgetTextAreaMaxLines(ArkUINodeHandle node)871 ArkUI_Int32 GetgetTextAreaMaxLines(ArkUINodeHandle node)
872 {
873     auto* frameNode = reinterpret_cast<FrameNode*>(node);
874     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
875     return TextFieldModelNG::GetMaxLines(frameNode);
876 }
SetTextAreaLineSpacing(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)877 void SetTextAreaLineSpacing(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
878 {
879     auto* frameNode = reinterpret_cast<FrameNode*>(node);
880     CHECK_NULL_VOID(frameNode);
881     TextFieldModelNG::SetLineSpacing(frameNode, CalcDimension(value, (DimensionUnit)unit));
882 }
883 
ResetTextAreaLineSpacing(ArkUINodeHandle node)884 void ResetTextAreaLineSpacing(ArkUINodeHandle node)
885 {
886     auto* frameNode = reinterpret_cast<FrameNode*>(node);
887     CHECK_NULL_VOID(frameNode);
888     CalcDimension value;
889     value.Reset();
890     TextFieldModelNG::SetLineSpacing(frameNode, value);
891 }
892 
SetTextAreaPadding(ArkUINodeHandle node,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left)893 void SetTextAreaPadding(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
894     const struct ArkUISizeType* bottom, const struct ArkUISizeType* left)
895 {
896     auto* frameNode = reinterpret_cast<FrameNode*>(node);
897     CHECK_NULL_VOID(frameNode);
898     CalcLength topDimen;
899     CalcLength rightDimen;
900     CalcLength bottomDimen;
901     CalcLength leftDimen;
902     if (top->string != nullptr) {
903         topDimen = CalcLength(top->string);
904     } else {
905         topDimen = CalcLength(top->value, static_cast<DimensionUnit>(top->unit));
906     }
907     if (right->string != nullptr) {
908         rightDimen = CalcLength(right->string);
909     } else {
910         rightDimen = CalcLength(right->value, static_cast<DimensionUnit>(right->unit));
911     }
912     if (bottom->string != nullptr) {
913         bottomDimen = CalcLength(bottom->string);
914     } else {
915         bottomDimen = CalcLength(bottom->value, static_cast<DimensionUnit>(bottom->unit));
916     }
917     if (left->string != nullptr) {
918         leftDimen = CalcLength(left->string);
919     } else {
920         leftDimen = CalcLength(left->value, static_cast<DimensionUnit>(left->unit));
921     }
922     NG::PaddingProperty paddings;
923     paddings.top = std::optional<CalcLength>(topDimen);
924     paddings.bottom = std::optional<CalcLength>(bottomDimen);
925     paddings.left = std::optional<CalcLength>(leftDimen);
926     paddings.right = std::optional<CalcLength>(rightDimen);
927     TextFieldModelNG::SetPadding(frameNode, paddings);
928 }
929 
ResetTextAreaPadding(ArkUINodeHandle node)930 void ResetTextAreaPadding(ArkUINodeHandle node)
931 {
932     auto* frameNode = reinterpret_cast<FrameNode*>(node);
933     CHECK_NULL_VOID(frameNode);
934     auto pipeline = frameNode->GetContext();
935     CHECK_NULL_VOID(pipeline);
936     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
937     CHECK_NULL_VOID(theme);
938     auto textFieldPadding = theme->GetPadding();
939     NG::PaddingProperty paddings;
940     paddings.top = NG::CalcLength(textFieldPadding.Top());
941     paddings.bottom = NG::CalcLength(textFieldPadding.Bottom());
942     paddings.left = NG::CalcLength(textFieldPadding.Left());
943     paddings.right = NG::CalcLength(textFieldPadding.Right());
944     TextFieldModelNG::SetPadding(frameNode, paddings);
945 }
946 
SetTextAreaOnChange(ArkUINodeHandle node,void * callback)947 void SetTextAreaOnChange(ArkUINodeHandle node, void* callback)
948 {
949     auto* frameNode = reinterpret_cast<FrameNode*>(node);
950     CHECK_NULL_VOID(frameNode);
951     if (callback) {
952         auto onChange = reinterpret_cast<std::function<void(const std::string&, PreviewText&)>*>(callback);
953         TextFieldModelNG::SetOnChange(frameNode, std::move(*onChange));
954     } else {
955         TextFieldModelNG::SetOnChange(frameNode, nullptr);
956     }
957 }
958 
ResetTextAreaOnChange(ArkUINodeHandle node)959 void ResetTextAreaOnChange(ArkUINodeHandle node)
960 {
961     auto *frameNode = reinterpret_cast<FrameNode *>(node);
962     CHECK_NULL_VOID(frameNode);
963     TextFieldModelNG::SetOnChange(frameNode, nullptr);
964 }
965 
SetTextAreaEnterKeyType(ArkUINodeHandle node,ArkUI_Int32 value)966 void SetTextAreaEnterKeyType(ArkUINodeHandle node, ArkUI_Int32 value)
967 {
968     auto *frameNode = reinterpret_cast<FrameNode *>(node);
969     CHECK_NULL_VOID(frameNode);
970     TextFieldModelNG::SetEnterKeyType(frameNode, CastToTextInputAction(value));
971 }
972 
ResetTextAreaEnterKeyType(ArkUINodeHandle node)973 void ResetTextAreaEnterKeyType(ArkUINodeHandle node)
974 {
975     auto *frameNode = reinterpret_cast<FrameNode *>(node);
976     CHECK_NULL_VOID(frameNode);
977     TextFieldModelNG::SetEnterKeyType(frameNode, TextInputAction::NEW_LINE);
978 }
979 
SetTextAreaInputFilter(ArkUINodeHandle node,ArkUI_CharPtr value,void * callback)980 void SetTextAreaInputFilter(ArkUINodeHandle node, ArkUI_CharPtr value, void* callback)
981 {
982     auto* frameNode = reinterpret_cast<FrameNode*>(node);
983     CHECK_NULL_VOID(frameNode);
984     std::string inputFilter(value);
985     if (callback) {
986         auto onError = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
987         TextFieldModelNG::SetInputFilter(frameNode, inputFilter, *onError);
988     } else {
989         TextFieldModelNG::SetInputFilter(frameNode, inputFilter, nullptr);
990     }
991 }
992 
ResetTextAreaInputFilter(ArkUINodeHandle node)993 void ResetTextAreaInputFilter(ArkUINodeHandle node)
994 {
995     auto *frameNode = reinterpret_cast<FrameNode *>(node);
996     CHECK_NULL_VOID(frameNode);
997     TextFieldModelNG::SetInputFilter(frameNode, "", nullptr);
998 }
999 
SetTextAreaOnTextSelectionChange(ArkUINodeHandle node,void * callback)1000 void SetTextAreaOnTextSelectionChange(ArkUINodeHandle node, void* callback)
1001 {
1002     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1003     CHECK_NULL_VOID(frameNode);
1004     if (callback) {
1005         auto onChange = reinterpret_cast<std::function<void(int32_t, int32_t)>*>(callback);
1006         TextFieldModelNG::SetOnTextSelectionChange(frameNode, std::move(*onChange));
1007     } else {
1008         TextFieldModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1009     }
1010 }
1011 
ResetTextAreaOnTextSelectionChange(ArkUINodeHandle node)1012 void ResetTextAreaOnTextSelectionChange(ArkUINodeHandle node)
1013 {
1014     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1015     CHECK_NULL_VOID(frameNode);
1016     TextFieldModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1017 }
1018 
SetTextAreaOnContentScroll(ArkUINodeHandle node,void * callback)1019 void SetTextAreaOnContentScroll(ArkUINodeHandle node, void* callback)
1020 {
1021     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1022     CHECK_NULL_VOID(frameNode);
1023     if (callback) {
1024         auto onScroll = reinterpret_cast<std::function<void(float, float)>*>(callback);
1025         TextFieldModelNG::SetOnContentScroll(frameNode, std::move(*onScroll));
1026     } else {
1027         TextFieldModelNG::SetOnContentScroll(frameNode, nullptr);
1028     }
1029 }
1030 
ResetTextAreaOnContentScroll(ArkUINodeHandle node)1031 void ResetTextAreaOnContentScroll(ArkUINodeHandle node)
1032 {
1033     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1034     CHECK_NULL_VOID(frameNode);
1035     TextFieldModelNG::SetOnContentScroll(frameNode, nullptr);
1036 }
1037 
SetTextAreaOnEditChange(ArkUINodeHandle node,void * callback)1038 void SetTextAreaOnEditChange(ArkUINodeHandle node, void* callback)
1039 {
1040     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1041     CHECK_NULL_VOID(frameNode);
1042     if (callback) {
1043         auto onEditChange = reinterpret_cast<std::function<void(bool)>*>(callback);
1044         TextFieldModelNG::SetOnEditChange(frameNode, std::move(*onEditChange));
1045     } else {
1046         TextFieldModelNG::SetOnEditChange(frameNode, nullptr);
1047     }
1048 }
1049 
ResetTextAreaOnEditChange(ArkUINodeHandle node)1050 void ResetTextAreaOnEditChange(ArkUINodeHandle node)
1051 {
1052     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1053     CHECK_NULL_VOID(frameNode);
1054     TextFieldModelNG::SetOnEditChange(frameNode, nullptr);
1055 }
1056 
SetTextAreaOnCopy(ArkUINodeHandle node,void * callback)1057 void SetTextAreaOnCopy(ArkUINodeHandle node, void* callback)
1058 {
1059     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1060     CHECK_NULL_VOID(frameNode);
1061     if (callback) {
1062         auto onCopy = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
1063         TextFieldModelNG::SetOnCopy(frameNode, std::move(*onCopy));
1064     } else {
1065         TextFieldModelNG::SetOnCopy(frameNode, nullptr);
1066     }
1067 }
1068 
ResetTextAreaOnCopy(ArkUINodeHandle node)1069 void ResetTextAreaOnCopy(ArkUINodeHandle node)
1070 {
1071     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1072     CHECK_NULL_VOID(frameNode);
1073     TextFieldModelNG::SetOnCopy(frameNode, nullptr);
1074 }
1075 
SetTextAreaOnCut(ArkUINodeHandle node,void * callback)1076 void SetTextAreaOnCut(ArkUINodeHandle node, void* callback)
1077 {
1078     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1079     CHECK_NULL_VOID(frameNode);
1080     if (callback) {
1081         auto onCut = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
1082         TextFieldModelNG::SetOnCut(frameNode, std::move(*onCut));
1083     } else {
1084         TextFieldModelNG::SetOnCut(frameNode, nullptr);
1085     }
1086 }
1087 
ResetTextAreaOnCut(ArkUINodeHandle node)1088 void ResetTextAreaOnCut(ArkUINodeHandle node)
1089 {
1090     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1091     CHECK_NULL_VOID(frameNode);
1092     TextFieldModelNG::SetOnCut(frameNode, nullptr);
1093 }
1094 
SetTextAreaOnPaste(ArkUINodeHandle node,void * callback)1095 void SetTextAreaOnPaste(ArkUINodeHandle node, void* callback)
1096 {
1097     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1098     CHECK_NULL_VOID(frameNode);
1099     if (callback) {
1100         auto onPasteWithEvent = reinterpret_cast<std::function<void(
1101                 const std::string&, NG::TextCommonEvent&)>*>(callback);
1102         TextFieldModelNG::SetOnPasteWithEvent(frameNode, std::move(*onPasteWithEvent));
1103     } else {
1104         TextFieldModelNG::SetOnPasteWithEvent(frameNode, nullptr);
1105     }
1106 }
1107 
ResetTextAreaOnPaste(ArkUINodeHandle node)1108 void ResetTextAreaOnPaste(ArkUINodeHandle node)
1109 {
1110     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1111     CHECK_NULL_VOID(frameNode);
1112     TextFieldModelNG::SetOnPasteWithEvent(frameNode, nullptr);
1113 }
1114 
SetTextAreaLineBreakStrategy(ArkUINodeHandle node,ArkUI_Uint32 lineBreakStrategy)1115 void SetTextAreaLineBreakStrategy(ArkUINodeHandle node, ArkUI_Uint32 lineBreakStrategy)
1116 {
1117     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1118     CHECK_NULL_VOID(frameNode);
1119     if (lineBreakStrategy < 0 || lineBreakStrategy >= LINE_BREAK_STRATEGY_TYPES.size()) {
1120         lineBreakStrategy = 0; // 0 is the default value of LineBreakStrategy::GREEDY
1121     }
1122     TextFieldModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[lineBreakStrategy]);
1123 }
1124 
ResetTextAreaLineBreakStrategy(ArkUINodeHandle node)1125 void ResetTextAreaLineBreakStrategy(ArkUINodeHandle node)
1126 {
1127     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1128     CHECK_NULL_VOID(frameNode);
1129     // 0 is the default value of LineBreakStrategy::GREEDY
1130     TextFieldModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[0]);
1131 }
1132 
SetTextAreaOnSubmitWithEvent(ArkUINodeHandle node,void * callback)1133 void SetTextAreaOnSubmitWithEvent(ArkUINodeHandle node, void* callback)
1134 {
1135     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1136     CHECK_NULL_VOID(frameNode);
1137     if (callback) {
1138         auto onSubmit = reinterpret_cast<std::function<void(int32_t, NG::TextFieldCommonEvent&)>*>(callback);
1139         TextFieldModelNG::SetOnSubmit(frameNode, std::move(*onSubmit));
1140     } else {
1141         TextFieldModelNG::SetOnSubmit(frameNode, nullptr);
1142     }
1143 }
1144 
ResetTextAreaOnSubmitWithEvent(ArkUINodeHandle node)1145 void ResetTextAreaOnSubmitWithEvent(ArkUINodeHandle node)
1146 {
1147     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1148     CHECK_NULL_VOID(frameNode);
1149     TextFieldModelNG::SetOnSubmit(frameNode, nullptr);
1150 }
1151 
SetTextAreaContentType(ArkUINodeHandle node,ArkUI_Int32 contentType)1152 void SetTextAreaContentType(ArkUINodeHandle node, ArkUI_Int32 contentType)
1153 {
1154     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1155     CHECK_NULL_VOID(frameNode);
1156     if (contentType < 0 || contentType > static_cast<ArkUI_Int32>(TextContentType::END)) {
1157         contentType = -1;
1158     }
1159     TextFieldModelNG::SetContentType(frameNode, static_cast<NG::TextContentType>(contentType));
1160 }
1161 
ResetTextAreaContentType(ArkUINodeHandle node)1162 void ResetTextAreaContentType(ArkUINodeHandle node)
1163 {
1164     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1165     CHECK_NULL_VOID(frameNode);
1166     TextFieldModelNG::SetContentType(frameNode, static_cast<NG::TextContentType>(TextContentType::UNSPECIFIED));
1167 }
1168 
SetTextAreaEnableAutoFill(ArkUINodeHandle node,ArkUI_Uint32 enableAutoFill)1169 void SetTextAreaEnableAutoFill(ArkUINodeHandle node, ArkUI_Uint32 enableAutoFill)
1170 {
1171     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1172     CHECK_NULL_VOID(frameNode);
1173     TextFieldModelNG::SetEnableAutoFill(frameNode, static_cast<bool>(enableAutoFill));
1174 }
1175 
ResetTextAreaEnableAutoFill(ArkUINodeHandle node)1176 void ResetTextAreaEnableAutoFill(ArkUINodeHandle node)
1177 {
1178     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1179     CHECK_NULL_VOID(frameNode);
1180     TextFieldModelNG::SetEnableAutoFill(frameNode, DEFAULT_ENABLE_AUTO_FILL);
1181 }
1182 
ConvertBorderStyle(int32_t value)1183 BorderStyle ConvertBorderStyle(int32_t value)
1184 {
1185     auto style = static_cast<BorderStyle>(value);
1186     if (style < BorderStyle::SOLID || style > BorderStyle::NONE) {
1187         style = BorderStyle::SOLID;
1188     }
1189     return style;
1190 }
1191 
SetOptionalBorder(std::optional<Dimension> & optionalDimension,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1192 void SetOptionalBorder(std::optional<Dimension>& optionalDimension, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
1193     ArkUI_Int32& offset)
1194 {
1195     bool hasValue = static_cast<bool>(values[offset]);
1196     if (hasValue) {
1197         optionalDimension =
1198             Dimension(values[offset + NUM_1], static_cast<OHOS::Ace::DimensionUnit>(values[offset + NUM_2]));
1199     }
1200     offset = offset + NUM_3;
1201 }
1202 
SetAllWidthOptionalBorder(NG::BorderWidthProperty & borderWidth,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1203 void SetAllWidthOptionalBorder(NG::BorderWidthProperty& borderWidth, const ArkUI_Float32* values,
1204     ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1205 {
1206     SetOptionalBorder(borderWidth.leftDimen, values, valuesSize, offset);
1207     SetOptionalBorder(borderWidth.rightDimen, values, valuesSize, offset);
1208     SetOptionalBorder(borderWidth.topDimen, values, valuesSize, offset);
1209     SetOptionalBorder(borderWidth.bottomDimen, values, valuesSize, offset);
1210 }
1211 
SetAllRadiusOptionalBorder(NG::BorderRadiusProperty & borderRadius,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1212 void SetAllRadiusOptionalBorder(NG::BorderRadiusProperty& borderRadius, const ArkUI_Float32* values,
1213     ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1214 {
1215     SetOptionalBorder(borderRadius.radiusTopLeft, values, valuesSize, offset);
1216     SetOptionalBorder(borderRadius.radiusTopRight, values, valuesSize, offset);
1217     SetOptionalBorder(borderRadius.radiusBottomLeft, values, valuesSize, offset);
1218     SetOptionalBorder(borderRadius.radiusBottomRight, values, valuesSize, offset);
1219 }
1220 
SetOptionalBorderColor(std::optional<Color> & optionalColor,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1221 void SetOptionalBorderColor(
1222     std::optional<Color>& optionalColor, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1223 {
1224     auto hasValue = values[offset];
1225     if (static_cast<bool>(hasValue)) {
1226         optionalColor = Color(values[offset + NUM_1]);
1227     }
1228     offset = offset + NUM_2;
1229 }
1230 
SetAllOptionalBorderColor(NG::BorderColorProperty & borderColors,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1231 void SetAllOptionalBorderColor(
1232     NG::BorderColorProperty& borderColors, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1233 {
1234     SetOptionalBorderColor(borderColors.leftColor, values, valuesSize, offset);
1235     SetOptionalBorderColor(borderColors.rightColor, values, valuesSize, offset);
1236     SetOptionalBorderColor(borderColors.topColor, values, valuesSize, offset);
1237     SetOptionalBorderColor(borderColors.bottomColor, values, valuesSize, offset);
1238 }
1239 
SetOptionalBorderStyle(std::optional<BorderStyle> & optionalStyle,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1240 void SetOptionalBorderStyle(
1241     std::optional<BorderStyle>& optionalStyle, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1242 {
1243     auto hasValue = values[offset];
1244     if (static_cast<bool>(hasValue)) {
1245         optionalStyle = ConvertBorderStyle(values[offset + NUM_1]);
1246     }
1247     offset = offset + NUM_2;
1248 }
1249 
SetAllOptionalBorderStyle(NG::BorderStyleProperty & borderStyles,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1250 void SetAllOptionalBorderStyle(
1251     NG::BorderStyleProperty& borderStyles, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1252 {
1253     SetOptionalBorderStyle(borderStyles.styleLeft, values, valuesSize, offset);
1254     SetOptionalBorderStyle(borderStyles.styleRight, values, valuesSize, offset);
1255     SetOptionalBorderStyle(borderStyles.styleTop, values, valuesSize, offset);
1256     SetOptionalBorderStyle(borderStyles.styleBottom, values, valuesSize, offset);
1257 }
1258 
SetTextAreaBorder(ArkUINodeHandle node,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,const uint32_t * colorAndStyle,int32_t colorAndStyleSize)1259 void SetTextAreaBorder(ArkUINodeHandle node, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
1260     const uint32_t* colorAndStyle, int32_t colorAndStyleSize)
1261 {
1262     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1263     CHECK_NULL_VOID(frameNode);
1264     if ((values == nullptr) || (valuesSize != NUM_24) || (colorAndStyle == nullptr) || colorAndStyleSize != NUM_16) {
1265         return;
1266     }
1267 
1268     int32_t offset = NUM_0;
1269     NG::BorderWidthProperty borderWidth;
1270     SetAllWidthOptionalBorder(borderWidth, values, valuesSize, offset);
1271     borderWidth.multiValued = true;
1272     if (borderWidth.leftDimen.has_value() || borderWidth.rightDimen.has_value() || borderWidth.topDimen.has_value() ||
1273         borderWidth.bottomDimen.has_value()) {
1274         TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1275     }
1276 
1277     NG::BorderRadiusProperty borderRadius;
1278     SetAllRadiusOptionalBorder(borderRadius, values, valuesSize, offset);
1279     borderRadius.multiValued = true;
1280     if (borderRadius.radiusTopLeft.has_value() || borderRadius.radiusTopRight.has_value() ||
1281         borderRadius.radiusBottomLeft.has_value() || borderRadius.radiusBottomRight.has_value()) {
1282         TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1283     }
1284 
1285     int32_t colorAndStyleOffset = NUM_0;
1286     NG::BorderColorProperty borderColors;
1287     SetAllOptionalBorderColor(borderColors, colorAndStyle,
1288         colorAndStyleSize, colorAndStyleOffset);
1289     borderColors.multiValued = true;
1290     TextFieldModelNG::SetBorderColor(frameNode, borderColors);
1291 
1292     NG::BorderStyleProperty borderStyles;
1293     SetAllOptionalBorderStyle(borderStyles, colorAndStyle,
1294         colorAndStyleSize, colorAndStyleOffset);
1295     borderStyles.multiValued = true;
1296     TextFieldModelNG::SetBorderStyle(frameNode, borderStyles);
1297 }
1298 
ResetTextAreaBorder(ArkUINodeHandle node)1299 void ResetTextAreaBorder(ArkUINodeHandle node)
1300 {
1301     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1302     CHECK_NULL_VOID(frameNode);
1303     BorderWidthProperty borderWidth;
1304     borderWidth.SetBorderWidth(Dimension(0));
1305     TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1306 
1307     BorderRadiusProperty borderRadius;
1308     borderRadius.SetRadius(Dimension(0));
1309     TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1310 
1311     BorderColorProperty borderColor;
1312     borderColor.SetColor(Color::BLACK);
1313     TextFieldModelNG::SetBorderColor(frameNode, borderColor);
1314 
1315     BorderStyleProperty borderStyle;
1316     borderStyle.SetBorderStyle(BorderStyle::SOLID);
1317     TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1318 }
1319 
SetTextAreaBorderWidth(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)1320 void SetTextAreaBorderWidth(ArkUINodeHandle node, const ArkUI_Float32* values,
1321     const ArkUI_Int32* units, ArkUI_Int32 length)
1322 {
1323     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1324     CHECK_NULL_VOID(frameNode);
1325     if (length != DEFAULT_LENGTH) {
1326         return;
1327     }
1328     std::optional<CalcDimension> topDimen;
1329     std::optional<CalcDimension> rightDimen;
1330     std::optional<CalcDimension> bottomDimen;
1331     std::optional<CalcDimension> leftDimen;
1332 
1333     if (values[NUM_0] != -1 &&
1334         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]) != OHOS::Ace::DimensionUnit::INVALID) {
1335         topDimen = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
1336     }
1337     if (values[NUM_1] != -1 &&
1338         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]) != OHOS::Ace::DimensionUnit::INVALID) {
1339         rightDimen = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
1340     }
1341     if (values[NUM_2] != -1 &&
1342         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]) != OHOS::Ace::DimensionUnit::INVALID) {
1343         bottomDimen = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
1344     }
1345     if (values[NUM_3] != -1 &&
1346         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]) != OHOS::Ace::DimensionUnit::INVALID) {
1347         leftDimen = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
1348     }
1349 
1350     NG::BorderWidthProperty borderWidth;
1351     borderWidth.leftDimen = leftDimen;
1352     borderWidth.rightDimen = rightDimen;
1353     borderWidth.topDimen = topDimen;
1354     borderWidth.bottomDimen = bottomDimen;
1355     borderWidth.multiValued = true;
1356     TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1357 }
1358 
ResetTextAreaBorderWidth(ArkUINodeHandle node)1359 void ResetTextAreaBorderWidth(ArkUINodeHandle node)
1360 {
1361     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1362     CHECK_NULL_VOID(frameNode);
1363     BorderWidthProperty borderWidth;
1364     borderWidth.SetBorderWidth(Dimension(0));
1365     TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1366 }
1367 
SetTextAreaBorderColor(ArkUINodeHandle node,uint32_t topColorInt,uint32_t rightColorInt,uint32_t bottomColorInt,uint32_t leftColorInt)1368 void SetTextAreaBorderColor(ArkUINodeHandle node, uint32_t topColorInt,
1369     uint32_t rightColorInt, uint32_t bottomColorInt, uint32_t leftColorInt)
1370 {
1371     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1372     CHECK_NULL_VOID(frameNode);
1373     NG::BorderColorProperty borderColors;
1374     borderColors.topColor = Color(topColorInt);
1375     borderColors.rightColor = Color(rightColorInt);
1376     borderColors.bottomColor = Color(bottomColorInt);
1377     borderColors.leftColor = Color(leftColorInt);
1378     borderColors.multiValued = true;
1379     TextFieldModelNG::SetBorderColor(frameNode, borderColors);
1380 }
1381 
ResetTextAreaBorderColor(ArkUINodeHandle node)1382 void ResetTextAreaBorderColor(ArkUINodeHandle node)
1383 {
1384     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1385     CHECK_NULL_VOID(frameNode);
1386     BorderColorProperty borderColor;
1387     borderColor.SetColor(Color::BLACK);
1388     TextFieldModelNG::SetBorderColor(frameNode, borderColor);
1389 }
1390 
SetTextAreaBorderStyle(ArkUINodeHandle node,const ArkUI_Int32 * styles,ArkUI_Int32 length)1391 void SetTextAreaBorderStyle(ArkUINodeHandle node, const ArkUI_Int32* styles, ArkUI_Int32 length)
1392 {
1393     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1394     CHECK_NULL_VOID(frameNode);
1395     if (length == NUM_1) {
1396         BorderStyleProperty borderStyle;
1397         borderStyle.SetBorderStyle(ConvertBorderStyle(styles[NUM_0]));
1398         TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1399         return;
1400     }
1401     if (length == NUM_4) {
1402         NG::BorderStyleProperty borderStyles;
1403         borderStyles.styleLeft = ConvertBorderStyle(styles[NUM_3]);
1404         borderStyles.styleRight = ConvertBorderStyle(styles[NUM_1]);
1405         borderStyles.styleTop = ConvertBorderStyle(styles[NUM_0]);
1406         borderStyles.styleBottom = ConvertBorderStyle(styles[NUM_2]);
1407         borderStyles.multiValued = true;
1408         TextFieldModelNG::SetBorderStyle(frameNode, borderStyles);
1409     }
1410 }
1411 
ResetTextAreaBorderStyle(ArkUINodeHandle node)1412 void ResetTextAreaBorderStyle(ArkUINodeHandle node)
1413 {
1414     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1415     CHECK_NULL_VOID(frameNode);
1416     BorderStyleProperty borderStyle;
1417     borderStyle.SetBorderStyle(BorderStyle::SOLID);
1418     TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1419 }
1420 
SetTextAreaBorderRadius(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)1421 void SetTextAreaBorderRadius(ArkUINodeHandle node, const ArkUI_Float32* values,
1422     const ArkUI_Int32* units, ArkUI_Int32 length)
1423 {
1424     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1425     CHECK_NULL_VOID(frameNode);
1426     if (length != DEFAULT_LENGTH) {
1427         return;
1428     }
1429     NG::BorderRadiusProperty borderRadius;
1430     borderRadius.radiusTopLeft = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
1431     borderRadius.radiusTopRight = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
1432     borderRadius.radiusBottomLeft = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
1433     borderRadius.radiusBottomRight = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
1434     borderRadius.multiValued = true;
1435     TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1436 }
1437 
ResetTextAreaBorderRadius(ArkUINodeHandle node)1438 void ResetTextAreaBorderRadius(ArkUINodeHandle node)
1439 {
1440     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1441     CHECK_NULL_VOID(frameNode);
1442     BorderRadiusProperty borderRadius;
1443     borderRadius.SetRadius(Dimension(0));
1444     TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1445 }
1446 
SetTextAreaMargin(ArkUINodeHandle node,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left)1447 void SetTextAreaMargin(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
1448     const struct ArkUISizeType* bottom, const struct ArkUISizeType* left)
1449 {
1450     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1451     CHECK_NULL_VOID(frameNode);
1452     CalcLength topDimen;
1453     CalcLength rightDimen;
1454     CalcLength bottomDimen;
1455     CalcLength leftDimen;
1456     if (top->string != nullptr) {
1457         topDimen = CalcLength(top->string);
1458     } else {
1459         topDimen = CalcLength(top->value, static_cast<DimensionUnit>(top->unit));
1460     }
1461     if (right->string != nullptr) {
1462         rightDimen = CalcLength(right->string);
1463     } else {
1464         rightDimen = CalcLength(right->value, static_cast<DimensionUnit>(right->unit));
1465     }
1466     if (bottom->string != nullptr) {
1467         bottomDimen = CalcLength(bottom->string);
1468     } else {
1469         bottomDimen = CalcLength(bottom->value, static_cast<DimensionUnit>(bottom->unit));
1470     }
1471     if (left->string != nullptr) {
1472         leftDimen = CalcLength(left->string);
1473     } else {
1474         leftDimen = CalcLength(left->value, static_cast<DimensionUnit>(left->unit));
1475     }
1476     NG::PaddingProperty paddings;
1477     paddings.top = std::optional<CalcLength>(topDimen);
1478     paddings.bottom = std::optional<CalcLength>(bottomDimen);
1479     paddings.left = std::optional<CalcLength>(leftDimen);
1480     paddings.right = std::optional<CalcLength>(rightDimen);
1481     TextFieldModelNG::SetMargin(frameNode, paddings);
1482 }
1483 
ResetTextAreaMargin(ArkUINodeHandle node)1484 void ResetTextAreaMargin(ArkUINodeHandle node)
1485 {
1486     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1487     CHECK_NULL_VOID(frameNode);
1488     NG::PaddingProperty paddings;
1489     paddings.top = NG::CalcLength(0.0);
1490     paddings.bottom = NG::CalcLength(0.0);
1491     paddings.left = NG::CalcLength(0.0);
1492     paddings.right = NG::CalcLength(0.0);
1493     TextFieldModelNG::SetMargin(frameNode, paddings);
1494 }
1495 
GetTextAreaMargin(ArkUINodeHandle node,ArkUI_Float32 (* values)[4],ArkUI_Int32 length,ArkUI_Int32 unit)1496 void GetTextAreaMargin(ArkUINodeHandle node, ArkUI_Float32 (*values)[4], ArkUI_Int32 length, ArkUI_Int32 unit)
1497 {
1498     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1499     CHECK_NULL_VOID(frameNode);
1500     auto margin = TextFieldModelNG::GetMargin(frameNode);
1501     (*values)[NUM_0] = margin.top->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1502     (*values)[NUM_1] = margin.right->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1503     (*values)[NUM_2] = margin.bottom->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1504     (*values)[NUM_3] = margin.left->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1505     length = NUM_4;
1506 }
1507 
SetTextAreaOnWillInsert(ArkUINodeHandle node,ArkUI_Int64 callback)1508 void SetTextAreaOnWillInsert(ArkUINodeHandle node, ArkUI_Int64 callback)
1509 {
1510     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1511     CHECK_NULL_VOID(frameNode);
1512     if (callback) {
1513         auto onWillInsert = reinterpret_cast<std::function<bool(const InsertValueInfo&)>*>(callback);
1514         TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, std::move(*onWillInsert));
1515     } else {
1516         TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, nullptr);
1517     }
1518 }
1519 
ResetTextAreaOnWillInsert(ArkUINodeHandle node)1520 void ResetTextAreaOnWillInsert(ArkUINodeHandle node)
1521 {
1522     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1523     CHECK_NULL_VOID(frameNode);
1524     TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, nullptr);
1525 }
1526 
SetTextAreaOnDidInsert(ArkUINodeHandle node,ArkUI_Int64 callback)1527 void SetTextAreaOnDidInsert(ArkUINodeHandle node, ArkUI_Int64 callback)
1528 {
1529     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1530     CHECK_NULL_VOID(frameNode);
1531     if (callback) {
1532         auto onDidInsert = reinterpret_cast<std::function<void(const InsertValueInfo&)>*>(callback);
1533         TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, std::move(*onDidInsert));
1534     } else {
1535         TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, nullptr);
1536     }
1537 }
1538 
ResetTextAreaOnDidInsert(ArkUINodeHandle node)1539 void ResetTextAreaOnDidInsert(ArkUINodeHandle node)
1540 {
1541     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1542     CHECK_NULL_VOID(frameNode);
1543     TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, nullptr);
1544 }
1545 
SetTextAreaOnWillDelete(ArkUINodeHandle node,ArkUI_Int64 callback)1546 void SetTextAreaOnWillDelete(ArkUINodeHandle node, ArkUI_Int64 callback)
1547 {
1548     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1549     CHECK_NULL_VOID(frameNode);
1550     if (callback) {
1551         auto onWillDelete = reinterpret_cast<std::function<bool(const DeleteValueInfo&)>*>(callback);
1552         TextFieldModelNG::SetOnWillDeleteEvent(frameNode, std::move(*onWillDelete));
1553     } else {
1554         TextFieldModelNG::SetOnWillDeleteEvent(frameNode, nullptr);
1555     }
1556 }
1557 
ResetTextAreaOnWillDelete(ArkUINodeHandle node)1558 void ResetTextAreaOnWillDelete(ArkUINodeHandle node)
1559 {
1560     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1561     CHECK_NULL_VOID(frameNode);
1562     TextFieldModelNG::SetOnWillDeleteEvent(frameNode, nullptr);
1563 }
1564 
SetTextAreaOnDidDelete(ArkUINodeHandle node,ArkUI_Int64 callback)1565 void SetTextAreaOnDidDelete(ArkUINodeHandle node, ArkUI_Int64 callback)
1566 {
1567     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1568     CHECK_NULL_VOID(frameNode);
1569     if (callback) {
1570         auto onDidDelete = reinterpret_cast<std::function<void(const DeleteValueInfo&)>*>(callback);
1571         TextFieldModelNG::SetOnDidDeleteEvent(frameNode, std::move(*onDidDelete));
1572     } else {
1573         TextFieldModelNG::SetOnDidDeleteEvent(frameNode, nullptr);
1574     }
1575 }
1576 
ResetTextAreaOnDidDelete(ArkUINodeHandle node)1577 void ResetTextAreaOnDidDelete(ArkUINodeHandle node)
1578 {
1579     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1580     CHECK_NULL_VOID(frameNode);
1581     TextFieldModelNG::SetOnDidDeleteEvent(frameNode, nullptr);
1582 }
1583 
SetTextAreaEnablePreviewText(ArkUINodeHandle node,ArkUI_Uint32 value)1584 void SetTextAreaEnablePreviewText(ArkUINodeHandle node, ArkUI_Uint32 value)
1585 {
1586     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1587     CHECK_NULL_VOID(frameNode);
1588     TextFieldModelNG::SetEnablePreviewText(frameNode, static_cast<bool>(value));
1589 }
1590 
ResetTextAreaEnablePreviewText(ArkUINodeHandle node)1591 void ResetTextAreaEnablePreviewText(ArkUINodeHandle node)
1592 {
1593     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1594     CHECK_NULL_VOID(frameNode);
1595     TextFieldModelNG::SetEnablePreviewText(frameNode, DEFAULT_ENABLE_PREVIEW_TEXT_VALUE);
1596 }
1597 
GetTextAreaPadding(ArkUINodeHandle node,ArkUI_Float32 (* values)[4],ArkUI_Int32 length,ArkUI_Int32 unit)1598 void GetTextAreaPadding(ArkUINodeHandle node, ArkUI_Float32 (*values)[4], ArkUI_Int32 length, ArkUI_Int32 unit)
1599 {
1600     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1601     CHECK_NULL_VOID(frameNode);
1602     auto padding = TextFieldModelNG::GetPadding(frameNode);
1603     (*values)[NUM_0] = padding.top->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1604     (*values)[NUM_1] = padding.right->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1605     (*values)[NUM_2] = padding.bottom->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1606     (*values)[NUM_3] = padding.left->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1607     length = NUM_4;
1608 }
1609 
SetTextAreaSelectionMenuOptions(ArkUINodeHandle node,void * onCreateMenuCallback,void * onMenuItemClickCallback)1610 void SetTextAreaSelectionMenuOptions(ArkUINodeHandle node, void* onCreateMenuCallback, void* onMenuItemClickCallback)
1611 {
1612     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1613     CHECK_NULL_VOID(frameNode);
1614     NG::OnCreateMenuCallback* onCreateMenu = nullptr;
1615     NG::OnMenuItemClickCallback* onMenuItemClick = nullptr;
1616     if (onCreateMenuCallback) {
1617         onCreateMenu = reinterpret_cast<NG::OnCreateMenuCallback*>(onCreateMenuCallback);
1618     }
1619     if (onMenuItemClickCallback) {
1620         onMenuItemClick = reinterpret_cast<NG::OnMenuItemClickCallback*>(onMenuItemClickCallback);
1621     }
1622     if (onCreateMenu != nullptr && onMenuItemClick != nullptr) {
1623         TextFieldModelNG::SetSelectionMenuOptions(frameNode, std::move(*onCreateMenu), std::move(*onMenuItemClick));
1624     } else if (onCreateMenu != nullptr && onMenuItemClick == nullptr) {
1625         TextFieldModelNG::SetSelectionMenuOptions(frameNode, std::move(*onCreateMenu), nullptr);
1626     } else if (onCreateMenu == nullptr && onMenuItemClick != nullptr) {
1627         TextFieldModelNG::SetSelectionMenuOptions(frameNode, nullptr, std::move(*onMenuItemClick));
1628     } else {
1629         TextFieldModelNG::SetSelectionMenuOptions(frameNode, nullptr, nullptr);
1630     }
1631 }
1632 
ResetTextAreaSelectionMenuOptions(ArkUINodeHandle node)1633 void ResetTextAreaSelectionMenuOptions(ArkUINodeHandle node)
1634 {
1635     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1636     CHECK_NULL_VOID(frameNode);
1637     NG::OnCreateMenuCallback onCreateMenuCallback;
1638     NG::OnMenuItemClickCallback onMenuItemClick;
1639     TextFieldModelNG::SetSelectionMenuOptions(frameNode, std::move(onCreateMenuCallback), std::move(onMenuItemClick));
1640 }
1641 
SetTextAreaWidth(ArkUINodeHandle node,ArkUI_CharPtr value)1642 void SetTextAreaWidth(ArkUINodeHandle node, ArkUI_CharPtr value)
1643 {
1644     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1645     CHECK_NULL_VOID(frameNode);
1646     auto widthValue = std::string(value);
1647     TextFieldModelNG::SetWidth(frameNode, widthValue);
1648 }
1649 
ResetTextAreaWidth(ArkUINodeHandle node)1650 void ResetTextAreaWidth(ArkUINodeHandle node)
1651 {
1652     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1653     CHECK_NULL_VOID(frameNode);
1654     TextFieldModelNG::ClearWidth(frameNode);
1655 }
1656 
SetTextAreaEnableHapticFeedback(ArkUINodeHandle node,ArkUI_Uint32 value)1657 void SetTextAreaEnableHapticFeedback(ArkUINodeHandle node, ArkUI_Uint32 value)
1658 {
1659     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1660     CHECK_NULL_VOID(frameNode);
1661     TextFieldModelNG::SetEnableHapticFeedback(frameNode, static_cast<bool>(value));
1662 }
1663 
ResetTextAreaEnableHapticFeedback(ArkUINodeHandle node)1664 void ResetTextAreaEnableHapticFeedback(ArkUINodeHandle node)
1665 {
1666     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1667     CHECK_NULL_VOID(frameNode);
1668     TextFieldModelNG::SetEnableHapticFeedback(frameNode, DEFAULT_ENABLE_HAPTIC_FEEDBACK_VALUE);
1669 }
1670 } // namespace
1671 
1672 namespace NodeModifier {
GetTextAreaModifier()1673 const ArkUITextAreaModifier* GetTextAreaModifier()
1674 {
1675     static const ArkUITextAreaModifier modifier = { SetTextAreaStyle, ResetTextAreaStyle,
1676         SetTextAreaSelectionMenuHidden, ResetTextAreaSelectionMenuHidden, SetTextAreaMaxLines, ResetTextAreaMaxLines,
1677         SetTextAreaCopyOption, ResetTextAreaCopyOption, SetTextAreaPlaceholderColor, ResetTextAreaPlaceholderColor,
1678         SetTextAreaTextAlign, ResetTextAreaTextAlign, SetTextAreaPlaceholderFont, ResetTextAreaPlaceholderFont,
1679         SetTextAreaBarState, ResetTextAreaBarState, SetTextAreaEnableKeyboardOnFocus,
1680         ResetTextAreaEnableKeyboardOnFocus, SetTextAreaFontFamily, ResetTextAreaFontFamily, SetTextAreaShowCounter,
1681         ResetTextAreaShowCounter, SetTextAreaCaretColor, ResetTextAreaCaretColor, SetTextAreaMaxLength,
1682         ResetTextAreaMaxLength, SetTextAreaFontColor, ResetTextAreaFontColor, SetTextAreaFontStyle,
1683         ResetTextAreaFontStyle, SetTextAreaFontWeight, ResetTextAreaFontWeight, SetTextAreaFontSize,
1684         ResetTextAreaFontSize, SetCounterType, SetTextAreaPlaceholderString, SetTextAreaTextString,
1685         StopTextAreaTextEditing, SetTextAreaFontWeightStr, SetTextAreaPlaceholderFontEnum, GetTextAreaPlaceholder,
1686         GetTextAreaText, GetTextAreaCaretColor, GetTextAreaMaxLength, GetTextAreaPlaceholderColor,
1687         GetTextAreaPlaceholderFont, GetTextAreaEditing, SetTextAreaBackgroundColor, ResetTextAreaBackgroundColor,
1688         SetTextAreaType, ResetTextAreaType, GetTextAreaType, GetTextAreaTextAlign, SetTextAreaShowCounterOptions,
1689         ResetTextAreaShowCounterOptions, GetTextAreaShowCounterOptions, SetTextAreaDecoration, ResetTextAreaDecoration,
1690         SetTextAreaLetterSpacing, ResetTextAreaLetterSpacing, SetTextAreaLineHeight, ResetTextAreaLineHeight,
1691         SetTextAreaFontFeature, ResetTextAreaFontFeature, SetTextAreaWordBreak, ResetTextAreaWordBreak,
1692         SetTextAreaAdaptMinFontSize, ResetTextAreaAdaptMinFontSize, SetTextAreaAdaptMaxFontSize,
1693         ResetTextAreaAdaptMaxFontSize, SetTextAreaHeightAdaptivePolicy, ResetTextAreaHeightAdaptivePolicy,
1694         SetTextAreaSelectedBackgroundColor, ResetTextAreaSelectedBackgroundColor, SetTextAreaCaretStyle,
1695         ResetTextAreaCaretStyle, SetTextAreaTextOverflow, ResetTextAreaTextOverflow, SetTextAreaTextIndent,
1696         ResetTextAreaTextIndent, SetTextAreaLineSpacing, ResetTextAreaLineSpacing, GetTextAreaSelectionMenuHidden,
1697         GetTextAreaAdaptMinFontSize, GetTextAreaAdaptMaxFontSize, GetTextAreaLineHeight, GetgetTextAreaMaxLines,
1698         SetTextAreaPadding, ResetTextAreaPadding, GetTextAreaFontFeature, SetTextAreaOnChange, ResetTextAreaOnChange,
1699         SetTextAreaEnterKeyType, ResetTextAreaEnterKeyType, SetTextAreaInputFilter, ResetTextAreaInputFilter,
1700         SetTextAreaOnTextSelectionChange, ResetTextAreaOnTextSelectionChange, SetTextAreaOnContentScroll,
1701         ResetTextAreaOnContentScroll, SetTextAreaOnEditChange, ResetTextAreaOnEditChange, SetTextAreaOnCopy,
1702         ResetTextAreaOnCopy, SetTextAreaOnCut, ResetTextAreaOnCut, SetTextAreaOnPaste, ResetTextAreaOnPaste,
1703         SetTextAreaLineBreakStrategy, ResetTextAreaLineBreakStrategy, SetTextAreaOnSubmitWithEvent,
1704         ResetTextAreaOnSubmitWithEvent, SetTextAreaContentType, ResetTextAreaContentType, SetTextAreaEnableAutoFill,
1705         ResetTextAreaEnableAutoFill, SetTextAreaBorder, ResetTextAreaBorder, SetTextAreaBorderWidth,
1706         ResetTextAreaBorderWidth, SetTextAreaBorderColor, ResetTextAreaBorderColor, SetTextAreaBorderStyle,
1707         ResetTextAreaBorderStyle, SetTextAreaBorderRadius, ResetTextAreaBorderRadius, SetTextAreaMargin,
1708         ResetTextAreaMargin, GetTextAreaMargin, SetTextAreaCaret, SetTextAreaOnWillInsert, ResetTextAreaOnWillInsert,
1709         SetTextAreaOnDidInsert, ResetTextAreaOnDidInsert, SetTextAreaOnWillDelete, ResetTextAreaOnWillDelete,
1710         SetTextAreaOnDidDelete, ResetTextAreaOnDidDelete, SetTextAreaEnablePreviewText, ResetTextAreaEnablePreviewText,
1711         GetTextAreaPadding, SetTextAreaSelectionMenuOptions, ResetTextAreaSelectionMenuOptions, SetTextAreaWidth,
1712         ResetTextAreaWidth, SetTextAreaEnableHapticFeedback, ResetTextAreaEnableHapticFeedback };
1713     return &modifier;
1714 }
1715 
GetCJUITextAreaModifier()1716 const CJUITextAreaModifier* GetCJUITextAreaModifier()
1717 {
1718     static const CJUITextAreaModifier modifier = { SetTextAreaStyle, ResetTextAreaStyle,
1719         SetTextAreaSelectionMenuHidden, ResetTextAreaSelectionMenuHidden, SetTextAreaMaxLines, ResetTextAreaMaxLines,
1720         SetTextAreaCopyOption, ResetTextAreaCopyOption, SetTextAreaPlaceholderColor, ResetTextAreaPlaceholderColor,
1721         SetTextAreaTextAlign, ResetTextAreaTextAlign, SetTextAreaPlaceholderFont, ResetTextAreaPlaceholderFont,
1722         SetTextAreaBarState, ResetTextAreaBarState, SetTextAreaEnableKeyboardOnFocus,
1723         ResetTextAreaEnableKeyboardOnFocus, SetTextAreaFontFamily, ResetTextAreaFontFamily, SetTextAreaShowCounter,
1724         ResetTextAreaShowCounter, SetTextAreaCaretColor, ResetTextAreaCaretColor, SetTextAreaMaxLength,
1725         ResetTextAreaMaxLength, SetTextAreaFontColor, ResetTextAreaFontColor, SetTextAreaFontStyle,
1726         ResetTextAreaFontStyle, SetTextAreaFontWeight, ResetTextAreaFontWeight, SetTextAreaFontSize,
1727         ResetTextAreaFontSize, SetCounterType, SetTextAreaPlaceholderString, SetTextAreaTextString,
1728         StopTextAreaTextEditing, SetTextAreaFontWeightStr, SetTextAreaPlaceholderFontEnum, GetTextAreaPlaceholder,
1729         GetTextAreaText, GetTextAreaCaretColor, GetTextAreaMaxLength, GetTextAreaPlaceholderColor,
1730         GetTextAreaPlaceholderFont, GetTextAreaEditing, SetTextAreaBackgroundColor, ResetTextAreaBackgroundColor,
1731         SetTextAreaType, ResetTextAreaType, GetTextAreaType, GetTextAreaTextAlign, SetTextAreaShowCounterOptions,
1732         ResetTextAreaShowCounterOptions, GetTextAreaShowCounterOptions, SetTextAreaDecoration, ResetTextAreaDecoration,
1733         SetTextAreaLetterSpacing, ResetTextAreaLetterSpacing, SetTextAreaLineHeight, ResetTextAreaLineHeight,
1734         SetTextAreaFontFeature, ResetTextAreaFontFeature, SetTextAreaWordBreak, ResetTextAreaWordBreak,
1735         SetTextAreaAdaptMinFontSize, ResetTextAreaAdaptMinFontSize, SetTextAreaAdaptMaxFontSize,
1736         ResetTextAreaAdaptMaxFontSize, SetTextAreaHeightAdaptivePolicy, ResetTextAreaHeightAdaptivePolicy,
1737         SetTextAreaSelectedBackgroundColor, ResetTextAreaSelectedBackgroundColor, SetTextAreaCaretStyle,
1738         ResetTextAreaCaretStyle, SetTextAreaTextOverflow, ResetTextAreaTextOverflow, SetTextAreaTextIndent,
1739         ResetTextAreaTextIndent, SetTextAreaLineSpacing, ResetTextAreaLineSpacing, GetTextAreaSelectionMenuHidden,
1740         GetTextAreaAdaptMinFontSize, GetTextAreaAdaptMaxFontSize, GetTextAreaLineHeight, GetgetTextAreaMaxLines,
1741         SetTextAreaPadding, ResetTextAreaPadding, GetTextAreaFontFeature,
1742         SetTextAreaOnChange, ResetTextAreaOnChange,
1743         SetTextAreaEnterKeyType, ResetTextAreaEnterKeyType, SetTextAreaInputFilter, ResetTextAreaInputFilter,
1744         SetTextAreaOnTextSelectionChange, ResetTextAreaOnTextSelectionChange,
1745         SetTextAreaOnContentScroll, ResetTextAreaOnContentScroll,
1746         SetTextAreaOnEditChange, ResetTextAreaOnEditChange, SetTextAreaOnCopy, ResetTextAreaOnCopy,
1747         SetTextAreaOnCut, ResetTextAreaOnCut, SetTextAreaOnPaste, ResetTextAreaOnPaste,
1748         SetTextAreaLineBreakStrategy, ResetTextAreaLineBreakStrategy,
1749         SetTextAreaOnSubmitWithEvent, ResetTextAreaOnSubmitWithEvent,
1750         SetTextAreaContentType, ResetTextAreaContentType, SetTextAreaEnableAutoFill, ResetTextAreaEnableAutoFill,
1751         SetTextAreaBorder, ResetTextAreaBorder, SetTextAreaBorderWidth, ResetTextAreaBorderWidth,
1752         SetTextAreaBorderColor, ResetTextAreaBorderColor, SetTextAreaBorderStyle, ResetTextAreaBorderStyle,
1753         SetTextAreaBorderRadius, ResetTextAreaBorderRadius, SetTextAreaMargin, ResetTextAreaMargin,
1754         GetTextAreaMargin, SetTextAreaCaret,
1755         SetTextAreaOnWillInsert, ResetTextAreaOnWillInsert,
1756         SetTextAreaOnDidInsert, ResetTextAreaOnDidInsert,
1757         SetTextAreaOnWillDelete, ResetTextAreaOnWillDelete,
1758         SetTextAreaOnDidDelete, ResetTextAreaOnDidDelete,
1759         SetTextAreaEnablePreviewText, ResetTextAreaEnablePreviewText, GetTextAreaPadding };
1760     return &modifier;
1761 }
1762 
SetOnTextAreaChange(ArkUINodeHandle node,void * extraParam)1763 void SetOnTextAreaChange(ArkUINodeHandle node, void* extraParam)
1764 {
1765     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1766     CHECK_NULL_VOID(frameNode);
1767     auto onChange = [node, extraParam](const std::string& str, PreviewText&) {
1768         ArkUINodeEvent event;
1769         event.kind = TEXT_INPUT;
1770         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1771         event.textInputEvent.subKind = ON_TEXTAREA_CHANGE;
1772         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(str.c_str());
1773         SendArkUIAsyncEvent(&event);
1774     };
1775     TextFieldModelNG::SetOnChange(frameNode, std::move(onChange));
1776 }
1777 
SetOnTextAreaPaste(ArkUINodeHandle node,void * extraParam)1778 void SetOnTextAreaPaste(ArkUINodeHandle node, void* extraParam)
1779 {
1780     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1781     CHECK_NULL_VOID(frameNode);
1782     auto onPaste = [node, extraParam](const std::string& str, NG::TextCommonEvent& commonEvent) {
1783         ArkUINodeEvent event;
1784         event.kind = TEXT_INPUT;
1785         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1786         event.textInputEvent.subKind = ON_TEXTAREA_PASTE;
1787         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(str.c_str());
1788         SendArkUIAsyncEvent(&event);
1789     };
1790     TextFieldModelNG::SetOnPasteWithEvent(frameNode, std::move(onPaste));
1791 }
1792 
SetOnTextAreaSelectionChange(ArkUINodeHandle node,void * extraParam)1793 void SetOnTextAreaSelectionChange(ArkUINodeHandle node, void* extraParam)
1794 {
1795     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1796     CHECK_NULL_VOID(frameNode);
1797     auto onSelectionChange = [node, extraParam](int start, int end) {
1798         ArkUINodeEvent event;
1799         event.kind = COMPONENT_ASYNC_EVENT;
1800         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1801         event.componentAsyncEvent.subKind = ON_TEXTAREA_TEXT_SELECTION_CHANGE;
1802         event.componentAsyncEvent.data[0].i32 = static_cast<int>(start);
1803         event.componentAsyncEvent.data[1].i32 = static_cast<int>(end);
1804         SendArkUIAsyncEvent(&event);
1805     };
1806     TextFieldModelNG::SetOnTextSelectionChange(frameNode, std::move(onSelectionChange));
1807 }
1808 
SetOnTextAreaEditChange(ArkUINodeHandle node,void * extraParam)1809 void SetOnTextAreaEditChange(ArkUINodeHandle node, void* extraParam)
1810 {
1811     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1812     CHECK_NULL_VOID(frameNode);
1813     auto onChange = [node, extraParam](bool isEditing) {
1814         ArkUINodeEvent event;
1815         event.kind = COMPONENT_ASYNC_EVENT;
1816         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1817         event.componentAsyncEvent.subKind = ON_TEXTAREA_EDIT_CHANGE;
1818         event.componentAsyncEvent.data[0].i32 = static_cast<int32_t>(isEditing);
1819         SendArkUIAsyncEvent(&event);
1820     };
1821     TextFieldModelNG::SetOnEditChanged(frameNode, std::move(onChange));
1822 }
1823 
SetOnTextAreaContentSizeChange(ArkUINodeHandle node,void * extraParam)1824 void SetOnTextAreaContentSizeChange(ArkUINodeHandle node, void* extraParam)
1825 {
1826     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1827     CHECK_NULL_VOID(frameNode);
1828     auto onChange = [node, extraParam](float width, float height) {
1829         ArkUINodeEvent event;
1830         event.kind = COMPONENT_ASYNC_EVENT;
1831         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1832         event.componentAsyncEvent.subKind = ON_TEXTAREA_CONTENT_SIZE_CHANGE;
1833         bool usePx = NodeModel::UsePXUnit(reinterpret_cast<ArkUI_Node*>(extraParam));
1834         double density = usePx ? 1 : PipelineBase::GetCurrentDensity();
1835         //0 width
1836         event.componentAsyncEvent.data[0].f32 = NearEqual(density, 0.0) ? 0.0f : width / density;
1837         //1 height
1838         event.componentAsyncEvent.data[1].f32 = NearEqual(density, 0.0) ? 0.0f : height / density;
1839         SendArkUIAsyncEvent(&event);
1840     };
1841     TextFieldModelNG::SetOnContentSizeChange(frameNode, std::move(onChange));
1842 }
1843 
SetOnTextAreaInputFilterError(ArkUINodeHandle node,void * extraParam)1844 void SetOnTextAreaInputFilterError(ArkUINodeHandle node, void* extraParam)
1845 {
1846     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1847     CHECK_NULL_VOID(frameNode);
1848     auto onInputFilterError = [node, extraParam](const std::string& str) {
1849         ArkUINodeEvent event;
1850         event.kind = TEXT_INPUT;
1851         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1852         event.textInputEvent.subKind = ON_TEXT_AREA_INPUT_FILTER_ERROR;
1853         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(str.c_str());
1854         SendArkUIAsyncEvent(&event);
1855     };
1856     TextFieldModelNG::SetInputFilterError(frameNode, std::move(onInputFilterError));
1857 }
1858 
SetTextAreaOnTextContentScroll(ArkUINodeHandle node,void * extraParam)1859 void SetTextAreaOnTextContentScroll(ArkUINodeHandle node, void* extraParam)
1860 {
1861     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1862     CHECK_NULL_VOID(frameNode);
1863     auto onScroll = [node, extraParam](float totalOffsetX, float totalOffsetY) {
1864         ArkUINodeEvent event;
1865         event.kind = COMPONENT_ASYNC_EVENT;
1866         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1867         event.componentAsyncEvent.subKind = ON_TEXT_AREA_CONTENT_SCROLL;
1868         event.componentAsyncEvent.data[0].f32 = totalOffsetX;
1869         event.componentAsyncEvent.data[1].f32 = totalOffsetY;
1870         SendArkUIAsyncEvent(&event);
1871     };
1872     TextFieldModelNG::SetOnContentScroll(frameNode, std::move(onScroll));
1873 }
1874 
SetTextAreaOnSubmit(ArkUINodeHandle node,void * extraParam)1875 void SetTextAreaOnSubmit(ArkUINodeHandle node, void* extraParam)
1876 {
1877     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1878     CHECK_NULL_VOID(frameNode);
1879     auto onEvent = [node, extraParam](int32_t value, NG::TextFieldCommonEvent& commonEvent) {
1880         ArkUINodeEvent event;
1881         event.kind = COMPONENT_ASYNC_EVENT;
1882         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1883         event.componentAsyncEvent.subKind = ON_TEXTAREA_ON_SUBMIT;
1884         event.componentAsyncEvent.data[0].i32 = value;
1885         SendArkUIAsyncEvent(&event);
1886     };
1887     TextFieldModelNG::SetOnSubmit(frameNode, std::move(onEvent));
1888 }
1889 
ResetOnTextAreaChange(ArkUINodeHandle node)1890 void ResetOnTextAreaChange(ArkUINodeHandle node)
1891 {
1892     GetTextAreaModifier()->resetTextAreaOnChange(node);
1893 }
ResetOnTextAreaPaste(ArkUINodeHandle node)1894 void ResetOnTextAreaPaste(ArkUINodeHandle node)
1895 {
1896     GetTextAreaModifier()->resetTextAreaOnPaste(node);
1897 }
ResetOnTextAreaSelectionChange(ArkUINodeHandle node)1898 void ResetOnTextAreaSelectionChange(ArkUINodeHandle node)
1899 {
1900     GetTextAreaModifier()->resetTextAreaOnTextSelectionChange(node);
1901 }
ResetOnTextAreaEditChange(ArkUINodeHandle node)1902 void ResetOnTextAreaEditChange(ArkUINodeHandle node)
1903 {
1904     GetTextAreaModifier()->resetTextAreaOnEditChange(node);
1905 }
ResetOnTextAreaContentSizeChange(ArkUINodeHandle node)1906 void ResetOnTextAreaContentSizeChange(ArkUINodeHandle node)
1907 {
1908     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1909     CHECK_NULL_VOID(frameNode);
1910     TextFieldModelNG::SetOnContentSizeChange(frameNode, nullptr);
1911 }
ResetOnTextAreaInputFilterError(ArkUINodeHandle node)1912 void ResetOnTextAreaInputFilterError(ArkUINodeHandle node)
1913 {
1914     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1915     CHECK_NULL_VOID(frameNode);
1916     TextFieldModelNG::SetInputFilterError(frameNode, nullptr);
1917 }
ResetTextAreaOnTextContentScroll(ArkUINodeHandle node)1918 void ResetTextAreaOnTextContentScroll(ArkUINodeHandle node)
1919 {
1920     GetTextAreaModifier()->resetTextAreaOnContentScroll(node);
1921 }
ResetTextAreaOnSubmit(ArkUINodeHandle node)1922 void ResetTextAreaOnSubmit(ArkUINodeHandle node)
1923 {
1924     GetTextAreaModifier()->resetTextAreaOnSubmitWithEvent(node);
1925 }
1926 
SetTextAreaOnWillInsertValue(ArkUINodeHandle node,void * extraParam)1927 void SetTextAreaOnWillInsertValue(ArkUINodeHandle node, void* extraParam)
1928 {
1929     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1930     CHECK_NULL_VOID(frameNode);
1931     std::function<bool(const InsertValueInfo&)> onWillInsert = [node, extraParam](
1932         const InsertValueInfo& Info) -> bool {
1933         ArkUINodeEvent event;
1934         event.kind = MIXED_EVENT;
1935         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1936         event.mixedEvent.subKind = ON_TEXT_AREA_WILL_INSERT;
1937         event.mixedEvent.numberData[0].f32 = Info.insertOffset;
1938         event.mixedEvent.numberDataLength = 1;
1939         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.insertValue.c_str());
1940         event.mixedEvent.stringPtrDataLength = 1;
1941         SendArkUIAsyncEvent(&event);
1942         return event.mixedEvent.numberReturnData[0].i32;
1943     };
1944     TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, std::move(onWillInsert));
1945 }
1946 
SetTextAreaOnDidInsertValue(ArkUINodeHandle node,void * extraParam)1947 void SetTextAreaOnDidInsertValue(ArkUINodeHandle node, void* extraParam)
1948 {
1949     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1950     CHECK_NULL_VOID(frameNode);
1951     auto onDidInsert = [node, extraParam](const InsertValueInfo& Info) {
1952         ArkUINodeEvent event;
1953         event.kind = MIXED_EVENT;
1954         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1955         event.mixedEvent.subKind = ON_TEXT_AREA_DID_INSERT;
1956         event.mixedEvent.numberData[0].f32 = Info.insertOffset;
1957         event.mixedEvent.numberDataLength = 1;
1958         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.insertValue.c_str());
1959         event.mixedEvent.stringPtrDataLength = 1;
1960         SendArkUIAsyncEvent(&event);
1961     };
1962     TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, std::move(onDidInsert));
1963 }
1964 
SetTextAreaOnWillDeleteValue(ArkUINodeHandle node,void * extraParam)1965 void SetTextAreaOnWillDeleteValue(ArkUINodeHandle node, void* extraParam)
1966 {
1967     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1968     CHECK_NULL_VOID(frameNode);
1969     auto onWillDelete = [node, extraParam](const DeleteValueInfo& Info) -> bool {
1970         ArkUINodeEvent event;
1971         event.kind = MIXED_EVENT;
1972         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1973         event.mixedEvent.subKind = ON_TEXT_AREA_WILL_DELETE;
1974         event.mixedEvent.numberData[0].f32 = Info.deleteOffset;
1975         event.mixedEvent.numberData[1].i32 = static_cast<int32_t>(Info.direction);
1976         event.mixedEvent.numberDataLength = 2;
1977         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.deleteValue.c_str());
1978         event.mixedEvent.stringPtrDataLength = 1;
1979         SendArkUIAsyncEvent(&event);
1980         return event.mixedEvent.numberReturnData[0].i32;
1981     };
1982     TextFieldModelNG::SetOnWillDeleteEvent(frameNode, std::move(onWillDelete));
1983 }
1984 
SetTextAreaOnDidDeleteValue(ArkUINodeHandle node,void * extraParam)1985 void SetTextAreaOnDidDeleteValue(ArkUINodeHandle node, void* extraParam)
1986 {
1987     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1988     CHECK_NULL_VOID(frameNode);
1989     auto onDidDelete = [node, extraParam](const DeleteValueInfo& Info) {
1990         ArkUINodeEvent event;
1991         event.kind = MIXED_EVENT;
1992         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1993         event.mixedEvent.subKind = ON_TEXT_AREA_DID_DELETE;
1994         event.mixedEvent.numberData[0].f32 = Info.deleteOffset;
1995         event.mixedEvent.numberData[1].i32 = static_cast<int32_t>(Info.direction);
1996         event.mixedEvent.numberDataLength = 2;
1997         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.deleteValue.c_str());
1998         event.mixedEvent.stringPtrDataLength = 1;
1999         SendArkUIAsyncEvent(&event);
2000     };
2001     TextFieldModelNG::SetOnDidDeleteEvent(frameNode, std::move(onDidDelete));
2002 }
2003 } // namespace NodeModifier
2004 } // namespace OHOS::Ace::NG
2005