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