• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2025 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 
16 #include "core/components_ng/pattern/text_field/text_field_model_ng.h"
17 
18 #include <cstddef>
19 
20 #include "base/geometry/dimension.h"
21 #include "base/memory/ace_type.h"
22 #include "base/memory/referenced.h"
23 #include "base/utils/utils.h"
24 #include "core/common/ime/text_edit_controller.h"
25 #include "core/common/ime/text_input_type.h"
26 #include "core/components_ng/pattern/text_field/text_field_layout_property.h"
27 #include "core/components_ng/pattern/text_field/text_field_paint_property.h"
28 #include "core/components_ng/pattern/text_field/text_field_pattern.h"
29 
30 namespace OHOS::Ace::NG {
31 namespace {
32 const std::string DROP_TYPE_STYLED_STRING = "ApplicationDefinedType";
33 const std::string DROP_TYPE_PLAIN_TEXT = "general.plain-text";
34 const std::string DROP_TYPE_HYPERLINK = "general.hyperlink";
35 }
CreateNode(const std::optional<std::u16string> & placeholder,const std::optional<std::u16string> & value,bool isTextArea)36 void TextFieldModelNG::CreateNode(
37     const std::optional<std::u16string>& placeholder, const std::optional<std::u16string>& value, bool isTextArea)
38 {
39     auto* stack = ViewStackProcessor::GetInstance();
40     auto nodeId = stack->ClaimNodeId();
41     ACE_LAYOUT_SCOPED_TRACE("Create[%s][self:%d]", isTextArea ? V2::TEXTAREA_ETS_TAG : V2::TEXTINPUT_ETS_TAG, nodeId);
42     auto frameNode = FrameNode::GetOrCreateFrameNode(isTextArea ? V2::TEXTAREA_ETS_TAG : V2::TEXTINPUT_ETS_TAG, nodeId,
43         []() { return AceType::MakeRefPtr<TextFieldPattern>(); });
44     stack->Push(frameNode);
45     auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
46     CHECK_NULL_VOID(textFieldLayoutProperty);
47     auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
48     CHECK_NULL_VOID(textfieldPaintProperty);
49     std::set<std::string> allowDropSet({ DROP_TYPE_PLAIN_TEXT, DROP_TYPE_HYPERLINK, DROP_TYPE_STYLED_STRING });
50     frameNode->SetAllowDrop(allowDropSet);
51     auto pattern = frameNode->GetPattern<TextFieldPattern>();
52     pattern->SetModifyDoneStatus(false);
53     pattern->ResetContextAttr();
54     auto textValue = pattern->GetTextUtf16Value();
55     if (value.has_value() && value.value() != textValue) {
56         auto changed = pattern->InitValueText(value.value());
57         pattern->SetTextChangedAtCreation(changed);
58     }
59     if (!pattern->HasOperationRecords()) {
60         pattern->UpdateEditingValueToRecord(); // record initial status
61     }
62     textFieldLayoutProperty->UpdatePlaceholder(placeholder.value_or(u""));
63     if (!isTextArea) {
64         textFieldLayoutProperty->UpdateMaxLines(1);
65         textFieldLayoutProperty->UpdatePlaceholderMaxLines(1);
66         pattern->SetTextInputFlag(true);
67     } else {
68         textFieldLayoutProperty->UpdatePlaceholderMaxLines(Infinity<uint32_t>());
69     }
70     pattern->SetTextFieldController(AceType::MakeRefPtr<TextFieldController>());
71     pattern->GetTextFieldController()->SetPattern(AceType::WeakClaim(AceType::RawPtr(pattern)));
72     pattern->SetTextEditController(AceType::MakeRefPtr<TextEditController>());
73     pattern->InitSurfaceChangedCallback();
74     pattern->RegisterWindowSizeCallback();
75     pattern->InitSurfacePositionChangedCallback();
76     pattern->InitTheme();
77     auto pipeline = frameNode->GetContext();
78     CHECK_NULL_VOID(pipeline);
79     auto colorMode = pipeline->GetColorMode();
80     pattern->SetOriginCursorColor(colorMode == ColorMode::DARK ? Color(0x4DFFFFFF) : Color(0x4D000000));
81     if (pipeline->GetHasPreviewTextOption()) {
82         pattern->SetSupportPreviewText(pipeline->GetSupportPreviewText());
83     }
84     auto textFieldTheme = pattern->GetTheme();
85     CHECK_NULL_VOID(textFieldTheme);
86     textfieldPaintProperty->UpdatePressBgColor(textFieldTheme->GetPressColor());
87     textfieldPaintProperty->UpdateHoverBgColor(textFieldTheme->GetHoverColor());
88     pattern->SetHoverPressBgColorEnabled(textFieldTheme->GetHoverAndPressBgColorEnabled());
89     textfieldPaintProperty->UpdateCursorColor(textFieldTheme->GetCursorColor());
90     CaretStyle caretStyle;
91     caretStyle.caretWidth = textFieldTheme->GetCursorWidth();
92     SetCaretStyle(caretStyle);
93     AddDragFrameNodeToManager();
94     if (frameNode->IsFirstBuilding()) {
95         auto draggable = pipeline->GetDraggable<TextFieldTheme>();
96         SetDraggable(draggable);
97         auto gestureHub = frameNode->GetOrCreateGestureEventHub();
98         CHECK_NULL_VOID(gestureHub);
99         gestureHub->SetTextDraggable(true);
100     }
101 }
102 
CreateFrameNode(int32_t nodeId,const std::optional<std::u16string> & placeholder,const std::optional<std::u16string> & value,bool isTextArea)103 RefPtr<FrameNode> TextFieldModelNG::CreateFrameNode(int32_t nodeId, const std::optional<std::u16string>& placeholder,
104     const std::optional<std::u16string>& value, bool isTextArea)
105 {
106     auto frameNode = FrameNode::CreateFrameNode(
107         isTextArea ? V2::TEXTAREA_ETS_TAG : V2::TEXTINPUT_ETS_TAG, nodeId, AceType::MakeRefPtr<TextFieldPattern>());
108     auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
109     CHECK_NULL_RETURN(textFieldLayoutProperty, nullptr);
110     auto pattern = frameNode->GetPattern<TextFieldPattern>();
111     pattern->SetModifyDoneStatus(false);
112     auto textValue = pattern->GetTextUtf16Value();
113     if (value.has_value() && value.value() != textValue) {
114         pattern->InitEditingValueText(value.value());
115     }
116     if (!pattern->HasOperationRecords()) {
117         pattern->UpdateEditingValueToRecord(); // record initial status
118     }
119     textFieldLayoutProperty->UpdatePlaceholder(placeholder.value_or(u""));
120     if (!isTextArea) {
121         textFieldLayoutProperty->UpdateMaxLines(1);
122         textFieldLayoutProperty->UpdatePlaceholderMaxLines(1);
123         pattern->SetTextInputFlag(true);
124     } else {
125         textFieldLayoutProperty->UpdatePlaceholderMaxLines(Infinity<uint32_t>());
126     }
127     pattern->SetTextFieldController(AceType::MakeRefPtr<TextFieldController>());
128     pattern->GetTextFieldController()->SetPattern(AceType::WeakClaim(AceType::RawPtr(pattern)));
129     pattern->SetTextEditController(AceType::MakeRefPtr<TextEditController>());
130     pattern->InitSurfaceChangedCallback();
131     pattern->InitSurfacePositionChangedCallback();
132     pattern->RegisterWindowSizeCallback();
133     pattern->InitTheme();
134     auto pipeline = frameNode->GetContext();
135     CHECK_NULL_RETURN(pipeline, nullptr);
136     if (pipeline->GetHasPreviewTextOption()) {
137         pattern->SetSupportPreviewText(pipeline->GetSupportPreviewText());
138     }
139     ProcessDefaultStyleAndBehaviors(frameNode);
140     return frameNode;
141 }
142 
SetDraggable(bool draggable)143 void TextFieldModelNG::SetDraggable(bool draggable)
144 {
145     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
146     CHECK_NULL_VOID(frameNode);
147     frameNode->SetDraggable(draggable);
148 }
149 
SetShowUnderline(bool showUnderLine)150 void TextFieldModelNG::SetShowUnderline(bool showUnderLine)
151 {
152     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowUnderline, showUnderLine);
153 }
154 
SetFontFeature(const FONT_FEATURES_LIST & value)155 void TextFieldModelNG::SetFontFeature(const FONT_FEATURES_LIST& value)
156 {
157     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFeature, value);
158 }
159 
SetFontFeature(FrameNode * frameNode,const FONT_FEATURES_LIST & value)160 void TextFieldModelNG::SetFontFeature(FrameNode* frameNode, const FONT_FEATURES_LIST& value)
161 {
162     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFeature, value, frameNode);
163 }
164 
SetAutoWidth(FrameNode * frameNode)165 void TextFieldModelNG::SetAutoWidth(FrameNode* frameNode)
166 {
167     CHECK_NULL_VOID(frameNode);
168     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, true, frameNode);
169     ViewAbstract::ClearWidthOrHeight(frameNode, true);
170 }
171 
SetWidth(FrameNode * frameNode,const std::string & value)172 void TextFieldModelNG::SetWidth(FrameNode* frameNode, const std::string& value)
173 {
174     if (value == "auto") {
175         SetAutoWidth(frameNode);
176         return;
177     }
178     CHECK_NULL_VOID(frameNode);
179     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, false, frameNode);
180     CalcDimension result;
181     StringUtils::StringToCalcDimensionNG(value, result, false, DimensionUnit::VP);
182     ViewAbstract::SetWidth(frameNode, NG::CalcLength(result));
183 }
184 
ClearWidth(FrameNode * frameNode)185 void TextFieldModelNG::ClearWidth(FrameNode* frameNode)
186 {
187     CHECK_NULL_VOID(frameNode);
188     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, false, frameNode);
189     ViewAbstract::ClearWidthOrHeight(frameNode, true);
190 }
191 
SetUserUnderlineColor(UserUnderlineColor userColor)192 void TextFieldModelNG::SetUserUnderlineColor(UserUnderlineColor userColor)
193 {
194     auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
195     CHECK_NULL_VOID(pattern);
196     pattern->SetUserUnderlineColor(userColor);
197 }
198 
SetNormalUnderlineColor(const Color & normalColor)199 void TextFieldModelNG::SetNormalUnderlineColor(const Color& normalColor)
200 {
201     auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
202     CHECK_NULL_VOID(pattern);
203     pattern->SetNormalUnderlineColor(normalColor);
204 }
205 
ProcessDefaultStyleAndBehaviors(const RefPtr<FrameNode> & frameNode)206 void TextFieldModelNG::ProcessDefaultStyleAndBehaviors(const RefPtr<FrameNode>& frameNode)
207 {
208     auto pipeline = frameNode->GetContext();
209     CHECK_NULL_VOID(pipeline);
210     auto themeManager = pipeline->GetThemeManager();
211     CHECK_NULL_VOID(themeManager);
212     auto textFieldTheme = themeManager->GetTheme<TextFieldTheme>(frameNode->GetThemeScopeId());
213     CHECK_NULL_VOID(textFieldTheme);
214     auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
215     CHECK_NULL_VOID(textfieldPaintProperty);
216     std::set<std::string> allowDropSet({ DROP_TYPE_PLAIN_TEXT, DROP_TYPE_HYPERLINK, DROP_TYPE_STYLED_STRING });
217     frameNode->SetAllowDrop(allowDropSet);
218     textfieldPaintProperty->UpdatePressBgColor(textFieldTheme->GetPressColor());
219     textfieldPaintProperty->UpdateHoverBgColor(textFieldTheme->GetHoverColor());
220     auto renderContext = frameNode->GetRenderContext();
221     renderContext->UpdateBackgroundColor(textFieldTheme->GetBgColor());
222     auto radius = textFieldTheme->GetBorderRadius();
223     textfieldPaintProperty->UpdateCursorColor(textFieldTheme->GetCursorColor());
224     BorderRadiusProperty borderRadius { radius.GetX(), radius.GetY(), radius.GetY(), radius.GetX() };
225     renderContext->UpdateBorderRadius(borderRadius);
226     auto dragDropManager = pipeline->GetDragDropManager();
227     CHECK_NULL_VOID(dragDropManager);
228     dragDropManager->AddTextFieldDragFrameNode(frameNode->GetId(), AceType::WeakClaim(AceType::RawPtr(frameNode)));
229     PaddingProperty paddings;
230     auto themePadding = textFieldTheme->GetPadding();
231     paddings.top = NG::CalcLength(themePadding.Top().ConvertToPx());
232     paddings.bottom = NG::CalcLength(themePadding.Bottom().ConvertToPx());
233     paddings.left = NG::CalcLength(themePadding.Left().ConvertToPx());
234     paddings.right = NG::CalcLength(themePadding.Right().ConvertToPx());
235     auto layoutProperty = frameNode->GetLayoutProperty<LayoutProperty>();
236     layoutProperty->UpdatePadding(paddings);
237     if (frameNode->IsFirstBuilding()) {
238         auto draggable = pipeline->GetDraggable<TextFieldTheme>();
239         frameNode->SetDraggable(draggable);
240         auto gestureHub = frameNode->GetOrCreateGestureEventHub();
241         CHECK_NULL_VOID(gestureHub);
242         gestureHub->SetTextDraggable(true);
243     }
244 }
245 
CreateTextInput(const std::optional<std::u16string> & placeholder,const std::optional<std::u16string> & value)246 RefPtr<TextFieldControllerBase> TextFieldModelNG::CreateTextInput(
247     const std::optional<std::u16string>& placeholder, const std::optional<std::u16string>& value)
248 {
249     CreateNode(placeholder, value, false);
250     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
251     CHECK_NULL_RETURN(frameNode, nullptr);
252     auto pattern = frameNode->GetPattern<TextFieldPattern>();
253     CHECK_NULL_RETURN(pattern, nullptr);
254     auto focusHub = pattern->GetFocusHub();
255     CHECK_NULL_RETURN(focusHub, nullptr);
256     focusHub->SetFocusType(FocusType::NODE);
257     focusHub->SetFocusStyleType(FocusStyleType::CUSTOM_REGION);
258     return pattern->GetTextFieldController();
259 };
260 
CreateTextArea(const std::optional<std::u16string> & placeholder,const std::optional<std::u16string> & value)261 RefPtr<TextFieldControllerBase> TextFieldModelNG::CreateTextArea(
262     const std::optional<std::u16string>& placeholder, const std::optional<std::u16string>& value)
263 {
264     CreateNode(placeholder, value, true);
265     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
266     CHECK_NULL_RETURN(frameNode, nullptr);
267     auto pattern = frameNode->GetPattern<TextFieldPattern>();
268     CHECK_NULL_RETURN(pattern, nullptr);
269     return pattern->GetTextFieldController();
270 }
271 
SetWidthAuto(bool isAuto)272 void TextFieldModelNG::SetWidthAuto(bool isAuto)
273 {
274     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
275     CHECK_NULL_VOID(frameNode);
276     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WidthAuto, isAuto);
277 }
278 
RequestKeyboardOnFocus(bool needToRequest)279 void TextFieldModelNG::RequestKeyboardOnFocus(bool needToRequest)
280 {
281     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
282     CHECK_NULL_VOID(frameNode);
283     auto pattern = frameNode->GetPattern<TextFieldPattern>();
284     pattern->SetNeedToRequestKeyboardOnFocus(needToRequest);
285 }
286 
SetType(TextInputType value)287 void TextFieldModelNG::SetType(TextInputType value)
288 {
289     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
290     CHECK_NULL_VOID(frameNode);
291     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
292     if (layoutProperty->HasTextInputType() && layoutProperty->GetTextInputTypeValue() != value) {
293         layoutProperty->UpdateTypeChanged(true);
294         auto pattern = frameNode->GetPattern<TextFieldPattern>();
295         CHECK_NULL_VOID(pattern);
296         pattern->SetIsFilterChanged(true);
297     }
298     if (layoutProperty) {
299         layoutProperty->UpdateTextInputType(value);
300     }
301 }
302 
SetPlaceholderColor(const Color & value)303 void TextFieldModelNG::SetPlaceholderColor(const Color& value)
304 {
305     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderTextColor, value);
306     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, PlaceholderColorFlagByUser, true);
307 }
308 
ResetPlaceholderColor()309 void TextFieldModelNG::ResetPlaceholderColor()
310 {
311     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
312     CHECK_NULL_VOID(frameNode);
313     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
314     CHECK_NULL_VOID(layoutProperty);
315     if (layoutProperty->GetPlaceholderFontStyle()) {
316         layoutProperty->GetPlaceholderFontStyle()->ResetTextColor();
317     }
318     ACE_RESET_PAINT_PROPERTY(TextFieldPaintProperty, PlaceholderColorFlagByUser);
319 }
320 
SetContentType(const TextContentType & value)321 void TextFieldModelNG::SetContentType(const TextContentType& value)
322 {
323     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
324     CHECK_NULL_VOID(frameNode);
325     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
326     CHECK_NULL_VOID(layoutProperty);
327     if (layoutProperty->HasTextContentType() && layoutProperty->GetTextContentTypeValue() != value) {
328         layoutProperty->UpdateTextContentTypeChanged(true);
329     }
330     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextContentType, value);
331 }
332 
SetPlaceholderFont(const Font & value)333 void TextFieldModelNG::SetPlaceholderFont(const Font& value)
334 {
335     if (value.fontSize.has_value()) {
336         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontSize, value.fontSize.value());
337     }
338     if (value.fontStyle) {
339         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderItalicFontStyle, value.fontStyle.value());
340     }
341     if (value.fontWeight) {
342         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontWeight, value.fontWeight.value());
343     }
344     if (!value.fontFamilies.empty()) {
345         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontFamily, value.fontFamilies);
346     }
347     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredPlaceholderLineHeightNeedToUpdate, true);
348 }
349 
SetEnterKeyType(TextInputAction value)350 void TextFieldModelNG::SetEnterKeyType(TextInputAction value)
351 {
352     auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
353     CHECK_NULL_VOID(pattern);
354     if (value == TextInputAction::UNSPECIFIED) {
355         value = pattern->IsTextArea() ? TextInputAction::NEW_LINE : TextInputAction::DONE;
356     }
357     pattern->UpdateTextInputAction(value);
358 }
359 
SetCaretColor(const Color & value)360 void TextFieldModelNG::SetCaretColor(const Color& value)
361 {
362     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, CursorColor, value);
363     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, CaretColorFlagByUser, true);
364 }
365 
ResetCaretColor()366 void TextFieldModelNG::ResetCaretColor()
367 {
368     ACE_RESET_PAINT_PROPERTY(TextFieldPaintProperty, CursorColor);
369     ACE_RESET_PAINT_PROPERTY(TextFieldPaintProperty, CaretColorFlagByUser);
370 }
371 
SetCaretStyle(const CaretStyle & value)372 void TextFieldModelNG::SetCaretStyle(const CaretStyle& value)
373 {
374     if (value.caretWidth.has_value()) {
375         ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, CursorWidth, value.caretWidth.value());
376     }
377 }
378 
SetCaretPosition(const int32_t & value)379 void TextFieldModelNG::SetCaretPosition(const int32_t& value)
380 {
381     auto frameNode = ViewStackProcessor ::GetInstance()->GetMainFrameNode();
382     CHECK_NULL_VOID(frameNode);
383     auto pattern = frameNode->GetPattern<TextFieldPattern>();
384     pattern->SetCaretPosition(value);
385 }
386 
SetSelectedBackgroundColor(const Color & value)387 void TextFieldModelNG::SetSelectedBackgroundColor(const Color& value)
388 {
389     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, SelectedBackgroundColor, value);
390 }
391 
SetTextAlign(TextAlign value)392 void TextFieldModelNG::SetTextAlign(TextAlign value)
393 {
394     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
395     CHECK_NULL_VOID(frameNode);
396     auto pattern = frameNode->GetPattern<TextFieldPattern>();
397     CHECK_NULL_VOID(pattern);
398     TextAlign newValue = value;
399     if (!pattern->IsTextArea() && newValue == TextAlign::JUSTIFY) {
400         newValue = TextAlign::START;
401     }
402     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
403     if (layoutProperty->GetTextAlignValue(TextAlign::START) != newValue) {
404         layoutProperty->UpdateTextAlignChanged(true);
405     }
406     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextAlign, newValue);
407 }
408 
SetLineBreakStrategy(LineBreakStrategy value)409 void TextFieldModelNG::SetLineBreakStrategy(LineBreakStrategy value)
410 {
411     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineBreakStrategy, value);
412 }
413 
SetMaxLength(uint32_t value)414 void TextFieldModelNG::SetMaxLength(uint32_t value)
415 {
416     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
417     CHECK_NULL_VOID(frameNode);
418     uint32_t preMaxLength = GetMaxLength(frameNode);
419     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLength, value, frameNode);
420     if (preMaxLength != value) {
421         auto pattern = frameNode->GetPattern<TextFieldPattern>();
422         CHECK_NULL_VOID(pattern);
423         CHECK_NULL_VOID(pattern->HasFocus());
424         pattern->UpdateShowCountBorderStyle();
425     }
426 }
427 
ResetMaxLength()428 void TextFieldModelNG::ResetMaxLength()
429 {
430     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
431     CHECK_NULL_VOID(frameNode);
432     auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
433     if (textFieldLayoutProperty) {
434         textFieldLayoutProperty->ResetMaxLength();
435     }
436 }
SetMaxLines(uint32_t value)437 void TextFieldModelNG::SetMaxLines(uint32_t value)
438 {
439     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLines, value);
440 }
SetFontSize(const Dimension & value)441 void TextFieldModelNG::SetFontSize(const Dimension& value)
442 {
443     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontSize, value);
444     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
445 }
SetFontWeight(FontWeight value)446 void TextFieldModelNG::SetFontWeight(FontWeight value)
447 {
448     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontWeight, value);
449     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
450 }
SetTextColor(const Color & value)451 void TextFieldModelNG::SetTextColor(const Color& value)
452 {
453     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, value);
454     ACE_UPDATE_RENDER_CONTEXT(ForegroundColor, value);
455     ACE_RESET_RENDER_CONTEXT(RenderContext, ForegroundColorStrategy);
456     ACE_UPDATE_RENDER_CONTEXT(ForegroundColorFlag, true);
457     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, TextColorFlagByUser, value);
458 }
ResetTextColor()459 void TextFieldModelNG::ResetTextColor()
460 {
461     ACE_RESET_LAYOUT_PROPERTY_WITH_FLAG(TextFieldLayoutProperty, TextColor, PROPERTY_UPDATE_MEASURE_SELF);
462     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(TextFieldPaintProperty, TextColorFlagByUser, PROPERTY_UPDATE_MEASURE_SELF);
463     ACE_RESET_RENDER_CONTEXT(RenderContext, ForegroundColor);
464     ACE_RESET_RENDER_CONTEXT(RenderContext, ForegroundColorStrategy);
465     ACE_RESET_RENDER_CONTEXT(RenderContext, ForegroundColorFlag);
466 }
SetWordBreak(Ace::WordBreak value)467 void TextFieldModelNG::SetWordBreak(Ace::WordBreak value)
468 {
469     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WordBreak, value);
470 }
SetFontStyle(Ace::FontStyle value)471 void TextFieldModelNG::SetFontStyle(Ace::FontStyle value)
472 {
473     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ItalicFontStyle, value);
474     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
475 }
SetFontFamily(const std::vector<std::string> & value)476 void TextFieldModelNG::SetFontFamily(const std::vector<std::string>& value)
477 {
478     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFamily, value);
479     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true);
480 }
481 
SetMinFontScale(const float value)482 void TextFieldModelNG::SetMinFontScale(const float value)
483 {
484     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MinFontScale, value);
485 }
486 
SetMaxFontScale(const float value)487 void TextFieldModelNG::SetMaxFontScale(const float value)
488 {
489     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxFontScale, value);
490 }
491 
SetMinFontScale(FrameNode * frameNode,const float value)492 void TextFieldModelNG::SetMinFontScale(FrameNode* frameNode, const float value)
493 {
494     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MinFontScale, value, frameNode);
495 }
496 
SetMaxFontScale(FrameNode * frameNode,const float value)497 void TextFieldModelNG::SetMaxFontScale(FrameNode* frameNode, const float value)
498 {
499     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxFontScale, value, frameNode);
500 }
501 
SetInputFilter(const std::string & value,const std::function<void (const std::u16string &)> && func)502 void TextFieldModelNG::SetInputFilter(const std::string& value,
503     const std::function<void(const std::u16string&)>&& func)
504 {
505     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, InputFilter, value);
506     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
507     CHECK_NULL_VOID(eventHub);
508     eventHub->SetOnInputFilterError(std::move(func));
509 }
510 
SetInputStyle(InputStyle value)511 void TextFieldModelNG::SetInputStyle(InputStyle value)
512 {
513     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, InputStyle, value);
514 }
515 
SetShowPasswordIcon(bool value)516 void TextFieldModelNG::SetShowPasswordIcon(bool value)
517 {
518     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
519     CHECK_NULL_VOID(frameNode);
520     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
521     CHECK_NULL_VOID(layoutProperty);
522     auto pattern = frameNode->GetPattern<TextFieldPattern>();
523     CHECK_NULL_VOID(pattern);
524     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordIcon, value);
525 }
526 
SetShowPasswordText(bool value)527 void TextFieldModelNG::SetShowPasswordText(bool value)
528 {
529     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
530     CHECK_NULL_VOID(frameNode);
531     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
532     CHECK_NULL_VOID(layoutProperty);
533     auto pattern = frameNode->GetPattern<TextFieldPattern>();
534     CHECK_NULL_VOID(pattern);
535     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordText, value);
536 }
537 
SetOnEditChanged(std::function<void (bool)> && func)538 void TextFieldModelNG::SetOnEditChanged(std::function<void(bool)>&& func)
539 {
540     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
541     CHECK_NULL_VOID(eventHub);
542     eventHub->SetOnEditChanged(std::move(func));
543 }
544 
SetOnSubmit(std::function<void (int32_t,NG::TextFieldCommonEvent &)> && func)545 void TextFieldModelNG::SetOnSubmit(std::function<void(int32_t, NG::TextFieldCommonEvent&)>&& func)
546 {
547     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
548     CHECK_NULL_VOID(eventHub);
549     eventHub->SetOnSubmit(std::move(func));
550 }
551 
SetOnChange(std::function<void (const ChangeValueInfo &)> && func)552 void TextFieldModelNG::SetOnChange(std::function<void(const ChangeValueInfo&)>&& func)
553 {
554     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
555     CHECK_NULL_VOID(eventHub);
556     eventHub->SetOnChange(std::move(func));
557 }
558 
SetOnTextSelectionChange(std::function<void (int32_t,int32_t)> && func)559 void TextFieldModelNG::SetOnTextSelectionChange(std::function<void(int32_t, int32_t)>&& func)
560 {
561     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
562     CHECK_NULL_VOID(eventHub);
563     eventHub->SetOnSelectionChange(std::move(func));
564 }
565 
SetOnTextSelectionChange(FrameNode * frameNode,std::function<void (int32_t,int32_t)> && func)566 void TextFieldModelNG::SetOnTextSelectionChange(FrameNode* frameNode, std::function<void(int32_t, int32_t)>&& func)
567 {
568     CHECK_NULL_VOID(frameNode);
569     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
570     CHECK_NULL_VOID(eventHub);
571     eventHub->SetOnSelectionChange(std::move(func));
572 }
573 
SetOnSecurityStateChange(std::function<void (bool)> && func)574 void TextFieldModelNG::SetOnSecurityStateChange(std::function<void(bool)>&& func)
575 {
576     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
577     CHECK_NULL_VOID(eventHub);
578     eventHub->SetOnSecurityStateChange(std::move(func));
579 }
580 
SetOnContentScroll(std::function<void (float,float)> && func)581 void TextFieldModelNG::SetOnContentScroll(std::function<void(float, float)>&& func)
582 {
583     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
584     CHECK_NULL_VOID(eventHub);
585     eventHub->SetOnScrollChangeEvent(std::move(func));
586 }
587 
SetOnCopy(std::function<void (const std::u16string &)> && func)588 void TextFieldModelNG::SetOnCopy(std::function<void(const std::u16string&)>&& func)
589 {
590     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
591     CHECK_NULL_VOID(eventHub);
592     eventHub->SetOnCopy(std::move(func));
593 }
594 
SetOnCut(std::function<void (const std::u16string &)> && func)595 void TextFieldModelNG::SetOnCut(std::function<void(const std::u16string&)>&& func)
596 {
597     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
598     CHECK_NULL_VOID(eventHub);
599     eventHub->SetOnCut(std::move(func));
600 }
601 
SetOnPaste(std::function<void (const std::u16string &)> && func)602 void TextFieldModelNG::SetOnPaste(std::function<void(const std::u16string&)>&& func)
603 {
604     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
605     CHECK_NULL_VOID(eventHub);
606     eventHub->SetOnPaste(std::move(func));
607 }
608 
SetOnPasteWithEvent(std::function<void (const std::u16string &,NG::TextCommonEvent &)> && func)609 void TextFieldModelNG::SetOnPasteWithEvent(std::function<void(const std::u16string&, NG::TextCommonEvent&)>&& func)
610 {
611     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
612     CHECK_NULL_VOID(eventHub);
613     eventHub->SetOnPasteWithEvent(std::move(func));
614 }
615 
SetCopyOption(CopyOptions copyOption)616 void TextFieldModelNG::SetCopyOption(CopyOptions copyOption)
617 {
618     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CopyOptions, copyOption);
619 }
620 
AddDragFrameNodeToManager() const621 void TextFieldModelNG::AddDragFrameNodeToManager() const
622 {
623     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
624     CHECK_NULL_VOID(frameNode);
625     auto pipeline = frameNode->GetContext();
626     CHECK_NULL_VOID(pipeline);
627     auto dragDropManager = pipeline->GetDragDropManager();
628     CHECK_NULL_VOID(dragDropManager);
629     dragDropManager->AddTextFieldDragFrameNode(frameNode->GetId(), AceType::WeakClaim(frameNode));
630 }
631 
SetForegroundColor(const Color & value)632 void TextFieldModelNG::SetForegroundColor(const Color& value)
633 {
634     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, value);
635 }
636 
SetPasswordIcon(const PasswordIcon & passwordIcon)637 void TextFieldModelNG::SetPasswordIcon(const PasswordIcon& passwordIcon)
638 {
639     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
640     CHECK_NULL_VOID(frameNode);
641     auto pattern = frameNode->GetPattern<TextFieldPattern>();
642     CHECK_NULL_VOID(pattern);
643     // when not call SetPasswordIcon() and api >= 13, use symbol format image, else use image format.
644     pattern->SetIsPasswordSymbol(false);
645     if (passwordIcon.showResult != "") {
646         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo,
647             ImageSourceInfo(passwordIcon.showResult, passwordIcon.showBundleName, passwordIcon.showModuleName));
648     } else {
649         ImageSourceInfo showSystemSourceInfo;
650         showSystemSourceInfo.SetResourceId(InternalResource::ResourceId::SHOW_PASSWORD_SVG);
651         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo, showSystemSourceInfo);
652     }
653     if (passwordIcon.hideResult != "") {
654         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo,
655             ImageSourceInfo(passwordIcon.hideResult, passwordIcon.hideBundleName, passwordIcon.hideModuleName));
656     } else {
657         ImageSourceInfo hideSystemSourceInfo;
658         hideSystemSourceInfo.SetResourceId(InternalResource::ResourceId::HIDE_PASSWORD_SVG);
659         ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo, hideSystemSourceInfo);
660     }
661 }
662 
SetShowUnit(std::function<void ()> && unitFunction)663 void TextFieldModelNG::SetShowUnit(std::function<void()>&& unitFunction)
664 {
665     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
666     CHECK_NULL_VOID(frameNode);
667     auto pattern = frameNode->GetPattern<TextFieldPattern>();
668     CHECK_NULL_VOID(pattern);
669     RefPtr<NG::UINode> unitNode;
670     if (unitFunction) {
671         NG::ScopedViewStackProcessor builderViewStackProcessor;
672         unitFunction();
673         unitNode = NG::ViewStackProcessor::GetInstance()->Finish();
674     }
675     pattern->SetUnitNode(unitNode);
676 }
677 
SetShowError(const std::u16string & errorText,bool visible)678 void TextFieldModelNG::SetShowError(const std::u16string& errorText, bool visible)
679 {
680     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ErrorText, errorText);
681     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowErrorText, visible);
682 }
683 
SetShowCounter(bool value)684 void TextFieldModelNG::SetShowCounter(bool value)
685 {
686     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
687     CHECK_NULL_VOID(frameNode);
688     auto pattern = frameNode->GetPattern<TextFieldPattern>();
689     CHECK_NULL_VOID(pattern);
690     pattern->SetCounterState(false);
691     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
692     CHECK_NULL_VOID(layoutProperty);
693     if (value && !pattern->IsNormalInlineState() && !pattern->IsInPasswordMode() &&
694         layoutProperty->HasMaxLength()) {
695         pattern->AddCounterNode();
696     } else {
697         pattern->CleanCounterNode();
698     }
699     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowCounter, value);
700 }
701 
SetCounterType(int32_t value)702 void TextFieldModelNG::SetCounterType(int32_t value)
703 {
704     auto frameNode = ViewStackProcessor ::GetInstance()->GetMainFrameNode();
705     CHECK_NULL_VOID(frameNode);
706     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
707     CHECK_NULL_VOID(layoutProperty);
708     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SetCounter, value);
709 }
710 
SetShowCounterBorder(bool value)711 void TextFieldModelNG::SetShowCounterBorder(bool value)
712 {
713     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
714     CHECK_NULL_VOID(frameNode);
715     auto pattern = frameNode->GetPattern<TextFieldPattern>();
716     CHECK_NULL_VOID(pattern);
717     pattern->SetCounterState(false);
718     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowHighlightBorder, value);
719 }
720 
SetShowCounterBorder(FrameNode * frameNode,bool value)721 void TextFieldModelNG::SetShowCounterBorder(FrameNode* frameNode, bool value)
722 {
723     CHECK_NULL_VOID(frameNode);
724     auto pattern = frameNode->GetPattern<TextFieldPattern>();
725     CHECK_NULL_VOID(pattern);
726     pattern->SetCounterState(false);
727     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowHighlightBorder, value, frameNode);
728 }
729 
SetBarState(OHOS::Ace::DisplayMode value)730 void TextFieldModelNG::SetBarState(OHOS::Ace::DisplayMode value)
731 {
732     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, DisplayMode, value);
733 }
734 
SetMaxViewLines(uint32_t value)735 void TextFieldModelNG::SetMaxViewLines(uint32_t value)
736 {
737     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxViewLines, value);
738 }
739 
SetNormalMaxViewLines(uint32_t value)740 void TextFieldModelNG::SetNormalMaxViewLines(uint32_t value)
741 {
742     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, NormalMaxViewLines, value);
743 }
744 
SetBackgroundColor(const Color & color,bool tmp)745 void TextFieldModelNG::SetBackgroundColor(const Color& color, bool tmp)
746 {
747     Color backgroundColor = color;
748     if (tmp) {
749         auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
750         CHECK_NULL_VOID(frameNode);
751         auto pipeline = frameNode->GetContextRefPtr();
752         CHECK_NULL_VOID(pipeline);
753         auto themeManager = pipeline->GetThemeManager();
754         CHECK_NULL_VOID(themeManager);
755         auto theme = themeManager->GetTheme<TextFieldTheme>(frameNode->GetThemeScopeId());
756         CHECK_NULL_VOID(theme);
757         backgroundColor = theme->GetBgColor();
758     }
759     NG::ViewAbstract::SetBackgroundColor(backgroundColor);
760     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, BackgroundColor, backgroundColor);
761 }
762 
ResetBackgroundColor()763 void TextFieldModelNG::ResetBackgroundColor()
764 {
765     ACE_RESET_PAINT_PROPERTY_WITH_FLAG(TextFieldPaintProperty, BackgroundColor, PROPERTY_UPDATE_RENDER);
766 }
767 
SetBackgroundColor(FrameNode * frameNode,const Color & color)768 void TextFieldModelNG::SetBackgroundColor(FrameNode* frameNode, const Color& color)
769 {
770     CHECK_NULL_VOID(frameNode);
771     NG::ViewAbstract::SetBackgroundColor(frameNode, color);
772     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BackgroundColor, color, frameNode);
773 }
774 
ResetBackgroundColor(FrameNode * frameNode)775 void TextFieldModelNG::ResetBackgroundColor(FrameNode* frameNode)
776 {
777     ACE_RESET_NODE_PAINT_PROPERTY_WITH_FLAG(TextFieldPaintProperty, BackgroundColor, PROPERTY_UPDATE_RENDER, frameNode);
778 }
779 
SetHeight(const Dimension & value)780 void TextFieldModelNG::SetHeight(const Dimension& value) {}
781 
SetMargin()782 void TextFieldModelNG::SetMargin()
783 {
784     auto frameNode = ViewStackProcessor ::GetInstance()->GetMainFrameNode();
785     CHECK_NULL_VOID(frameNode);
786     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
787     CHECK_NULL_VOID(layoutProperty);
788     const auto& margin = layoutProperty->GetMarginProperty();
789     CHECK_NULL_VOID(margin);
790     bool isRTL = layoutProperty->GetNonAutoLayoutDirection() == TextDirection::RTL;
791 
792     MarginProperty userMargin;
793     userMargin.top = margin->top;
794     userMargin.bottom = margin->bottom;
795     userMargin.left = margin->left.has_value() ? margin->left :
796         (isRTL ? margin->end : margin->start);
797     userMargin.right = margin->right.has_value() ? margin->right :
798         (isRTL ? margin->start : margin->end);
799     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, MarginByUser, userMargin);
800 }
801 
SetPadding(const NG::PaddingProperty & newPadding,Edge oldPadding,bool tmp)802 void TextFieldModelNG::SetPadding(const NG::PaddingProperty& newPadding, Edge oldPadding, bool tmp)
803 {
804     if (tmp) {
805         SetDefaultPadding();
806         return;
807     }
808     NG::ViewAbstract::SetPadding(newPadding);
809     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, PaddingByUser, newPadding);
810     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
811     CHECK_NULL_VOID(frameNode);
812     auto pattern = frameNode->GetPattern<TextFieldPattern>();
813     CHECK_NULL_VOID(pattern);
814     pattern->SetIsInitTextRect(false);
815 }
816 
SetDefaultPadding()817 void TextFieldModelNG::SetDefaultPadding()
818 {
819     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
820     CHECK_NULL_VOID(frameNode);
821     auto pattern = frameNode->GetPattern<TextFieldPattern>();
822     CHECK_NULL_VOID(pattern);
823     auto theme = pattern->GetTheme();
824     CHECK_NULL_VOID(theme);
825     auto themePadding = theme->GetPadding();
826     PaddingProperty paddings;
827     paddings.top = NG::CalcLength(themePadding.Top().ConvertToPx());
828     paddings.bottom = NG::CalcLength(themePadding.Bottom().ConvertToPx());
829     paddings.left = NG::CalcLength(themePadding.Left().ConvertToPx());
830     paddings.right = NG::CalcLength(themePadding.Right().ConvertToPx());
831     ViewAbstract::SetPadding(paddings);
832     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, PaddingByUser, paddings);
833     pattern->SetIsInitTextRect(false);
834 }
835 
SetHoverEffect(HoverEffectType hoverEffect)836 void TextFieldModelNG::SetHoverEffect(HoverEffectType hoverEffect)
837 {
838     NG::ViewAbstract::SetHoverEffect(hoverEffect);
839 }
840 
SetOnWillChangeEvent(std::function<bool (const ChangeValueInfo &)> && func)841 void TextFieldModelNG::SetOnWillChangeEvent(std::function<bool(const ChangeValueInfo&)>&& func)
842 {
843     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
844     CHECK_NULL_VOID(eventHub);
845     eventHub->SetOnWillChangeEvent(std::move(func));
846 }
847 
SetOnChangeEvent(std::function<void (const std::u16string &)> && func)848 void TextFieldModelNG::SetOnChangeEvent(std::function<void(const std::u16string&)>&& func)
849 {
850     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
851     CHECK_NULL_VOID(eventHub);
852     eventHub->SetOnChangeEvent(std::move(func));
853 }
854 
SetSelectionMenuHidden(bool selectionMenuHidden)855 void TextFieldModelNG::SetSelectionMenuHidden(bool selectionMenuHidden)
856 {
857     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectionMenuHidden, selectionMenuHidden);
858 }
859 
SetCustomKeyboard(const std::function<void ()> && buildFunc,bool supportAvoidance)860 void TextFieldModelNG::SetCustomKeyboard(const std::function<void()>&& buildFunc, bool supportAvoidance)
861 {
862     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
863     CHECK_NULL_VOID(frameNode);
864     auto pattern = frameNode->GetPattern<TextFieldPattern>();
865     if (pattern) {
866         pattern->SetCustomKeyboardOption(supportAvoidance);
867         pattern->SetCustomKeyboard(std::move(buildFunc));
868     }
869 }
870 
SetPasswordRules(const std::string & passwordRules)871 void TextFieldModelNG::SetPasswordRules(const std::string& passwordRules)
872 {
873     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PasswordRules, passwordRules);
874 }
875 
SetEnableAutoFill(bool enableAutoFill)876 void TextFieldModelNG::SetEnableAutoFill(bool enableAutoFill)
877 {
878     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, EnableAutoFill, enableAutoFill);
879 }
880 
SetAdaptMinFontSize(const Dimension & value)881 void TextFieldModelNG::SetAdaptMinFontSize(const Dimension& value)
882 {
883     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMinFontSize, value);
884 }
885 
SetAdaptMaxFontSize(const Dimension & value)886 void TextFieldModelNG::SetAdaptMaxFontSize(const Dimension& value)
887 {
888     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMaxFontSize, value);
889 }
890 
SetHeightAdaptivePolicy(TextHeightAdaptivePolicy value)891 void TextFieldModelNG::SetHeightAdaptivePolicy(TextHeightAdaptivePolicy value)
892 {
893     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HeightAdaptivePolicy, value);
894 }
895 
SetCleanNodeStyle(CleanNodeStyle cleanNodeStyle)896 void TextFieldModelNG::SetCleanNodeStyle(CleanNodeStyle cleanNodeStyle)
897 {
898     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CleanNodeStyle, cleanNodeStyle);
899 }
900 
SetCancelIconSize(const CalcDimension & iconSize)901 void TextFieldModelNG::SetCancelIconSize(const CalcDimension& iconSize)
902 {
903     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSize, iconSize);
904 }
905 
SetAdaptMinFontSize(FrameNode * frameNode,const Dimension & value)906 void TextFieldModelNG::SetAdaptMinFontSize(FrameNode* frameNode, const Dimension& value)
907 {
908     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMinFontSize, value, frameNode);
909 }
910 
SetAdaptMaxFontSize(FrameNode * frameNode,const Dimension & value)911 void TextFieldModelNG::SetAdaptMaxFontSize(FrameNode* frameNode, const Dimension& value)
912 {
913     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, AdaptMaxFontSize, value, frameNode);
914 }
915 
SetHeightAdaptivePolicy(FrameNode * frameNode,TextHeightAdaptivePolicy value)916 void TextFieldModelNG::SetHeightAdaptivePolicy(FrameNode* frameNode, TextHeightAdaptivePolicy value)
917 {
918     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HeightAdaptivePolicy, value, frameNode);
919 }
920 
SetCanacelIconSrc(const std::string & iconSrc,const std::string & bundleName,const std::string & moduleName)921 void TextFieldModelNG::SetCanacelIconSrc(
922     const std::string& iconSrc, const std::string& bundleName, const std::string& moduleName)
923 {
924     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSrc, iconSrc);
925     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, BundleName, bundleName);
926     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ModuleName, moduleName);
927 }
928 
SetCancelIconColor(const Color & iconColor)929 void TextFieldModelNG::SetCancelIconColor(const Color& iconColor)
930 {
931     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconColor, iconColor);
932 }
933 
SetCancelButtonSymbol(bool isShowSymbol)934 void TextFieldModelNG::SetCancelButtonSymbol(bool isShowSymbol)
935 {
936     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IsShowSymbol, isShowSymbol);
937 }
938 
SetCancelSymbolIcon(const std::function<void (WeakPtr<NG::FrameNode>)> & iconSymbol)939 void TextFieldModelNG::SetCancelSymbolIcon(const std::function<void(WeakPtr<NG::FrameNode>)>& iconSymbol)
940 {
941     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
942     CHECK_NULL_VOID(frameNode);
943     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
944     CHECK_NULL_VOID(layoutProperty);
945     layoutProperty->SetCancelIconSymbol(iconSymbol);
946 }
947 
SetIsShowCancelButton(bool isShowCancelButton)948 void TextFieldModelNG::SetIsShowCancelButton(bool isShowCancelButton)
949 {
950     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IsShowCancelButton, isShowCancelButton);
951 }
952 
SetSelectAllValue(bool isSelectAllValue)953 void TextFieldModelNG::SetSelectAllValue(bool isSelectAllValue)
954 {
955     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectAllValue, isSelectAllValue);
956 }
957 
SetKeyboardAppearance(KeyboardAppearance value)958 void TextFieldModelNG::SetKeyboardAppearance(KeyboardAppearance value)
959 {
960     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
961     CHECK_NULL_VOID(frameNode);
962     auto pattern = frameNode->GetPattern<TextFieldPattern>();
963     CHECK_NULL_VOID(pattern);
964     pattern->SetKeyboardAppearance(value);
965 }
966 
SetLetterSpacing(const Dimension & value)967 void TextFieldModelNG::SetLetterSpacing(const Dimension& value)
968 {
969     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LetterSpacing, value);
970 }
971 
GetLetterSpacing(FrameNode * frameNode)972 Dimension TextFieldModelNG::GetLetterSpacing(FrameNode* frameNode)
973 {
974     Dimension value;
975     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
976         TextFieldLayoutProperty, LetterSpacing, value, frameNode, value);
977     return value;
978 }
979 
SetLineHeight(const Dimension & value)980 void TextFieldModelNG::SetLineHeight(const Dimension& value)
981 {
982     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineHeight, value);
983 }
984 
SetHalfLeading(bool value)985 void TextFieldModelNG::SetHalfLeading(bool value)
986 {
987     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HalfLeading, value);
988 }
989 
SetLineSpacing(const Dimension & value)990 void TextFieldModelNG::SetLineSpacing(const Dimension& value)
991 {
992     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineSpacing, value);
993 }
994 
SetTextDecoration(Ace::TextDecoration value)995 void TextFieldModelNG::SetTextDecoration(Ace::TextDecoration value)
996 {
997     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecoration, value);
998 }
999 
SetTextDecorationColor(const Color & value)1000 void TextFieldModelNG::SetTextDecorationColor(const Color& value)
1001 {
1002     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationColor, value);
1003 }
1004 
SetTextDecorationStyle(Ace::TextDecorationStyle value)1005 void TextFieldModelNG::SetTextDecorationStyle(Ace::TextDecorationStyle value)
1006 {
1007     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationStyle, value);
1008 }
1009 
SetBackBorderRadius()1010 void TextFieldModelNG::SetBackBorderRadius()
1011 {
1012     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
1013     CHECK_NULL_VOID(frameNode);
1014     auto renderContext = frameNode->GetRenderContext();
1015     CHECK_NULL_VOID(renderContext);
1016     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1017     CHECK_NULL_VOID(layoutProperty);
1018 
1019     bool isRTL = layoutProperty->GetNonAutoLayoutDirection() == TextDirection::RTL;
1020     auto optRadius = renderContext->GetBorderRadius();
1021     CHECK_NULL_VOID(optRadius);
1022     auto radius = optRadius.value();
1023 
1024     radius.radiusTopLeft = radius.radiusTopLeft.has_value() ? radius.radiusTopLeft :
1025         (isRTL ? radius.radiusTopEnd : radius.radiusTopStart);
1026     radius.radiusTopRight = radius.radiusTopRight.has_value() ? radius.radiusTopRight :
1027         (isRTL ? radius.radiusTopStart : radius.radiusTopEnd);
1028     radius.radiusBottomLeft = radius.radiusBottomLeft.has_value() ? radius.radiusBottomLeft :
1029         (isRTL ? radius.radiusBottomEnd : radius.radiusBottomStart);
1030     radius.radiusBottomRight = radius.radiusBottomRight.has_value() ? radius.radiusBottomRight :
1031         (isRTL ? radius.radiusBottomStart : radius.radiusBottomEnd);
1032 
1033     ACE_UPDATE_PAINT_PROPERTY(TextFieldPaintProperty, BorderRadiusFlagByUser, radius);
1034 }
1035 
SetBackBorder()1036 void TextFieldModelNG::SetBackBorder()
1037 {
1038     auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
1039     CHECK_NULL_VOID(frameNode);
1040     auto renderContext = frameNode->GetRenderContext();
1041     CHECK_NULL_VOID(renderContext);
1042     if (renderContext->HasBorderRadius()) {
1043         SetBackBorderRadius();
1044     }
1045     if (renderContext->HasBorderColor()) {
1046         ACE_UPDATE_PAINT_PROPERTY(
1047             TextFieldPaintProperty, BorderColorFlagByUser, renderContext->GetBorderColor().value());
1048     }
1049     if (renderContext->HasBorderWidth()) {
1050         ACE_UPDATE_PAINT_PROPERTY(
1051             TextFieldPaintProperty, BorderWidthFlagByUser, renderContext->GetBorderWidth().value());
1052     }
1053     if (renderContext->HasBorderStyle()) {
1054         ACE_UPDATE_PAINT_PROPERTY(
1055             TextFieldPaintProperty, BorderStyleFlagByUser, renderContext->GetBorderStyle().value());
1056     }
1057 }
1058 
SetTextOverflow(Ace::TextOverflow value)1059 void TextFieldModelNG::SetTextOverflow(Ace::TextOverflow value)
1060 {
1061     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextOverflow, value);
1062 }
1063 
SetTextIndent(const Dimension & value)1064 void TextFieldModelNG::SetTextIndent(const Dimension& value)
1065 {
1066     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextIndent, value);
1067 }
1068 
SetTextOverflow(FrameNode * frameNode,Ace::TextOverflow value)1069 void TextFieldModelNG::SetTextOverflow(FrameNode* frameNode, Ace::TextOverflow value)
1070 {
1071     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextOverflow, value, frameNode);
1072 }
1073 
SetTextIndent(FrameNode * frameNode,const Dimension & value)1074 void TextFieldModelNG::SetTextIndent(FrameNode* frameNode, const Dimension& value)
1075 {
1076     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextIndent, value, frameNode);
1077 }
1078 
SetInputStyle(FrameNode * frameNode,InputStyle value)1079 void TextFieldModelNG::SetInputStyle(FrameNode* frameNode, InputStyle value)
1080 {
1081     CHECK_NULL_VOID(frameNode);
1082     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, InputStyle, value, frameNode);
1083     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1084     if (pattern->GetTextInputFlag() && value == InputStyle::DEFAULT) {
1085         auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1086         CHECK_NULL_VOID(textFieldLayoutProperty);
1087         textFieldLayoutProperty->UpdateMaxLines(1);
1088         textFieldLayoutProperty->UpdatePlaceholderMaxLines(1);
1089     }
1090 }
1091 
RequestKeyboardOnFocus(FrameNode * frameNode,bool needToRequest)1092 void TextFieldModelNG::RequestKeyboardOnFocus(FrameNode* frameNode, bool needToRequest)
1093 {
1094     CHECK_NULL_VOID(frameNode);
1095     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1096     pattern->SetNeedToRequestKeyboardOnFocus(needToRequest);
1097 }
1098 
SetBarState(FrameNode * frameNode,OHOS::Ace::DisplayMode value)1099 void TextFieldModelNG::SetBarState(FrameNode* frameNode, OHOS::Ace::DisplayMode value)
1100 {
1101     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, DisplayMode, value, frameNode);
1102 }
1103 
SetPasswordIcon(FrameNode * frameNode,const PasswordIcon & passwordIcon)1104 void TextFieldModelNG::SetPasswordIcon(FrameNode* frameNode, const PasswordIcon& passwordIcon)
1105 {
1106     CHECK_NULL_VOID(frameNode);
1107     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1108     CHECK_NULL_VOID(pattern);
1109     // when not call SetPasswordIcon() and api >= 13, use symbol format image, else use image format.
1110     pattern->SetIsPasswordSymbol(false);
1111     if (passwordIcon.showResult != "") {
1112         ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo,
1113             ImageSourceInfo(passwordIcon.showResult,
1114                 passwordIcon.showBundleName, passwordIcon.showModuleName), frameNode);
1115     } else {
1116         ImageSourceInfo showSystemSourceInfo;
1117         showSystemSourceInfo.SetResourceId(InternalResource::ResourceId::SHOW_PASSWORD_SVG);
1118         ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordSourceInfo,
1119             showSystemSourceInfo, frameNode);
1120     }
1121     if (passwordIcon.hideResult != "") {
1122         ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo,
1123             ImageSourceInfo(passwordIcon.hideResult,
1124                 passwordIcon.hideBundleName, passwordIcon.hideModuleName), frameNode);
1125     } else {
1126         ImageSourceInfo hideSystemSourceInfo;
1127         hideSystemSourceInfo.SetResourceId(InternalResource::ResourceId::HIDE_PASSWORD_SVG);
1128         ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HidePasswordSourceInfo,
1129             hideSystemSourceInfo, frameNode);
1130     }
1131 }
1132 
SetSelectedBackgroundColor(FrameNode * frameNode,const Color & value)1133 void TextFieldModelNG::SetSelectedBackgroundColor(FrameNode* frameNode, const Color& value)
1134 {
1135     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, SelectedBackgroundColor, value, frameNode);
1136 }
1137 
SetMaxViewLines(FrameNode * frameNode,uint32_t value)1138 void TextFieldModelNG::SetMaxViewLines(FrameNode* frameNode, uint32_t value)
1139 {
1140     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxViewLines, value, frameNode);
1141 }
1142 
SetNormalMaxViewLines(FrameNode * frameNode,uint32_t value)1143 void TextFieldModelNG::SetNormalMaxViewLines(FrameNode* frameNode, uint32_t value)
1144 {
1145     auto normalMaxViewLines = value <= 0 ? Infinity<uint32_t>() : value;
1146     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, NormalMaxViewLines, normalMaxViewLines, frameNode);
1147 }
1148 
SetType(FrameNode * frameNode,TextInputType value)1149 void TextFieldModelNG::SetType(FrameNode* frameNode, TextInputType value)
1150 {
1151     CHECK_NULL_VOID(frameNode);
1152     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1153     if (layoutProperty->HasTextInputType() && layoutProperty->GetTextInputTypeValue() != value) {
1154         auto pattern = frameNode->GetPattern<TextFieldPattern>();
1155         CHECK_NULL_VOID(pattern);
1156         pattern->SetIsFilterChanged(true);
1157         layoutProperty->UpdateTypeChanged(true);
1158     }
1159     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextInputType, value, frameNode);
1160 }
1161 
SetContentType(const FrameNode * frameNode,const TextContentType & value)1162 void TextFieldModelNG::SetContentType(const FrameNode* frameNode, const TextContentType& value)
1163 {
1164     CHECK_NULL_VOID(frameNode);
1165     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1166     CHECK_NULL_VOID(layoutProperty);
1167     if (layoutProperty->HasTextContentType() && layoutProperty->GetTextContentTypeValue() != value) {
1168         layoutProperty->UpdateTextContentTypeChanged(true);
1169     }
1170     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextContentType, value, frameNode);
1171 }
1172 
SetCopyOption(FrameNode * frameNode,CopyOptions copyOption)1173 void TextFieldModelNG::SetCopyOption(FrameNode* frameNode, CopyOptions copyOption)
1174 {
1175     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CopyOptions, copyOption, frameNode);
1176 }
1177 
SetShowPasswordIcon(FrameNode * frameNode,bool value)1178 void TextFieldModelNG::SetShowPasswordIcon(FrameNode* frameNode, bool value)
1179 {
1180     CHECK_NULL_VOID(frameNode);
1181     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1182     CHECK_NULL_VOID(layoutProperty);
1183     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1184     CHECK_NULL_VOID(pattern);
1185     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordIcon, value, frameNode);
1186 }
1187 
SetShowPassword(FrameNode * frameNode,bool value)1188 void TextFieldModelNG::SetShowPassword(FrameNode* frameNode, bool value)
1189 {
1190     CHECK_NULL_VOID(frameNode);
1191     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1192     CHECK_NULL_VOID(layoutProperty);
1193     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1194     CHECK_NULL_VOID(pattern);
1195     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowPasswordText, value, frameNode);
1196 }
1197 
SetTextAlign(FrameNode * frameNode,TextAlign value)1198 void TextFieldModelNG::SetTextAlign(FrameNode* frameNode, TextAlign value)
1199 {
1200     CHECK_NULL_VOID(frameNode);
1201     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1202     CHECK_NULL_VOID(pattern);
1203     TextAlign newValue = value;
1204     if (!pattern->IsTextArea() && newValue == TextAlign::JUSTIFY) {
1205         newValue = TextAlign::START;
1206     }
1207     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1208     if (layoutProperty->GetTextAlignValue(TextAlign::START) != newValue) {
1209         layoutProperty->UpdateTextAlignChanged(true);
1210     }
1211     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextAlign, newValue, frameNode);
1212 }
1213 
SetTextColor(FrameNode * frameNode,const Color & value)1214 void TextFieldModelNG::SetTextColor(FrameNode* frameNode, const Color& value)
1215 {
1216     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, value, frameNode);
1217     ACE_UPDATE_NODE_RENDER_CONTEXT(ForegroundColor, value, frameNode);
1218     ACE_RESET_NODE_RENDER_CONTEXT(RenderContext, ForegroundColorStrategy, frameNode);
1219     ACE_UPDATE_NODE_RENDER_CONTEXT(ForegroundColorFlag, true, frameNode);
1220 }
1221 
ResetTextColor(FrameNode * frameNode)1222 void TextFieldModelNG::ResetTextColor(FrameNode* frameNode)
1223 {
1224     ACE_RESET_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextColor, frameNode);
1225     ACE_RESET_NODE_RENDER_CONTEXT(RenderContext, ForegroundColor, frameNode);
1226     ACE_RESET_NODE_RENDER_CONTEXT(RenderContext, ForegroundColorFlag, frameNode);
1227 }
1228 
SetCaretPosition(FrameNode * frameNode,const int32_t & value)1229 void TextFieldModelNG::SetCaretPosition(FrameNode* frameNode, const int32_t& value)
1230 {
1231     CHECK_NULL_VOID(frameNode);
1232     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1233     pattern->SetCaretPosition(value);
1234 }
1235 
SetFontStyle(FrameNode * frameNode,Ace::FontStyle value)1236 void TextFieldModelNG::SetFontStyle(FrameNode* frameNode, Ace::FontStyle value)
1237 {
1238     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ItalicFontStyle, value, frameNode);
1239     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1240 }
1241 
SetMaxLength(FrameNode * frameNode,uint32_t value)1242 void TextFieldModelNG::SetMaxLength(FrameNode* frameNode, uint32_t value)
1243 {
1244     CHECK_NULL_VOID(frameNode);
1245     uint32_t preMaxLength = GetMaxLength(frameNode);
1246     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLength, value, frameNode);
1247     if (preMaxLength != value) {
1248         auto pattern = frameNode->GetPattern<TextFieldPattern>();
1249         CHECK_NULL_VOID(pattern);
1250         CHECK_NULL_VOID(pattern->HasFocus());
1251         pattern->UpdateShowCountBorderStyle();
1252     }
1253 }
1254 
ResetMaxLength(FrameNode * frameNode)1255 void TextFieldModelNG::ResetMaxLength(FrameNode* frameNode)
1256 {
1257     CHECK_NULL_VOID(frameNode);
1258     auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1259     if (textFieldLayoutProperty) {
1260         textFieldLayoutProperty->ResetMaxLength();
1261     }
1262 }
1263 
SetCaretStyle(FrameNode * frameNode,const CaretStyle & value)1264 void TextFieldModelNG::SetCaretStyle(FrameNode* frameNode, const CaretStyle& value)
1265 {
1266     if (value.caretWidth.has_value()) {
1267         ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CursorWidth, value.caretWidth.value(), frameNode);
1268     }
1269 }
1270 
SetPlaceholderColor(FrameNode * frameNode,const Color & value)1271 void TextFieldModelNG::SetPlaceholderColor(FrameNode* frameNode, const Color& value)
1272 {
1273     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderTextColor, value, frameNode);
1274     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, PlaceholderColorFlagByUser, true, frameNode);
1275 }
1276 
ResetPlaceholderColor(FrameNode * frameNode)1277 void TextFieldModelNG::ResetPlaceholderColor(FrameNode* frameNode)
1278 {
1279     CHECK_NULL_VOID(frameNode);
1280     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1281     CHECK_NULL_VOID(layoutProperty);
1282     if (layoutProperty->GetPlaceholderFontStyle()) {
1283         layoutProperty->GetPlaceholderFontStyle()->ResetTextColor();
1284     }
1285     ACE_RESET_NODE_PAINT_PROPERTY(TextFieldPaintProperty, PlaceholderColorFlagByUser, frameNode);
1286 }
1287 
SetFontWeight(FrameNode * frameNode,FontWeight value)1288 void TextFieldModelNG::SetFontWeight(FrameNode* frameNode, FontWeight value)
1289 {
1290     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontWeight, value, frameNode);
1291     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1292 }
1293 
SetShowUnderline(FrameNode * frameNode,bool showUnderLine)1294 void TextFieldModelNG::SetShowUnderline(FrameNode* frameNode, bool showUnderLine)
1295 {
1296     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowUnderline, showUnderLine, frameNode);
1297 }
1298 
SetUserUnderlineColor(FrameNode * frameNode,UserUnderlineColor userColor)1299 void TextFieldModelNG::SetUserUnderlineColor(FrameNode* frameNode, UserUnderlineColor userColor)
1300 {
1301     auto pattern = AceType::DynamicCast<TextFieldPattern>(frameNode->GetPattern());
1302     CHECK_NULL_VOID(pattern);
1303     pattern->SetUserUnderlineColor(userColor);
1304 }
1305 
SetNormalUnderlineColor(FrameNode * frameNode,const Color & normalColor)1306 void TextFieldModelNG::SetNormalUnderlineColor(FrameNode* frameNode, const Color& normalColor)
1307 {
1308     auto pattern = AceType::DynamicCast<TextFieldPattern>(frameNode->GetPattern());
1309     CHECK_NULL_VOID(pattern);
1310     pattern->SetNormalUnderlineColor(normalColor);
1311 }
1312 
SetEnterKeyType(FrameNode * frameNode,TextInputAction value)1313 void TextFieldModelNG::SetEnterKeyType(FrameNode* frameNode, TextInputAction value)
1314 {
1315     auto pattern = AceType::DynamicCast<TextFieldPattern>(frameNode->GetPattern());
1316     CHECK_NULL_VOID(pattern);
1317     if (value == TextInputAction::UNSPECIFIED) {
1318         value = pattern->IsTextArea() ? TextInputAction::NEW_LINE : TextInputAction::DONE;
1319     }
1320     pattern->UpdateTextInputAction(value);
1321 }
1322 
SetFontFamily(FrameNode * frameNode,const std::vector<std::string> & value)1323 void TextFieldModelNG::SetFontFamily(FrameNode* frameNode, const std::vector<std::string>& value)
1324 {
1325     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontFamily, value, frameNode);
1326     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1327 }
1328 
SetMaxLines(FrameNode * frameNode,uint32_t value)1329 void TextFieldModelNG::SetMaxLines(FrameNode* frameNode, uint32_t value)
1330 {
1331     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, MaxLines, value, frameNode);
1332 }
1333 
SetPlaceholderFont(FrameNode * frameNode,const Font & value)1334 void TextFieldModelNG::SetPlaceholderFont(FrameNode* frameNode, const Font& value)
1335 {
1336     if (value.fontSize.has_value()) {
1337         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1338             TextFieldLayoutProperty, PlaceholderFontSize, value.fontSize.value(), frameNode);
1339     }
1340     if (value.fontStyle) {
1341         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1342             TextFieldLayoutProperty, PlaceholderItalicFontStyle, value.fontStyle.value(), frameNode);
1343     }
1344     if (value.fontWeight) {
1345         ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1346             TextFieldLayoutProperty, PlaceholderFontWeight, value.fontWeight.value(), frameNode);
1347     }
1348     if (!value.fontFamilies.empty()) {
1349         ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PlaceholderFontFamily, value.fontFamilies, frameNode);
1350     }
1351     ACE_UPDATE_NODE_LAYOUT_PROPERTY(
1352         TextFieldLayoutProperty, PreferredPlaceholderLineHeightNeedToUpdate, true, frameNode);
1353 }
1354 
SetFontSize(FrameNode * frameNode,const Dimension & value)1355 void TextFieldModelNG::SetFontSize(FrameNode* frameNode, const Dimension& value)
1356 {
1357     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, FontSize, value, frameNode);
1358     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PreferredTextLineHeightNeedToUpdate, true, frameNode);
1359 }
1360 
SetCaretColor(FrameNode * frameNode,const Color & value)1361 void TextFieldModelNG::SetCaretColor(FrameNode* frameNode, const Color& value)
1362 {
1363     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CursorColor, value, frameNode);
1364     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CaretColorFlagByUser, true, frameNode);
1365 }
1366 
ResetCaretColor(FrameNode * frameNode)1367 void TextFieldModelNG::ResetCaretColor(FrameNode* frameNode)
1368 {
1369     ACE_RESET_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CursorColor, frameNode);
1370     ACE_RESET_NODE_PAINT_PROPERTY(TextFieldPaintProperty, CaretColorFlagByUser, frameNode);
1371 }
1372 
SetSelectionMenuHidden(FrameNode * frameNode,bool selectionMenuHidden)1373 void TextFieldModelNG::SetSelectionMenuHidden(FrameNode* frameNode, bool selectionMenuHidden)
1374 {
1375     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectionMenuHidden, selectionMenuHidden, frameNode);
1376 }
1377 
GetSelectionMenuHidden(FrameNode * frameNode)1378 bool TextFieldModelNG::GetSelectionMenuHidden(FrameNode* frameNode)
1379 {
1380     bool value = false;
1381     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1382         TextFieldLayoutProperty, SelectionMenuHidden, value, frameNode, value);
1383     return value;
1384 }
1385 
SetPasswordRules(FrameNode * frameNode,const std::string & passwordRules)1386 void TextFieldModelNG::SetPasswordRules(FrameNode* frameNode, const std::string& passwordRules)
1387 {
1388     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, PasswordRules, passwordRules, frameNode);
1389 }
1390 
SetEnableAutoFill(FrameNode * frameNode,bool enableAutoFill)1391 void TextFieldModelNG::SetEnableAutoFill(FrameNode* frameNode, bool enableAutoFill)
1392 {
1393     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, EnableAutoFill, enableAutoFill, frameNode);
1394 }
1395 
SetShowCounter(FrameNode * frameNode,bool value)1396 void TextFieldModelNG::SetShowCounter(FrameNode* frameNode, bool value)
1397 {
1398     CHECK_NULL_VOID(frameNode);
1399     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1400     CHECK_NULL_VOID(pattern);
1401     pattern->SetCounterState(false);
1402     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1403     CHECK_NULL_VOID(layoutProperty);
1404     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowCounter, value, frameNode);
1405     if (value && !pattern->IsNormalInlineState() && !pattern->IsInPasswordMode() &&
1406         layoutProperty->HasMaxLength()) {
1407         pattern->AddCounterNode();
1408     } else {
1409         pattern->CleanCounterNode();
1410     }
1411 }
1412 
SetShowError(FrameNode * frameNode,const std::u16string & errorText,bool visible)1413 void TextFieldModelNG::SetShowError(FrameNode* frameNode, const std::u16string& errorText, bool visible)
1414 {
1415     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ErrorText, errorText, frameNode);
1416     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, ShowErrorText, visible, frameNode);
1417 }
1418 
SetCounterType(FrameNode * frameNode,int32_t value)1419 void TextFieldModelNG::SetCounterType(FrameNode* frameNode, int32_t value)
1420 {
1421     CHECK_NULL_VOID(frameNode);
1422     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1423     CHECK_NULL_VOID(layoutProperty);
1424     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SetCounter, value, frameNode);
1425 }
1426 
SetOnWillChangeEvent(FrameNode * frameNode,std::function<bool (const ChangeValueInfo &)> && func)1427 void TextFieldModelNG::SetOnWillChangeEvent(FrameNode* frameNode, std::function<bool(const ChangeValueInfo&)>&& func)
1428 {
1429     CHECK_NULL_VOID(frameNode);
1430     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1431     CHECK_NULL_VOID(eventHub);
1432     eventHub->SetOnWillChangeEvent(std::move(func));
1433 }
1434 
SetOnChange(FrameNode * frameNode,std::function<void (const ChangeValueInfo &)> && func)1435 void TextFieldModelNG::SetOnChange(FrameNode* frameNode, std::function<void(const ChangeValueInfo&)>&& func)
1436 {
1437     CHECK_NULL_VOID(frameNode);
1438     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1439     CHECK_NULL_VOID(eventHub);
1440     eventHub->SetOnChange(std::move(func));
1441 }
1442 
SetOnContentSizeChange(FrameNode * frameNode,std::function<void (float,float)> && func)1443 void TextFieldModelNG::SetOnContentSizeChange(FrameNode* frameNode, std::function<void(float, float)>&& func)
1444 {
1445     CHECK_NULL_VOID(frameNode);
1446     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1447     CHECK_NULL_VOID(eventHub);
1448     eventHub->SetOnContentSizeChange(std::move(func));
1449 }
1450 
SetTextFieldText(FrameNode * frameNode,const std::u16string & value)1451 void TextFieldModelNG::SetTextFieldText(FrameNode* frameNode, const std::u16string& value)
1452 {
1453     CHECK_NULL_VOID(frameNode);
1454     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1455     auto textValue = pattern->GetTextUtf16Value();
1456     if (value != textValue) {
1457         pattern->InitEditingValueText(value);
1458     }
1459 }
1460 
SetTextFieldPlaceHolder(FrameNode * frameNode,const std::u16string & placeholder)1461 void TextFieldModelNG::SetTextFieldPlaceHolder(FrameNode* frameNode, const std::u16string& placeholder)
1462 {
1463     CHECK_NULL_VOID(frameNode);
1464     auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1465     textFieldLayoutProperty->UpdatePlaceholder(placeholder);
1466 }
1467 
StopTextFieldEditing(FrameNode * frameNode)1468 void TextFieldModelNG::StopTextFieldEditing(FrameNode* frameNode)
1469 {
1470     CHECK_NULL_VOID(frameNode);
1471     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1472     if (pattern) {
1473         pattern->StopEditing();
1474     }
1475 }
1476 
SetOnSubmit(FrameNode * frameNode,std::function<void (int32_t,NG::TextFieldCommonEvent &)> && func)1477 void TextFieldModelNG::SetOnSubmit(FrameNode* frameNode, std::function<void(int32_t, NG::TextFieldCommonEvent&)>&& func)
1478 {
1479     CHECK_NULL_VOID(frameNode);
1480     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1481     CHECK_NULL_VOID(eventHub);
1482     eventHub->SetOnSubmit(std::move(func));
1483 }
1484 
SetOnCut(FrameNode * frameNode,std::function<void (const std::u16string &)> && func)1485 void TextFieldModelNG::SetOnCut(FrameNode* frameNode, std::function<void(const std::u16string&)>&& func)
1486 {
1487     CHECK_NULL_VOID(frameNode);
1488     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1489     CHECK_NULL_VOID(eventHub);
1490     eventHub->SetOnCut(std::move(func));
1491 }
1492 
SetOnPasteWithEvent(FrameNode * frameNode,std::function<void (const std::u16string &,NG::TextCommonEvent &)> && func)1493 void TextFieldModelNG::SetOnPasteWithEvent(
1494     FrameNode* frameNode, std::function<void(const std::u16string&, NG::TextCommonEvent&)>&& func)
1495 {
1496     CHECK_NULL_VOID(frameNode);
1497     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1498     CHECK_NULL_VOID(eventHub);
1499     eventHub->SetOnPasteWithEvent(std::move(func));
1500 }
1501 
SetCleanNodeStyle(FrameNode * frameNode,CleanNodeStyle cleanNodeStyle)1502 void TextFieldModelNG::SetCleanNodeStyle(FrameNode* frameNode, CleanNodeStyle cleanNodeStyle)
1503 {
1504     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, CleanNodeStyle, cleanNodeStyle, frameNode);
1505 }
1506 
SetIsShowCancelButton(FrameNode * frameNode,bool isShowCancelButton)1507 void TextFieldModelNG::SetIsShowCancelButton(FrameNode* frameNode, bool isShowCancelButton)
1508 {
1509     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IsShowCancelButton, isShowCancelButton, frameNode);
1510 }
1511 
SetCancelIconSize(FrameNode * frameNode,const CalcDimension & iconSize)1512 void TextFieldModelNG::SetCancelIconSize(FrameNode* frameNode, const CalcDimension& iconSize)
1513 {
1514     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSize, iconSize, frameNode);
1515 }
1516 
SetCanacelIconSrc(FrameNode * frameNode,const std::string & iconSrc)1517 void TextFieldModelNG::SetCanacelIconSrc(FrameNode* frameNode, const std::string& iconSrc)
1518 {
1519     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconSrc, iconSrc, frameNode);
1520 }
1521 
SetCancelIconColor(FrameNode * frameNode,const Color & iconColor)1522 void TextFieldModelNG::SetCancelIconColor(FrameNode* frameNode, const Color& iconColor)
1523 {
1524     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IconColor, iconColor, frameNode);
1525 }
1526 
SetCancelButtonSymbol(FrameNode * frameNode,bool isShowSymbol)1527 void TextFieldModelNG::SetCancelButtonSymbol(FrameNode* frameNode, bool isShowSymbol)
1528 {
1529     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, IsShowSymbol, isShowSymbol, frameNode);
1530 }
1531 
SetCancelSymbolIcon(FrameNode * frameNode,const std::function<void (WeakPtr<NG::FrameNode>)> & iconSymbol)1532 void TextFieldModelNG::SetCancelSymbolIcon(FrameNode* frameNode,
1533     const std::function<void(WeakPtr<NG::FrameNode>)>& iconSymbol)
1534 {
1535     CHECK_NULL_VOID(frameNode);
1536     auto layoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
1537     CHECK_NULL_VOID(layoutProperty);
1538     layoutProperty->SetCancelIconSymbol(iconSymbol);
1539 }
1540 
GetPlaceholderText(FrameNode * frameNode)1541 std::u16string TextFieldModelNG::GetPlaceholderText(FrameNode* frameNode)
1542 {
1543     std::u16string value;
1544     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, Placeholder, value, frameNode, value);
1545     return value;
1546 }
1547 
GetTextFieldText(FrameNode * frameNode)1548 std::u16string TextFieldModelNG::GetTextFieldText(FrameNode* frameNode)
1549 {
1550     std::u16string value;
1551     CHECK_NULL_RETURN(frameNode, value);
1552     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1553     return pattern->GetTextUtf16Value();
1554 }
1555 
GetCaretColor(FrameNode * frameNode)1556 Color TextFieldModelNG::GetCaretColor(FrameNode* frameNode)
1557 {
1558     Color value;
1559     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldPaintProperty, CursorColor, value, frameNode, value);
1560     return value;
1561 }
1562 
GetCaretStyle(FrameNode * frameNode)1563 Dimension TextFieldModelNG::GetCaretStyle(FrameNode* frameNode)
1564 {
1565     Dimension value;
1566     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldPaintProperty, CursorWidth, value, frameNode, value);
1567     return value;
1568 }
1569 
GetShowUnderline(FrameNode * frameNode)1570 bool TextFieldModelNG::GetShowUnderline(FrameNode* frameNode)
1571 {
1572     bool value = false;
1573     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowUnderline, value, frameNode, value);
1574     return value;
1575 }
1576 
GetMaxLength(FrameNode * frameNode)1577 uint32_t TextFieldModelNG::GetMaxLength(FrameNode* frameNode)
1578 {
1579     uint32_t value = 0;
1580     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, MaxLength, value, frameNode, value);
1581     return value;
1582 }
1583 
GetEnterKeyType(FrameNode * frameNode)1584 TextInputAction TextFieldModelNG::GetEnterKeyType(FrameNode* frameNode)
1585 {
1586     TextInputAction value = TextInputAction::UNSPECIFIED;
1587     CHECK_NULL_RETURN(frameNode, value);
1588     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1589     return pattern->GetTextInputActionValue(
1590         frameNode->GetTag() == V2::TEXTAREA_ETS_TAG ? TextInputAction::NEW_LINE : TextInputAction::DONE);
1591 }
1592 
GetPlaceholderColor(FrameNode * frameNode)1593 Color TextFieldModelNG::GetPlaceholderColor(FrameNode* frameNode)
1594 {
1595     Color value;
1596     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1597         TextFieldLayoutProperty, PlaceholderTextColor, value, frameNode, value);
1598     return value;
1599 }
1600 
GetPlaceholderFont(FrameNode * frameNode)1601 Font TextFieldModelNG::GetPlaceholderFont(FrameNode* frameNode)
1602 {
1603     std::vector<std::string> fontFamilies;
1604     Dimension fontSize;
1605     Ace::FontStyle fontStyle = Ace::FontStyle::NORMAL;
1606     Ace::FontWeight fontWeight = Ace::FontWeight::NORMAL;
1607     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1608         TextFieldLayoutProperty, PlaceholderFontSize, fontSize, frameNode, Dimension());
1609     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1610         TextFieldLayoutProperty, PlaceholderItalicFontStyle, fontStyle, frameNode, fontStyle);
1611     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1612         TextFieldLayoutProperty, PlaceholderFontWeight, fontWeight, frameNode, fontWeight);
1613     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1614         TextFieldLayoutProperty, PlaceholderFontFamily, fontFamilies, frameNode, fontFamilies);
1615     Font value { fontWeight, fontSize, fontStyle, fontFamilies, std::nullopt, std::nullopt, std::nullopt };
1616     return value;
1617 }
1618 
GetRequestKeyboardOnFocus(FrameNode * frameNode)1619 bool TextFieldModelNG::GetRequestKeyboardOnFocus(FrameNode* frameNode)
1620 {
1621     bool value = false;
1622     CHECK_NULL_RETURN(frameNode, value);
1623     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1624     return pattern->NeedToRequestKeyboardOnFocus();
1625 }
1626 
GetType(FrameNode * frameNode)1627 TextInputType TextFieldModelNG::GetType(FrameNode* frameNode)
1628 {
1629     TextInputType value = TextInputType::UNSPECIFIED;
1630     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextInputType, value, frameNode, value);
1631     return value;
1632 }
1633 
GetSelectedBackgroundColor(FrameNode * frameNode)1634 Color TextFieldModelNG::GetSelectedBackgroundColor(FrameNode* frameNode)
1635 {
1636     Color value;
1637     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(
1638         TextFieldPaintProperty, SelectedBackgroundColor, value, frameNode, value);
1639     return value;
1640 }
1641 
GetShowPasswordIcon(FrameNode * frameNode)1642 bool TextFieldModelNG::GetShowPasswordIcon(FrameNode* frameNode)
1643 {
1644     bool value = false;
1645     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowPasswordIcon, value, frameNode, value);
1646     return value;
1647 }
1648 
GetShowPassword(FrameNode * frameNode)1649 bool TextFieldModelNG::GetShowPassword(FrameNode* frameNode)
1650 {
1651     bool value = false;
1652     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowPasswordText, value, frameNode, value);
1653     return value;
1654 }
1655 
GetTextFieldEditing(FrameNode * frameNode)1656 bool TextFieldModelNG::GetTextFieldEditing(FrameNode* frameNode)
1657 {
1658     bool value = false;
1659     CHECK_NULL_RETURN(frameNode, value);
1660     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1661     return pattern->HasFocus();
1662 }
1663 
GetShowCancelButton(FrameNode * frameNode)1664 bool TextFieldModelNG::GetShowCancelButton(FrameNode* frameNode)
1665 {
1666     bool value = false;
1667     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1668         TextFieldLayoutProperty, IsShowCancelButton, value, frameNode, value);
1669     return value;
1670 }
1671 
GetCancelIconSize(FrameNode * frameNode)1672 CalcDimension TextFieldModelNG::GetCancelIconSize(FrameNode* frameNode)
1673 {
1674     CalcDimension value;
1675     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, IconSize, value, frameNode, value);
1676     return value;
1677 }
1678 
GetCanacelIconSrc(FrameNode * frameNode)1679 std::string TextFieldModelNG::GetCanacelIconSrc(FrameNode* frameNode)
1680 {
1681     std::string value;
1682     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, IconSrc, value, frameNode, value);
1683     return value;
1684 }
1685 
GetCancelIconColor(FrameNode * frameNode)1686 Color TextFieldModelNG::GetCancelIconColor(FrameNode* frameNode)
1687 {
1688     Color value;
1689     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, IconColor, value, frameNode, value);
1690     return value;
1691 }
1692 
GetTextAlign(FrameNode * frameNode)1693 TextAlign TextFieldModelNG::GetTextAlign(FrameNode* frameNode)
1694 {
1695     TextAlign value = TextAlign::START;
1696     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextAlign, value, frameNode, value);
1697     return value;
1698 }
GetTextColor(FrameNode * frameNode)1699 Color TextFieldModelNG::GetTextColor(FrameNode* frameNode)
1700 {
1701     Color value;
1702     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextColor, value, frameNode, value);
1703     return value;
1704 }
GetFontStyle(FrameNode * frameNode)1705 Ace::FontStyle TextFieldModelNG::GetFontStyle(FrameNode* frameNode)
1706 {
1707     Ace::FontStyle value = Ace::FontStyle::NORMAL;
1708     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ItalicFontStyle, value, frameNode, value);
1709     return value;
1710 }
GetFontWeight(FrameNode * frameNode)1711 FontWeight TextFieldModelNG::GetFontWeight(FrameNode* frameNode)
1712 {
1713     FontWeight value = FontWeight::NORMAL;
1714     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, FontWeight, value, frameNode, value);
1715     return value;
1716 }
GetFontSize(FrameNode * frameNode)1717 Dimension TextFieldModelNG::GetFontSize(FrameNode* frameNode)
1718 {
1719     Dimension value;
1720     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, FontSize, value, frameNode, Dimension());
1721     return value;
1722 }
GetCleanNodeStyle(FrameNode * frameNode)1723 CleanNodeStyle TextFieldModelNG::GetCleanNodeStyle(FrameNode* frameNode)
1724 {
1725     CleanNodeStyle value = CleanNodeStyle::INPUT;
1726     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, CleanNodeStyle, value, frameNode, value);
1727     return value;
1728 }
GetShowCounter(FrameNode * frameNode)1729 bool TextFieldModelNG::GetShowCounter(FrameNode* frameNode)
1730 {
1731     bool value = false;
1732     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, ShowCounter, value, frameNode, value);
1733     return static_cast<int>(value);
1734 }
GetCounterType(FrameNode * frameNode)1735 int TextFieldModelNG::GetCounterType(FrameNode* frameNode)
1736 {
1737     int value = -1;
1738     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, SetCounter, value, frameNode, value);
1739     return value;
1740 }
GetShowCounterBorder(FrameNode * frameNode)1741 bool TextFieldModelNG::GetShowCounterBorder(FrameNode* frameNode)
1742 {
1743     bool value = true;
1744     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(
1745         TextFieldLayoutProperty, ShowHighlightBorder, value, frameNode, value);
1746     return value;
1747 }
1748 
SetTextSelection(FrameNode * frameNode,int32_t start,int32_t end)1749 void TextFieldModelNG::SetTextSelection(FrameNode* frameNode, int32_t start, int32_t end)
1750 {
1751     CHECK_NULL_VOID(frameNode);
1752     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1753     CHECK_NULL_VOID(pattern);
1754     auto wideText = pattern->GetTextUtf16Value();
1755     int32_t length = static_cast<int32_t>(wideText.length());
1756     start = std::clamp(start, 0, length);
1757     end = std::clamp(end, 0, length);
1758     pattern->SetSelectionFlag(start, end);
1759 }
1760 
GetTextSelectionIndex(FrameNode * frameNode,bool isEnd)1761 int32_t TextFieldModelNG::GetTextSelectionIndex(FrameNode* frameNode, bool isEnd)
1762 {
1763     int32_t defaultValue = 0;
1764     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1765     CHECK_NULL_RETURN(pattern, defaultValue);
1766     auto selectController = pattern->GetTextSelectController();
1767     if (isEnd) {
1768         return selectController->GetEndIndex();
1769     }
1770     return selectController->GetStartIndex();
1771 }
1772 
ResetTextInputPadding(FrameNode * frameNode)1773 void TextFieldModelNG::ResetTextInputPadding(FrameNode* frameNode)
1774 {
1775     CHECK_NULL_VOID(frameNode);
1776     auto pipeline = frameNode->GetContext();
1777     CHECK_NULL_VOID(pipeline);
1778     auto themeManager = pipeline->GetThemeManager();
1779     CHECK_NULL_VOID(themeManager);
1780     auto textFieldTheme = themeManager->GetTheme<TextFieldTheme>();
1781     CHECK_NULL_VOID(textFieldTheme);
1782     auto themePadding = textFieldTheme->GetPadding();
1783     PaddingProperty paddings;
1784     paddings.top = NG::CalcLength(themePadding.Top().ConvertToPx());
1785     paddings.bottom = NG::CalcLength(themePadding.Bottom().ConvertToPx());
1786     paddings.left = NG::CalcLength(themePadding.Left().ConvertToPx());
1787     paddings.right = NG::CalcLength(themePadding.Right().ConvertToPx());
1788     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, Padding, paddings, frameNode);
1789 }
1790 
SetTextDecoration(FrameNode * frameNode,TextDecoration value)1791 void TextFieldModelNG::SetTextDecoration(FrameNode* frameNode, TextDecoration value)
1792 {
1793     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecoration, value, frameNode);
1794 }
1795 
SetTextDecorationColor(FrameNode * frameNode,const Color & value)1796 void TextFieldModelNG::SetTextDecorationColor(FrameNode* frameNode, const Color& value)
1797 {
1798     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationColor, value, frameNode);
1799 }
1800 
SetTextDecorationStyle(FrameNode * frameNode,TextDecorationStyle value)1801 void TextFieldModelNG::SetTextDecorationStyle(FrameNode* frameNode, TextDecorationStyle value)
1802 {
1803     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, TextDecorationStyle, value, frameNode);
1804 }
1805 
SetLetterSpacing(FrameNode * frameNode,const Dimension & value)1806 void TextFieldModelNG::SetLetterSpacing(FrameNode* frameNode, const Dimension& value)
1807 {
1808     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LetterSpacing, value, frameNode);
1809 }
1810 
SetLineHeight(FrameNode * frameNode,const Dimension & value)1811 void TextFieldModelNG::SetLineHeight(FrameNode* frameNode, const Dimension& value)
1812 {
1813     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineHeight, value, frameNode);
1814 }
1815 
SetHalfLeading(FrameNode * frameNode,const bool & value)1816 void TextFieldModelNG::SetHalfLeading(FrameNode* frameNode, const bool& value)
1817 {
1818     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, HalfLeading, value, frameNode);
1819 }
1820 
SetLineSpacing(FrameNode * frameNode,const Dimension & value)1821 void TextFieldModelNG::SetLineSpacing(FrameNode* frameNode, const Dimension& value)
1822 {
1823     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineSpacing, value, frameNode);
1824 }
1825 
SetWordBreak(FrameNode * frameNode,Ace::WordBreak value)1826 void TextFieldModelNG::TextFieldModelNG::SetWordBreak(FrameNode* frameNode, Ace::WordBreak value)
1827 {
1828     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, WordBreak, value, frameNode);
1829 }
1830 
SetLineBreakStrategy(FrameNode * frameNode,LineBreakStrategy value)1831 void TextFieldModelNG::SetLineBreakStrategy(FrameNode* frameNode, LineBreakStrategy value)
1832 {
1833     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, LineBreakStrategy, value, frameNode);
1834 }
1835 
SetSelectAllValue(FrameNode * frameNode,bool isSelectAllValue)1836 void TextFieldModelNG::SetSelectAllValue(FrameNode* frameNode, bool isSelectAllValue)
1837 {
1838     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, SelectAllValue, isSelectAllValue, frameNode);
1839 }
1840 
SetBlurOnSubmit(FrameNode * frameNode,bool blurOnSubmit)1841 void TextFieldModelNG::SetBlurOnSubmit(FrameNode* frameNode, bool blurOnSubmit)
1842 {
1843     CHECK_NULL_VOID(frameNode);
1844     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1845     CHECK_NULL_VOID(pattern);
1846     return pattern->SetBlurOnSubmit(blurOnSubmit);
1847 }
1848 
GetBlurOnSubmit(FrameNode * frameNode)1849 bool TextFieldModelNG::GetBlurOnSubmit(FrameNode* frameNode)
1850 {
1851     CHECK_NULL_RETURN(frameNode, true);
1852     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1853     CHECK_NULL_RETURN(pattern, true);
1854     return pattern->GetBlurOnSubmit();
1855 }
1856 
SetKeyboardAppearance(FrameNode * frameNode,KeyboardAppearance value)1857 void TextFieldModelNG::SetKeyboardAppearance(FrameNode* frameNode, KeyboardAppearance value)
1858 {
1859     CHECK_NULL_VOID(frameNode);
1860     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1861     CHECK_NULL_VOID(pattern);
1862     pattern->SetKeyboardAppearance(value);
1863 }
1864 
GetKeyboardAppearance(FrameNode * frameNode)1865 int32_t TextFieldModelNG::GetKeyboardAppearance(FrameNode* frameNode)
1866 {
1867     CHECK_NULL_RETURN(frameNode, false);
1868     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1869     CHECK_NULL_RETURN(pattern, false);
1870     return static_cast<int32_t>(pattern->GetKeyboardAppearance());
1871 }
1872 
SetOnEditChange(FrameNode * frameNode,std::function<void (bool)> && func)1873 void TextFieldModelNG::SetOnEditChange(FrameNode* frameNode, std::function<void(bool)>&& func)
1874 {
1875     CHECK_NULL_VOID(frameNode);
1876     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1877     CHECK_NULL_VOID(eventHub);
1878     eventHub->SetOnEditChanged(std::move(func));
1879 }
1880 
SetInputFilter(FrameNode * frameNode,const std::string & value,const std::function<void (const std::u16string &)> & onError)1881 void TextFieldModelNG::SetInputFilter(FrameNode* frameNode,
1882     const std::string& value, const std::function<void(const std::u16string&)>& onError)
1883 {
1884     CHECK_NULL_VOID(frameNode);
1885     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, InputFilter, value, frameNode);
1886     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1887     CHECK_NULL_VOID(eventHub);
1888     eventHub->SetOnInputFilterError(onError);
1889 }
1890 
SetOnContentScroll(FrameNode * frameNode,std::function<void (float,float)> && func)1891 void TextFieldModelNG::SetOnContentScroll(FrameNode* frameNode, std::function<void(float, float)>&& func)
1892 {
1893     CHECK_NULL_VOID(frameNode);
1894     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1895     CHECK_NULL_VOID(eventHub);
1896     eventHub->SetOnScrollChangeEvent(std::move(func));
1897 }
1898 
SetOnCopy(FrameNode * frameNode,std::function<void (const std::u16string &)> && func)1899 void TextFieldModelNG::SetOnCopy(FrameNode* frameNode, std::function<void(const std::u16string&)>&& func)
1900 {
1901     CHECK_NULL_VOID(frameNode);
1902     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1903     CHECK_NULL_VOID(eventHub);
1904     eventHub->SetOnCopy(std::move(func));
1905 }
1906 
SetOnEditChanged(FrameNode * frameNode,std::function<void (bool)> && func)1907 void TextFieldModelNG::SetOnEditChanged(FrameNode* frameNode, std::function<void(bool)>&& func)
1908 {
1909     CHECK_NULL_VOID(frameNode);
1910     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1911     CHECK_NULL_VOID(eventHub);
1912     eventHub->SetOnEditChanged(std::move(func));
1913 }
1914 
SetCustomKeyboard(FrameNode * frameNode,FrameNode * customKeyboard,bool supportAvoidance)1915 void TextFieldModelNG::SetCustomKeyboard(FrameNode* frameNode, FrameNode* customKeyboard, bool supportAvoidance)
1916 {
1917     CHECK_NULL_VOID(frameNode);
1918     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1919     if (pattern) {
1920         pattern->SetCustomKeyboardWithNode(AceType::Claim<UINode>(customKeyboard));
1921         pattern->SetCustomKeyboardOption(supportAvoidance);
1922     }
1923 }
1924 
SetInputFilter(FrameNode * frameNode,const std::string & value)1925 void TextFieldModelNG::SetInputFilter(FrameNode* frameNode, const std::string& value)
1926 {
1927     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, InputFilter, value, frameNode);
1928 }
1929 
SetInputFilterError(FrameNode * frameNode,const std::function<void (const std::u16string &)> & onError)1930 void TextFieldModelNG::SetInputFilterError(FrameNode* frameNode,
1931     const std::function<void(const std::u16string&)>& onError)
1932 {
1933     CHECK_NULL_VOID(frameNode);
1934     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
1935     CHECK_NULL_VOID(eventHub);
1936     eventHub->SetOnInputFilterError(onError);
1937 }
1938 
GetWordBreak(FrameNode * frameNode)1939 Ace::WordBreak TextFieldModelNG::GetWordBreak(FrameNode* frameNode)
1940 {
1941     Ace::WordBreak value = Ace::WordBreak::BREAK_WORD;
1942     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, WordBreak, value, frameNode, value);
1943     return value;
1944 }
1945 
GetEnableAutoFill(FrameNode * frameNode)1946 bool TextFieldModelNG::GetEnableAutoFill(FrameNode* frameNode)
1947 {
1948     bool value = true;
1949     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, EnableAutoFill, value, frameNode, value);
1950     return value;
1951 }
1952 
GetContentType(FrameNode * frameNode)1953 TextContentType TextFieldModelNG::GetContentType(FrameNode* frameNode)
1954 {
1955     TextContentType value = TextContentType::UNSPECIFIED;
1956     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, TextContentType, value, frameNode, value);
1957     return value;
1958 }
1959 
GetUnderLineColor(FrameNode * frameNode)1960 UserUnderlineColor TextFieldModelNG::GetUnderLineColor(FrameNode* frameNode)
1961 {
1962     CHECK_NULL_RETURN(frameNode, UserUnderlineColor());
1963     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1964     CHECK_NULL_RETURN(pattern, UserUnderlineColor());
1965     return pattern->GetUserUnderlineColor();
1966 }
1967 
GetPasswordRules(FrameNode * frameNode)1968 std::string TextFieldModelNG::GetPasswordRules(FrameNode* frameNode)
1969 {
1970     std::string value;
1971     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, PasswordRules, value, frameNode, value);
1972     return value;
1973 }
1974 
GetSelectAllValue(FrameNode * frameNode)1975 bool TextFieldModelNG::GetSelectAllValue(FrameNode* frameNode)
1976 {
1977     bool value = false;
1978     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, SelectAllValue, value, frameNode, value);
1979     return value;
1980 }
1981 
GetInputFilter(FrameNode * frameNode)1982 std::string TextFieldModelNG::GetInputFilter(FrameNode* frameNode)
1983 {
1984     std::string value;
1985     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, InputFilter, value, frameNode, value);
1986     return value;
1987 }
1988 
GetOrCreateController(FrameNode * frameNode)1989 RefPtr<TextFieldControllerBase> TextFieldModelNG::GetOrCreateController(FrameNode* frameNode)
1990 {
1991     CHECK_NULL_RETURN(frameNode, nullptr);
1992     auto pattern = frameNode->GetPattern<TextFieldPattern>();
1993     CHECK_NULL_RETURN(pattern, nullptr);
1994     if (!pattern->GetTextFieldController()) {
1995         auto controller = AceType::MakeRefPtr<NG::TextFieldController>();
1996         pattern->SetTextFieldController(controller);
1997         controller->SetPattern(AceType::WeakClaim(AceType::RawPtr(pattern)));
1998     }
1999     return pattern->GetTextFieldController();
2000 }
2001 
GetInputStyle(FrameNode * frameNode)2002 InputStyle TextFieldModelNG::GetInputStyle(FrameNode* frameNode)
2003 {
2004     InputStyle value = InputStyle::DEFAULT;
2005     ACE_GET_NODE_PAINT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldPaintProperty, InputStyle, value, frameNode, value);
2006     return value;
2007 }
2008 
GetFontFeature(FrameNode * frameNode)2009 FONT_FEATURES_LIST TextFieldModelNG::GetFontFeature(FrameNode* frameNode)
2010 {
2011     FONT_FEATURES_LIST value;
2012     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, FontFeature, value, frameNode, value);
2013     return value;
2014 }
2015 
GetAdaptMinFontSize(FrameNode * frameNode)2016 Dimension TextFieldModelNG::GetAdaptMinFontSize(FrameNode* frameNode)
2017 {
2018     Dimension value;
2019     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, AdaptMinFontSize, value, frameNode, value);
2020     return value;
2021 }
2022 
SetOnWillInsertValueEvent(std::function<bool (const InsertValueInfo &)> && func)2023 void TextFieldModelNG::SetOnWillInsertValueEvent(std::function<bool(const InsertValueInfo&)>&& func)
2024 {
2025     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
2026     CHECK_NULL_VOID(eventHub);
2027     eventHub->SetOnWillInsertValueEvent(std::move(func));
2028 }
2029 
SetOnDidInsertValueEvent(std::function<void (const InsertValueInfo &)> && func)2030 void TextFieldModelNG::SetOnDidInsertValueEvent(std::function<void(const InsertValueInfo&)>&& func)
2031 {
2032     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
2033     CHECK_NULL_VOID(eventHub);
2034     eventHub->SetOnDidInsertValueEvent(std::move(func));
2035 }
2036 
SetOnWillDeleteEvent(std::function<bool (const DeleteValueInfo &)> && func)2037 void TextFieldModelNG::SetOnWillDeleteEvent(std::function<bool(const DeleteValueInfo&)>&& func)
2038 {
2039     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
2040     CHECK_NULL_VOID(eventHub);
2041     eventHub->SetOnWillDeleteEvent(std::move(func));
2042 }
2043 
SetOnDidDeleteEvent(std::function<void (const DeleteValueInfo &)> && func)2044 void TextFieldModelNG::SetOnDidDeleteEvent(std::function<void(const DeleteValueInfo&)>&& func)
2045 {
2046     auto eventHub = ViewStackProcessor::GetInstance()->GetMainFrameNodeEventHub<TextFieldEventHub>();
2047     CHECK_NULL_VOID(eventHub);
2048     eventHub->SetOnDidDeleteEvent(std::move(func));
2049 }
2050 
SetSelectionMenuOptions(const NG::OnCreateMenuCallback && onCreateMenuCallback,const NG::OnMenuItemClickCallback && onMenuItemClick)2051 void TextFieldModelNG::SetSelectionMenuOptions(
2052     const NG::OnCreateMenuCallback&& onCreateMenuCallback, const NG::OnMenuItemClickCallback&& onMenuItemClick)
2053 {
2054     auto textFieldPattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
2055     CHECK_NULL_VOID(textFieldPattern);
2056     textFieldPattern->OnSelectionMenuOptionsUpdate(std::move(onCreateMenuCallback), std::move(onMenuItemClick));
2057 }
2058 
SetEnablePreviewText(bool enablePreviewText)2059 void TextFieldModelNG::SetEnablePreviewText(bool enablePreviewText)
2060 {
2061     auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
2062     CHECK_NULL_VOID(pattern);
2063     pattern->SetSupportPreviewText(enablePreviewText);
2064 }
2065 
GetEnablePreviewText(FrameNode * frameNode)2066 bool TextFieldModelNG::GetEnablePreviewText(FrameNode* frameNode)
2067 {
2068     CHECK_NULL_RETURN(frameNode, false);
2069     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2070     CHECK_NULL_RETURN(pattern, false);
2071     return pattern->GetSupportPreviewText();
2072 }
2073 
SetEnableHapticFeedback(bool state)2074 void TextFieldModelNG::SetEnableHapticFeedback(bool state)
2075 {
2076     auto pattern = ViewStackProcessor::GetInstance()->GetMainFrameNodePattern<TextFieldPattern>();
2077     CHECK_NULL_VOID(pattern);
2078     pattern->SetEnableHapticFeedback(state);
2079 }
2080 
SetEllipsisMode(EllipsisMode value)2081 void TextFieldModelNG::SetEllipsisMode(EllipsisMode value)
2082 {
2083     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, EllipsisMode, value);
2084 }
2085 
GetAdaptMaxFontSize(FrameNode * frameNode)2086 Dimension TextFieldModelNG::GetAdaptMaxFontSize(FrameNode* frameNode)
2087 {
2088     Dimension value;
2089     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, AdaptMaxFontSize, value, frameNode, value);
2090     return value;
2091 }
2092 
GetLineHeight(FrameNode * frameNode)2093 Dimension TextFieldModelNG::GetLineHeight(FrameNode* frameNode)
2094 {
2095     Dimension value;
2096     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, LineHeight, value, frameNode, value);
2097     return value;
2098 }
2099 
GetMaxLines(FrameNode * frameNode)2100 uint32_t TextFieldModelNG::GetMaxLines(FrameNode* frameNode)
2101 {
2102     uint32_t value = 3;
2103     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, MaxLines, value, frameNode, value);
2104     return value;
2105 }
2106 
SetPadding(FrameNode * frameNode,NG::PaddingProperty & newPadding)2107 void TextFieldModelNG::SetPadding(FrameNode* frameNode, NG::PaddingProperty& newPadding)
2108 {
2109     CHECK_NULL_VOID(frameNode);
2110     NG::ViewAbstract::SetPadding(frameNode, newPadding);
2111     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, PaddingByUser, newPadding, frameNode);
2112     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2113     CHECK_NULL_VOID(pattern);
2114     pattern->SetIsInitTextRect(false);
2115 }
2116 
GetCustomKeyboard(FrameNode * frameNode)2117 RefPtr<UINode> TextFieldModelNG::GetCustomKeyboard(FrameNode* frameNode)
2118 {
2119     CHECK_NULL_RETURN(frameNode, nullptr);
2120     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2121     CHECK_NULL_RETURN(pattern, nullptr);
2122     return pattern->GetCustomKeyboard();
2123 }
2124 
GetCustomKeyboardOption(FrameNode * frameNode)2125 bool TextFieldModelNG::GetCustomKeyboardOption(FrameNode* frameNode)
2126 {
2127     CHECK_NULL_RETURN(frameNode, false);
2128     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2129     CHECK_NULL_RETURN(pattern, false);
2130     return pattern->GetCustomKeyboardOption();
2131 }
2132 
SetShowKeyBoardOnFocus(FrameNode * frameNode,bool value)2133 void TextFieldModelNG::SetShowKeyBoardOnFocus(FrameNode* frameNode, bool value)
2134 {
2135     CHECK_NULL_VOID(frameNode);
2136     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2137     CHECK_NULL_VOID(pattern);
2138     pattern->SetShowKeyBoardOnFocus(value);
2139 }
GetShowKeyBoardOnFocus(FrameNode * frameNode)2140 bool TextFieldModelNG::GetShowKeyBoardOnFocus(FrameNode* frameNode)
2141 {
2142     CHECK_NULL_RETURN(frameNode, true);
2143     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2144     CHECK_NULL_RETURN(pattern, true);
2145     return pattern->GetShowKeyBoardOnFocus();
2146 }
2147 
SetNumberOfLines(FrameNode * frameNode,int32_t value)2148 void TextFieldModelNG::SetNumberOfLines(FrameNode* frameNode, int32_t value)
2149 {
2150     CHECK_NULL_VOID(frameNode);
2151     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, NumberOfLines, value, frameNode);
2152 }
2153 
GetNumberOfLines(FrameNode * frameNode)2154 int32_t TextFieldModelNG::GetNumberOfLines(FrameNode* frameNode)
2155 {
2156     int32_t value = -1;
2157     ACE_GET_NODE_LAYOUT_PROPERTY_WITH_DEFAULT_VALUE(TextFieldLayoutProperty, NumberOfLines, value, frameNode, value);
2158     return value;
2159 }
2160 
ResetNumberOfLines(FrameNode * frameNode)2161 void TextFieldModelNG::ResetNumberOfLines(FrameNode* frameNode)
2162 {
2163     CHECK_NULL_VOID(frameNode);
2164     auto textFieldLayoutProperty = frameNode->GetLayoutProperty<TextFieldLayoutProperty>();
2165     if (textFieldLayoutProperty) {
2166         textFieldLayoutProperty->ResetNumberOfLines();
2167     }
2168 }
2169 
SetBorderWidth(FrameNode * frameNode,NG::BorderWidthProperty borderWidth)2170 void TextFieldModelNG::SetBorderWidth(FrameNode* frameNode, NG::BorderWidthProperty borderWidth)
2171 {
2172     CHECK_NULL_VOID(frameNode);
2173     NG::ViewAbstract::SetBorderWidth(frameNode, borderWidth);
2174     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderWidthFlagByUser, borderWidth, frameNode);
2175     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2176     CHECK_NULL_VOID(pattern);
2177     pattern->SetIsInitTextRect(false);
2178 }
2179 
SetBorderRadius(FrameNode * frameNode,NG::BorderRadiusProperty borderRadius)2180 void TextFieldModelNG::SetBorderRadius(FrameNode* frameNode, NG::BorderRadiusProperty borderRadius)
2181 {
2182     CHECK_NULL_VOID(frameNode);
2183     NG::ViewAbstract::SetBorderRadius(frameNode, borderRadius);
2184     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderRadiusFlagByUser, borderRadius, frameNode);
2185 }
2186 
SetBorderColor(FrameNode * frameNode,NG::BorderColorProperty borderColors)2187 void TextFieldModelNG::SetBorderColor(FrameNode* frameNode, NG::BorderColorProperty borderColors)
2188 {
2189     CHECK_NULL_VOID(frameNode);
2190     NG::ViewAbstract::SetBorderColor(frameNode, borderColors);
2191     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderColorFlagByUser, borderColors, frameNode);
2192 }
2193 
SetBorderStyle(FrameNode * frameNode,NG::BorderStyleProperty borderStyles)2194 void TextFieldModelNG::SetBorderStyle(FrameNode* frameNode, NG::BorderStyleProperty borderStyles)
2195 {
2196     CHECK_NULL_VOID(frameNode);
2197     NG::ViewAbstract::SetBorderStyle(frameNode, borderStyles);
2198     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, BorderStyleFlagByUser, borderStyles, frameNode);
2199 }
2200 
SetMargin(FrameNode * frameNode,NG::PaddingProperty & margin)2201 void TextFieldModelNG::SetMargin(FrameNode* frameNode, NG::PaddingProperty& margin)
2202 {
2203     CHECK_NULL_VOID(frameNode);
2204     MarginProperty userMargin;
2205     userMargin.top = margin.top;
2206     userMargin.bottom = margin.bottom;
2207     userMargin.left = margin.left;
2208     userMargin.right = margin.right;
2209     ACE_UPDATE_NODE_PAINT_PROPERTY(TextFieldPaintProperty, MarginByUser, userMargin, frameNode);
2210 }
2211 
GetMargin(FrameNode * frameNode)2212 PaddingProperty TextFieldModelNG::GetMargin(FrameNode* frameNode)
2213 {
2214     CalcLength defaultDimen = CalcLength(0, DimensionUnit::VP);
2215     NG::PaddingProperty margins;
2216     margins.top = std::optional<CalcLength>(defaultDimen);
2217     margins.right = std::optional<CalcLength>(defaultDimen);
2218     margins.bottom = std::optional<CalcLength>(defaultDimen);
2219     margins.left = std::optional<CalcLength>(defaultDimen);
2220     auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
2221     CHECK_NULL_RETURN(textfieldPaintProperty, margins);
2222     if (textfieldPaintProperty->HasMarginByUser()) {
2223         const auto& property = textfieldPaintProperty->GetMarginByUserValue();
2224         margins.top = std::optional<CalcLength>(property.top);
2225         margins.right = std::optional<CalcLength>(property.right);
2226         margins.bottom = std::optional<CalcLength>(property.bottom);
2227         margins.left = std::optional<CalcLength>(property.left);
2228     }
2229     return margins;
2230 }
2231 
SetOnWillInsertValueEvent(FrameNode * frameNode,std::function<bool (const InsertValueInfo &)> && func)2232 void TextFieldModelNG::SetOnWillInsertValueEvent(FrameNode* frameNode,
2233     std::function<bool(const InsertValueInfo&)>&& func)
2234 {
2235     CHECK_NULL_VOID(frameNode);
2236     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2237     CHECK_NULL_VOID(eventHub);
2238     eventHub->SetOnWillInsertValueEvent(std::move(func));
2239 }
2240 
SetOnDidInsertValueEvent(FrameNode * frameNode,std::function<void (const InsertValueInfo &)> && func)2241 void TextFieldModelNG::SetOnDidInsertValueEvent(FrameNode* frameNode,
2242     std::function<void(const InsertValueInfo&)>&& func)
2243 {
2244     CHECK_NULL_VOID(frameNode);
2245     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2246     CHECK_NULL_VOID(eventHub);
2247     eventHub->SetOnDidInsertValueEvent(std::move(func));
2248 }
2249 
SetOnWillDeleteEvent(FrameNode * frameNode,std::function<bool (const DeleteValueInfo &)> && func)2250 void TextFieldModelNG::SetOnWillDeleteEvent(FrameNode* frameNode,
2251     std::function<bool(const DeleteValueInfo&)>&& func)
2252 {
2253     CHECK_NULL_VOID(frameNode);
2254     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2255     CHECK_NULL_VOID(eventHub);
2256     eventHub->SetOnWillDeleteEvent(std::move(func));
2257 }
2258 
SetOnDidDeleteEvent(FrameNode * frameNode,std::function<void (const DeleteValueInfo &)> && func)2259 void TextFieldModelNG::SetOnDidDeleteEvent(FrameNode* frameNode,
2260     std::function<void(const DeleteValueInfo&)>&& func)
2261 {
2262     CHECK_NULL_VOID(frameNode);
2263     auto eventHub = frameNode->GetEventHub<TextFieldEventHub>();
2264     CHECK_NULL_VOID(eventHub);
2265     eventHub->SetOnDidDeleteEvent(std::move(func));
2266 }
2267 
OnCreateMenuCallbackUpdate(FrameNode * frameNode,const NG::OnCreateMenuCallback && onCreateMenuCallback)2268 void TextFieldModelNG::OnCreateMenuCallbackUpdate(
2269     FrameNode* frameNode, const NG::OnCreateMenuCallback&& onCreateMenuCallback)
2270 {
2271     CHECK_NULL_VOID(frameNode);
2272     auto textFieldPattern = frameNode->GetPattern<TextFieldPattern>();
2273     CHECK_NULL_VOID(textFieldPattern);
2274     textFieldPattern->OnCreateMenuCallbackUpdate(std::move(onCreateMenuCallback));
2275 }
2276 
OnMenuItemClickCallbackUpdate(FrameNode * frameNode,const NG::OnMenuItemClickCallback && onMenuItemClick)2277 void TextFieldModelNG::OnMenuItemClickCallbackUpdate(
2278     FrameNode* frameNode, const NG::OnMenuItemClickCallback&& onMenuItemClick)
2279 {
2280     CHECK_NULL_VOID(frameNode);
2281     auto textFieldPattern = frameNode->GetPattern<TextFieldPattern>();
2282     CHECK_NULL_VOID(textFieldPattern);
2283     textFieldPattern->OnMenuItemClickCallbackUpdate(std::move(onMenuItemClick));
2284 }
2285 
SetEnablePreviewText(FrameNode * frameNode,bool enablePreviewText)2286 void TextFieldModelNG::SetEnablePreviewText(FrameNode* frameNode, bool enablePreviewText)
2287 {
2288     CHECK_NULL_VOID(frameNode);
2289     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2290     CHECK_NULL_VOID(pattern);
2291     pattern->SetSupportPreviewText(enablePreviewText);
2292 }
2293 
GetPadding(FrameNode * frameNode)2294 PaddingProperty TextFieldModelNG::GetPadding(FrameNode* frameNode)
2295 {
2296     NG::PaddingProperty paddings = NG::ViewAbstract::GetPadding(frameNode);
2297     auto textfieldPaintProperty = frameNode->GetPaintProperty<TextFieldPaintProperty>();
2298     CHECK_NULL_RETURN(textfieldPaintProperty, paddings);
2299     if (textfieldPaintProperty->HasPaddingByUser()) {
2300         const auto& property = textfieldPaintProperty->GetPaddingByUserValue();
2301         paddings.top = std::optional<CalcLength>(property.top);
2302         paddings.right = std::optional<CalcLength>(property.right);
2303         paddings.bottom = std::optional<CalcLength>(property.bottom);
2304         paddings.left = std::optional<CalcLength>(property.left);
2305     }
2306     return paddings;
2307 }
2308 
SetJSTextEditableController(FrameNode * frameNode,const RefPtr<Referenced> & controller)2309 void TextFieldModelNG::SetJSTextEditableController(FrameNode* frameNode, const RefPtr<Referenced>& controller)
2310 {
2311     CHECK_NULL_VOID(frameNode);
2312     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2313     CHECK_NULL_VOID(pattern);
2314     pattern->SetJSTextEditableController(controller);
2315 }
2316 
GetJSTextEditableController(FrameNode * frameNode)2317 RefPtr<Referenced> TextFieldModelNG::GetJSTextEditableController(FrameNode* frameNode)
2318 {
2319     CHECK_NULL_RETURN(frameNode, nullptr);
2320     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2321     CHECK_NULL_RETURN(pattern, nullptr);
2322     return pattern->GetJSTextEditableController();
2323 }
2324 
SetEnableHapticFeedback(FrameNode * frameNode,bool state)2325 void TextFieldModelNG::SetEnableHapticFeedback(FrameNode* frameNode, bool state)
2326 {
2327     CHECK_NULL_VOID(frameNode);
2328     auto pattern = frameNode->GetPattern<TextFieldPattern>();
2329     CHECK_NULL_VOID(pattern);
2330     pattern->SetEnableHapticFeedback(state);
2331 }
2332 
SetEllipsisMode(FrameNode * frameNode,EllipsisMode value)2333 void TextFieldModelNG::SetEllipsisMode(FrameNode* frameNode, EllipsisMode value)
2334 {
2335     CHECK_NULL_VOID(frameNode);
2336     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, EllipsisMode, value, frameNode);
2337 }
2338 
SetStopBackPress(bool isStopBackPress)2339 void TextFieldModelNG::SetStopBackPress(bool isStopBackPress)
2340 {
2341     ACE_UPDATE_LAYOUT_PROPERTY(TextFieldLayoutProperty, StopBackPress, isStopBackPress);
2342 }
2343 
SetStopBackPress(FrameNode * frameNode,bool isStopBackPress)2344 void TextFieldModelNG::SetStopBackPress(FrameNode* frameNode, bool isStopBackPress)
2345 {
2346     ACE_UPDATE_NODE_LAYOUT_PROPERTY(TextFieldLayoutProperty, StopBackPress, isStopBackPress, frameNode);
2347 }
2348 } // namespace OHOS::Ace::NG
2349