• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "core/interfaces/native/node/node_text_input_modifier.h"
16 
17 #include "base/geometry/dimension.h"
18 #include "core/components/common/layout/constants.h"
19 #include "core/components/text_field/textfield_theme.h"
20 #include "core/components_ng/base/frame_node.h"
21 #include "core/components_ng/pattern/text_field/text_field_model_ng.h"
22 #include "core/pipeline/base/element_register.h"
23 #include "bridge/common/utils/utils.h"
24 #include "core/components_ng/base/view_abstract.h"
25 #include "core/components/common/properties/alignment.h"
26 #include "core/components/text_field/textfield_theme.h"
27 #include "core/interfaces/native/node/node_api.h"
28 #include "core/components_ng/pattern/text_field/text_field_event_hub.h"
29 
30 namespace OHOS::Ace::NG {
31 namespace {
32 const uint32_t MAX_LINES = 3;
33 constexpr uint32_t DEFAULT_CARET_COLOR = 0xFF007DFF;
34 constexpr uint32_t DEFAULT_CARE_POSITION = 0;
35 constexpr CopyOptions DEFAULT_TEXT_INPUT_COPY_OPTION = CopyOptions::Local;
36 constexpr bool DEFAULT_SHOW_PASSWORD_ICON_VALUE = true;
37 constexpr TextAlign DAFAULT_TEXT_ALIGN_VALUE = TextAlign::START;
38 constexpr InputStyle DEFAULT_INPUT_STYLE = InputStyle::DEFAULT;
39 constexpr bool DEFAULT_SELECTION_MENU_HIDDEN = false;
40 constexpr bool DEFAULT_SHOW_UNDER_LINE = false;
41 constexpr bool DEFAULT_REQUEST_KEYBOARD_ON_FOCUS = true;
42 constexpr DisplayMode DEFAULT_BAR_STATE = DisplayMode::AUTO;
43 constexpr FontWeight DEFAULT_FONT_WEIGHT = FontWeight::NORMAL;
44 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
45 constexpr int16_t DEFAULT_APLHA = 255;
46 constexpr double DEFAULT_OPACITY = 0.2;
47 const std::vector<std::string> DEFAULT_FONT_FAMILY = { "HarmonyOS Sans" };
48 const std::vector<TextAlign> TEXT_ALIGNS = { TextAlign::START, TextAlign::CENTER, TextAlign::END, TextAlign::JUSTIFY };
49 
SetTextInputCaretColor(ArkUINodeHandle node,uint32_t color)50 void SetTextInputCaretColor(ArkUINodeHandle node, uint32_t color)
51 {
52     auto *frameNode = reinterpret_cast<FrameNode *>(node);
53     CHECK_NULL_VOID(frameNode);
54     TextFieldModelNG::SetCaretColor(frameNode, Color(color));
55 }
56 
ResetTextInputCaretColor(ArkUINodeHandle node)57 void ResetTextInputCaretColor(ArkUINodeHandle node)
58 {
59     auto *frameNode = reinterpret_cast<FrameNode *>(node);
60     CHECK_NULL_VOID(frameNode);
61     TextFieldModelNG::SetCaretColor(frameNode, Color(DEFAULT_CARET_COLOR));
62 }
63 
SetTextInputType(ArkUINodeHandle node,int32_t value)64 void SetTextInputType(ArkUINodeHandle node, int32_t value)
65 {
66     auto *frameNode = reinterpret_cast<FrameNode *>(node);
67     CHECK_NULL_VOID(frameNode);
68     TextFieldModelNG::SetType(frameNode, static_cast<TextInputType>(value));
69 }
70 
ResetTextInputType(ArkUINodeHandle node)71 void ResetTextInputType(ArkUINodeHandle node)
72 {
73     auto *frameNode = reinterpret_cast<FrameNode *>(node);
74     CHECK_NULL_VOID(frameNode);
75     TextFieldModelNG::SetType(frameNode, TextInputType::UNSPECIFIED);
76     return;
77 }
78 
SetTextInputMaxLines(ArkUINodeHandle node,int32_t value)79 void SetTextInputMaxLines(ArkUINodeHandle node, int32_t value)
80 {
81     auto *frameNode = reinterpret_cast<FrameNode *>(node);
82     CHECK_NULL_VOID(frameNode);
83     if (value <= 0) {
84         TextFieldModelNG::SetMaxViewLines(frameNode, MAX_LINES);
85         return;
86     }
87 
88     TextFieldModelNG::SetMaxViewLines(frameNode, value);
89 }
90 
ResetTextInputMaxLines(ArkUINodeHandle node)91 void ResetTextInputMaxLines(ArkUINodeHandle node)
92 {
93     auto *frameNode = reinterpret_cast<FrameNode *>(node);
94     CHECK_NULL_VOID(frameNode);
95     TextFieldModelNG::SetMaxViewLines(frameNode, MAX_LINES);
96 }
97 
SetTextInputPlaceholderColor(ArkUINodeHandle node,uint32_t color)98 void SetTextInputPlaceholderColor(ArkUINodeHandle node, uint32_t color)
99 {
100     auto *frameNode = reinterpret_cast<FrameNode *>(node);
101     CHECK_NULL_VOID(frameNode);
102     TextFieldModelNG::SetPlaceholderColor(frameNode, Color(color));
103 }
104 
ResetTextInputPlaceholderColor(ArkUINodeHandle node)105 void ResetTextInputPlaceholderColor(ArkUINodeHandle node)
106 {
107     auto *frameNode = reinterpret_cast<FrameNode *>(node);
108     CHECK_NULL_VOID(frameNode);
109     auto pipeline = PipelineBase::GetCurrentContext();
110     CHECK_NULL_VOID(pipeline);
111     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
112     CHECK_NULL_VOID(theme);
113     TextFieldModelNG::SetPlaceholderColor(frameNode, theme->GetPlaceholderColor());
114 }
115 
SetTextInputCaretPosition(ArkUINodeHandle node,int32_t caretPosition)116 void SetTextInputCaretPosition(ArkUINodeHandle node, int32_t caretPosition)
117 {
118     auto *frameNode = reinterpret_cast<FrameNode *>(node);
119     CHECK_NULL_VOID(frameNode);
120     TextFieldModelNG::SetCaretPosition(frameNode, caretPosition);
121 }
122 
ResetTextInputCaretPosition(ArkUINodeHandle node)123 void ResetTextInputCaretPosition(ArkUINodeHandle node)
124 {
125     auto *frameNode = reinterpret_cast<FrameNode *>(node);
126     CHECK_NULL_VOID(frameNode);
127     TextFieldModelNG::SetCaretPosition(frameNode, DEFAULT_CARE_POSITION);
128 }
129 
SetTextInputCopyOption(ArkUINodeHandle node,int32_t copyOption)130 void SetTextInputCopyOption(ArkUINodeHandle node, int32_t copyOption)
131 {
132     auto *frameNode = reinterpret_cast<FrameNode *>(node);
133     CHECK_NULL_VOID(frameNode);
134     TextFieldModelNG::SetCopyOption(frameNode, static_cast<CopyOptions>(copyOption));
135 }
136 
ResetTextInputCopyOption(ArkUINodeHandle node)137 void ResetTextInputCopyOption(ArkUINodeHandle node)
138 {
139     auto *frameNode = reinterpret_cast<FrameNode *>(node);
140     CHECK_NULL_VOID(frameNode);
141     TextFieldModelNG::SetCopyOption(frameNode, DEFAULT_TEXT_INPUT_COPY_OPTION);
142 }
143 
SetTextInputShowPasswordIcon(ArkUINodeHandle node,uint32_t value)144 void SetTextInputShowPasswordIcon(ArkUINodeHandle node, uint32_t value)
145 {
146     auto *frameNode = reinterpret_cast<FrameNode *>(node);
147     CHECK_NULL_VOID(frameNode);
148     TextFieldModelNG::SetShowPasswordIcon(frameNode, static_cast<bool>(value));
149 }
150 
ResetTextInputShowPasswordIcon(ArkUINodeHandle node)151 void ResetTextInputShowPasswordIcon(ArkUINodeHandle node)
152 {
153     auto *frameNode = reinterpret_cast<FrameNode *>(node);
154     CHECK_NULL_VOID(frameNode);
155     TextFieldModelNG::SetShowPasswordIcon(frameNode, DEFAULT_SHOW_PASSWORD_ICON_VALUE);
156 }
157 
SetTextInputPasswordIcon(ArkUINodeHandle node,const struct ArkUIPasswordIconType * value)158 void SetTextInputPasswordIcon(ArkUINodeHandle node, const struct ArkUIPasswordIconType* value)
159 {
160     auto *frameNode = reinterpret_cast<FrameNode *>(node);
161     CHECK_NULL_VOID(frameNode);
162     PasswordIcon passwordIcon;
163     if (value->showResult != nullptr && std::string(value->showResult) != "") {
164         passwordIcon.showResult = value->showResult;
165     } else {
166         if (value->showBundleName != nullptr && std::string(value->showBundleName) != "") {
167             passwordIcon.showBundleName = value->showBundleName;
168         }
169         if (value->showModuleName != nullptr && std::string(value->showModuleName) != "") {
170             passwordIcon.showModuleName = value->showModuleName;
171         }
172     }
173     if (value->hideResult != nullptr && std::string(value->hideResult) != "") {
174         passwordIcon.hideResult = value->hideResult;
175     } else {
176         if (value->hideBundleName != nullptr && std::string(value->hideBundleName) != "") {
177             passwordIcon.hideBundleName = value->hideBundleName;
178         }
179         if (value->hideModuleName != nullptr && std::string(value->hideModuleName) != "") {
180             passwordIcon.hideModuleName = value->hideModuleName;
181         }
182     }
183     TextFieldModelNG::SetPasswordIcon(frameNode, passwordIcon);
184 }
185 
ResetTextInputPasswordIcon(ArkUINodeHandle node)186 void ResetTextInputPasswordIcon(ArkUINodeHandle node)
187 {
188     auto *frameNode = reinterpret_cast<FrameNode *>(node);
189     CHECK_NULL_VOID(frameNode);
190     PasswordIcon passwordIcon;
191     passwordIcon.showResult = "";
192     passwordIcon.hideResult = "";
193     TextFieldModelNG::SetPasswordIcon(frameNode, passwordIcon);
194 }
195 
SetTextInputTextAlign(ArkUINodeHandle node,int32_t value)196 void SetTextInputTextAlign(ArkUINodeHandle node, int32_t value)
197 {
198     auto *frameNode = reinterpret_cast<FrameNode *>(node);
199     CHECK_NULL_VOID(frameNode);
200     if (value >= 0 && value < static_cast<int32_t>(TEXT_ALIGNS.size())) {
201         TextFieldModelNG::SetTextAlign(frameNode, TEXT_ALIGNS[value]);
202     } else {
203         TextFieldModelNG::SetTextAlign(frameNode, DAFAULT_TEXT_ALIGN_VALUE);
204     }
205 }
206 
ResetTextInputTextAlign(ArkUINodeHandle node)207 void ResetTextInputTextAlign(ArkUINodeHandle node)
208 {
209     auto *frameNode = reinterpret_cast<FrameNode *>(node);
210     CHECK_NULL_VOID(frameNode);
211     TextFieldModelNG::SetTextAlign(frameNode, DAFAULT_TEXT_ALIGN_VALUE);
212 }
213 
SetTextInputStyle(ArkUINodeHandle node,int32_t style)214 void SetTextInputStyle(ArkUINodeHandle node, int32_t style)
215 {
216     auto *frameNode = reinterpret_cast<FrameNode *>(node);
217     CHECK_NULL_VOID(frameNode);
218     TextFieldModelNG::SetInputStyle(frameNode, static_cast<InputStyle>(style));
219 }
220 
ResetTextInputStyle(ArkUINodeHandle node)221 void ResetTextInputStyle(ArkUINodeHandle node)
222 {
223     auto *frameNode = reinterpret_cast<FrameNode *>(node);
224     CHECK_NULL_VOID(frameNode);
225     TextFieldModelNG::SetInputStyle(frameNode, DEFAULT_INPUT_STYLE);
226 }
227 
SetTextInputSelectionMenuHidden(ArkUINodeHandle node,uint32_t menuHiddenValue)228 void SetTextInputSelectionMenuHidden(ArkUINodeHandle node, uint32_t menuHiddenValue)
229 {
230     auto *frameNode = reinterpret_cast<FrameNode *>(node);
231     CHECK_NULL_VOID(frameNode);
232     TextFieldModelNG::SetSelectionMenuHidden(frameNode, static_cast<bool>(menuHiddenValue));
233 }
234 
ResetTextInputSelectionMenuHidden(ArkUINodeHandle node)235 void ResetTextInputSelectionMenuHidden(ArkUINodeHandle node)
236 {
237     auto *frameNode = reinterpret_cast<FrameNode *>(node);
238     CHECK_NULL_VOID(frameNode);
239     TextFieldModelNG::SetSelectionMenuHidden(frameNode, DEFAULT_SELECTION_MENU_HIDDEN);
240 }
241 
SetTextInputShowUnderline(ArkUINodeHandle node,uint32_t showUnderLine)242 void SetTextInputShowUnderline(ArkUINodeHandle node, uint32_t showUnderLine)
243 {
244     auto *frameNode = reinterpret_cast<FrameNode *>(node);
245     CHECK_NULL_VOID(frameNode);
246     TextFieldModelNG::SetShowUnderline(frameNode, static_cast<bool>(showUnderLine));
247 }
248 
ResetTextInputShowUnderline(ArkUINodeHandle node)249 void ResetTextInputShowUnderline(ArkUINodeHandle node)
250 {
251     auto *frameNode = reinterpret_cast<FrameNode *>(node);
252     CHECK_NULL_VOID(frameNode);
253     TextFieldModelNG::SetShowUnderline(frameNode, DEFAULT_SHOW_UNDER_LINE);
254 }
255 
SetTextInputCaretStyle(ArkUINodeHandle node,const ArkUILengthType * value)256 void SetTextInputCaretStyle(ArkUINodeHandle node, const ArkUILengthType* value)
257 {
258     auto *frameNode = reinterpret_cast<FrameNode *>(node);
259     CHECK_NULL_VOID(frameNode);
260     CalcDimension width;
261     if (value->string != nullptr) {
262         width.SetCalcValue(value->string);
263     } else {
264         width.SetValue(value->number);
265     }
266     width.SetUnit(static_cast<DimensionUnit>(value->unit));
267 
268     CaretStyle caretStyle;
269     caretStyle.caretWidth = width;
270     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
271 }
272 
ResetTextInputCaretStyle(ArkUINodeHandle node)273 void ResetTextInputCaretStyle(ArkUINodeHandle node)
274 {
275     auto *frameNode = reinterpret_cast<FrameNode *>(node);
276     CHECK_NULL_VOID(frameNode);
277 
278     auto pipeline = PipelineBase::GetCurrentContext();
279     CHECK_NULL_VOID(pipeline);
280     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
281     CHECK_NULL_VOID(theme);
282 
283     CaretStyle caretStyle;
284     caretStyle.caretWidth = theme->GetCursorWidth();
285     TextFieldModelNG::SetCaretStyle(frameNode, caretStyle);
286 }
287 
SetTextInputEnableKeyboardOnFocus(ArkUINodeHandle node,uint32_t value)288 void SetTextInputEnableKeyboardOnFocus(ArkUINodeHandle node, uint32_t value)
289 {
290     auto *frameNode = reinterpret_cast<FrameNode *>(node);
291     CHECK_NULL_VOID(frameNode);
292     TextFieldModelNG::RequestKeyboardOnFocus(frameNode, static_cast<bool>(value));
293 }
294 
ResetTextInputEnableKeyboardOnFocus(ArkUINodeHandle node)295 void ResetTextInputEnableKeyboardOnFocus(ArkUINodeHandle node)
296 {
297     auto *frameNode = reinterpret_cast<FrameNode *>(node);
298     CHECK_NULL_VOID(frameNode);
299     TextFieldModelNG::RequestKeyboardOnFocus(frameNode, DEFAULT_REQUEST_KEYBOARD_ON_FOCUS);
300 }
301 
SetTextInputBarState(ArkUINodeHandle node,int32_t value)302 void SetTextInputBarState(ArkUINodeHandle node, int32_t value)
303 {
304     auto *frameNode = reinterpret_cast<FrameNode *>(node);
305     CHECK_NULL_VOID(frameNode);
306     TextFieldModelNG::SetBarState(frameNode, static_cast<DisplayMode>(value));
307 }
308 
ResetTextInputBarState(ArkUINodeHandle node)309 void ResetTextInputBarState(ArkUINodeHandle node)
310 {
311     auto *frameNode = reinterpret_cast<FrameNode *>(node);
312     CHECK_NULL_VOID(frameNode);
313     TextFieldModelNG::SetBarState(frameNode, DEFAULT_BAR_STATE);
314 }
315 
SetTextInputEnterKeyType(ArkUINodeHandle node,int32_t value)316 void SetTextInputEnterKeyType(ArkUINodeHandle node, int32_t value)
317 {
318     auto *frameNode = reinterpret_cast<FrameNode *>(node);
319     CHECK_NULL_VOID(frameNode);
320     TextFieldModelNG::SetEnterKeyType(frameNode, static_cast<TextInputAction>(value));
321 }
322 
ResetTextInputEnterKeyType(ArkUINodeHandle node)323 void ResetTextInputEnterKeyType(ArkUINodeHandle node)
324 {
325     auto *frameNode = reinterpret_cast<FrameNode *>(node);
326     CHECK_NULL_VOID(frameNode);
327     TextFieldModelNG::SetEnterKeyType(frameNode, TextInputAction::DONE);
328 }
329 
SetTextInputFontWeight(ArkUINodeHandle node,const char * fontWeight)330 void SetTextInputFontWeight(ArkUINodeHandle node, const char *fontWeight)
331 {
332     auto *frameNode = reinterpret_cast<FrameNode *>(node);
333     CHECK_NULL_VOID(frameNode);
334     TextFieldModelNG::SetFontWeight(frameNode, Framework::ConvertStrToFontWeight(fontWeight));
335 }
336 
ResetTextInputFontWeight(ArkUINodeHandle node)337 void ResetTextInputFontWeight(ArkUINodeHandle node)
338 {
339     auto *frameNode = reinterpret_cast<FrameNode *>(node);
340     CHECK_NULL_VOID(frameNode);
341     TextFieldModelNG::SetFontWeight(frameNode, FontWeight::NORMAL);
342 }
343 
SetTextInputFontSize(ArkUINodeHandle node,const struct ArkUILengthType * value)344 void SetTextInputFontSize(ArkUINodeHandle node, const struct ArkUILengthType *value)
345 {
346     auto *frameNode = reinterpret_cast<FrameNode *>(node);
347     CHECK_NULL_VOID(frameNode);
348     CalcDimension fontSize;
349     if (value->string != nullptr) {
350         fontSize.SetCalcValue(value->string);
351     } else {
352         fontSize.SetValue(value->number);
353     }
354     fontSize.SetUnit(static_cast<DimensionUnit>(value->unit));
355     TextFieldModelNG::SetFontSize(frameNode, fontSize);
356 }
357 
ResetTextInputFontSize(ArkUINodeHandle node)358 void ResetTextInputFontSize(ArkUINodeHandle node)
359 {
360     auto *frameNode = reinterpret_cast<FrameNode *>(node);
361     CHECK_NULL_VOID(frameNode);
362     auto pipeline = PipelineBase::GetCurrentContext();
363     CHECK_NULL_VOID(pipeline);
364     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
365     CHECK_NULL_VOID(theme);
366     TextFieldModelNG::SetFontSize(frameNode, theme->GetFontSize());
367 }
368 
SetTextInputMaxLength(ArkUINodeHandle node,uint32_t value)369 void SetTextInputMaxLength(ArkUINodeHandle node, uint32_t value)
370 {
371     auto *frameNode = reinterpret_cast<FrameNode *>(node);
372     CHECK_NULL_VOID(frameNode);
373     TextFieldModelNG::SetMaxLength(frameNode, value);
374 }
375 
ResetTextInputMaxLength(ArkUINodeHandle node)376 void ResetTextInputMaxLength(ArkUINodeHandle node)
377 {
378     auto *frameNode = reinterpret_cast<FrameNode *>(node);
379     CHECK_NULL_VOID(frameNode);
380     TextFieldModelNG::ResetMaxLength(frameNode);
381 }
382 
SetTextInputSelectedBackgroundColor(ArkUINodeHandle node,uint32_t color)383 void SetTextInputSelectedBackgroundColor(ArkUINodeHandle node, uint32_t color)
384 {
385     auto *frameNode = reinterpret_cast<FrameNode *>(node);
386     CHECK_NULL_VOID(frameNode);
387     TextFieldModelNG::SetSelectedBackgroundColor(frameNode, Color(color));
388 }
389 
ResetTextInputSelectedBackgroundColor(ArkUINodeHandle node)390 void ResetTextInputSelectedBackgroundColor(ArkUINodeHandle node)
391 {
392     auto *frameNode = reinterpret_cast<FrameNode *>(node);
393     CHECK_NULL_VOID(frameNode);
394     Color selectedColor;
395     auto pipeline = PipelineBase::GetCurrentContext();
396     CHECK_NULL_VOID(pipeline);
397     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
398     CHECK_NULL_VOID(theme);
399     selectedColor = theme->GetSelectedColor();
400     if (selectedColor.GetAlpha() == DEFAULT_APLHA) {
401         // Default setting of 20% opacity
402         selectedColor = selectedColor.ChangeOpacity(DEFAULT_OPACITY);
403     }
404     TextFieldModelNG::SetSelectedBackgroundColor(frameNode, selectedColor);
405 }
406 
SetTextInputShowError(ArkUINodeHandle node,const char * error,uint32_t visible)407 void SetTextInputShowError(ArkUINodeHandle node, const char *error, uint32_t visible)
408 {
409     auto *frameNode = reinterpret_cast<FrameNode *>(node);
410     CHECK_NULL_VOID(frameNode);
411     TextFieldModelNG::SetShowError(frameNode, std::string(error), static_cast<bool>(visible));
412 }
413 
ResetTextInputShowError(ArkUINodeHandle node)414 void ResetTextInputShowError(ArkUINodeHandle node)
415 {
416     auto *frameNode = reinterpret_cast<FrameNode *>(node);
417     CHECK_NULL_VOID(frameNode);
418     TextFieldModelNG::SetShowError(frameNode, std::string(""), false);
419 }
420 
SetTextInputPlaceholderFont(ArkUINodeHandle node,const struct ArkUIPlaceholderFontType * placeholderFont)421 void SetTextInputPlaceholderFont(ArkUINodeHandle node, const struct ArkUIPlaceholderFontType* placeholderFont)
422 {
423     auto *frameNode = reinterpret_cast<FrameNode *>(node);
424     CHECK_NULL_VOID(frameNode);
425     Font font;
426     CalcDimension fontSize;
427     if (placeholderFont->size != nullptr) {
428         if (placeholderFont->size->string != nullptr) {
429             fontSize.SetCalcValue(placeholderFont->size->string);
430         } else {
431             fontSize.SetValue(placeholderFont->size->number);
432         }
433     }
434     fontSize.SetUnit(static_cast<DimensionUnit>(placeholderFont->size->unit));
435     font.fontSize = fontSize;
436     if (placeholderFont->weight != nullptr && std::string(placeholderFont->weight) != "") {
437         font.fontWeight = Framework::ConvertStrToFontWeight(placeholderFont->weight);
438     }
439     if (placeholderFont->fontFamilies != nullptr && placeholderFont->length > 0) {
440         for (uint32_t i = 0; i < placeholderFont->length; i++) {
441             const char* family = *(placeholderFont->fontFamilies + i);
442             if (family != nullptr) {
443                 font.fontFamilies.emplace_back(std::string(family));
444             }
445         }
446     }
447     if (placeholderFont->style >= 0) {
448         font.fontStyle = static_cast<Ace::FontStyle>(placeholderFont->style);
449     }
450     TextFieldModelNG::SetPlaceholderFont(frameNode, font);
451 }
452 
ResetTextInputPlaceholderFont(ArkUINodeHandle node)453 void ResetTextInputPlaceholderFont(ArkUINodeHandle node)
454 {
455     auto *frameNode = reinterpret_cast<FrameNode *>(node);
456     CHECK_NULL_VOID(frameNode);
457     Font font;
458     auto pipeline = PipelineBase::GetCurrentContext();
459     CHECK_NULL_VOID(pipeline);
460     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
461     CHECK_NULL_VOID(theme);
462     font.fontSize = theme->GetFontSize();
463     font.fontWeight = DEFAULT_FONT_WEIGHT;
464     font.fontStyle = DEFAULT_FONT_STYLE;
465     TextFieldModelNG::SetPlaceholderFont(frameNode, font);
466 }
467 
SetTextInputFontColor(ArkUINodeHandle node,uint32_t color)468 void SetTextInputFontColor(ArkUINodeHandle node, uint32_t color)
469 {
470     auto *frameNode = reinterpret_cast<FrameNode *>(node);
471     CHECK_NULL_VOID(frameNode);
472     TextFieldModelNG::SetTextColor(frameNode, Color(color));
473 }
474 
ResetTextInputFontColor(ArkUINodeHandle node)475 void ResetTextInputFontColor(ArkUINodeHandle node)
476 {
477     auto *frameNode = reinterpret_cast<FrameNode *>(node);
478     CHECK_NULL_VOID(frameNode);
479     auto pipeline = PipelineBase::GetCurrentContext();
480     CHECK_NULL_VOID(pipeline);
481     auto theme = pipeline->GetThemeManager()->GetTheme<TextFieldTheme>();
482     CHECK_NULL_VOID(theme);
483     TextFieldModelNG::SetTextColor(frameNode, theme->GetTextColor());
484 }
485 
SetTextInputFontStyle(ArkUINodeHandle node,uint32_t value)486 void SetTextInputFontStyle(ArkUINodeHandle node, uint32_t value)
487 {
488     auto *frameNode = reinterpret_cast<FrameNode *>(node);
489     CHECK_NULL_VOID(frameNode);
490     TextFieldModelNG::SetFontStyle(frameNode, static_cast<Ace::FontStyle>(value));
491 }
492 
ResetTextInputFontStyle(ArkUINodeHandle node)493 void ResetTextInputFontStyle(ArkUINodeHandle node)
494 {
495     auto *frameNode = reinterpret_cast<FrameNode *>(node);
496     CHECK_NULL_VOID(frameNode);
497     TextFieldModelNG::SetFontStyle(frameNode, DEFAULT_FONT_STYLE);
498 }
499 
SetTextInputFontFamily(ArkUINodeHandle node,const char ** fontFamilies,uint32_t length)500 void SetTextInputFontFamily(ArkUINodeHandle node, const char** fontFamilies, uint32_t length)
501 {
502     CHECK_NULL_VOID(fontFamilies);
503     if (length <= 0) {
504         return;
505     }
506     auto *frameNode = reinterpret_cast<FrameNode *>(node);
507     CHECK_NULL_VOID(frameNode);
508     std::vector<std::string> families;
509     for (uint32_t i = 0; i < length; i++) {
510         const char* family = *(fontFamilies + i);
511         if (family != nullptr) {
512             families.emplace_back(std::string(family));
513         }
514     }
515     TextFieldModelNG::SetFontFamily(frameNode, families);
516 }
517 
ResetTextInputFontFamily(ArkUINodeHandle node)518 void ResetTextInputFontFamily(ArkUINodeHandle node)
519 {
520     auto *frameNode = reinterpret_cast<FrameNode *>(node);
521     CHECK_NULL_VOID(frameNode);
522     TextFieldModelNG::SetFontFamily(frameNode, DEFAULT_FONT_FAMILY);
523 }
524 
SetTextInputPlaceholderString(ArkUINodeHandle node,const char * value)525 void SetTextInputPlaceholderString(ArkUINodeHandle node, const char* value)
526 {
527     auto *frameNode = reinterpret_cast<FrameNode *>(node);
528     CHECK_NULL_VOID(frameNode);
529     std::string placeholderStr(value);
530     TextFieldModelNG::SetTextFieldPlaceHolder(frameNode, placeholderStr);
531 }
532 
SetTextInputTextString(ArkUINodeHandle node,const char * value)533 void SetTextInputTextString(ArkUINodeHandle node, const char* value)
534 {
535     auto *frameNode = reinterpret_cast<FrameNode *>(node);
536     CHECK_NULL_VOID(frameNode);
537     std::string textStr(value);
538     TextFieldModelNG::SetTextFieldText(frameNode, textStr);
539 }
540 } // namespace
541 
542 namespace NodeModifier {
GetTextInputModifier()543 const ArkUITextInputModifier* GetTextInputModifier()
544 {
545     static const ArkUITextInputModifier modifier = {
546         SetTextInputCaretColor,
547         ResetTextInputCaretColor,
548         SetTextInputType,
549         ResetTextInputType,
550         SetTextInputMaxLines,
551         ResetTextInputMaxLines,
552         SetTextInputPlaceholderColor,
553         ResetTextInputPlaceholderColor,
554         SetTextInputCaretPosition,
555         ResetTextInputCaretPosition,
556         SetTextInputCopyOption,
557         ResetTextInputCopyOption,
558         SetTextInputShowPasswordIcon,
559         ResetTextInputShowPasswordIcon,
560         SetTextInputPasswordIcon,
561         ResetTextInputPasswordIcon,
562         SetTextInputTextAlign,
563         ResetTextInputTextAlign,
564         SetTextInputStyle,
565         ResetTextInputStyle,
566         SetTextInputSelectionMenuHidden,
567         ResetTextInputSelectionMenuHidden,
568         SetTextInputShowUnderline,
569         ResetTextInputShowUnderline,
570         SetTextInputCaretStyle,
571         ResetTextInputCaretStyle,
572         SetTextInputEnableKeyboardOnFocus,
573         ResetTextInputEnableKeyboardOnFocus,
574         SetTextInputBarState,
575         ResetTextInputBarState,
576         SetTextInputEnterKeyType,
577         ResetTextInputEnterKeyType,
578         SetTextInputFontWeight,
579         ResetTextInputFontWeight,
580         SetTextInputFontSize,
581         ResetTextInputFontSize,
582         SetTextInputMaxLength,
583         ResetTextInputMaxLength,
584         SetTextInputSelectedBackgroundColor,
585         ResetTextInputSelectedBackgroundColor,
586         SetTextInputShowError,
587         ResetTextInputShowError,
588         SetTextInputPlaceholderFont,
589         ResetTextInputPlaceholderFont,
590         SetTextInputFontColor,
591         ResetTextInputFontColor,
592         SetTextInputFontStyle,
593         ResetTextInputFontStyle,
594         SetTextInputFontFamily,
595         ResetTextInputFontFamily,
596         SetTextInputPlaceholderString,
597         SetTextInputTextString,
598     };
599     return &modifier;
600 }
601 
SetOnTextInputChange(ArkUINodeHandle node,ArkUI_Int32 eventId,void * extraParam)602 void SetOnTextInputChange(ArkUINodeHandle node, ArkUI_Int32 eventId, void* extraParam)
603 {
604     auto* frameNode = reinterpret_cast<FrameNode*>(node);
605     CHECK_NULL_VOID(frameNode);
606     auto onChange = [node, eventId, extraParam](const std::string& str) {
607         ArkUINodeEvent event;
608         event.kind = ON_TEXT_INPUT_CHANGE;
609         event.eventId = eventId;
610         event.extraParam= extraParam;
611         event.stringAsyncEvent.pStr = str.c_str();
612         SendArkUIAsyncEvent(&event);
613     };
614     TextFieldModelNG::SetOnChange(frameNode, std::move(onChange));
615 }
616 
SetTextInputOnSubmit(ArkUINodeHandle node,ArkUI_Int32 eventId,void * extraParam)617 void SetTextInputOnSubmit(ArkUINodeHandle node, ArkUI_Int32 eventId, void* extraParam)
618 {
619     auto* frameNode = reinterpret_cast<FrameNode*>(node);
620     CHECK_NULL_VOID(frameNode);
621     auto onEvent = [node, eventId, extraParam](int32_t value, NG::TextFieldCommonEvent& commonEvent) {
622         ArkUINodeEvent event;
623         event.kind = ON_TEXT_INPUT_SUBMIT;
624         event.eventId = eventId;
625         event.extraParam= extraParam;
626         event.componentAsyncEvent.data[0].i32 = value;
627         SendArkUIAsyncEvent(&event);
628     };
629     TextFieldModelNG::SetOnSubmit(frameNode, std::move(onEvent));
630 }
631 
632 } // namespace NodeModifier
633 } // namespace OHOS::Ace::NG