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