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