• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "core/interfaces/native/node/node_text_area_modifier.h"
16 #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 
GetTextAreaLetterSpacing(ArkUINodeHandle node)659 ArkUI_Float32 GetTextAreaLetterSpacing(ArkUINodeHandle node)
660 {
661     auto* frameNode = reinterpret_cast<FrameNode*>(node);
662     CHECK_NULL_RETURN(frameNode, 0.0f);
663     return TextFieldModelNG::GetLetterSpacing(frameNode).ConvertToFp();
664 }
665 
SetTextAreaLineHeight(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)666 void SetTextAreaLineHeight(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
667 {
668     auto* frameNode = reinterpret_cast<FrameNode*>(node);
669     CHECK_NULL_VOID(frameNode);
670     TextFieldModelNG::SetLineHeight(frameNode, CalcDimension(value, (DimensionUnit)unit));
671 }
672 
ResetTextAreaLineHeight(ArkUINodeHandle node)673 void ResetTextAreaLineHeight(ArkUINodeHandle node)
674 {
675     auto* frameNode = reinterpret_cast<FrameNode*>(node);
676     CHECK_NULL_VOID(frameNode);
677     CalcDimension value;
678     value.Reset();
679     TextFieldModelNG::SetLineHeight(frameNode, value);
680 }
681 
SetTextAreaKeyboardAppearance(ArkUINodeHandle node,ArkUI_Uint32 keyboardAppearance)682 void SetTextAreaKeyboardAppearance(ArkUINodeHandle node, ArkUI_Uint32 keyboardAppearance)
683 {
684     auto* frameNode = reinterpret_cast<FrameNode*>(node);
685     CHECK_NULL_VOID(frameNode);
686     auto value = static_cast<KeyboardAppearance>(keyboardAppearance);
687     TextFieldModelNG::SetKeyboardAppearance(frameNode, value);
688 }
689 
ResetTextAreaKeyboardAppearance(ArkUINodeHandle node)690 void ResetTextAreaKeyboardAppearance(ArkUINodeHandle node)
691 {
692     auto* frameNode = reinterpret_cast<FrameNode*>(node);
693     CHECK_NULL_VOID(frameNode);
694     auto value = KeyboardAppearance::NONE_IMMERSIVE;
695     TextFieldModelNG::SetKeyboardAppearance(frameNode, value);
696 }
697 
SetTextAreaWordBreak(ArkUINodeHandle node,ArkUI_Uint32 wordBreak)698 void SetTextAreaWordBreak(ArkUINodeHandle node, ArkUI_Uint32 wordBreak)
699 {
700     auto* frameNode = reinterpret_cast<FrameNode*>(node);
701     CHECK_NULL_VOID(frameNode);
702     if (wordBreak < 0 || wordBreak >= WORD_BREAK_TYPES.size()) {
703         wordBreak = 2; // 2 is the default value of WordBreak::BREAK_WORD
704     }
705     TextFieldModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[wordBreak]);
706 }
707 
ResetTextAreaWordBreak(ArkUINodeHandle node)708 void ResetTextAreaWordBreak(ArkUINodeHandle node)
709 {
710     auto* frameNode = reinterpret_cast<FrameNode*>(node);
711     CHECK_NULL_VOID(frameNode);
712     TextFieldModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[2]); // 2 is the default value of WordBreak::BREAK_WORD
713 }
714 
SetTextAreaAdaptMinFontSize(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)715 void SetTextAreaAdaptMinFontSize(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
716 {
717     auto *frameNode = reinterpret_cast<FrameNode *>(node);
718     CHECK_NULL_VOID(frameNode);
719     TextFieldModelNG::SetAdaptMinFontSize(frameNode, CalcDimension(value, (DimensionUnit)unit));
720 }
721 
ResetTextAreaAdaptMinFontSize(ArkUINodeHandle node)722 void ResetTextAreaAdaptMinFontSize(ArkUINodeHandle node)
723 {
724     auto *frameNode = reinterpret_cast<FrameNode *>(node);
725     CHECK_NULL_VOID(frameNode);
726     auto pipelineContext = frameNode->GetContext();
727     CHECK_NULL_VOID(pipelineContext);
728     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
729     CHECK_NULL_VOID(theme);
730     CalcDimension minFontSize = theme->GetTextStyle().GetAdaptMinFontSize();
731     TextFieldModelNG::SetAdaptMinFontSize(frameNode, minFontSize);
732 }
733 
SetTextAreaAdaptMaxFontSize(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)734 void SetTextAreaAdaptMaxFontSize(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
735 {
736     auto *frameNode = reinterpret_cast<FrameNode *>(node);
737     CHECK_NULL_VOID(frameNode);
738     TextFieldModelNG::SetAdaptMaxFontSize(frameNode, CalcDimension(value, (DimensionUnit)unit));
739 }
740 
ResetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)741 void ResetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)
742 {
743     auto *frameNode = reinterpret_cast<FrameNode *>(node);
744     CHECK_NULL_VOID(frameNode);
745     auto pipelineContext = frameNode->GetContext();
746     CHECK_NULL_VOID(pipelineContext);
747     auto theme = pipelineContext->GetTheme<TextFieldTheme>();
748     CHECK_NULL_VOID(theme);
749     CalcDimension maxFontSize = theme->GetTextStyle().GetAdaptMaxFontSize();
750     TextFieldModelNG::SetAdaptMaxFontSize(frameNode, maxFontSize);
751 }
752 
SetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node,ArkUI_Int32 value)753 void SetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node, ArkUI_Int32 value)
754 {
755     auto *frameNode = reinterpret_cast<FrameNode *>(node);
756     CHECK_NULL_VOID(frameNode);
757     TextFieldModelNG::SetHeightAdaptivePolicy(frameNode, static_cast<Ace::TextHeightAdaptivePolicy>(value));
758 }
759 
ResetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node)760 void ResetTextAreaHeightAdaptivePolicy(ArkUINodeHandle node)
761 {
762     auto *frameNode = reinterpret_cast<FrameNode *>(node);
763     CHECK_NULL_VOID(frameNode);
764     TextFieldModelNG::SetHeightAdaptivePolicy(frameNode, TextHeightAdaptivePolicy::MAX_LINES_FIRST);
765 }
766 
GetTextAreaSelectionMenuHidden(ArkUINodeHandle node)767 ArkUI_Bool GetTextAreaSelectionMenuHidden(ArkUINodeHandle node)
768 {
769     auto* frameNode = reinterpret_cast<FrameNode*>(node);
770     CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
771     return TextFieldModelNG::GetSelectionMenuHidden(frameNode);
772 }
773 
SetTextAreaSelectedBackgroundColor(ArkUINodeHandle node,ArkUI_Uint32 color)774 void SetTextAreaSelectedBackgroundColor(ArkUINodeHandle node, ArkUI_Uint32 color)
775 {
776     auto* frameNode = reinterpret_cast<FrameNode*>(node);
777     CHECK_NULL_VOID(frameNode);
778     Color selectedColor = Color(color);
779     if (selectedColor.GetAlpha() == DEFAULT_ALPHA) {
780         // Default setting of 20% opacity
781         selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
782     }
783     TextFieldModelNG::SetSelectedBackgroundColor(frameNode, Color(color));
784 }
785 
ResetTextAreaSelectedBackgroundColor(ArkUINodeHandle node)786 void ResetTextAreaSelectedBackgroundColor(ArkUINodeHandle node)
787 {
788     auto* frameNode = reinterpret_cast<FrameNode*>(node);
789     CHECK_NULL_VOID(frameNode);
790     Color selectedColor;
791     auto pipeline = frameNode->GetContext();
792     CHECK_NULL_VOID(pipeline);
793     auto theme = pipeline->GetTheme<TextFieldTheme>();
794     CHECK_NULL_VOID(theme);
795     selectedColor = theme->GetSelectedColor();
796     if (selectedColor.GetAlpha() == DEFAULT_ALPHA) {
797         // Default setting of 20% opacity
798         selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
799     }
800     TextFieldModelNG::SetSelectedBackgroundColor(frameNode, selectedColor);
801 }
802 
SetTextAreaCaret(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)803 void SetTextAreaCaret(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
804 {
805     auto* frameNode = reinterpret_cast<FrameNode*>(node);
806     CHECK_NULL_VOID(frameNode);
807     CaretStyle caretStyle;
808     caretStyle.caretWidth = CalcDimension(value, (DimensionUnit)unit);
809     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
810 }
811 
SetTextAreaCaretStyle(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit,ArkUI_Uint32 caretColor)812 void SetTextAreaCaretStyle(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit, ArkUI_Uint32 caretColor)
813 {
814     auto* frameNode = reinterpret_cast<FrameNode*>(node);
815     CHECK_NULL_VOID(frameNode);
816     CaretStyle caretStyle;
817     caretStyle.caretWidth = CalcDimension(value, (DimensionUnit)unit);
818     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
819     TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
820 }
821 
ResetTextAreaCaretStyle(ArkUINodeHandle node)822 void ResetTextAreaCaretStyle(ArkUINodeHandle node)
823 {
824     auto* frameNode = reinterpret_cast<FrameNode*>(node);
825     auto pipeline = frameNode->GetContext();
826     CHECK_NULL_VOID(pipeline);
827     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
828     CHECK_NULL_VOID(theme);
829     CaretStyle caretStyle;
830     caretStyle.caretWidth = theme->GetCursorWidth();
831     uint32_t caretColor = theme->GetCursorColor().GetValue();
832     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
833     TextFieldModelNG::SetCaretColor(frameNode, Color(caretColor));
834 }
835 
SetTextAreaTextOverflow(ArkUINodeHandle node,ArkUI_Int32 value)836 void SetTextAreaTextOverflow(ArkUINodeHandle node, ArkUI_Int32 value)
837 {
838     auto* frameNode = reinterpret_cast<FrameNode*>(node);
839     CHECK_NULL_VOID(frameNode);
840     TextOverflow valueTextOverflow = static_cast<TextOverflow>(value);
841     TextFieldModelNG::SetTextOverflow(frameNode, valueTextOverflow);
842 }
843 
ResetTextAreaTextOverflow(ArkUINodeHandle node)844 void ResetTextAreaTextOverflow(ArkUINodeHandle node)
845 {
846     auto* frameNode = reinterpret_cast<FrameNode*>(node);
847     CHECK_NULL_VOID(frameNode);
848     TextFieldModelNG::SetTextOverflow(frameNode, TextOverflow::DEFAULT);
849 }
850 
SetTextAreaTextIndent(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)851 void SetTextAreaTextIndent(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
852 {
853     auto* frameNode = reinterpret_cast<FrameNode*>(node);
854     CHECK_NULL_VOID(frameNode);
855     TextFieldModelNG::SetTextIndent(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
856 }
857 
ResetTextAreaTextIndent(ArkUINodeHandle node)858 void ResetTextAreaTextIndent(ArkUINodeHandle node)
859 {
860     auto* frameNode = reinterpret_cast<FrameNode*>(node);
861     CHECK_NULL_VOID(frameNode);
862     TextFieldModelNG::SetTextIndent(frameNode, CalcDimension(0, DimensionUnit::VP));
863 }
864 
GetTextAreaFontFeature(ArkUINodeHandle node)865 ArkUI_CharPtr GetTextAreaFontFeature(ArkUINodeHandle node)
866 {
867     auto* frameNode = reinterpret_cast<FrameNode*>(node);
868     CHECK_NULL_RETURN(frameNode, nullptr);
869     g_strValue = UnParseFontFeatureSetting(TextFieldModelNG::GetFontFeature(frameNode));
870     return g_strValue.c_str();
871 }
872 
GetTextAreaAdaptMinFontSize(ArkUINodeHandle node)873 ArkUI_Float32 GetTextAreaAdaptMinFontSize(ArkUINodeHandle node)
874 {
875     auto* frameNode = reinterpret_cast<FrameNode*>(node);
876     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
877     return TextFieldModelNG::GetAdaptMinFontSize(frameNode).Value();
878 }
879 
GetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)880 ArkUI_Float32 GetTextAreaAdaptMaxFontSize(ArkUINodeHandle node)
881 {
882     auto* frameNode = reinterpret_cast<FrameNode*>(node);
883     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
884     return TextFieldModelNG::GetAdaptMaxFontSize(frameNode).Value();
885 }
886 
GetTextAreaLineHeight(ArkUINodeHandle node)887 ArkUI_Float32 GetTextAreaLineHeight(ArkUINodeHandle node)
888 {
889     auto* frameNode = reinterpret_cast<FrameNode*>(node);
890     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
891     return TextFieldModelNG::GetLineHeight(frameNode).Value();
892 }
893 
GetgetTextAreaMaxLines(ArkUINodeHandle node)894 ArkUI_Int32 GetgetTextAreaMaxLines(ArkUINodeHandle node)
895 {
896     auto* frameNode = reinterpret_cast<FrameNode*>(node);
897     CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
898     return TextFieldModelNG::GetMaxLines(frameNode);
899 }
SetTextAreaLineSpacing(ArkUINodeHandle node,ArkUI_Float32 value,ArkUI_Int32 unit)900 void SetTextAreaLineSpacing(ArkUINodeHandle node, ArkUI_Float32 value, ArkUI_Int32 unit)
901 {
902     auto* frameNode = reinterpret_cast<FrameNode*>(node);
903     CHECK_NULL_VOID(frameNode);
904     TextFieldModelNG::SetLineSpacing(frameNode, CalcDimension(value, (DimensionUnit)unit));
905 }
906 
ResetTextAreaLineSpacing(ArkUINodeHandle node)907 void ResetTextAreaLineSpacing(ArkUINodeHandle node)
908 {
909     auto* frameNode = reinterpret_cast<FrameNode*>(node);
910     CHECK_NULL_VOID(frameNode);
911     CalcDimension value;
912     value.Reset();
913     TextFieldModelNG::SetLineSpacing(frameNode, value);
914 }
915 
SetTextAreaPadding(ArkUINodeHandle node,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left)916 void SetTextAreaPadding(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
917     const struct ArkUISizeType* bottom, const struct ArkUISizeType* left)
918 {
919     auto* frameNode = reinterpret_cast<FrameNode*>(node);
920     CHECK_NULL_VOID(frameNode);
921     CalcLength topDimen;
922     CalcLength rightDimen;
923     CalcLength bottomDimen;
924     CalcLength leftDimen;
925     if (top->string != nullptr) {
926         topDimen = CalcLength(top->string);
927     } else {
928         topDimen = CalcLength(top->value, static_cast<DimensionUnit>(top->unit));
929     }
930     if (right->string != nullptr) {
931         rightDimen = CalcLength(right->string);
932     } else {
933         rightDimen = CalcLength(right->value, static_cast<DimensionUnit>(right->unit));
934     }
935     if (bottom->string != nullptr) {
936         bottomDimen = CalcLength(bottom->string);
937     } else {
938         bottomDimen = CalcLength(bottom->value, static_cast<DimensionUnit>(bottom->unit));
939     }
940     if (left->string != nullptr) {
941         leftDimen = CalcLength(left->string);
942     } else {
943         leftDimen = CalcLength(left->value, static_cast<DimensionUnit>(left->unit));
944     }
945     NG::PaddingProperty paddings;
946     paddings.top = std::optional<CalcLength>(topDimen);
947     paddings.bottom = std::optional<CalcLength>(bottomDimen);
948     paddings.left = std::optional<CalcLength>(leftDimen);
949     paddings.right = std::optional<CalcLength>(rightDimen);
950     TextFieldModelNG::SetPadding(frameNode, paddings);
951 }
952 
ResetTextAreaPadding(ArkUINodeHandle node)953 void ResetTextAreaPadding(ArkUINodeHandle node)
954 {
955     auto* frameNode = reinterpret_cast<FrameNode*>(node);
956     CHECK_NULL_VOID(frameNode);
957     auto pipeline = frameNode->GetContext();
958     CHECK_NULL_VOID(pipeline);
959     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
960     CHECK_NULL_VOID(theme);
961     auto textFieldPadding = theme->GetPadding();
962     NG::PaddingProperty paddings;
963     paddings.top = NG::CalcLength(textFieldPadding.Top());
964     paddings.bottom = NG::CalcLength(textFieldPadding.Bottom());
965     paddings.left = NG::CalcLength(textFieldPadding.Left());
966     paddings.right = NG::CalcLength(textFieldPadding.Right());
967     TextFieldModelNG::SetPadding(frameNode, paddings);
968 }
969 
SetTextAreaOnChange(ArkUINodeHandle node,void * callback)970 void SetTextAreaOnChange(ArkUINodeHandle node, void* callback)
971 {
972     auto* frameNode = reinterpret_cast<FrameNode*>(node);
973     CHECK_NULL_VOID(frameNode);
974     if (callback) {
975         auto onChange = reinterpret_cast<std::function<void(const ChangeValueInfo&)>*>(callback);
976         TextFieldModelNG::SetOnChange(frameNode, std::move(*onChange));
977     } else {
978         TextFieldModelNG::SetOnChange(frameNode, nullptr);
979     }
980 }
981 
ResetTextAreaOnChange(ArkUINodeHandle node)982 void ResetTextAreaOnChange(ArkUINodeHandle node)
983 {
984     auto *frameNode = reinterpret_cast<FrameNode *>(node);
985     CHECK_NULL_VOID(frameNode);
986     TextFieldModelNG::SetOnChange(frameNode, nullptr);
987 }
988 
SetTextAreaEnterKeyType(ArkUINodeHandle node,ArkUI_Int32 value)989 void SetTextAreaEnterKeyType(ArkUINodeHandle node, ArkUI_Int32 value)
990 {
991     auto *frameNode = reinterpret_cast<FrameNode *>(node);
992     CHECK_NULL_VOID(frameNode);
993     TextFieldModelNG::SetEnterKeyType(frameNode, CastToTextInputAction(value));
994 }
995 
ResetTextAreaEnterKeyType(ArkUINodeHandle node)996 void ResetTextAreaEnterKeyType(ArkUINodeHandle node)
997 {
998     auto *frameNode = reinterpret_cast<FrameNode *>(node);
999     CHECK_NULL_VOID(frameNode);
1000     TextFieldModelNG::SetEnterKeyType(frameNode, TextInputAction::NEW_LINE);
1001 }
1002 
SetTextAreaInputFilter(ArkUINodeHandle node,ArkUI_CharPtr value,void * callback)1003 void SetTextAreaInputFilter(ArkUINodeHandle node, ArkUI_CharPtr value, void* callback)
1004 {
1005     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1006     CHECK_NULL_VOID(frameNode);
1007     std::string inputFilter(value);
1008     if (callback) {
1009         auto onError = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
1010         TextFieldModelNG::SetInputFilter(frameNode, inputFilter, *onError);
1011     } else {
1012         TextFieldModelNG::SetInputFilter(frameNode, inputFilter, nullptr);
1013     }
1014 }
1015 
ResetTextAreaInputFilter(ArkUINodeHandle node)1016 void ResetTextAreaInputFilter(ArkUINodeHandle node)
1017 {
1018     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1019     CHECK_NULL_VOID(frameNode);
1020     TextFieldModelNG::SetInputFilter(frameNode, "", nullptr);
1021 }
1022 
SetTextAreaOnTextSelectionChange(ArkUINodeHandle node,void * callback)1023 void SetTextAreaOnTextSelectionChange(ArkUINodeHandle node, void* callback)
1024 {
1025     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1026     CHECK_NULL_VOID(frameNode);
1027     if (callback) {
1028         auto onChange = reinterpret_cast<std::function<void(int32_t, int32_t)>*>(callback);
1029         TextFieldModelNG::SetOnTextSelectionChange(frameNode, std::move(*onChange));
1030     } else {
1031         TextFieldModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1032     }
1033 }
1034 
ResetTextAreaOnTextSelectionChange(ArkUINodeHandle node)1035 void ResetTextAreaOnTextSelectionChange(ArkUINodeHandle node)
1036 {
1037     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1038     CHECK_NULL_VOID(frameNode);
1039     TextFieldModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1040 }
1041 
SetTextAreaOnContentScroll(ArkUINodeHandle node,void * callback)1042 void SetTextAreaOnContentScroll(ArkUINodeHandle node, void* callback)
1043 {
1044     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1045     CHECK_NULL_VOID(frameNode);
1046     if (callback) {
1047         auto onScroll = reinterpret_cast<std::function<void(float, float)>*>(callback);
1048         TextFieldModelNG::SetOnContentScroll(frameNode, std::move(*onScroll));
1049     } else {
1050         TextFieldModelNG::SetOnContentScroll(frameNode, nullptr);
1051     }
1052 }
1053 
ResetTextAreaOnContentScroll(ArkUINodeHandle node)1054 void ResetTextAreaOnContentScroll(ArkUINodeHandle node)
1055 {
1056     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1057     CHECK_NULL_VOID(frameNode);
1058     TextFieldModelNG::SetOnContentScroll(frameNode, nullptr);
1059 }
1060 
SetTextAreaOnEditChange(ArkUINodeHandle node,void * callback)1061 void SetTextAreaOnEditChange(ArkUINodeHandle node, void* callback)
1062 {
1063     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1064     CHECK_NULL_VOID(frameNode);
1065     if (callback) {
1066         auto onEditChange = reinterpret_cast<std::function<void(bool)>*>(callback);
1067         TextFieldModelNG::SetOnEditChange(frameNode, std::move(*onEditChange));
1068     } else {
1069         TextFieldModelNG::SetOnEditChange(frameNode, nullptr);
1070     }
1071 }
1072 
ResetTextAreaOnEditChange(ArkUINodeHandle node)1073 void ResetTextAreaOnEditChange(ArkUINodeHandle node)
1074 {
1075     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1076     CHECK_NULL_VOID(frameNode);
1077     TextFieldModelNG::SetOnEditChange(frameNode, nullptr);
1078 }
1079 
SetTextAreaOnCopy(ArkUINodeHandle node,void * callback)1080 void SetTextAreaOnCopy(ArkUINodeHandle node, void* callback)
1081 {
1082     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1083     CHECK_NULL_VOID(frameNode);
1084     if (callback) {
1085         auto onCopy = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
1086         TextFieldModelNG::SetOnCopy(frameNode, std::move(*onCopy));
1087     } else {
1088         TextFieldModelNG::SetOnCopy(frameNode, nullptr);
1089     }
1090 }
1091 
ResetTextAreaOnCopy(ArkUINodeHandle node)1092 void ResetTextAreaOnCopy(ArkUINodeHandle node)
1093 {
1094     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1095     CHECK_NULL_VOID(frameNode);
1096     TextFieldModelNG::SetOnCopy(frameNode, nullptr);
1097 }
1098 
SetTextAreaOnCut(ArkUINodeHandle node,void * callback)1099 void SetTextAreaOnCut(ArkUINodeHandle node, void* callback)
1100 {
1101     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1102     CHECK_NULL_VOID(frameNode);
1103     if (callback) {
1104         auto onCut = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
1105         TextFieldModelNG::SetOnCut(frameNode, std::move(*onCut));
1106     } else {
1107         TextFieldModelNG::SetOnCut(frameNode, nullptr);
1108     }
1109 }
1110 
ResetTextAreaOnCut(ArkUINodeHandle node)1111 void ResetTextAreaOnCut(ArkUINodeHandle node)
1112 {
1113     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1114     CHECK_NULL_VOID(frameNode);
1115     TextFieldModelNG::SetOnCut(frameNode, nullptr);
1116 }
1117 
SetTextAreaOnPaste(ArkUINodeHandle node,void * callback)1118 void SetTextAreaOnPaste(ArkUINodeHandle node, void* callback)
1119 {
1120     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1121     CHECK_NULL_VOID(frameNode);
1122     if (callback) {
1123         auto onPasteWithEvent = reinterpret_cast<std::function<void(
1124                 const std::string&, NG::TextCommonEvent&)>*>(callback);
1125         TextFieldModelNG::SetOnPasteWithEvent(frameNode, std::move(*onPasteWithEvent));
1126     } else {
1127         TextFieldModelNG::SetOnPasteWithEvent(frameNode, nullptr);
1128     }
1129 }
1130 
ResetTextAreaOnPaste(ArkUINodeHandle node)1131 void ResetTextAreaOnPaste(ArkUINodeHandle node)
1132 {
1133     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1134     CHECK_NULL_VOID(frameNode);
1135     TextFieldModelNG::SetOnPasteWithEvent(frameNode, nullptr);
1136 }
1137 
SetTextAreaLineBreakStrategy(ArkUINodeHandle node,ArkUI_Uint32 lineBreakStrategy)1138 void SetTextAreaLineBreakStrategy(ArkUINodeHandle node, ArkUI_Uint32 lineBreakStrategy)
1139 {
1140     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1141     CHECK_NULL_VOID(frameNode);
1142     if (lineBreakStrategy < 0 || lineBreakStrategy >= LINE_BREAK_STRATEGY_TYPES.size()) {
1143         lineBreakStrategy = 0; // 0 is the default value of LineBreakStrategy::GREEDY
1144     }
1145     TextFieldModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[lineBreakStrategy]);
1146 }
1147 
ResetTextAreaLineBreakStrategy(ArkUINodeHandle node)1148 void ResetTextAreaLineBreakStrategy(ArkUINodeHandle node)
1149 {
1150     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1151     CHECK_NULL_VOID(frameNode);
1152     // 0 is the default value of LineBreakStrategy::GREEDY
1153     TextFieldModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[0]);
1154 }
1155 
SetTextAreaOnSubmitWithEvent(ArkUINodeHandle node,void * callback)1156 void SetTextAreaOnSubmitWithEvent(ArkUINodeHandle node, void* callback)
1157 {
1158     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1159     CHECK_NULL_VOID(frameNode);
1160     if (callback) {
1161         auto onSubmit = reinterpret_cast<std::function<void(int32_t, NG::TextFieldCommonEvent&)>*>(callback);
1162         TextFieldModelNG::SetOnSubmit(frameNode, std::move(*onSubmit));
1163     } else {
1164         TextFieldModelNG::SetOnSubmit(frameNode, nullptr);
1165     }
1166 }
1167 
ResetTextAreaOnSubmitWithEvent(ArkUINodeHandle node)1168 void ResetTextAreaOnSubmitWithEvent(ArkUINodeHandle node)
1169 {
1170     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1171     CHECK_NULL_VOID(frameNode);
1172     TextFieldModelNG::SetOnSubmit(frameNode, nullptr);
1173 }
1174 
SetTextAreaContentType(ArkUINodeHandle node,ArkUI_Int32 contentType)1175 void SetTextAreaContentType(ArkUINodeHandle node, ArkUI_Int32 contentType)
1176 {
1177     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1178     CHECK_NULL_VOID(frameNode);
1179     if (contentType < 0 || contentType > static_cast<ArkUI_Int32>(TextContentType::END)) {
1180         contentType = -1;
1181     }
1182     TextFieldModelNG::SetContentType(frameNode, static_cast<NG::TextContentType>(contentType));
1183 }
1184 
ResetTextAreaContentType(ArkUINodeHandle node)1185 void ResetTextAreaContentType(ArkUINodeHandle node)
1186 {
1187     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1188     CHECK_NULL_VOID(frameNode);
1189     TextFieldModelNG::SetContentType(frameNode, static_cast<NG::TextContentType>(TextContentType::UNSPECIFIED));
1190 }
1191 
SetTextAreaEnableAutoFill(ArkUINodeHandle node,ArkUI_Uint32 enableAutoFill)1192 void SetTextAreaEnableAutoFill(ArkUINodeHandle node, ArkUI_Uint32 enableAutoFill)
1193 {
1194     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1195     CHECK_NULL_VOID(frameNode);
1196     TextFieldModelNG::SetEnableAutoFill(frameNode, static_cast<bool>(enableAutoFill));
1197 }
1198 
ResetTextAreaEnableAutoFill(ArkUINodeHandle node)1199 void ResetTextAreaEnableAutoFill(ArkUINodeHandle node)
1200 {
1201     auto *frameNode = reinterpret_cast<FrameNode*>(node);
1202     CHECK_NULL_VOID(frameNode);
1203     TextFieldModelNG::SetEnableAutoFill(frameNode, DEFAULT_ENABLE_AUTO_FILL);
1204 }
1205 
ConvertBorderStyle(int32_t value)1206 BorderStyle ConvertBorderStyle(int32_t value)
1207 {
1208     auto style = static_cast<BorderStyle>(value);
1209     if (style < BorderStyle::SOLID || style > BorderStyle::NONE) {
1210         style = BorderStyle::SOLID;
1211     }
1212     return style;
1213 }
1214 
SetOptionalBorder(std::optional<Dimension> & optionalDimension,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1215 void SetOptionalBorder(std::optional<Dimension>& optionalDimension, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
1216     ArkUI_Int32& offset)
1217 {
1218     bool hasValue = static_cast<bool>(values[offset]);
1219     if (hasValue) {
1220         optionalDimension =
1221             Dimension(values[offset + NUM_1], static_cast<OHOS::Ace::DimensionUnit>(values[offset + NUM_2]));
1222     }
1223     offset = offset + NUM_3;
1224 }
1225 
SetAllWidthOptionalBorder(NG::BorderWidthProperty & borderWidth,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1226 void SetAllWidthOptionalBorder(NG::BorderWidthProperty& borderWidth, const ArkUI_Float32* values,
1227     ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1228 {
1229     SetOptionalBorder(borderWidth.leftDimen, values, valuesSize, offset);
1230     SetOptionalBorder(borderWidth.rightDimen, values, valuesSize, offset);
1231     SetOptionalBorder(borderWidth.topDimen, values, valuesSize, offset);
1232     SetOptionalBorder(borderWidth.bottomDimen, values, valuesSize, offset);
1233 }
1234 
SetAllRadiusOptionalBorder(NG::BorderRadiusProperty & borderRadius,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1235 void SetAllRadiusOptionalBorder(NG::BorderRadiusProperty& borderRadius, const ArkUI_Float32* values,
1236     ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1237 {
1238     SetOptionalBorder(borderRadius.radiusTopLeft, values, valuesSize, offset);
1239     SetOptionalBorder(borderRadius.radiusTopRight, values, valuesSize, offset);
1240     SetOptionalBorder(borderRadius.radiusBottomLeft, values, valuesSize, offset);
1241     SetOptionalBorder(borderRadius.radiusBottomRight, values, valuesSize, offset);
1242 }
1243 
SetOptionalBorderColor(std::optional<Color> & optionalColor,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1244 void SetOptionalBorderColor(
1245     std::optional<Color>& optionalColor, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1246 {
1247     auto hasValue = values[offset];
1248     if (static_cast<bool>(hasValue)) {
1249         optionalColor = Color(values[offset + NUM_1]);
1250     }
1251     offset = offset + NUM_2;
1252 }
1253 
SetAllOptionalBorderColor(NG::BorderColorProperty & borderColors,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1254 void SetAllOptionalBorderColor(
1255     NG::BorderColorProperty& borderColors, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1256 {
1257     SetOptionalBorderColor(borderColors.leftColor, values, valuesSize, offset);
1258     SetOptionalBorderColor(borderColors.rightColor, values, valuesSize, offset);
1259     SetOptionalBorderColor(borderColors.topColor, values, valuesSize, offset);
1260     SetOptionalBorderColor(borderColors.bottomColor, values, valuesSize, offset);
1261 }
1262 
SetOptionalBorderStyle(std::optional<BorderStyle> & optionalStyle,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1263 void SetOptionalBorderStyle(
1264     std::optional<BorderStyle>& optionalStyle, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1265 {
1266     auto hasValue = values[offset];
1267     if (static_cast<bool>(hasValue)) {
1268         optionalStyle = ConvertBorderStyle(values[offset + NUM_1]);
1269     }
1270     offset = offset + NUM_2;
1271 }
1272 
SetAllOptionalBorderStyle(NG::BorderStyleProperty & borderStyles,const uint32_t * values,ArkUI_Int32 valuesSize,ArkUI_Int32 & offset)1273 void SetAllOptionalBorderStyle(
1274     NG::BorderStyleProperty& borderStyles, const uint32_t* values, ArkUI_Int32 valuesSize, ArkUI_Int32& offset)
1275 {
1276     SetOptionalBorderStyle(borderStyles.styleLeft, values, valuesSize, offset);
1277     SetOptionalBorderStyle(borderStyles.styleRight, values, valuesSize, offset);
1278     SetOptionalBorderStyle(borderStyles.styleTop, values, valuesSize, offset);
1279     SetOptionalBorderStyle(borderStyles.styleBottom, values, valuesSize, offset);
1280 }
1281 
SetTextAreaBorder(ArkUINodeHandle node,const ArkUI_Float32 * values,ArkUI_Int32 valuesSize,const uint32_t * colorAndStyle,int32_t colorAndStyleSize)1282 void SetTextAreaBorder(ArkUINodeHandle node, const ArkUI_Float32* values, ArkUI_Int32 valuesSize,
1283     const uint32_t* colorAndStyle, int32_t colorAndStyleSize)
1284 {
1285     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1286     CHECK_NULL_VOID(frameNode);
1287     if ((values == nullptr) || (valuesSize != NUM_24) || (colorAndStyle == nullptr) || colorAndStyleSize != NUM_16) {
1288         return;
1289     }
1290 
1291     int32_t offset = NUM_0;
1292     NG::BorderWidthProperty borderWidth;
1293     SetAllWidthOptionalBorder(borderWidth, values, valuesSize, offset);
1294     borderWidth.multiValued = true;
1295     if (borderWidth.leftDimen.has_value() || borderWidth.rightDimen.has_value() || borderWidth.topDimen.has_value() ||
1296         borderWidth.bottomDimen.has_value()) {
1297         TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1298     }
1299 
1300     NG::BorderRadiusProperty borderRadius;
1301     SetAllRadiusOptionalBorder(borderRadius, values, valuesSize, offset);
1302     borderRadius.multiValued = true;
1303     if (borderRadius.radiusTopLeft.has_value() || borderRadius.radiusTopRight.has_value() ||
1304         borderRadius.radiusBottomLeft.has_value() || borderRadius.radiusBottomRight.has_value()) {
1305         TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1306     }
1307 
1308     int32_t colorAndStyleOffset = NUM_0;
1309     NG::BorderColorProperty borderColors;
1310     SetAllOptionalBorderColor(borderColors, colorAndStyle,
1311         colorAndStyleSize, colorAndStyleOffset);
1312     borderColors.multiValued = true;
1313     TextFieldModelNG::SetBorderColor(frameNode, borderColors);
1314 
1315     NG::BorderStyleProperty borderStyles;
1316     SetAllOptionalBorderStyle(borderStyles, colorAndStyle,
1317         colorAndStyleSize, colorAndStyleOffset);
1318     borderStyles.multiValued = true;
1319     TextFieldModelNG::SetBorderStyle(frameNode, borderStyles);
1320 }
1321 
ResetTextAreaBorder(ArkUINodeHandle node)1322 void ResetTextAreaBorder(ArkUINodeHandle node)
1323 {
1324     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1325     CHECK_NULL_VOID(frameNode);
1326     BorderWidthProperty borderWidth;
1327     borderWidth.SetBorderWidth(Dimension(0));
1328     TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1329 
1330     BorderRadiusProperty borderRadius;
1331     borderRadius.SetRadius(Dimension(0));
1332     TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1333 
1334     BorderColorProperty borderColor;
1335     borderColor.SetColor(Color::BLACK);
1336     TextFieldModelNG::SetBorderColor(frameNode, borderColor);
1337 
1338     BorderStyleProperty borderStyle;
1339     borderStyle.SetBorderStyle(BorderStyle::SOLID);
1340     TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1341 }
1342 
SetTextAreaBorderWidth(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)1343 void SetTextAreaBorderWidth(ArkUINodeHandle node, const ArkUI_Float32* values,
1344     const ArkUI_Int32* units, ArkUI_Int32 length)
1345 {
1346     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1347     CHECK_NULL_VOID(frameNode);
1348     if (length != DEFAULT_LENGTH) {
1349         return;
1350     }
1351     std::optional<CalcDimension> topDimen;
1352     std::optional<CalcDimension> rightDimen;
1353     std::optional<CalcDimension> bottomDimen;
1354     std::optional<CalcDimension> leftDimen;
1355 
1356     if (values[NUM_0] != -1 &&
1357         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]) != OHOS::Ace::DimensionUnit::INVALID) {
1358         topDimen = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
1359     }
1360     if (values[NUM_1] != -1 &&
1361         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]) != OHOS::Ace::DimensionUnit::INVALID) {
1362         rightDimen = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
1363     }
1364     if (values[NUM_2] != -1 &&
1365         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]) != OHOS::Ace::DimensionUnit::INVALID) {
1366         bottomDimen = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
1367     }
1368     if (values[NUM_3] != -1 &&
1369         static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]) != OHOS::Ace::DimensionUnit::INVALID) {
1370         leftDimen = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
1371     }
1372 
1373     NG::BorderWidthProperty borderWidth;
1374     borderWidth.leftDimen = leftDimen;
1375     borderWidth.rightDimen = rightDimen;
1376     borderWidth.topDimen = topDimen;
1377     borderWidth.bottomDimen = bottomDimen;
1378     borderWidth.multiValued = true;
1379     TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1380 }
1381 
ResetTextAreaBorderWidth(ArkUINodeHandle node)1382 void ResetTextAreaBorderWidth(ArkUINodeHandle node)
1383 {
1384     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1385     CHECK_NULL_VOID(frameNode);
1386     BorderWidthProperty borderWidth;
1387     borderWidth.SetBorderWidth(Dimension(0));
1388     TextFieldModelNG::SetBorderWidth(frameNode, borderWidth);
1389 }
1390 
SetTextAreaBorderColor(ArkUINodeHandle node,uint32_t topColorInt,uint32_t rightColorInt,uint32_t bottomColorInt,uint32_t leftColorInt)1391 void SetTextAreaBorderColor(ArkUINodeHandle node, uint32_t topColorInt,
1392     uint32_t rightColorInt, uint32_t bottomColorInt, uint32_t leftColorInt)
1393 {
1394     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1395     CHECK_NULL_VOID(frameNode);
1396     NG::BorderColorProperty borderColors;
1397     borderColors.topColor = Color(topColorInt);
1398     borderColors.rightColor = Color(rightColorInt);
1399     borderColors.bottomColor = Color(bottomColorInt);
1400     borderColors.leftColor = Color(leftColorInt);
1401     borderColors.multiValued = true;
1402     TextFieldModelNG::SetBorderColor(frameNode, borderColors);
1403 }
1404 
ResetTextAreaBorderColor(ArkUINodeHandle node)1405 void ResetTextAreaBorderColor(ArkUINodeHandle node)
1406 {
1407     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1408     CHECK_NULL_VOID(frameNode);
1409     BorderColorProperty borderColor;
1410     borderColor.SetColor(Color::BLACK);
1411     TextFieldModelNG::SetBorderColor(frameNode, borderColor);
1412 }
1413 
SetTextAreaBorderStyle(ArkUINodeHandle node,const ArkUI_Int32 * styles,ArkUI_Int32 length)1414 void SetTextAreaBorderStyle(ArkUINodeHandle node, const ArkUI_Int32* styles, ArkUI_Int32 length)
1415 {
1416     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1417     CHECK_NULL_VOID(frameNode);
1418     if (length == NUM_1) {
1419         BorderStyleProperty borderStyle;
1420         borderStyle.SetBorderStyle(ConvertBorderStyle(styles[NUM_0]));
1421         TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1422         return;
1423     }
1424     if (length == NUM_4) {
1425         NG::BorderStyleProperty borderStyles;
1426         borderStyles.styleLeft = ConvertBorderStyle(styles[NUM_3]);
1427         borderStyles.styleRight = ConvertBorderStyle(styles[NUM_1]);
1428         borderStyles.styleTop = ConvertBorderStyle(styles[NUM_0]);
1429         borderStyles.styleBottom = ConvertBorderStyle(styles[NUM_2]);
1430         borderStyles.multiValued = true;
1431         TextFieldModelNG::SetBorderStyle(frameNode, borderStyles);
1432     }
1433 }
1434 
ResetTextAreaBorderStyle(ArkUINodeHandle node)1435 void ResetTextAreaBorderStyle(ArkUINodeHandle node)
1436 {
1437     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1438     CHECK_NULL_VOID(frameNode);
1439     BorderStyleProperty borderStyle;
1440     borderStyle.SetBorderStyle(BorderStyle::SOLID);
1441     TextFieldModelNG::SetBorderStyle(frameNode, borderStyle);
1442 }
1443 
SetTextAreaBorderRadius(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)1444 void SetTextAreaBorderRadius(ArkUINodeHandle node, const ArkUI_Float32* values,
1445     const ArkUI_Int32* units, ArkUI_Int32 length)
1446 {
1447     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1448     CHECK_NULL_VOID(frameNode);
1449     if (length != DEFAULT_LENGTH) {
1450         return;
1451     }
1452     NG::BorderRadiusProperty borderRadius;
1453     borderRadius.radiusTopLeft = Dimension(values[NUM_0], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_0]));
1454     borderRadius.radiusTopRight = Dimension(values[NUM_1], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_1]));
1455     borderRadius.radiusBottomLeft = Dimension(values[NUM_2], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_2]));
1456     borderRadius.radiusBottomRight = Dimension(values[NUM_3], static_cast<OHOS::Ace::DimensionUnit>(units[NUM_3]));
1457     borderRadius.multiValued = true;
1458     TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1459 }
1460 
ResetTextAreaBorderRadius(ArkUINodeHandle node)1461 void ResetTextAreaBorderRadius(ArkUINodeHandle node)
1462 {
1463     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1464     CHECK_NULL_VOID(frameNode);
1465     BorderRadiusProperty borderRadius;
1466     borderRadius.SetRadius(Dimension(0));
1467     TextFieldModelNG::SetBorderRadius(frameNode, borderRadius);
1468 }
1469 
SetTextAreaMargin(ArkUINodeHandle node,const struct ArkUISizeType * top,const struct ArkUISizeType * right,const struct ArkUISizeType * bottom,const struct ArkUISizeType * left)1470 void SetTextAreaMargin(ArkUINodeHandle node, const struct ArkUISizeType* top, const struct ArkUISizeType* right,
1471     const struct ArkUISizeType* bottom, const struct ArkUISizeType* left)
1472 {
1473     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1474     CHECK_NULL_VOID(frameNode);
1475     CalcLength topDimen;
1476     CalcLength rightDimen;
1477     CalcLength bottomDimen;
1478     CalcLength leftDimen;
1479     if (top->string != nullptr) {
1480         topDimen = CalcLength(top->string);
1481     } else {
1482         topDimen = CalcLength(top->value, static_cast<DimensionUnit>(top->unit));
1483     }
1484     if (right->string != nullptr) {
1485         rightDimen = CalcLength(right->string);
1486     } else {
1487         rightDimen = CalcLength(right->value, static_cast<DimensionUnit>(right->unit));
1488     }
1489     if (bottom->string != nullptr) {
1490         bottomDimen = CalcLength(bottom->string);
1491     } else {
1492         bottomDimen = CalcLength(bottom->value, static_cast<DimensionUnit>(bottom->unit));
1493     }
1494     if (left->string != nullptr) {
1495         leftDimen = CalcLength(left->string);
1496     } else {
1497         leftDimen = CalcLength(left->value, static_cast<DimensionUnit>(left->unit));
1498     }
1499     NG::PaddingProperty paddings;
1500     paddings.top = std::optional<CalcLength>(topDimen);
1501     paddings.bottom = std::optional<CalcLength>(bottomDimen);
1502     paddings.left = std::optional<CalcLength>(leftDimen);
1503     paddings.right = std::optional<CalcLength>(rightDimen);
1504     TextFieldModelNG::SetMargin(frameNode, paddings);
1505 }
1506 
ResetTextAreaMargin(ArkUINodeHandle node)1507 void ResetTextAreaMargin(ArkUINodeHandle node)
1508 {
1509     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1510     CHECK_NULL_VOID(frameNode);
1511     NG::PaddingProperty paddings;
1512     paddings.top = NG::CalcLength(0.0);
1513     paddings.bottom = NG::CalcLength(0.0);
1514     paddings.left = NG::CalcLength(0.0);
1515     paddings.right = NG::CalcLength(0.0);
1516     TextFieldModelNG::SetMargin(frameNode, paddings);
1517 }
1518 
GetTextAreaMargin(ArkUINodeHandle node,ArkUI_Float32 (* values)[4],ArkUI_Int32 length,ArkUI_Int32 unit)1519 void GetTextAreaMargin(ArkUINodeHandle node, ArkUI_Float32 (*values)[4], ArkUI_Int32 length, ArkUI_Int32 unit)
1520 {
1521     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1522     CHECK_NULL_VOID(frameNode);
1523     auto margin = TextFieldModelNG::GetMargin(frameNode);
1524     (*values)[NUM_0] = margin.top->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1525     (*values)[NUM_1] = margin.right->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1526     (*values)[NUM_2] = margin.bottom->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1527     (*values)[NUM_3] = margin.left->GetDimension().GetNativeValue(static_cast<DimensionUnit>(unit));
1528     length = NUM_4;
1529 }
1530 
SetTextAreaOnWillChange(ArkUINodeHandle node,ArkUI_Int64 callback)1531 void SetTextAreaOnWillChange(ArkUINodeHandle node, ArkUI_Int64 callback)
1532 {
1533     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1534     CHECK_NULL_VOID(frameNode);
1535     if (callback) {
1536         auto onWillChange = reinterpret_cast<std::function<bool(const ChangeValueInfo&)>*>(callback);
1537         TextFieldModelNG::SetOnWillChangeEvent(frameNode, std::move(*onWillChange));
1538     } else {
1539         TextFieldModelNG::SetOnWillChangeEvent(frameNode, nullptr);
1540     }
1541 }
1542 
ResetTextAreaOnWillChange(ArkUINodeHandle node)1543 void ResetTextAreaOnWillChange(ArkUINodeHandle node)
1544 {
1545     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1546     CHECK_NULL_VOID(frameNode);
1547     TextFieldModelNG::SetOnWillChangeEvent(frameNode, nullptr);
1548 }
1549 
SetTextAreaOnWillInsert(ArkUINodeHandle node,ArkUI_Int64 callback)1550 void SetTextAreaOnWillInsert(ArkUINodeHandle node, ArkUI_Int64 callback)
1551 {
1552     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1553     CHECK_NULL_VOID(frameNode);
1554     if (callback) {
1555         auto onWillInsert = reinterpret_cast<std::function<bool(const InsertValueInfo&)>*>(callback);
1556         TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, std::move(*onWillInsert));
1557     } else {
1558         TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, nullptr);
1559     }
1560 }
1561 
ResetTextAreaOnWillInsert(ArkUINodeHandle node)1562 void ResetTextAreaOnWillInsert(ArkUINodeHandle node)
1563 {
1564     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1565     CHECK_NULL_VOID(frameNode);
1566     TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, nullptr);
1567 }
1568 
SetTextAreaOnDidInsert(ArkUINodeHandle node,ArkUI_Int64 callback)1569 void SetTextAreaOnDidInsert(ArkUINodeHandle node, ArkUI_Int64 callback)
1570 {
1571     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1572     CHECK_NULL_VOID(frameNode);
1573     if (callback) {
1574         auto onDidInsert = reinterpret_cast<std::function<void(const InsertValueInfo&)>*>(callback);
1575         TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, std::move(*onDidInsert));
1576     } else {
1577         TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, nullptr);
1578     }
1579 }
1580 
ResetTextAreaOnDidInsert(ArkUINodeHandle node)1581 void ResetTextAreaOnDidInsert(ArkUINodeHandle node)
1582 {
1583     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1584     CHECK_NULL_VOID(frameNode);
1585     TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, nullptr);
1586 }
1587 
SetTextAreaOnWillDelete(ArkUINodeHandle node,ArkUI_Int64 callback)1588 void SetTextAreaOnWillDelete(ArkUINodeHandle node, ArkUI_Int64 callback)
1589 {
1590     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1591     CHECK_NULL_VOID(frameNode);
1592     if (callback) {
1593         auto onWillDelete = reinterpret_cast<std::function<bool(const DeleteValueInfo&)>*>(callback);
1594         TextFieldModelNG::SetOnWillDeleteEvent(frameNode, std::move(*onWillDelete));
1595     } else {
1596         TextFieldModelNG::SetOnWillDeleteEvent(frameNode, nullptr);
1597     }
1598 }
1599 
ResetTextAreaOnWillDelete(ArkUINodeHandle node)1600 void ResetTextAreaOnWillDelete(ArkUINodeHandle node)
1601 {
1602     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1603     CHECK_NULL_VOID(frameNode);
1604     TextFieldModelNG::SetOnWillDeleteEvent(frameNode, nullptr);
1605 }
1606 
SetTextAreaOnDidDelete(ArkUINodeHandle node,ArkUI_Int64 callback)1607 void SetTextAreaOnDidDelete(ArkUINodeHandle node, ArkUI_Int64 callback)
1608 {
1609     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1610     CHECK_NULL_VOID(frameNode);
1611     if (callback) {
1612         auto onDidDelete = reinterpret_cast<std::function<void(const DeleteValueInfo&)>*>(callback);
1613         TextFieldModelNG::SetOnDidDeleteEvent(frameNode, std::move(*onDidDelete));
1614     } else {
1615         TextFieldModelNG::SetOnDidDeleteEvent(frameNode, nullptr);
1616     }
1617 }
1618 
ResetTextAreaOnDidDelete(ArkUINodeHandle node)1619 void ResetTextAreaOnDidDelete(ArkUINodeHandle node)
1620 {
1621     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1622     CHECK_NULL_VOID(frameNode);
1623     TextFieldModelNG::SetOnDidDeleteEvent(frameNode, nullptr);
1624 }
1625 
SetTextAreaEnablePreviewText(ArkUINodeHandle node,ArkUI_Uint32 value)1626 void SetTextAreaEnablePreviewText(ArkUINodeHandle node, ArkUI_Uint32 value)
1627 {
1628     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1629     CHECK_NULL_VOID(frameNode);
1630     TextFieldModelNG::SetEnablePreviewText(frameNode, static_cast<bool>(value));
1631 }
1632 
ResetTextAreaEnablePreviewText(ArkUINodeHandle node)1633 void ResetTextAreaEnablePreviewText(ArkUINodeHandle node)
1634 {
1635     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1636     CHECK_NULL_VOID(frameNode);
1637     TextFieldModelNG::SetEnablePreviewText(frameNode, DEFAULT_ENABLE_PREVIEW_TEXT_VALUE);
1638 }
1639 
GetTextAreaEnablePreviewText(ArkUINodeHandle node)1640 ArkUI_Bool GetTextAreaEnablePreviewText(ArkUINodeHandle node)
1641 {
1642     auto *frameNode = reinterpret_cast<FrameNode *>(node);
1643     CHECK_NULL_RETURN(frameNode, false);
1644     return static_cast<int>(TextFieldModelNG::GetEnablePreviewText(frameNode));
1645 }
1646 
GetTextAreaPadding(ArkUINodeHandle node,ArkUI_Float32 (* values)[4],ArkUI_Int32 length,ArkUI_Int32 unit)1647 void GetTextAreaPadding(ArkUINodeHandle node, ArkUI_Float32 (*values)[4], ArkUI_Int32 length, ArkUI_Int32 unit)
1648 {
1649     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1650     CHECK_NULL_VOID(frameNode);
1651     auto padding = TextFieldModelNG::GetPadding(frameNode);
1652     (*values)[NUM_0] = padding.top->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1653     (*values)[NUM_1] = padding.right->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1654     (*values)[NUM_2] = padding.bottom->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1655     (*values)[NUM_3] = padding.left->GetDimensionContainsNegative().GetNativeValue(static_cast<DimensionUnit>(unit));
1656     length = NUM_4;
1657 }
1658 
SetTextAreaSelectionMenuOptions(ArkUINodeHandle node,void * onCreateMenuCallback,void * onMenuItemClickCallback)1659 void SetTextAreaSelectionMenuOptions(ArkUINodeHandle node, void* onCreateMenuCallback, void* onMenuItemClickCallback)
1660 {
1661     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1662     CHECK_NULL_VOID(frameNode);
1663     NG::OnCreateMenuCallback* onCreateMenu = nullptr;
1664     NG::OnMenuItemClickCallback* onMenuItemClick = nullptr;
1665     if (onCreateMenuCallback) {
1666         onCreateMenu = reinterpret_cast<NG::OnCreateMenuCallback*>(onCreateMenuCallback);
1667     }
1668     if (onMenuItemClickCallback) {
1669         onMenuItemClick = reinterpret_cast<NG::OnMenuItemClickCallback*>(onMenuItemClickCallback);
1670     }
1671     if (onCreateMenu != nullptr && onMenuItemClick != nullptr) {
1672         TextFieldModelNG::SetSelectionMenuOptions(frameNode, std::move(*onCreateMenu), std::move(*onMenuItemClick));
1673     } else if (onCreateMenu != nullptr && onMenuItemClick == nullptr) {
1674         TextFieldModelNG::SetSelectionMenuOptions(frameNode, std::move(*onCreateMenu), nullptr);
1675     } else if (onCreateMenu == nullptr && onMenuItemClick != nullptr) {
1676         TextFieldModelNG::SetSelectionMenuOptions(frameNode, nullptr, std::move(*onMenuItemClick));
1677     } else {
1678         TextFieldModelNG::SetSelectionMenuOptions(frameNode, nullptr, nullptr);
1679     }
1680 }
1681 
ResetTextAreaSelectionMenuOptions(ArkUINodeHandle node)1682 void ResetTextAreaSelectionMenuOptions(ArkUINodeHandle node)
1683 {
1684     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1685     CHECK_NULL_VOID(frameNode);
1686     NG::OnCreateMenuCallback onCreateMenuCallback;
1687     NG::OnMenuItemClickCallback onMenuItemClick;
1688     TextFieldModelNG::SetSelectionMenuOptions(frameNode, std::move(onCreateMenuCallback), std::move(onMenuItemClick));
1689 }
1690 
SetTextAreaWidth(ArkUINodeHandle node,ArkUI_CharPtr value)1691 void SetTextAreaWidth(ArkUINodeHandle node, ArkUI_CharPtr value)
1692 {
1693     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1694     CHECK_NULL_VOID(frameNode);
1695     auto widthValue = std::string(value);
1696     TextFieldModelNG::SetWidth(frameNode, widthValue);
1697 }
1698 
ResetTextAreaWidth(ArkUINodeHandle node)1699 void ResetTextAreaWidth(ArkUINodeHandle node)
1700 {
1701     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1702     CHECK_NULL_VOID(frameNode);
1703     TextFieldModelNG::ClearWidth(frameNode);
1704 }
1705 
SetTextAreaEnableHapticFeedback(ArkUINodeHandle node,ArkUI_Uint32 value)1706 void SetTextAreaEnableHapticFeedback(ArkUINodeHandle node, ArkUI_Uint32 value)
1707 {
1708     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1709     CHECK_NULL_VOID(frameNode);
1710     TextFieldModelNG::SetEnableHapticFeedback(frameNode, static_cast<bool>(value));
1711 }
1712 
ResetTextAreaEnableHapticFeedback(ArkUINodeHandle node)1713 void ResetTextAreaEnableHapticFeedback(ArkUINodeHandle node)
1714 {
1715     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1716     CHECK_NULL_VOID(frameNode);
1717     TextFieldModelNG::SetEnableHapticFeedback(frameNode, DEFAULT_ENABLE_HAPTIC_FEEDBACK_VALUE);
1718 }
1719 
SetStopBackPress(ArkUINodeHandle node,ArkUI_Uint32 value)1720 void SetStopBackPress(ArkUINodeHandle node, ArkUI_Uint32 value)
1721 {
1722     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1723     CHECK_NULL_VOID(frameNode);
1724     TextFieldModelNG::SetStopBackPress(frameNode, static_cast<bool>(value));
1725 }
1726 
ResetStopBackPress(ArkUINodeHandle node)1727 void ResetStopBackPress(ArkUINodeHandle node)
1728 {
1729     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1730     CHECK_NULL_VOID(frameNode);
1731     TextFieldModelNG::SetStopBackPress(frameNode, true);
1732 }
1733 } // namespace
1734 
1735 namespace NodeModifier {
GetTextAreaModifier()1736 const ArkUITextAreaModifier* GetTextAreaModifier()
1737 {
1738     static const ArkUITextAreaModifier modifier = { SetTextAreaStyle, ResetTextAreaStyle,
1739         SetTextAreaSelectionMenuHidden, ResetTextAreaSelectionMenuHidden, SetTextAreaMaxLines, ResetTextAreaMaxLines,
1740         SetTextAreaCopyOption, ResetTextAreaCopyOption, SetTextAreaPlaceholderColor, ResetTextAreaPlaceholderColor,
1741         SetTextAreaTextAlign, ResetTextAreaTextAlign, SetTextAreaPlaceholderFont, ResetTextAreaPlaceholderFont,
1742         SetTextAreaBarState, ResetTextAreaBarState, SetTextAreaEnableKeyboardOnFocus,
1743         ResetTextAreaEnableKeyboardOnFocus, SetTextAreaFontFamily, ResetTextAreaFontFamily, SetTextAreaShowCounter,
1744         ResetTextAreaShowCounter, SetTextAreaCaretColor, ResetTextAreaCaretColor, SetTextAreaMaxLength,
1745         ResetTextAreaMaxLength, SetTextAreaFontColor, ResetTextAreaFontColor, SetTextAreaFontStyle,
1746         ResetTextAreaFontStyle, SetTextAreaFontWeight, ResetTextAreaFontWeight, SetTextAreaFontSize,
1747         ResetTextAreaFontSize, SetCounterType, SetTextAreaPlaceholderString, SetTextAreaTextString,
1748         StopTextAreaTextEditing, SetTextAreaFontWeightStr, SetTextAreaPlaceholderFontEnum, GetTextAreaPlaceholder,
1749         GetTextAreaText, GetTextAreaCaretColor, GetTextAreaMaxLength, GetTextAreaPlaceholderColor,
1750         GetTextAreaPlaceholderFont, GetTextAreaEditing, SetTextAreaBackgroundColor, ResetTextAreaBackgroundColor,
1751         SetTextAreaType, ResetTextAreaType, GetTextAreaType, GetTextAreaTextAlign, SetTextAreaShowCounterOptions,
1752         ResetTextAreaShowCounterOptions, GetTextAreaShowCounterOptions, SetTextAreaDecoration, ResetTextAreaDecoration,
1753         SetTextAreaLetterSpacing, ResetTextAreaLetterSpacing, SetTextAreaLineHeight, ResetTextAreaLineHeight,
1754         SetTextAreaFontFeature, ResetTextAreaFontFeature, SetTextAreaWordBreak, ResetTextAreaWordBreak,
1755         SetTextAreaAdaptMinFontSize, ResetTextAreaAdaptMinFontSize, SetTextAreaAdaptMaxFontSize,
1756         ResetTextAreaAdaptMaxFontSize, SetTextAreaHeightAdaptivePolicy, ResetTextAreaHeightAdaptivePolicy,
1757         SetTextAreaSelectedBackgroundColor, ResetTextAreaSelectedBackgroundColor, SetTextAreaCaretStyle,
1758         ResetTextAreaCaretStyle, SetTextAreaTextOverflow, ResetTextAreaTextOverflow, SetTextAreaTextIndent,
1759         ResetTextAreaTextIndent, SetTextAreaLineSpacing, ResetTextAreaLineSpacing, GetTextAreaSelectionMenuHidden,
1760         GetTextAreaAdaptMinFontSize, GetTextAreaAdaptMaxFontSize, GetTextAreaLineHeight, GetgetTextAreaMaxLines,
1761         SetTextAreaPadding, ResetTextAreaPadding, GetTextAreaFontFeature, SetTextAreaOnChange, ResetTextAreaOnChange,
1762         SetTextAreaEnterKeyType, ResetTextAreaEnterKeyType, SetTextAreaInputFilter, ResetTextAreaInputFilter,
1763         SetTextAreaOnTextSelectionChange, ResetTextAreaOnTextSelectionChange, SetTextAreaOnContentScroll,
1764         ResetTextAreaOnContentScroll, SetTextAreaOnEditChange, ResetTextAreaOnEditChange, SetTextAreaOnCopy,
1765         ResetTextAreaOnCopy, SetTextAreaOnCut, ResetTextAreaOnCut, SetTextAreaOnPaste, ResetTextAreaOnPaste,
1766         SetTextAreaLineBreakStrategy, ResetTextAreaLineBreakStrategy, SetTextAreaOnSubmitWithEvent,
1767         ResetTextAreaOnSubmitWithEvent, SetTextAreaContentType, ResetTextAreaContentType, SetTextAreaEnableAutoFill,
1768         ResetTextAreaEnableAutoFill, SetTextAreaBorder, ResetTextAreaBorder, SetTextAreaBorderWidth,
1769         ResetTextAreaBorderWidth, SetTextAreaBorderColor, ResetTextAreaBorderColor, SetTextAreaBorderStyle,
1770         ResetTextAreaBorderStyle, SetTextAreaBorderRadius, ResetTextAreaBorderRadius, SetTextAreaMargin,
1771         ResetTextAreaMargin, GetTextAreaMargin, SetTextAreaCaret, SetTextAreaOnWillInsert, ResetTextAreaOnWillInsert,
1772         SetTextAreaOnDidInsert, ResetTextAreaOnDidInsert, SetTextAreaOnWillDelete, ResetTextAreaOnWillDelete,
1773         SetTextAreaOnDidDelete, ResetTextAreaOnDidDelete, SetTextAreaEnablePreviewText, ResetTextAreaEnablePreviewText,
1774         GetTextAreaPadding, SetTextAreaSelectionMenuOptions, ResetTextAreaSelectionMenuOptions, SetTextAreaWidth,
1775         ResetTextAreaWidth, SetTextAreaEnableHapticFeedback, ResetTextAreaEnableHapticFeedback, SetStopBackPress,
1776         ResetStopBackPress, SetTextAreaKeyboardAppearance, ResetTextAreaKeyboardAppearance,
1777         GetTextAreaLetterSpacing, GetTextAreaEnablePreviewText, SetTextAreaOnWillChange, ResetTextAreaOnWillChange };
1778     return &modifier;
1779 }
1780 
GetCJUITextAreaModifier()1781 const CJUITextAreaModifier* GetCJUITextAreaModifier()
1782 {
1783     static const CJUITextAreaModifier modifier = { SetTextAreaStyle, ResetTextAreaStyle,
1784         SetTextAreaSelectionMenuHidden, ResetTextAreaSelectionMenuHidden, SetTextAreaMaxLines, ResetTextAreaMaxLines,
1785         SetTextAreaCopyOption, ResetTextAreaCopyOption, SetTextAreaPlaceholderColor, ResetTextAreaPlaceholderColor,
1786         SetTextAreaTextAlign, ResetTextAreaTextAlign, SetTextAreaPlaceholderFont, ResetTextAreaPlaceholderFont,
1787         SetTextAreaBarState, ResetTextAreaBarState, SetTextAreaEnableKeyboardOnFocus,
1788         ResetTextAreaEnableKeyboardOnFocus, SetTextAreaFontFamily, ResetTextAreaFontFamily, SetTextAreaShowCounter,
1789         ResetTextAreaShowCounter, SetTextAreaCaretColor, ResetTextAreaCaretColor, SetTextAreaMaxLength,
1790         ResetTextAreaMaxLength, SetTextAreaFontColor, ResetTextAreaFontColor, SetTextAreaFontStyle,
1791         ResetTextAreaFontStyle, SetTextAreaFontWeight, ResetTextAreaFontWeight, SetTextAreaFontSize,
1792         ResetTextAreaFontSize, SetCounterType, SetTextAreaPlaceholderString, SetTextAreaTextString,
1793         StopTextAreaTextEditing, SetTextAreaFontWeightStr, SetTextAreaPlaceholderFontEnum, GetTextAreaPlaceholder,
1794         GetTextAreaText, GetTextAreaCaretColor, GetTextAreaMaxLength, GetTextAreaPlaceholderColor,
1795         GetTextAreaPlaceholderFont, GetTextAreaEditing, SetTextAreaBackgroundColor, ResetTextAreaBackgroundColor,
1796         SetTextAreaType, ResetTextAreaType, GetTextAreaType, GetTextAreaTextAlign, SetTextAreaShowCounterOptions,
1797         ResetTextAreaShowCounterOptions, GetTextAreaShowCounterOptions, SetTextAreaDecoration, ResetTextAreaDecoration,
1798         SetTextAreaLetterSpacing, ResetTextAreaLetterSpacing, SetTextAreaLineHeight, ResetTextAreaLineHeight,
1799         SetTextAreaFontFeature, ResetTextAreaFontFeature, SetTextAreaWordBreak, ResetTextAreaWordBreak,
1800         SetTextAreaAdaptMinFontSize, ResetTextAreaAdaptMinFontSize, SetTextAreaAdaptMaxFontSize,
1801         ResetTextAreaAdaptMaxFontSize, SetTextAreaHeightAdaptivePolicy, ResetTextAreaHeightAdaptivePolicy,
1802         SetTextAreaSelectedBackgroundColor, ResetTextAreaSelectedBackgroundColor, SetTextAreaCaretStyle,
1803         ResetTextAreaCaretStyle, SetTextAreaTextOverflow, ResetTextAreaTextOverflow, SetTextAreaTextIndent,
1804         ResetTextAreaTextIndent, SetTextAreaLineSpacing, ResetTextAreaLineSpacing, GetTextAreaSelectionMenuHidden,
1805         GetTextAreaAdaptMinFontSize, GetTextAreaAdaptMaxFontSize, GetTextAreaLineHeight, GetgetTextAreaMaxLines,
1806         SetTextAreaPadding, ResetTextAreaPadding, GetTextAreaFontFeature,
1807         SetTextAreaOnChange, ResetTextAreaOnChange,
1808         SetTextAreaEnterKeyType, ResetTextAreaEnterKeyType, SetTextAreaInputFilter, ResetTextAreaInputFilter,
1809         SetTextAreaOnTextSelectionChange, ResetTextAreaOnTextSelectionChange,
1810         SetTextAreaOnContentScroll, ResetTextAreaOnContentScroll,
1811         SetTextAreaOnEditChange, ResetTextAreaOnEditChange, SetTextAreaOnCopy, ResetTextAreaOnCopy,
1812         SetTextAreaOnCut, ResetTextAreaOnCut, SetTextAreaOnPaste, ResetTextAreaOnPaste,
1813         SetTextAreaLineBreakStrategy, ResetTextAreaLineBreakStrategy,
1814         SetTextAreaOnSubmitWithEvent, ResetTextAreaOnSubmitWithEvent,
1815         SetTextAreaContentType, ResetTextAreaContentType, SetTextAreaEnableAutoFill, ResetTextAreaEnableAutoFill,
1816         SetTextAreaBorder, ResetTextAreaBorder, SetTextAreaBorderWidth, ResetTextAreaBorderWidth,
1817         SetTextAreaBorderColor, ResetTextAreaBorderColor, SetTextAreaBorderStyle, ResetTextAreaBorderStyle,
1818         SetTextAreaBorderRadius, ResetTextAreaBorderRadius, SetTextAreaMargin, ResetTextAreaMargin,
1819         GetTextAreaMargin, SetTextAreaCaret,
1820         SetTextAreaOnWillInsert, ResetTextAreaOnWillInsert,
1821         SetTextAreaOnDidInsert, ResetTextAreaOnDidInsert,
1822         SetTextAreaOnWillDelete, ResetTextAreaOnWillDelete,
1823         SetTextAreaOnDidDelete, ResetTextAreaOnDidDelete,
1824         SetTextAreaEnablePreviewText, ResetTextAreaEnablePreviewText, GetTextAreaPadding };
1825     return &modifier;
1826 }
1827 
SetOnTextAreaChange(ArkUINodeHandle node,void * extraParam)1828 void SetOnTextAreaChange(ArkUINodeHandle node, void* extraParam)
1829 {
1830     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1831     CHECK_NULL_VOID(frameNode);
1832     auto onChange = [node, extraParam](const ChangeValueInfo& info) {
1833         ArkUINodeEvent event;
1834         event.kind = TEXT_INPUT;
1835         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1836         event.textInputEvent.subKind = ON_TEXTAREA_CHANGE;
1837         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(info.value.c_str());
1838         SendArkUIAsyncEvent(&event);
1839     };
1840     TextFieldModelNG::SetOnChange(frameNode, std::move(onChange));
1841 }
1842 
SetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node,void * extraParam)1843 void SetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node, void* extraParam)
1844 {
1845     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1846     CHECK_NULL_VOID(frameNode);
1847     auto onChange = [node, extraParam](const ChangeValueInfo& info) {
1848         ArkUINodeEvent eventWithPreview;
1849         eventWithPreview.kind = TEXT_INPUT_CHANGE;
1850         eventWithPreview.extraParam = reinterpret_cast<intptr_t>(extraParam);
1851         eventWithPreview.textChangeEvent.subKind = ON_TEXT_AREA_CHANGE_WITH_PREVIEW_TEXT;
1852         eventWithPreview.textChangeEvent.nativeStringPtr = const_cast<char*>(info.value.c_str());
1853         eventWithPreview.textChangeEvent.extendStringPtr = const_cast<char*>(info.previewText.value.c_str());
1854         eventWithPreview.textChangeEvent.numArgs = info.previewText.offset;
1855         SendArkUIAsyncEvent(&eventWithPreview);
1856     };
1857     TextFieldModelNG::SetOnChange(frameNode, std::move(onChange));
1858 }
1859 
SetOnTextAreaPaste(ArkUINodeHandle node,void * extraParam)1860 void SetOnTextAreaPaste(ArkUINodeHandle node, void* extraParam)
1861 {
1862     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1863     CHECK_NULL_VOID(frameNode);
1864     auto onPaste = [node, extraParam](const std::string& str, NG::TextCommonEvent& commonEvent) {
1865         ArkUINodeEvent event;
1866         event.kind = TEXT_INPUT;
1867         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1868         event.textInputEvent.subKind = ON_TEXTAREA_PASTE;
1869         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(str.c_str());
1870         SendArkUIAsyncEvent(&event);
1871     };
1872     TextFieldModelNG::SetOnPasteWithEvent(frameNode, std::move(onPaste));
1873 }
1874 
SetOnTextAreaSelectionChange(ArkUINodeHandle node,void * extraParam)1875 void SetOnTextAreaSelectionChange(ArkUINodeHandle node, void* extraParam)
1876 {
1877     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1878     CHECK_NULL_VOID(frameNode);
1879     auto onSelectionChange = [node, extraParam](int start, int end) {
1880         ArkUINodeEvent event;
1881         event.kind = COMPONENT_ASYNC_EVENT;
1882         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1883         event.componentAsyncEvent.subKind = ON_TEXTAREA_TEXT_SELECTION_CHANGE;
1884         event.componentAsyncEvent.data[0].i32 = static_cast<int>(start);
1885         event.componentAsyncEvent.data[1].i32 = static_cast<int>(end);
1886         SendArkUIAsyncEvent(&event);
1887     };
1888     TextFieldModelNG::SetOnTextSelectionChange(frameNode, std::move(onSelectionChange));
1889 }
1890 
SetOnTextAreaEditChange(ArkUINodeHandle node,void * extraParam)1891 void SetOnTextAreaEditChange(ArkUINodeHandle node, void* extraParam)
1892 {
1893     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1894     CHECK_NULL_VOID(frameNode);
1895     auto onChange = [node, extraParam](bool isEditing) {
1896         ArkUINodeEvent event;
1897         event.kind = COMPONENT_ASYNC_EVENT;
1898         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1899         event.componentAsyncEvent.subKind = ON_TEXTAREA_EDIT_CHANGE;
1900         event.componentAsyncEvent.data[0].i32 = static_cast<int32_t>(isEditing);
1901         SendArkUIAsyncEvent(&event);
1902     };
1903     TextFieldModelNG::SetOnEditChanged(frameNode, std::move(onChange));
1904 }
1905 
SetOnTextAreaContentSizeChange(ArkUINodeHandle node,void * extraParam)1906 void SetOnTextAreaContentSizeChange(ArkUINodeHandle node, void* extraParam)
1907 {
1908     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1909     CHECK_NULL_VOID(frameNode);
1910     auto onChange = [node, extraParam](float width, float height) {
1911         ArkUINodeEvent event;
1912         event.kind = COMPONENT_ASYNC_EVENT;
1913         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1914         event.componentAsyncEvent.subKind = ON_TEXTAREA_CONTENT_SIZE_CHANGE;
1915         bool usePx = NodeModel::UsePXUnit(reinterpret_cast<ArkUI_Node*>(extraParam));
1916         double density = usePx ? 1 : PipelineBase::GetCurrentDensity();
1917         //0 width
1918         event.componentAsyncEvent.data[0].f32 = NearEqual(density, 0.0) ? 0.0f : width / density;
1919         //1 height
1920         event.componentAsyncEvent.data[1].f32 = NearEqual(density, 0.0) ? 0.0f : height / density;
1921         SendArkUIAsyncEvent(&event);
1922     };
1923     TextFieldModelNG::SetOnContentSizeChange(frameNode, std::move(onChange));
1924 }
1925 
SetOnTextAreaInputFilterError(ArkUINodeHandle node,void * extraParam)1926 void SetOnTextAreaInputFilterError(ArkUINodeHandle node, void* extraParam)
1927 {
1928     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1929     CHECK_NULL_VOID(frameNode);
1930     auto onInputFilterError = [node, extraParam](const std::string& str) {
1931         ArkUINodeEvent event;
1932         event.kind = TEXT_INPUT;
1933         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1934         event.textInputEvent.subKind = ON_TEXT_AREA_INPUT_FILTER_ERROR;
1935         event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(str.c_str());
1936         SendArkUIAsyncEvent(&event);
1937     };
1938     TextFieldModelNG::SetInputFilterError(frameNode, std::move(onInputFilterError));
1939 }
1940 
SetTextAreaOnTextContentScroll(ArkUINodeHandle node,void * extraParam)1941 void SetTextAreaOnTextContentScroll(ArkUINodeHandle node, void* extraParam)
1942 {
1943     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1944     CHECK_NULL_VOID(frameNode);
1945     auto onScroll = [node, extraParam](float totalOffsetX, float totalOffsetY) {
1946         ArkUINodeEvent event;
1947         event.kind = COMPONENT_ASYNC_EVENT;
1948         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1949         event.componentAsyncEvent.subKind = ON_TEXT_AREA_CONTENT_SCROLL;
1950         event.componentAsyncEvent.data[0].f32 = totalOffsetX;
1951         event.componentAsyncEvent.data[1].f32 = totalOffsetY;
1952         SendArkUIAsyncEvent(&event);
1953     };
1954     TextFieldModelNG::SetOnContentScroll(frameNode, std::move(onScroll));
1955 }
1956 
SetTextAreaOnSubmit(ArkUINodeHandle node,void * extraParam)1957 void SetTextAreaOnSubmit(ArkUINodeHandle node, void* extraParam)
1958 {
1959     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1960     CHECK_NULL_VOID(frameNode);
1961     auto onEvent = [node, extraParam](int32_t value, NG::TextFieldCommonEvent& commonEvent) {
1962         ArkUINodeEvent event;
1963         event.kind = COMPONENT_ASYNC_EVENT;
1964         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1965         event.componentAsyncEvent.subKind = ON_TEXTAREA_ON_SUBMIT;
1966         event.componentAsyncEvent.data[0].i32 = value;
1967         SendArkUIAsyncEvent(&event);
1968     };
1969     TextFieldModelNG::SetOnSubmit(frameNode, std::move(onEvent));
1970 }
1971 
ResetOnTextAreaChange(ArkUINodeHandle node)1972 void ResetOnTextAreaChange(ArkUINodeHandle node)
1973 {
1974     GetTextAreaModifier()->resetTextAreaOnChange(node);
1975 }
ResetOnTextAreaPaste(ArkUINodeHandle node)1976 void ResetOnTextAreaPaste(ArkUINodeHandle node)
1977 {
1978     GetTextAreaModifier()->resetTextAreaOnPaste(node);
1979 }
ResetOnTextAreaSelectionChange(ArkUINodeHandle node)1980 void ResetOnTextAreaSelectionChange(ArkUINodeHandle node)
1981 {
1982     GetTextAreaModifier()->resetTextAreaOnTextSelectionChange(node);
1983 }
ResetOnTextAreaEditChange(ArkUINodeHandle node)1984 void ResetOnTextAreaEditChange(ArkUINodeHandle node)
1985 {
1986     GetTextAreaModifier()->resetTextAreaOnEditChange(node);
1987 }
ResetOnTextAreaContentSizeChange(ArkUINodeHandle node)1988 void ResetOnTextAreaContentSizeChange(ArkUINodeHandle node)
1989 {
1990     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1991     CHECK_NULL_VOID(frameNode);
1992     TextFieldModelNG::SetOnContentSizeChange(frameNode, nullptr);
1993 }
ResetOnTextAreaInputFilterError(ArkUINodeHandle node)1994 void ResetOnTextAreaInputFilterError(ArkUINodeHandle node)
1995 {
1996     auto* frameNode = reinterpret_cast<FrameNode*>(node);
1997     CHECK_NULL_VOID(frameNode);
1998     TextFieldModelNG::SetInputFilterError(frameNode, nullptr);
1999 }
ResetTextAreaOnTextContentScroll(ArkUINodeHandle node)2000 void ResetTextAreaOnTextContentScroll(ArkUINodeHandle node)
2001 {
2002     GetTextAreaModifier()->resetTextAreaOnContentScroll(node);
2003 }
ResetTextAreaOnSubmit(ArkUINodeHandle node)2004 void ResetTextAreaOnSubmit(ArkUINodeHandle node)
2005 {
2006     GetTextAreaModifier()->resetTextAreaOnSubmitWithEvent(node);
2007 }
2008 
SetTextAreaOnWillInsertValue(ArkUINodeHandle node,void * extraParam)2009 void SetTextAreaOnWillInsertValue(ArkUINodeHandle node, void* extraParam)
2010 {
2011     auto* frameNode = reinterpret_cast<FrameNode*>(node);
2012     CHECK_NULL_VOID(frameNode);
2013     std::function<bool(const InsertValueInfo&)> onWillInsert = [node, extraParam](
2014         const InsertValueInfo& Info) -> bool {
2015         ArkUINodeEvent event;
2016         event.kind = MIXED_EVENT;
2017         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2018         event.mixedEvent.subKind = ON_TEXT_AREA_WILL_INSERT;
2019         event.mixedEvent.numberData[0].f32 = Info.insertOffset;
2020         event.mixedEvent.numberDataLength = 1;
2021         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.insertValue.c_str());
2022         event.mixedEvent.stringPtrDataLength = 1;
2023         SendArkUIAsyncEvent(&event);
2024         return event.mixedEvent.numberReturnData[0].i32;
2025     };
2026     TextFieldModelNG::SetOnWillInsertValueEvent(frameNode, std::move(onWillInsert));
2027 }
2028 
SetTextAreaOnDidInsertValue(ArkUINodeHandle node,void * extraParam)2029 void SetTextAreaOnDidInsertValue(ArkUINodeHandle node, void* extraParam)
2030 {
2031     auto* frameNode = reinterpret_cast<FrameNode*>(node);
2032     CHECK_NULL_VOID(frameNode);
2033     auto onDidInsert = [node, extraParam](const InsertValueInfo& Info) {
2034         ArkUINodeEvent event;
2035         event.kind = MIXED_EVENT;
2036         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2037         event.mixedEvent.subKind = ON_TEXT_AREA_DID_INSERT;
2038         event.mixedEvent.numberData[0].f32 = Info.insertOffset;
2039         event.mixedEvent.numberDataLength = 1;
2040         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.insertValue.c_str());
2041         event.mixedEvent.stringPtrDataLength = 1;
2042         SendArkUIAsyncEvent(&event);
2043     };
2044     TextFieldModelNG::SetOnDidInsertValueEvent(frameNode, std::move(onDidInsert));
2045 }
2046 
SetTextAreaOnWillDeleteValue(ArkUINodeHandle node,void * extraParam)2047 void SetTextAreaOnWillDeleteValue(ArkUINodeHandle node, void* extraParam)
2048 {
2049     auto* frameNode = reinterpret_cast<FrameNode*>(node);
2050     CHECK_NULL_VOID(frameNode);
2051     auto onWillDelete = [node, extraParam](const DeleteValueInfo& Info) -> bool {
2052         ArkUINodeEvent event;
2053         event.kind = MIXED_EVENT;
2054         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2055         event.mixedEvent.subKind = ON_TEXT_AREA_WILL_DELETE;
2056         event.mixedEvent.numberData[0].f32 = Info.deleteOffset;
2057         event.mixedEvent.numberData[1].i32 = static_cast<int32_t>(Info.direction);
2058         event.mixedEvent.numberDataLength = 2;
2059         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.deleteValue.c_str());
2060         event.mixedEvent.stringPtrDataLength = 1;
2061         SendArkUIAsyncEvent(&event);
2062         return event.mixedEvent.numberReturnData[0].i32;
2063     };
2064     TextFieldModelNG::SetOnWillDeleteEvent(frameNode, std::move(onWillDelete));
2065 }
2066 
SetTextAreaOnDidDeleteValue(ArkUINodeHandle node,void * extraParam)2067 void SetTextAreaOnDidDeleteValue(ArkUINodeHandle node, void* extraParam)
2068 {
2069     auto* frameNode = reinterpret_cast<FrameNode*>(node);
2070     CHECK_NULL_VOID(frameNode);
2071     auto onDidDelete = [node, extraParam](const DeleteValueInfo& Info) {
2072         ArkUINodeEvent event;
2073         event.kind = MIXED_EVENT;
2074         event.extraParam = reinterpret_cast<intptr_t>(extraParam);
2075         event.mixedEvent.subKind = ON_TEXT_AREA_DID_DELETE;
2076         event.mixedEvent.numberData[0].f32 = Info.deleteOffset;
2077         event.mixedEvent.numberData[1].i32 = static_cast<int32_t>(Info.direction);
2078         event.mixedEvent.numberDataLength = 2;
2079         event.mixedEvent.stringPtrData[0] = reinterpret_cast<intptr_t>(Info.deleteValue.c_str());
2080         event.mixedEvent.stringPtrDataLength = 1;
2081         SendArkUIAsyncEvent(&event);
2082     };
2083     TextFieldModelNG::SetOnDidDeleteEvent(frameNode, std::move(onDidDelete));
2084 }
ResetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node)2085 void ResetOnTextAreaChangeWithPreviewText(ArkUINodeHandle node)
2086 {
2087     GetTextAreaModifier()->resetTextAreaOnChange(node);
2088 }
2089 } // namespace NodeModifier
2090 } // namespace OHOS::Ace::NG
2091