1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "core/interfaces/native/node/node_text_modifier.h"
16
17 #include "base/utils/utils.h"
18 #include "bridge/common/utils/utils.h"
19 #include "core/components/common/layout/constants.h"
20 #include "core/components/common/properties/text_style.h"
21 #include "core/components_ng/base/frame_node.h"
22 #include "core/components_ng/base/view_abstract.h"
23 #include "core/interfaces/arkoala/arkoala_api.h"
24 #include "core/pipeline/base/element_register.h"
25 #include "frameworks/core/components/common/layout/constants.h"
26 #include "frameworks/core/components/common/properties/text_style.h"
27 #include "frameworks/core/components_ng/pattern/text/text_model_ng.h"
28 #include "core/components/common/properties/text_style_parser.h"
29
30 namespace OHOS::Ace::NG {
31 constexpr int DEFAULT_SELECTION = -1;
32 constexpr Dimension DEFAULT_LINE_HEIGHT = Dimension(0.0, DimensionUnit::PX);
33 constexpr Dimension DEFAULT_LINE_SPACING = Dimension(0.0, DimensionUnit::PX);
34 constexpr TextDecoration DEFAULT_TEXT_DECORATION = TextDecoration::NONE;
35 constexpr Color DEFAULT_DECORATION_COLOR = Color(0xff000000);
36 constexpr TextDecorationStyle DEFAULT_DECORATION_STYLE = TextDecorationStyle::SOLID;
37 constexpr TextCase DEFAULT_TEXT_CASE = TextCase::NORMAL;
38 constexpr uint32_t DEFAULT_MAX_LINE = Infinity<uint32_t>();
39 constexpr bool DEFAULT_TEXT_DRAGGABLE = false;
40 constexpr bool DEFAULT_TEXT_SENSITIVE = false;
41 constexpr Dimension DEFAULT_MAX_FONT_SIZE;
42 constexpr Dimension DEFAULT_MIN_FONT_SIZE;
43 constexpr float DEFAULT_MIN_FONT_SCALE = 0.0f;
44 constexpr float DEFAULT_MAX_FONT_SCALE = static_cast<float>(INT32_MAX);
45 constexpr CopyOptions DEFAULT_COPY_OPTION = CopyOptions::None;
46 constexpr Dimension DEFAULT_BASELINE_OFFSET = 0.0_fp;
47 constexpr Dimension DEFAULT_FONT_SIZE = 16.0_fp;
48 constexpr FontWeight DEFAULT_FONT_WEIGHT = FontWeight::NORMAL;
49 constexpr int32_t DEFAULT_VARIABLE_FONT_WEIGHT = 400;
50 constexpr Ace::FontStyle DEFAULT_FONT_STYLE = Ace::FontStyle::NORMAL;
51 const std::string DEFAULT_FAMILY = "HarmonyOS Sans";
52 const std::string EMPTY_STRING = "";
53 const std::vector<OHOS::Ace::FontStyle> FONT_STYLES = { OHOS::Ace::FontStyle::NORMAL, OHOS::Ace::FontStyle::ITALIC };
54 const std::vector<OHOS::Ace::TextAlign> TEXT_ALIGNS = { OHOS::Ace::TextAlign::START, OHOS::Ace::TextAlign::CENTER,
55 OHOS::Ace::TextAlign::END, OHOS::Ace::TextAlign::JUSTIFY, OHOS::Ace::TextAlign::LEFT, OHOS::Ace::TextAlign::RIGHT };
56 const std::vector<TextHeightAdaptivePolicy> HEIGHT_ADAPTIVE_POLICY = { TextHeightAdaptivePolicy::MAX_LINES_FIRST,
57 TextHeightAdaptivePolicy::MIN_FONT_SIZE_FIRST, TextHeightAdaptivePolicy::LAYOUT_CONSTRAINT_FIRST };
58 const std::vector<EllipsisMode> ELLIPSIS_MODALS = { EllipsisMode::HEAD, EllipsisMode::MIDDLE, EllipsisMode::TAIL };
59 const std::vector<TextSelectableMode> TEXT_SELECTABLE_MODE = { TextSelectableMode::SELECTABLE_UNFOCUSABLE,
60 TextSelectableMode::SELECTABLE_FOCUSABLE, TextSelectableMode::UNSELECTABLE };
61 constexpr bool DEFAULT_ENABLE_TEXT_DETECTOR = false;
62 const std::vector<std::string> TEXT_DETECT_TYPES = { "phoneNum", "url", "email", "location", "datetime" };
63 constexpr int NUM_0 = 0;
64 constexpr int NUM_1 = 1;
65 constexpr int NUM_2 = 2;
66 constexpr int NUM_3 = 3;
67 constexpr int NUM_4 = 4;
68
69 std::map<TextHeightAdaptivePolicy, int> TEXT_HEIGHT_ADAPTIVE_POLICY_MAP = {
70 { TextHeightAdaptivePolicy::MAX_LINES_FIRST, 0 },
71 { TextHeightAdaptivePolicy::MIN_FONT_SIZE_FIRST, 1 },
72 { TextHeightAdaptivePolicy::LAYOUT_CONSTRAINT_FIRST, 2 } };
73
74 const float ERROR_FLOAT_CODE = -1.0f;
75 const int32_t ERROR_INT_CODE = -1;
76
ConvertStrToFontWeight(ArkUI_CharPtr weight,FontWeight defaultFontWeight=FontWeight::NORMAL)77 FontWeight ConvertStrToFontWeight(ArkUI_CharPtr weight, FontWeight defaultFontWeight = FontWeight::NORMAL)
78 {
79 std::string weightStr(weight);
80 return StringUtils::StringToFontWeight(weightStr, defaultFontWeight);
81 }
82 namespace {
83
84 std::string g_strValue;
85
SetTextContent(ArkUINodeHandle node,ArkUI_CharPtr value)86 void SetTextContent(ArkUINodeHandle node, ArkUI_CharPtr value)
87 {
88 auto* frameNode = reinterpret_cast<FrameNode*>(node);
89 CHECK_NULL_VOID(frameNode);
90 std::string content(value);
91 TextModelNG::InitText(frameNode, content);
92 }
93
GetTextContent(ArkUINodeHandle node)94 const char* GetTextContent(ArkUINodeHandle node)
95 {
96 auto* frameNode = reinterpret_cast<FrameNode*>(node);
97 CHECK_NULL_RETURN(frameNode, nullptr);
98 g_strValue = TextModelNG::GetContent(frameNode);
99 return g_strValue.c_str();
100 }
101
SetFontWeightStr(ArkUINodeHandle node,ArkUI_CharPtr weight)102 void SetFontWeightStr(ArkUINodeHandle node, ArkUI_CharPtr weight)
103 {
104 auto* frameNode = reinterpret_cast<FrameNode*>(node);
105 CHECK_NULL_VOID(frameNode);
106 TextModelNG::SetFontWeight(frameNode, ConvertStrToFontWeight(weight));
107 }
108
SetFontWeightWithOption(ArkUINodeHandle node,const struct ArkUIFontWeightWithOptionsStruct * weightInfo)109 void SetFontWeightWithOption(ArkUINodeHandle node, const struct ArkUIFontWeightWithOptionsStruct* weightInfo)
110 {
111 auto* frameNode = reinterpret_cast<FrameNode*>(node);
112 CHECK_NULL_VOID(frameNode);
113 TextModelNG::SetFontWeight(frameNode, ConvertStrToFontWeight(weightInfo->weight));
114 TextModelNG::SetVariableFontWeight(frameNode, weightInfo->variableFontWeight);
115 TextModelNG::SetEnableVariableFontWeight(frameNode, weightInfo->enableVariableFontWeight);
116 }
117
SetFontWeight(ArkUINodeHandle node,ArkUI_Int32 weight)118 void SetFontWeight(ArkUINodeHandle node, ArkUI_Int32 weight)
119 {
120 auto* frameNode = reinterpret_cast<FrameNode*>(node);
121 CHECK_NULL_VOID(frameNode);
122 TextModelNG::SetFontWeight(frameNode, static_cast<FontWeight>(weight));
123 }
124
SetOnClick(ArkUINodeHandle node,void * callback)125 void SetOnClick(ArkUINodeHandle node, void* callback)
126 {
127 auto *frameNode = reinterpret_cast<FrameNode *>(node);
128 CHECK_NULL_VOID(frameNode);
129 GestureEventFunc* click = nullptr;
130 if (callback) {
131 click = reinterpret_cast<GestureEventFunc*>(callback);
132 TextModelNG::SetOnClick(frameNode, std::move(*click));
133 } else {
134 TextModelNG::SetOnClick(frameNode, nullptr);
135 }
136 }
137
ResetOnClick(ArkUINodeHandle node)138 void ResetOnClick(ArkUINodeHandle node)
139 {
140 auto *frameNode = reinterpret_cast<FrameNode *>(node);
141 CHECK_NULL_VOID(frameNode);
142 TextModelNG::ClearOnClick(frameNode);
143 }
144
SetResponseRegion(ArkUINodeHandle node,const ArkUI_Float32 * values,const ArkUI_Int32 * units,ArkUI_Int32 length)145 void SetResponseRegion(ArkUINodeHandle node, const ArkUI_Float32* values, const ArkUI_Int32* units, ArkUI_Int32 length)
146 {
147 auto* frameNode = reinterpret_cast<FrameNode*>(node);
148 CHECK_NULL_VOID(frameNode);
149 std::vector<DimensionRect> region;
150 for (int32_t i = 0; i < length / NUM_4; i++) {
151 CalcDimension xDimen =
152 CalcDimension(values[i * NUM_4 + NUM_0], static_cast<DimensionUnit>(units[i * NUM_4 + NUM_0]));
153 CalcDimension yDimen =
154 CalcDimension(values[i * NUM_4 + NUM_1], static_cast<DimensionUnit>(units[i * NUM_4 + NUM_1]));
155 CalcDimension widthDimen =
156 CalcDimension(values[i * NUM_4 + NUM_2], static_cast<DimensionUnit>(units[i * NUM_4 + NUM_2]));
157 CalcDimension heightDimen =
158 CalcDimension(values[i * NUM_4 + NUM_3], static_cast<DimensionUnit>(units[i * NUM_4 + NUM_3]));
159 DimensionOffset offsetDimen(xDimen, yDimen);
160 DimensionRect dimenRect(widthDimen, heightDimen, offsetDimen);
161 region.emplace_back(dimenRect);
162 }
163 TextModelNG::SetResponseRegion(frameNode, region);
164 }
165
ResetResponseRegion(ArkUINodeHandle node)166 void ResetResponseRegion(ArkUINodeHandle node)
167 {
168 auto *frameNode = reinterpret_cast<FrameNode *>(node);
169 CHECK_NULL_VOID(frameNode);
170 TextModelNG::ClearResponseRegion(frameNode);
171 }
ResetFontWeight(ArkUINodeHandle node)172 void ResetFontWeight(ArkUINodeHandle node)
173 {
174 auto* frameNode = reinterpret_cast<FrameNode*>(node);
175 CHECK_NULL_VOID(frameNode);
176 TextModelNG::SetFontWeight(frameNode, Ace::FontWeight::NORMAL);
177 TextModelNG::SetVariableFontWeight(frameNode, DEFAULT_VARIABLE_FONT_WEIGHT);
178 TextModelNG::SetEnableVariableFontWeight(frameNode, false);
179 }
180
SetFontStyle(ArkUINodeHandle node,ArkUI_Uint32 fontStyle)181 void SetFontStyle(ArkUINodeHandle node, ArkUI_Uint32 fontStyle)
182 {
183 auto* frameNode = reinterpret_cast<FrameNode*>(node);
184 CHECK_NULL_VOID(frameNode);
185 if (fontStyle < 0 || fontStyle >= FONT_STYLES.size()) {
186 return;
187 }
188 TextModelNG::SetItalicFontStyle(frameNode, FONT_STYLES[fontStyle]);
189 }
190
ResetFontStyle(ArkUINodeHandle node)191 void ResetFontStyle(ArkUINodeHandle node)
192 {
193 auto* frameNode = reinterpret_cast<FrameNode*>(node);
194 CHECK_NULL_VOID(frameNode);
195 TextModelNG::SetItalicFontStyle(frameNode, OHOS::Ace::FontStyle::NORMAL);
196 }
197
SetTextAlign(ArkUINodeHandle node,ArkUI_Uint32 testAlign)198 void SetTextAlign(ArkUINodeHandle node, ArkUI_Uint32 testAlign)
199 {
200 auto* frameNode = reinterpret_cast<FrameNode*>(node);
201 CHECK_NULL_VOID(frameNode);
202 if (testAlign < 0 || testAlign >= TEXT_ALIGNS.size()) {
203 return;
204 }
205 TextModelNG::SetTextAlign(frameNode, TEXT_ALIGNS[testAlign]);
206 }
207
GetTextAlign(ArkUINodeHandle node)208 int32_t GetTextAlign(ArkUINodeHandle node)
209 {
210 auto defaultTextAlign = static_cast<int32_t>(OHOS::Ace::TextAlign::START);
211 auto* frameNode = reinterpret_cast<FrameNode*>(node);
212 CHECK_NULL_RETURN(frameNode, defaultTextAlign);
213 return static_cast<int32_t>(TextModelNG::GetTextAlign(frameNode));
214 }
215
ResetTextAlign(ArkUINodeHandle node)216 void ResetTextAlign(ArkUINodeHandle node)
217 {
218 auto* frameNode = reinterpret_cast<FrameNode*>(node);
219 CHECK_NULL_VOID(frameNode);
220 TextModelNG::SetTextAlign(frameNode, OHOS::Ace::TextAlign::START);
221 }
222
SetFontColor(ArkUINodeHandle node,ArkUI_Uint32 color)223 void SetFontColor(ArkUINodeHandle node, ArkUI_Uint32 color)
224 {
225 auto* frameNode = reinterpret_cast<FrameNode*>(node);
226 CHECK_NULL_VOID(frameNode);
227 TextModelNG::SetTextColor(frameNode, Color(color));
228 }
229
ResetFontColor(ArkUINodeHandle node)230 void ResetFontColor(ArkUINodeHandle node)
231 {
232 auto* frameNode = reinterpret_cast<FrameNode*>(node);
233 CHECK_NULL_VOID(frameNode);
234 Color textColor;
235 auto theme = GetTheme<TextTheme>();
236 CHECK_NULL_VOID(theme);
237 textColor = theme->GetTextStyle().GetTextColor();
238 TextModelNG::SetTextColor(frameNode, textColor);
239 }
240
GetFontColor(ArkUINodeHandle node)241 uint32_t GetFontColor(ArkUINodeHandle node)
242 {
243 auto* frameNode = reinterpret_cast<FrameNode*>(node);
244 CHECK_NULL_RETURN(frameNode, Color::BLACK.GetValue());
245 return TextModelNG::GetFontColor(frameNode).GetValue();
246 }
247
SetTextForegroundColor(ArkUINodeHandle node,ArkUI_Bool isColor,uint32_t color)248 void SetTextForegroundColor(ArkUINodeHandle node, ArkUI_Bool isColor, uint32_t color)
249 {
250 auto* frameNode = reinterpret_cast<FrameNode*>(node);
251 CHECK_NULL_VOID(frameNode);
252 if (isColor) {
253 TextModelNG::SetTextColor(frameNode, Color(color));
254 } else {
255 TextModelNG::SetTextColor(frameNode, Color::FOREGROUND);
256 auto strategy = static_cast<ForegroundColorStrategy>(color);
257 ViewAbstract::SetForegroundColorStrategy(frameNode, strategy);
258 }
259 }
260
ResetTextForegroundColor(ArkUINodeHandle node)261 void ResetTextForegroundColor(ArkUINodeHandle node)
262 {
263 ResetFontColor(node);
264 }
265
SetFontSize(ArkUINodeHandle node,ArkUI_Float32 fontSize,ArkUI_Int32 unit)266 void SetFontSize(ArkUINodeHandle node, ArkUI_Float32 fontSize, ArkUI_Int32 unit)
267 {
268 auto* frameNode = reinterpret_cast<FrameNode*>(node);
269 CHECK_NULL_VOID(frameNode);
270 auto unitEnum = static_cast<OHOS::Ace::DimensionUnit>(unit);
271
272 if (fontSize < 0 || unitEnum < OHOS::Ace::DimensionUnit::PX || unitEnum > OHOS::Ace::DimensionUnit::CALC ||
273 unitEnum == OHOS::Ace::DimensionUnit::PERCENT) {
274 auto theme = GetTheme<TextTheme>();
275 CHECK_NULL_VOID(theme);
276 CalcDimension fontSize = theme->GetTextStyle().GetFontSize();
277 TextModelNG::SetFontSize(frameNode, fontSize);
278 } else {
279 TextModelNG::SetFontSize(frameNode, Dimension(fontSize, static_cast<OHOS::Ace::DimensionUnit>(unit)));
280 }
281 }
282
ResetFontSize(ArkUINodeHandle node)283 void ResetFontSize(ArkUINodeHandle node)
284 {
285 auto* frameNode = reinterpret_cast<FrameNode*>(node);
286 CHECK_NULL_VOID(frameNode);
287 auto theme = GetTheme<TextTheme>();
288 CHECK_NULL_VOID(theme);
289 CalcDimension fontSize = theme->GetTextStyle().GetFontSize();
290 TextModelNG::SetFontSize(frameNode, fontSize);
291 }
292
SetTextLineHeight(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)293 void SetTextLineHeight(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
294 {
295 auto* frameNode = reinterpret_cast<FrameNode*>(node);
296 CHECK_NULL_VOID(frameNode);
297 TextModelNG::SetLineHeight(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
298 }
299
GetTextLineHeight(ArkUINodeHandle node)300 float GetTextLineHeight(ArkUINodeHandle node)
301 {
302 auto* frameNode = reinterpret_cast<FrameNode*>(node);
303 CHECK_NULL_RETURN(frameNode, 0.0f);
304 return TextModelNG::GetLineHeight(frameNode);
305 }
306
ResetTextLineHeight(ArkUINodeHandle node)307 void ResetTextLineHeight(ArkUINodeHandle node)
308 {
309 auto* frameNode = reinterpret_cast<FrameNode*>(node);
310 CHECK_NULL_VOID(frameNode);
311 TextModelNG::SetLineHeight(frameNode, DEFAULT_LINE_HEIGHT);
312 }
313
SetTextTextOverflow(ArkUINodeHandle node,ArkUI_Int32 value)314 void SetTextTextOverflow(ArkUINodeHandle node, ArkUI_Int32 value)
315 {
316 auto* frameNode = reinterpret_cast<FrameNode*>(node);
317 CHECK_NULL_VOID(frameNode);
318 TextOverflow valueTextOverflow = static_cast<TextOverflow>(value);
319 TextModelNG::SetTextOverflow(frameNode, valueTextOverflow);
320 }
321
GetTextTextOverflow(ArkUINodeHandle node)322 int32_t GetTextTextOverflow(ArkUINodeHandle node)
323 {
324 int defaultTextOverflow = static_cast<int32_t>(TextOverflow::NONE);
325 auto* frameNode = reinterpret_cast<FrameNode*>(node);
326 CHECK_NULL_RETURN(frameNode, defaultTextOverflow);
327 return static_cast<int32_t>(TextModelNG::GetTextOverflow(frameNode));
328 }
329
ResetTextTextOverflow(ArkUINodeHandle node)330 void ResetTextTextOverflow(ArkUINodeHandle node)
331 {
332 auto* frameNode = reinterpret_cast<FrameNode*>(node);
333 CHECK_NULL_VOID(frameNode);
334 TextModelNG::SetTextOverflow(frameNode, TextOverflow::NONE);
335 }
336
SetTextDecoration(ArkUINodeHandle node,ArkUI_Int32 decoration,ArkUI_Uint32 color,ArkUI_Int32 style)337 void SetTextDecoration(ArkUINodeHandle node, ArkUI_Int32 decoration, ArkUI_Uint32 color, ArkUI_Int32 style)
338 {
339 auto* frameNode = reinterpret_cast<FrameNode*>(node);
340 CHECK_NULL_VOID(frameNode);
341 TextModelNG::SetTextDecoration(frameNode, static_cast<TextDecoration>(decoration));
342 TextModelNG::SetTextDecorationColor(frameNode, Color(color));
343 TextModelNG::SetTextDecorationStyle(frameNode, static_cast<TextDecorationStyle>(style));
344 }
345
GetTextDecoration(ArkUINodeHandle node,ArkUITextDecorationType * decoration)346 void GetTextDecoration(ArkUINodeHandle node, ArkUITextDecorationType* decoration)
347 {
348 CHECK_NULL_VOID(decoration);
349 auto* frameNode = reinterpret_cast<FrameNode*>(node);
350 CHECK_NULL_VOID(frameNode);
351 decoration->decorationType = static_cast<int32_t>(TextModelNG::GetDecoration(frameNode));
352 decoration->color = TextModelNG::GetTextDecorationColor(frameNode).GetValue();
353 decoration->style = static_cast<int32_t>(TextModelNG::GetTextDecorationStyle(frameNode));
354 }
355
ResetTextDecoration(ArkUINodeHandle node)356 void ResetTextDecoration(ArkUINodeHandle node)
357 {
358 auto* frameNode = reinterpret_cast<FrameNode*>(node);
359 CHECK_NULL_VOID(frameNode);
360 TextModelNG::SetTextDecoration(frameNode, DEFAULT_TEXT_DECORATION);
361 TextModelNG::SetTextDecorationColor(frameNode, DEFAULT_DECORATION_COLOR);
362 TextModelNG::SetTextDecorationStyle(frameNode, DEFAULT_DECORATION_STYLE);
363 }
364
SetTextTextCase(ArkUINodeHandle node,ArkUI_Int32 value)365 void SetTextTextCase(ArkUINodeHandle node, ArkUI_Int32 value)
366 {
367 auto* frameNode = reinterpret_cast<FrameNode*>(node);
368 CHECK_NULL_VOID(frameNode);
369 TextModelNG::SetTextCase(frameNode, static_cast<TextCase>(value));
370 }
371
GetTextTextCase(ArkUINodeHandle node)372 int32_t GetTextTextCase(ArkUINodeHandle node)
373 {
374 int32_t defaultTextCase = static_cast<int32_t>(DEFAULT_TEXT_CASE);
375 auto* frameNode = reinterpret_cast<FrameNode*>(node);
376 CHECK_NULL_RETURN(frameNode, defaultTextCase);
377 return static_cast<int32_t>(TextModelNG::GetTextCase(frameNode));
378 }
379
ResetTextTextCase(ArkUINodeHandle node)380 void ResetTextTextCase(ArkUINodeHandle node)
381 {
382 auto* frameNode = reinterpret_cast<FrameNode*>(node);
383 CHECK_NULL_VOID(frameNode);
384 TextModelNG::SetTextCase(frameNode, DEFAULT_TEXT_CASE);
385 }
386
SetTextMaxLines(ArkUINodeHandle node,ArkUI_Uint32 maxLine)387 void SetTextMaxLines(ArkUINodeHandle node, ArkUI_Uint32 maxLine)
388 {
389 auto* frameNode = reinterpret_cast<FrameNode*>(node);
390 CHECK_NULL_VOID(frameNode);
391 TextModelNG::SetMaxLines(frameNode, maxLine);
392 }
393
GetTextMaxLines(ArkUINodeHandle node)394 int32_t GetTextMaxLines(ArkUINodeHandle node)
395 {
396 auto* frameNode = reinterpret_cast<FrameNode*>(node);
397 CHECK_NULL_RETURN(frameNode, DEFAULT_MAX_LINE);
398 return TextModelNG::GetMaxLines(frameNode);
399 }
400
ResetTextMaxLines(ArkUINodeHandle node)401 void ResetTextMaxLines(ArkUINodeHandle node)
402 {
403 auto* frameNode = reinterpret_cast<FrameNode*>(node);
404 CHECK_NULL_VOID(frameNode);
405 TextModelNG::SetMaxLines(frameNode, DEFAULT_MAX_LINE);
406 }
407
SetTextMinFontSize(ArkUINodeHandle node,ArkUI_Float32 number,const ArkUI_Int32 unit)408 void SetTextMinFontSize(ArkUINodeHandle node, ArkUI_Float32 number, const ArkUI_Int32 unit)
409 {
410 auto* frameNode = reinterpret_cast<FrameNode*>(node);
411 CHECK_NULL_VOID(frameNode);
412 TextModelNG::SetAdaptMinFontSize(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
413 }
414
ResetTextMinFontSize(ArkUINodeHandle node)415 void ResetTextMinFontSize(ArkUINodeHandle node)
416 {
417 auto* frameNode = reinterpret_cast<FrameNode*>(node);
418 CHECK_NULL_VOID(frameNode);
419 TextModelNG::SetAdaptMinFontSize(frameNode, DEFAULT_MIN_FONT_SIZE);
420 }
421
SetTextDraggable(ArkUINodeHandle node,ArkUI_Uint32 draggable)422 void SetTextDraggable(ArkUINodeHandle node, ArkUI_Uint32 draggable)
423 {
424 auto* frameNode = reinterpret_cast<FrameNode*>(node);
425 CHECK_NULL_VOID(frameNode);
426 ViewAbstract::SetDraggable(frameNode, static_cast<bool>(draggable));
427 }
428
ResetTextDraggable(ArkUINodeHandle node)429 void ResetTextDraggable(ArkUINodeHandle node)
430 {
431 auto* frameNode = reinterpret_cast<FrameNode*>(node);
432 CHECK_NULL_VOID(frameNode);
433 ViewAbstract::SetDraggable(frameNode, DEFAULT_TEXT_DRAGGABLE);
434 }
435
SetTextPrivacySensitve(ArkUINodeHandle node,ArkUI_Uint32 sensitive)436 void SetTextPrivacySensitve(ArkUINodeHandle node, ArkUI_Uint32 sensitive)
437 {
438 auto* frameNode = reinterpret_cast<FrameNode*>(node);
439 CHECK_NULL_VOID(frameNode);
440 frameNode->SetPrivacySensitive(static_cast<bool>(sensitive));
441 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
442 }
443
ResetTextPrivacySensitve(ArkUINodeHandle node)444 void ResetTextPrivacySensitve(ArkUINodeHandle node)
445 {
446 auto* frameNode = reinterpret_cast<FrameNode*>(node);
447 CHECK_NULL_VOID(frameNode);
448 frameNode->SetPrivacySensitive(DEFAULT_TEXT_SENSITIVE);
449 frameNode->MarkDirtyNode(PROPERTY_UPDATE_MEASURE);
450 }
451
SetTextMaxFontSize(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)452 void SetTextMaxFontSize(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
453 {
454 auto* frameNode = reinterpret_cast<FrameNode*>(node);
455 CHECK_NULL_VOID(frameNode);
456 TextModelNG::SetAdaptMaxFontSize(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
457 }
458
ResetTextMaxFontSize(ArkUINodeHandle node)459 void ResetTextMaxFontSize(ArkUINodeHandle node)
460 {
461 auto* frameNode = reinterpret_cast<FrameNode*>(node);
462 CHECK_NULL_VOID(frameNode);
463 TextModelNG::SetAdaptMaxFontSize(frameNode, DEFAULT_MAX_FONT_SIZE);
464 }
465
SetTextMinFontScale(ArkUINodeHandle node,ArkUI_Float32 number)466 void SetTextMinFontScale(ArkUINodeHandle node, ArkUI_Float32 number)
467 {
468 auto* frameNode = reinterpret_cast<FrameNode*>(node);
469 CHECK_NULL_VOID(frameNode);
470 TextModelNG::SetMinFontScale(frameNode, number);
471 }
472
ResetTextMinFontScale(ArkUINodeHandle node)473 void ResetTextMinFontScale(ArkUINodeHandle node)
474 {
475 auto* frameNode = reinterpret_cast<FrameNode*>(node);
476 CHECK_NULL_VOID(frameNode);
477 TextModelNG::SetMinFontScale(frameNode, DEFAULT_MIN_FONT_SCALE);
478 }
479
SetTextMaxFontScale(ArkUINodeHandle node,ArkUI_Float32 number)480 void SetTextMaxFontScale(ArkUINodeHandle node, ArkUI_Float32 number)
481 {
482 auto* frameNode = reinterpret_cast<FrameNode*>(node);
483 CHECK_NULL_VOID(frameNode);
484 TextModelNG::SetMaxFontScale(frameNode, number);
485 }
486
ResetTextMaxFontScale(ArkUINodeHandle node)487 void ResetTextMaxFontScale(ArkUINodeHandle node)
488 {
489 auto* frameNode = reinterpret_cast<FrameNode*>(node);
490 CHECK_NULL_VOID(frameNode);
491 TextModelNG::SetMaxFontScale(frameNode, DEFAULT_MAX_FONT_SCALE);
492 }
493
SetTextFontFamily(ArkUINodeHandle node,const char ** fontFamilies,ArkUI_Uint32 length)494 void SetTextFontFamily(ArkUINodeHandle node, const char** fontFamilies, ArkUI_Uint32 length)
495 {
496 CHECK_NULL_VOID(fontFamilies);
497 if (length <= 0) {
498 return;
499 }
500 auto* frameNode = reinterpret_cast<FrameNode*>(node);
501 CHECK_NULL_VOID(frameNode);
502 std::vector<std::string> families;
503 for (uint32_t i = 0; i < length; i++) {
504 const char* family = *(fontFamilies + i);
505 if (family != nullptr) {
506 families.emplace_back(std::string(family));
507 }
508 }
509 TextModelNG::SetFontFamily(frameNode, families);
510 }
511
ResetTextFontFamily(ArkUINodeHandle node)512 void ResetTextFontFamily(ArkUINodeHandle node)
513 {
514 auto* frameNode = reinterpret_cast<FrameNode*>(node);
515 CHECK_NULL_VOID(frameNode);
516 std::vector<std::string> families;
517 families.emplace_back(DEFAULT_FAMILY);
518 TextModelNG::SetFontFamily(frameNode, families);
519 }
520
SetTextCopyOption(ArkUINodeHandle node,ArkUI_Int32 copyOption)521 void SetTextCopyOption(ArkUINodeHandle node, ArkUI_Int32 copyOption)
522 {
523 auto* frameNode = reinterpret_cast<FrameNode*>(node);
524 CHECK_NULL_VOID(frameNode);
525 TextModelNG::SetCopyOption(frameNode, static_cast<CopyOptions>(copyOption));
526 }
527
ResetTextCopyOption(ArkUINodeHandle node)528 void ResetTextCopyOption(ArkUINodeHandle node)
529 {
530 auto* frameNode = reinterpret_cast<FrameNode*>(node);
531 CHECK_NULL_VOID(frameNode);
532 TextModelNG::SetCopyOption(frameNode, DEFAULT_COPY_OPTION);
533 }
534
SetTextTextShadow(ArkUINodeHandle node,struct ArkUITextShadowStruct * shadows,ArkUI_Uint32 length)535 void SetTextTextShadow(ArkUINodeHandle node, struct ArkUITextShadowStruct* shadows, ArkUI_Uint32 length)
536 {
537 CHECK_NULL_VOID(shadows);
538 auto* frameNode = reinterpret_cast<FrameNode*>(node);
539 CHECK_NULL_VOID(frameNode);
540 std::vector<Shadow> shadowList(length);
541 for (uint32_t i = 0; i < length; i++) {
542 Shadow shadow;
543 ArkUITextShadowStruct* shadowStruct = shadows + i;
544 shadow.SetBlurRadius(shadowStruct->radius);
545 shadow.SetShadowType(static_cast<ShadowType>(shadowStruct->type));
546 shadow.SetColor(Color(shadowStruct->color));
547 shadow.SetOffsetX(shadowStruct->offsetX);
548 shadow.SetOffsetY(shadowStruct->offsetY);
549 shadow.SetIsFilled(static_cast<bool>(shadowStruct->fill));
550 shadowList.at(i) = shadow;
551 }
552 TextModelNG::SetTextShadow(frameNode, shadowList);
553 }
554
GetTextShadowCount(ArkUINodeHandle node)555 ArkUI_Uint32 GetTextShadowCount(ArkUINodeHandle node)
556 {
557 auto* frameNode = reinterpret_cast<FrameNode*>(node);
558 CHECK_NULL_RETURN(frameNode, 0);
559 return TextModelNG::GetTextShadow(frameNode).size();
560 }
561
GetTextShadow(ArkUINodeHandle node,ArkUITextShadowStruct * shadow,uint32_t size)562 void GetTextShadow(ArkUINodeHandle node, ArkUITextShadowStruct* shadow, uint32_t size)
563 {
564 auto* frameNode = reinterpret_cast<FrameNode*>(node);
565 CHECK_NULL_VOID(frameNode);
566 std::vector<ArkUITextShadowStruct> shadowArray;
567 auto textShadowVector = TextModelNG::GetTextShadow(frameNode);
568 for (uint32_t i = 0; i < size; i++) {
569 if (i < textShadowVector.size()) {
570 *(shadow + i) = { static_cast<float>(textShadowVector[i].GetBlurRadius()),
571 static_cast<int32_t>(textShadowVector[i].GetShadowType()), textShadowVector[i].GetColor().GetValue(),
572 textShadowVector[i].GetOffset().GetX(), textShadowVector[i].GetOffset().GetY(),
573 textShadowVector[i].GetIsFilled()};
574 } else {
575 *(shadow + i) = { 0.0f, static_cast<int32_t>(ShadowType::COLOR),
576 Color::TRANSPARENT.GetValue(), 0.0f, 0.0f, 0 };
577 }
578 }
579 }
580
ResetTextTextShadow(ArkUINodeHandle node)581 void ResetTextTextShadow(ArkUINodeHandle node)
582 {
583 auto* frameNode = reinterpret_cast<FrameNode*>(node);
584 CHECK_NULL_VOID(frameNode);
585 Shadow shadow;
586 shadow.SetOffsetX(0.0);
587 shadow.SetOffsetY(0.0);
588 TextModelNG::SetTextShadow(frameNode, std::vector<Shadow> { shadow });
589 }
590
SetTextHeightAdaptivePolicy(ArkUINodeHandle node,ArkUI_Int32 value)591 void SetTextHeightAdaptivePolicy(ArkUINodeHandle node, ArkUI_Int32 value)
592 {
593 auto* frameNode = reinterpret_cast<FrameNode*>(node);
594 CHECK_NULL_VOID(frameNode);
595 TextModelNG::SetHeightAdaptivePolicy(frameNode, HEIGHT_ADAPTIVE_POLICY[value]);
596 }
597
ResetTextHeightAdaptivePolicy(ArkUINodeHandle node)598 void ResetTextHeightAdaptivePolicy(ArkUINodeHandle node)
599 {
600 auto* frameNode = reinterpret_cast<FrameNode*>(node);
601 CHECK_NULL_VOID(frameNode);
602 TextModelNG::SetHeightAdaptivePolicy(frameNode, TextHeightAdaptivePolicy::MAX_LINES_FIRST);
603 }
604
SetTextTextIndent(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)605 void SetTextTextIndent(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
606 {
607 auto* frameNode = reinterpret_cast<FrameNode*>(node);
608 CHECK_NULL_VOID(frameNode);
609 TextModelNG::SetTextIndent(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
610 }
611
GetTextTextIndent(ArkUINodeHandle node)612 float GetTextTextIndent(ArkUINodeHandle node)
613 {
614 auto* frameNode = reinterpret_cast<FrameNode*>(node);
615 CHECK_NULL_RETURN(frameNode, 0.0f);
616 return TextModelNG::GetTextIndent(frameNode).ConvertToVp();
617 }
618
ResetTextTextIndent(ArkUINodeHandle node)619 void ResetTextTextIndent(ArkUINodeHandle node)
620 {
621 auto* frameNode = reinterpret_cast<FrameNode*>(node);
622 CHECK_NULL_VOID(frameNode);
623 TextModelNG::SetTextIndent(frameNode, CalcDimension(0, DimensionUnit::FP));
624 }
625
SetTextBaselineOffset(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)626 void SetTextBaselineOffset(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
627 {
628 auto* frameNode = reinterpret_cast<FrameNode*>(node);
629 CHECK_NULL_VOID(frameNode);
630 TextModelNG::SetBaselineOffset(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
631 }
632
ResetTextBaselineOffset(ArkUINodeHandle node)633 void ResetTextBaselineOffset(ArkUINodeHandle node)
634 {
635 auto* frameNode = reinterpret_cast<FrameNode*>(node);
636 CHECK_NULL_VOID(frameNode);
637 TextModelNG::SetBaselineOffset(frameNode, DEFAULT_BASELINE_OFFSET);
638 }
639
GetTextBaselineOffset(ArkUINodeHandle node)640 ArkUI_Float32 GetTextBaselineOffset(ArkUINodeHandle node)
641 {
642 auto* frameNode = reinterpret_cast<FrameNode*>(node);
643 CHECK_NULL_RETURN(frameNode, 0.0f);
644 return TextModelNG::GetTextBaselineOffset(frameNode).ConvertToVp();
645 }
646
SetTextLetterSpacing(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)647 void SetTextLetterSpacing(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
648 {
649 auto* frameNode = reinterpret_cast<FrameNode*>(node);
650 CHECK_NULL_VOID(frameNode);
651 TextModelNG::SetLetterSpacing(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
652 }
653
GetTextLetterSpacing(ArkUINodeHandle node)654 ArkUI_Float32 GetTextLetterSpacing(ArkUINodeHandle node)
655 {
656 auto* frameNode = reinterpret_cast<FrameNode*>(node);
657 CHECK_NULL_RETURN(frameNode, 0.0f);
658 return TextModelNG::GetLetterSpacing(frameNode).ConvertToVp();
659 }
660
ResetTextLetterSpacing(ArkUINodeHandle node)661 void ResetTextLetterSpacing(ArkUINodeHandle node)
662 {
663 auto* frameNode = reinterpret_cast<FrameNode*>(node);
664 CHECK_NULL_VOID(frameNode);
665 CalcDimension letterSpacing(0.0, DimensionUnit::FP);
666 TextModelNG::SetLetterSpacing(frameNode, letterSpacing);
667 }
668
SetTextFont(ArkUINodeHandle node,const struct ArkUIFontWithOptionsStruct * fontInfo)669 void SetTextFont(ArkUINodeHandle node, const struct ArkUIFontWithOptionsStruct* fontInfo)
670 {
671 CHECK_NULL_VOID(fontInfo);
672 auto* frameNode = reinterpret_cast<FrameNode*>(node);
673 CHECK_NULL_VOID(frameNode);
674 Font font;
675 font.fontSize = Dimension(fontInfo->fontSizeNumber, static_cast<DimensionUnit>(fontInfo->fontSizeUnit));
676 font.fontStyle = static_cast<Ace::FontStyle>(fontInfo->fontStyle);
677 font.fontWeight = static_cast<FontWeight>(fontInfo->fontWeight);
678 std::vector<std::string> families;
679 if (fontInfo->fontFamilies && fontInfo->familyLength > 0) {
680 families.resize(fontInfo->familyLength);
681 for (uint32_t i = 0; i < fontInfo->familyLength; i++) {
682 families.at(i) = std::string(*(fontInfo->fontFamilies + i));
683 }
684 }
685 font.fontFamilies = families;
686 TextModelNG::SetFont(frameNode, font);
687 TextModelNG::SetVariableFontWeight(frameNode, fontInfo->variableFontWeight);
688 TextModelNG::SetEnableVariableFontWeight(frameNode, fontInfo->enableVariableFontWeight);
689 }
690
ResetTextFont(ArkUINodeHandle node)691 void ResetTextFont(ArkUINodeHandle node)
692 {
693 auto* frameNode = reinterpret_cast<FrameNode*>(node);
694 CHECK_NULL_VOID(frameNode);
695 Font font;
696 font.fontSize = DEFAULT_FONT_SIZE;
697 font.fontWeight = DEFAULT_FONT_WEIGHT;
698 font.fontStyle = DEFAULT_FONT_STYLE;
699 std::vector<std::string> families;
700 families.emplace_back(DEFAULT_FAMILY);
701 font.fontFamilies = families;
702 TextModelNG::SetFont(frameNode, font);
703 TextModelNG::SetVariableFontWeight(frameNode, DEFAULT_VARIABLE_FONT_WEIGHT);
704 TextModelNG::SetEnableVariableFontWeight(frameNode, false);
705 }
706
SetWordBreak(ArkUINodeHandle node,ArkUI_Uint32 wordBreak)707 void SetWordBreak(ArkUINodeHandle node, ArkUI_Uint32 wordBreak)
708 {
709 auto* frameNode = reinterpret_cast<FrameNode*>(node);
710 CHECK_NULL_VOID(frameNode);
711 if (wordBreak < 0 || wordBreak >= WORD_BREAK_TYPES.size()) {
712 wordBreak = 2; // 2 is the default value of WordBreak::BREAK_WORD
713 }
714 TextModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[wordBreak]);
715 }
716
ResetWordBreak(ArkUINodeHandle node)717 void ResetWordBreak(ArkUINodeHandle node)
718 {
719 auto* frameNode = reinterpret_cast<FrameNode*>(node);
720 CHECK_NULL_VOID(frameNode);
721 TextModelNG::SetWordBreak(frameNode, WORD_BREAK_TYPES[2]); // 2 is the default value of WordBreak::BREAK_WORD
722 }
723
SetEllipsisMode(ArkUINodeHandle node,ArkUI_Uint32 ellipsisMode)724 void SetEllipsisMode(ArkUINodeHandle node, ArkUI_Uint32 ellipsisMode)
725 {
726 auto* frameNode = reinterpret_cast<FrameNode*>(node);
727 CHECK_NULL_VOID(frameNode);
728 if (ellipsisMode < 0 || ellipsisMode >= ELLIPSIS_MODALS.size()) {
729 ellipsisMode = 2; // 2 is the default value of EllipsisMode::TAIL
730 }
731 TextModelNG::SetEllipsisMode(frameNode, ELLIPSIS_MODALS[ellipsisMode]);
732 }
733
ResetEllipsisMode(ArkUINodeHandle node)734 void ResetEllipsisMode(ArkUINodeHandle node)
735 {
736 auto* frameNode = reinterpret_cast<FrameNode*>(node);
737 CHECK_NULL_VOID(frameNode);
738 TextModelNG::SetEllipsisMode(frameNode, ELLIPSIS_MODALS[2]); // 2 is the default value of EllipsisMode::TAIL
739 }
740
SetTextDetectEnable(ArkUINodeHandle node,ArkUI_Uint32 value)741 void SetTextDetectEnable(ArkUINodeHandle node, ArkUI_Uint32 value)
742 {
743 auto* frameNode = reinterpret_cast<FrameNode*>(node);
744 CHECK_NULL_VOID(frameNode);
745 TextModelNG::SetTextDetectEnable(frameNode, static_cast<bool>(value));
746 }
747
GetTextDetectEnable(ArkUINodeHandle node)748 ArkUI_Int32 GetTextDetectEnable(ArkUINodeHandle node)
749 {
750 auto* frameNode = reinterpret_cast<FrameNode*>(node);
751 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
752 return static_cast<ArkUI_Int32>(TextModelNG::GetTextDetectEnable(frameNode));
753 }
754
ResetTextDetectEnable(ArkUINodeHandle node)755 void ResetTextDetectEnable(ArkUINodeHandle node)
756 {
757 auto* frameNode = reinterpret_cast<FrameNode*>(node);
758 CHECK_NULL_VOID(frameNode);
759 TextModelNG::SetTextDetectEnable(frameNode, DEFAULT_ENABLE_TEXT_DETECTOR);
760 }
761
GetFontFamily(ArkUINodeHandle node)762 ArkUI_CharPtr GetFontFamily(ArkUINodeHandle node)
763 {
764 auto* frameNode = reinterpret_cast<FrameNode*>(node);
765 CHECK_NULL_RETURN(frameNode, nullptr);
766 std::vector<std::string> fontFamilies = TextModelNG::GetFontFamily(frameNode);
767 std::string families;
768 //set index start
769 uint32_t index = 0;
770 for (auto& family : fontFamilies) {
771 families += family;
772 if (index != fontFamilies.size() - 1) {
773 families += ",";
774 }
775 index++;
776 }
777 g_strValue = families;
778 return g_strValue.c_str();
779 }
780
GetCopyOption(ArkUINodeHandle node)781 ArkUI_Int32 GetCopyOption(ArkUINodeHandle node)
782 {
783 auto* frameNode = reinterpret_cast<FrameNode*>(node);
784 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
785 return static_cast<ArkUI_Int32>(TextModelNG::GetCopyOption(frameNode));
786 }
787
GetHeightAdaptivePolicy(ArkUINodeHandle node)788 ArkUI_Int32 GetHeightAdaptivePolicy(ArkUINodeHandle node)
789 {
790 auto* frameNode = reinterpret_cast<FrameNode*>(node);
791 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
792 return TEXT_HEIGHT_ADAPTIVE_POLICY_MAP[TextModelNG::GetHeightAdaptivePolicy(frameNode)];
793 }
794
GetTextMinFontSize(ArkUINodeHandle node)795 ArkUI_Float32 GetTextMinFontSize(ArkUINodeHandle node)
796 {
797 auto* frameNode = reinterpret_cast<FrameNode*>(node);
798 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
799 return static_cast<ArkUI_Float32>(TextModelNG::GetAdaptMinFontSize(frameNode).Value());
800 }
801
GetTextMaxFontSize(ArkUINodeHandle node)802 ArkUI_Float32 GetTextMaxFontSize(ArkUINodeHandle node)
803 {
804 auto* frameNode = reinterpret_cast<FrameNode*>(node);
805 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
806 return static_cast<ArkUI_Float32>(TextModelNG::GetAdaptMaxFontSize(frameNode).Value());
807 }
808
GetFont(ArkUINodeHandle node,ArkUITextFont * font)809 void GetFont(ArkUINodeHandle node, ArkUITextFont* font)
810 {
811 auto* frameNode = reinterpret_cast<FrameNode*>(node);
812 CHECK_NULL_VOID(frameNode);
813 Font value = TextModelNG::GetFont(frameNode);
814 if (value.fontSize.has_value()) {
815 font->fontSize = value.fontSize.value().GetNativeValue(static_cast<DimensionUnit>(font->fontSizeUnit));
816 }
817 if (value.fontWeight.has_value()) {
818 font->fontWeight = static_cast<ArkUI_Int32>(value.fontWeight.value());
819 }
820 if (!value.fontFamilies.empty()) {
821 std::string families;
822 //set index start
823 std::size_t index = 0;
824 for (auto& family : value.fontFamilies) {
825 families += family;
826 if (index != value.fontFamilies.size() - 1) {
827 families += ",";
828 }
829 index++;
830 }
831 g_strValue = families;
832 font->fontFamilies = g_strValue.c_str();
833 } else {
834 font->fontFamilies = "HarmonyOS Sans";
835 }
836 if (value.fontStyle.has_value()) {
837 font->fontStyle = static_cast<ArkUI_Int32>(value.fontStyle.value());
838 }
839 }
840
GetFontSize(ArkUINodeHandle node,ArkUI_Int32 unit)841 ArkUI_Float32 GetFontSize(ArkUINodeHandle node, ArkUI_Int32 unit)
842 {
843 auto* frameNode = reinterpret_cast<FrameNode*>(node);
844 CHECK_NULL_RETURN(frameNode, ERROR_FLOAT_CODE);
845 return static_cast<ArkUI_Float32>(
846 TextModelNG::GetFontSize(frameNode).GetNativeValue(static_cast<DimensionUnit>(unit)));
847 }
848
GetFontWeight(ArkUINodeHandle node)849 ArkUI_Int32 GetFontWeight(ArkUINodeHandle node)
850 {
851 auto* frameNode = reinterpret_cast<FrameNode*>(node);
852 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
853 return static_cast<ArkUI_Int32>(TextModelNG::GetFontWeight(frameNode));
854 }
855
GetItalicFontStyle(ArkUINodeHandle node)856 ArkUI_Int32 GetItalicFontStyle(ArkUINodeHandle node)
857 {
858 auto* frameNode = reinterpret_cast<FrameNode*>(node);
859 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
860 return static_cast<ArkUI_Int32>(TextModelNG::GetItalicFontStyle(frameNode));
861 }
862
GetTextWordBreak(ArkUINodeHandle node)863 ArkUI_Int32 GetTextWordBreak(ArkUINodeHandle node)
864 {
865 auto* frameNode = reinterpret_cast<FrameNode*>(node);
866 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
867 return static_cast<ArkUI_Int32>(TextModelNG::GetWordBreak(frameNode));
868 }
869
GetTextEllipsisMode(ArkUINodeHandle node)870 ArkUI_Int32 GetTextEllipsisMode(ArkUINodeHandle node)
871 {
872 auto* frameNode = reinterpret_cast<FrameNode*>(node);
873 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
874 return static_cast<ArkUI_Int32>(TextModelNG::GetEllipsisMode(frameNode));
875 }
876
SetTextFontFeature(ArkUINodeHandle node,ArkUI_CharPtr value)877 void SetTextFontFeature(ArkUINodeHandle node, ArkUI_CharPtr value)
878 {
879 auto* frameNode = reinterpret_cast<FrameNode*>(node);
880 CHECK_NULL_VOID(frameNode);
881 std::string strValue = value;
882 TextModelNG::SetFontFeature(frameNode, ParseFontFeatureSettings(strValue));
883 }
884
ResetTextFontFeature(ArkUINodeHandle node)885 void ResetTextFontFeature(ArkUINodeHandle node)
886 {
887 auto* frameNode = reinterpret_cast<FrameNode*>(node);
888 CHECK_NULL_VOID(frameNode);
889 std::string strValue = "";
890 TextModelNG::SetFontFeature(frameNode, ParseFontFeatureSettings(strValue));
891 }
892
SetTextDataDetectorConfig(ArkUINodeHandle node,ArkUI_Uint32 * values,ArkUI_Int32 size)893 void SetTextDataDetectorConfig(ArkUINodeHandle node, ArkUI_Uint32* values, ArkUI_Int32 size)
894 {
895 std::string textTypes;
896 for (int i = 0; i < size; i++) {
897 auto index = values[i];
898 if (index < 0 || index >= TEXT_DETECT_TYPES.size()) {
899 continue;
900 }
901 if (i != 0) {
902 textTypes.append(",");
903 }
904 textTypes.append(TEXT_DETECT_TYPES[index]);
905 }
906 auto* frameNode = reinterpret_cast<FrameNode*>(node);
907 CHECK_NULL_VOID(frameNode);
908 TextModelNG::SetTextDetectConfig(frameNode, textTypes);
909 }
910
GetTextDataDetectorConfig(ArkUINodeHandle node,ArkUI_Int32 (* values)[32])911 ArkUI_Int32 GetTextDataDetectorConfig(ArkUINodeHandle node, ArkUI_Int32 (*values)[32])
912 {
913 auto* frameNode = reinterpret_cast<FrameNode*>(node);
914 CHECK_NULL_RETURN(frameNode, 0);
915 auto typeString = TextModelNG::GetTextDetectConfig(frameNode);
916 std::vector<std::string> types;
917 StringUtils::StringSplitter(typeString, ',', types);
918 for (uint32_t i = 0; i < types.size(); i++) {
919 auto ret = std::find(TEXT_DETECT_TYPES.begin(), TEXT_DETECT_TYPES.end(), types[i]);
920 (*values)[i] = ret != TEXT_DETECT_TYPES.end() ? ret - TEXT_DETECT_TYPES.begin() : -1;
921 }
922 return types.size();
923 }
924
ResetTextDataDetectorConfig(ArkUINodeHandle node)925 void ResetTextDataDetectorConfig(ArkUINodeHandle node)
926 {
927 auto* frameNode = reinterpret_cast<FrameNode*>(node);
928 CHECK_NULL_VOID(frameNode);
929 TextModelNG::SetTextDetectConfig(frameNode, "");
930 }
931
GetTextFontFeature(ArkUINodeHandle node)932 ArkUI_CharPtr GetTextFontFeature(ArkUINodeHandle node)
933 {
934 auto* frameNode = reinterpret_cast<FrameNode*>(node);
935 CHECK_NULL_RETURN(frameNode, nullptr);
936 g_strValue = UnParseFontFeatureSetting(TextModelNG::GetFontFeature(frameNode));
937 return g_strValue.c_str();
938 }
939
SetTextLineSpacing(ArkUINodeHandle node,ArkUI_Float32 number,ArkUI_Int32 unit)940 void SetTextLineSpacing(ArkUINodeHandle node, ArkUI_Float32 number, ArkUI_Int32 unit)
941 {
942 auto* frameNode = reinterpret_cast<FrameNode*>(node);
943 CHECK_NULL_VOID(frameNode);
944 TextModelNG::SetLineSpacing(frameNode, Dimension(number, static_cast<DimensionUnit>(unit)));
945 }
946
GetTextLineSpacing(ArkUINodeHandle node)947 float GetTextLineSpacing(ArkUINodeHandle node)
948 {
949 auto* frameNode = reinterpret_cast<FrameNode*>(node);
950 CHECK_NULL_RETURN(frameNode, 0.0f);
951 return TextModelNG::GetLineSpacing(frameNode);
952 }
953
ResetTextLineSpacing(ArkUINodeHandle node)954 void ResetTextLineSpacing(ArkUINodeHandle node)
955 {
956 auto* frameNode = reinterpret_cast<FrameNode*>(node);
957 CHECK_NULL_VOID(frameNode);
958 TextModelNG::SetLineSpacing(frameNode, DEFAULT_LINE_SPACING);
959 }
960
SetTextCaretColor(ArkUINodeHandle node,ArkUI_Uint32 color)961 void SetTextCaretColor(ArkUINodeHandle node, ArkUI_Uint32 color)
962 {
963 auto *frameNode = reinterpret_cast<FrameNode *>(node);
964 CHECK_NULL_VOID(frameNode);
965 TextModelNG::SetCaretColor(frameNode, Color(color));
966 }
967
GetTextCaretColor(ArkUINodeHandle node)968 ArkUI_Uint32 GetTextCaretColor(ArkUINodeHandle node)
969 {
970 auto *frameNode = reinterpret_cast<FrameNode *>(node);
971 CHECK_NULL_RETURN(frameNode, Color::BLACK.GetValue());
972 return TextModelNG::GetCaretColor(frameNode).GetValue();
973 }
974
ResetTextCaretColor(ArkUINodeHandle node)975 void ResetTextCaretColor(ArkUINodeHandle node)
976 {
977 auto *frameNode = reinterpret_cast<FrameNode *>(node);
978 CHECK_NULL_VOID(frameNode);
979 auto pipeline = frameNode->GetContext();
980 CHECK_NULL_VOID(pipeline);
981 auto theme = pipeline->GetThemeManager()->GetTheme<TextTheme>();
982 CHECK_NULL_VOID(theme);
983 auto caretColor = static_cast<int32_t>(theme->GetCaretColor().GetValue());
984 TextModelNG::SetCaretColor(frameNode, Color(caretColor));
985 }
986
SetTextSelectedBackgroundColor(ArkUINodeHandle node,ArkUI_Uint32 color)987 void SetTextSelectedBackgroundColor(ArkUINodeHandle node, ArkUI_Uint32 color)
988 {
989 auto *frameNode = reinterpret_cast<FrameNode *>(node);
990 CHECK_NULL_VOID(frameNode);
991 TextModelNG::SetSelectedBackgroundColor(frameNode, Color(color));
992 }
993
GetTextSelectedBackgroundColor(ArkUINodeHandle node)994 ArkUI_Uint32 GetTextSelectedBackgroundColor(ArkUINodeHandle node)
995 {
996 auto *frameNode = reinterpret_cast<FrameNode *>(node);
997 CHECK_NULL_RETURN(frameNode, Color::BLACK.GetValue());
998 return TextModelNG::GetSelectedBackgroundColor(frameNode).GetValue();
999 }
1000
ResetTextSelectedBackgroundColor(ArkUINodeHandle node)1001 void ResetTextSelectedBackgroundColor(ArkUINodeHandle node)
1002 {
1003 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1004 CHECK_NULL_VOID(frameNode);
1005 TextModelNG::ResetSelectedBackgroundColor(frameNode);
1006 }
1007
SetLineBreakStrategy(ArkUINodeHandle node,ArkUI_Uint32 lineBreakStrategy)1008 void SetLineBreakStrategy(ArkUINodeHandle node, ArkUI_Uint32 lineBreakStrategy)
1009 {
1010 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1011 CHECK_NULL_VOID(frameNode);
1012 if (lineBreakStrategy < 0 || lineBreakStrategy >= LINE_BREAK_STRATEGY_TYPES.size()) {
1013 lineBreakStrategy = 0; // 0 is the default value of LineBreakStrategy::GREEDY
1014 }
1015 TextModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[lineBreakStrategy]);
1016 }
1017
ResetLineBreakStrategy(ArkUINodeHandle node)1018 void ResetLineBreakStrategy(ArkUINodeHandle node)
1019 {
1020 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1021 CHECK_NULL_VOID(frameNode);
1022 // 0 is the default value of LineBreakStrategy::GREEDY
1023 TextModelNG::SetLineBreakStrategy(frameNode, LINE_BREAK_STRATEGY_TYPES[0]);
1024 }
1025
GetTextLineBreakStrategy(ArkUINodeHandle node)1026 ArkUI_Int32 GetTextLineBreakStrategy(ArkUINodeHandle node)
1027 {
1028 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1029 CHECK_NULL_RETURN(frameNode, ERROR_INT_CODE);
1030 return static_cast<ArkUI_Int32>(TextModelNG::GetLineBreakStrategy(frameNode));
1031 }
1032
SetTextContentWithStyledString(ArkUINodeHandle node,ArkUI_StyledString * styledString)1033 void SetTextContentWithStyledString(ArkUINodeHandle node, ArkUI_StyledString* styledString)
1034 {
1035 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1036 CHECK_NULL_VOID(frameNode);
1037 CHECK_NULL_VOID(styledString);
1038 TextModelNG::SetTextContentWithStyledString(frameNode, styledString);
1039 }
1040
ResetTextContentWithStyledString(ArkUINodeHandle node)1041 void ResetTextContentWithStyledString(ArkUINodeHandle node)
1042 {
1043 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1044 CHECK_NULL_VOID(frameNode);
1045 TextModelNG::SetTextContentWithStyledString(frameNode, nullptr);
1046 }
1047
SetTextSelection(ArkUINodeHandle node,int32_t startIndex,int32_t endIndex)1048 void SetTextSelection(ArkUINodeHandle node, int32_t startIndex, int32_t endIndex)
1049 {
1050 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1051 CHECK_NULL_VOID(frameNode);
1052 TextModelNG::SetTextSelection(frameNode, startIndex, endIndex);
1053 }
1054
ResetTextSelection(ArkUINodeHandle node)1055 void ResetTextSelection(ArkUINodeHandle node)
1056 {
1057 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1058 CHECK_NULL_VOID(frameNode);
1059 TextModelNG::SetTextSelection(frameNode, DEFAULT_SELECTION, DEFAULT_SELECTION);
1060 }
1061
SetTextSelectableMode(ArkUINodeHandle node,ArkUI_Uint32 textSelectableMode)1062 void SetTextSelectableMode(ArkUINodeHandle node, ArkUI_Uint32 textSelectableMode)
1063 {
1064 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1065 CHECK_NULL_VOID(frameNode);
1066 if (textSelectableMode < 0 || textSelectableMode >= TEXT_SELECTABLE_MODE.size()) {
1067 textSelectableMode = 0;
1068 }
1069 TextModelNG::SetTextSelectableMode(frameNode, TEXT_SELECTABLE_MODE[textSelectableMode]);
1070 }
1071
ResetTextSelectableMode(ArkUINodeHandle node)1072 void ResetTextSelectableMode(ArkUINodeHandle node)
1073 {
1074 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1075 CHECK_NULL_VOID(frameNode);
1076 TextModelNG::SetTextSelectableMode(frameNode, TEXT_SELECTABLE_MODE[0]);
1077 }
1078
SetTextDataDetectorConfigWithEvent(ArkUINodeHandle node,const struct ArkUITextDetectConfigStruct * arkUITextDetectConfig)1079 void SetTextDataDetectorConfigWithEvent(
1080 ArkUINodeHandle node, const struct ArkUITextDetectConfigStruct* arkUITextDetectConfig)
1081 {
1082 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1083 CHECK_NULL_VOID(frameNode);
1084 TextDetectConfig textDetectConfig;
1085 textDetectConfig.types = arkUITextDetectConfig->types;
1086 if (arkUITextDetectConfig->onResult) {
1087 textDetectConfig.onResult =
1088 std::move(*(reinterpret_cast<std::function<void(const std::string&)>*>(arkUITextDetectConfig->onResult)));
1089 }
1090 textDetectConfig.entityColor = Color(arkUITextDetectConfig->entityColor);
1091 textDetectConfig.entityDecorationType = TextDecoration(arkUITextDetectConfig->entityDecorationType);
1092 textDetectConfig.entityDecorationColor = Color(arkUITextDetectConfig->entityDecorationColor);
1093 textDetectConfig.entityDecorationStyle = TextDecorationStyle(arkUITextDetectConfig->entityDecorationStyle);
1094 TextModelNG::SetTextDetectConfig(frameNode, textDetectConfig);
1095 }
1096
ResetTextDataDetectorConfigWithEvent(ArkUINodeHandle node)1097 void ResetTextDataDetectorConfigWithEvent(ArkUINodeHandle node)
1098 {
1099 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1100 CHECK_NULL_VOID(frameNode);
1101 TextDetectConfig textDetectConfig;
1102 TextModelNG::SetTextDetectConfig(frameNode, textDetectConfig);
1103 }
1104
SetTextOnCopy(ArkUINodeHandle node,void * callback)1105 void SetTextOnCopy(ArkUINodeHandle node, void* callback)
1106 {
1107 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1108 CHECK_NULL_VOID(frameNode);
1109 if (callback) {
1110 auto onCopy = reinterpret_cast<std::function<void(const std::string&)>*>(callback);
1111 TextModelNG::SetOnCopy(frameNode, std::move(*onCopy));
1112 } else {
1113 TextModelNG::SetOnCopy(frameNode, nullptr);
1114 }
1115 }
1116
ResetTextOnCopy(ArkUINodeHandle node)1117 void ResetTextOnCopy(ArkUINodeHandle node)
1118 {
1119 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1120 CHECK_NULL_VOID(frameNode);
1121 TextModelNG::SetOnCopy(frameNode, nullptr);
1122 }
1123
SetTextOnTextSelectionChange(ArkUINodeHandle node,void * callback)1124 void SetTextOnTextSelectionChange(ArkUINodeHandle node, void* callback)
1125 {
1126 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1127 CHECK_NULL_VOID(frameNode);
1128 if (callback) {
1129 auto onChange = reinterpret_cast<std::function<void(int32_t, int32_t)>*>(callback);
1130 TextModelNG::SetOnTextSelectionChange(frameNode, std::move(*onChange));
1131 } else {
1132 TextModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1133 }
1134 }
1135
ResetTextOnTextSelectionChange(ArkUINodeHandle node)1136 void ResetTextOnTextSelectionChange(ArkUINodeHandle node)
1137 {
1138 auto *frameNode = reinterpret_cast<FrameNode *>(node);
1139 CHECK_NULL_VOID(frameNode);
1140 TextModelNG::SetOnTextSelectionChange(frameNode, nullptr);
1141 }
1142
SetTextSelectionMenuOptions(ArkUINodeHandle node,void * onCreateMenuCallback,void * onMenuItemClickCallback)1143 void SetTextSelectionMenuOptions(ArkUINodeHandle node, void* onCreateMenuCallback, void* onMenuItemClickCallback)
1144 {
1145 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1146 CHECK_NULL_VOID(frameNode);
1147 NG::OnCreateMenuCallback* onCreateMenu = nullptr;
1148 NG::OnMenuItemClickCallback* onMenuItemClick = nullptr;
1149 if (onCreateMenuCallback) {
1150 onCreateMenu = reinterpret_cast<NG::OnCreateMenuCallback*>(onCreateMenuCallback);
1151 }
1152 if (onMenuItemClickCallback) {
1153 onMenuItemClick = reinterpret_cast<NG::OnMenuItemClickCallback*>(onMenuItemClickCallback);
1154 }
1155 if (onCreateMenu != nullptr && onMenuItemClick != nullptr) {
1156 TextModelNG::SetSelectionMenuOptions(frameNode, std::move(*onCreateMenu), std::move(*onMenuItemClick));
1157 } else if (onCreateMenu != nullptr && onMenuItemClick == nullptr) {
1158 TextModelNG::SetSelectionMenuOptions(frameNode, std::move(*onCreateMenu), nullptr);
1159 } else if (onCreateMenu == nullptr && onMenuItemClick != nullptr) {
1160 TextModelNG::SetSelectionMenuOptions(frameNode, nullptr, std::move(*onMenuItemClick));
1161 } else {
1162 TextModelNG::SetSelectionMenuOptions(frameNode, nullptr, nullptr);
1163 }
1164 }
1165
ResetTextSelectionMenuOptions(ArkUINodeHandle node)1166 void ResetTextSelectionMenuOptions(ArkUINodeHandle node)
1167 {
1168 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1169 CHECK_NULL_VOID(frameNode);
1170 NG::OnCreateMenuCallback onCreateMenuCallback;
1171 NG::OnMenuItemClickCallback onMenuItemClick;
1172 TextModelNG::SetSelectionMenuOptions(frameNode, std::move(onCreateMenuCallback), std::move(onMenuItemClick));
1173 }
1174
SetTextHalfLeading(ArkUINodeHandle node,ArkUI_Bool value)1175 void SetTextHalfLeading(ArkUINodeHandle node, ArkUI_Bool value)
1176 {
1177 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1178 CHECK_NULL_VOID(frameNode);
1179 TextModelNG::SetHalfLeading(frameNode, value);
1180 }
1181
ResetTextHalfLeading(ArkUINodeHandle node)1182 void ResetTextHalfLeading(ArkUINodeHandle node)
1183 {
1184 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1185 CHECK_NULL_VOID(frameNode);
1186 TextModelNG::SetHalfLeading(frameNode, false);
1187 }
1188
GetTextHalfLeading(ArkUINodeHandle node)1189 ArkUI_Int32 GetTextHalfLeading(ArkUINodeHandle node)
1190 {
1191 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1192 CHECK_NULL_RETURN(frameNode, false);
1193 return static_cast<ArkUI_Int32>(TextModelNG::GetHalfLeading(frameNode));
1194 }
1195 } // namespace
1196
1197 namespace NodeModifier {
GetTextModifier()1198 const ArkUITextModifier* GetTextModifier()
1199 {
1200 static const ArkUITextModifier modifier = { SetTextContent, SetFontWeight, ResetFontWeight, SetFontStyle,
1201 ResetFontStyle, SetTextAlign, ResetTextAlign, SetFontColor, ResetFontColor, SetTextForegroundColor,
1202 ResetTextForegroundColor, SetFontSize, ResetFontSize, SetTextLineHeight, ResetTextLineHeight,
1203 SetTextTextOverflow, ResetTextTextOverflow, SetTextDecoration, ResetTextDecoration, SetTextTextCase,
1204 ResetTextTextCase, SetTextMaxLines, ResetTextMaxLines, SetTextMinFontSize, ResetTextMinFontSize,
1205 SetTextDraggable, ResetTextDraggable, SetTextPrivacySensitve, ResetTextPrivacySensitve, SetTextMaxFontSize,
1206 ResetTextMaxFontSize, SetTextFontFamily, ResetTextFontFamily, SetTextCopyOption, ResetTextCopyOption,
1207 SetTextTextShadow, ResetTextTextShadow, SetTextHeightAdaptivePolicy, ResetTextHeightAdaptivePolicy,
1208 SetTextTextIndent, ResetTextTextIndent, SetTextBaselineOffset, ResetTextBaselineOffset, SetTextLetterSpacing,
1209 ResetTextLetterSpacing, SetTextFont, ResetTextFont, SetFontWeightStr, SetFontWeightWithOption, SetWordBreak,
1210 ResetWordBreak, GetFontFamily, GetCopyOption, GetHeightAdaptivePolicy, GetTextMinFontSize, GetTextMaxFontSize,
1211 GetFont, GetFontSize, GetFontWeight, GetItalicFontStyle, SetEllipsisMode, ResetEllipsisMode,
1212 SetTextDetectEnable, ResetTextDetectEnable, GetTextContent, GetTextLineHeight, GetTextDecoration,
1213 GetTextTextCase, GetTextLetterSpacing, GetTextMaxLines, GetTextAlign, GetTextTextOverflow, GetTextTextIndent,
1214 GetFontColor, GetTextBaselineOffset, GetTextShadowCount, GetTextShadow, GetTextWordBreak, GetTextEllipsisMode,
1215 SetTextFontFeature, ResetTextFontFeature, GetTextFontFeature, GetTextDetectEnable, SetTextDataDetectorConfig,
1216 GetTextDataDetectorConfig, ResetTextDataDetectorConfig, SetTextLineSpacing, GetTextLineSpacing,
1217 ResetTextLineSpacing, SetTextCaretColor, GetTextCaretColor, ResetTextCaretColor,
1218 SetTextSelectedBackgroundColor, GetTextSelectedBackgroundColor, ResetTextSelectedBackgroundColor,
1219 SetLineBreakStrategy, ResetLineBreakStrategy, GetTextLineBreakStrategy,
1220 SetTextContentWithStyledString, ResetTextContentWithStyledString, SetTextSelection, ResetTextSelection,
1221 SetTextSelectableMode, ResetTextSelectableMode, SetTextDataDetectorConfigWithEvent,
1222 ResetTextDataDetectorConfigWithEvent, SetTextOnCopy, ResetTextOnCopy, SetTextOnTextSelectionChange,
1223 ResetTextOnTextSelectionChange, SetTextSelectionMenuOptions, ResetTextSelectionMenuOptions, SetTextMinFontScale,
1224 ResetTextMinFontScale, SetTextMaxFontScale, ResetTextMaxFontScale, SetTextHalfLeading, ResetTextHalfLeading,
1225 GetTextHalfLeading, SetOnClick, ResetOnClick, SetResponseRegion, ResetResponseRegion };
1226
1227 return &modifier;
1228 }
1229
GetCJUITextModifier()1230 const CJUITextModifier* GetCJUITextModifier()
1231 {
1232 static const CJUITextModifier modifier = { SetTextContent, SetFontWeight, ResetFontWeight, SetFontStyle,
1233 ResetFontStyle, SetTextAlign, ResetTextAlign, SetFontColor, ResetFontColor, SetTextForegroundColor,
1234 ResetTextForegroundColor, SetFontSize, ResetFontSize, SetTextLineHeight, ResetTextLineHeight,
1235 SetTextTextOverflow, ResetTextTextOverflow, SetTextDecoration, ResetTextDecoration, SetTextTextCase,
1236 ResetTextTextCase, SetTextMaxLines, ResetTextMaxLines, SetTextMinFontSize, ResetTextMinFontSize,
1237 SetTextDraggable, ResetTextDraggable, SetTextPrivacySensitve, ResetTextPrivacySensitve, SetTextMaxFontSize,
1238 ResetTextMaxFontSize, SetTextFontFamily, ResetTextFontFamily, SetTextCopyOption, ResetTextCopyOption,
1239 SetTextTextShadow, ResetTextTextShadow, SetTextHeightAdaptivePolicy, ResetTextHeightAdaptivePolicy,
1240 SetTextTextIndent, ResetTextTextIndent, SetTextBaselineOffset, ResetTextBaselineOffset, SetTextLetterSpacing,
1241 ResetTextLetterSpacing, SetTextFont, ResetTextFont, SetFontWeightStr, SetWordBreak, ResetWordBreak,
1242 GetFontFamily, GetCopyOption, GetHeightAdaptivePolicy, GetTextMinFontSize, GetTextMaxFontSize, GetFont,
1243 GetFontSize, GetFontWeight, GetItalicFontStyle, SetEllipsisMode, ResetEllipsisMode, SetTextDetectEnable,
1244 ResetTextDetectEnable, GetTextContent, GetTextLineHeight, GetTextDecoration, GetTextTextCase,
1245 GetTextLetterSpacing, GetTextMaxLines, GetTextAlign, GetTextTextOverflow, GetTextTextIndent, GetFontColor,
1246 GetTextBaselineOffset, GetTextShadowCount, GetTextShadow, GetTextWordBreak, GetTextEllipsisMode,
1247 SetTextFontFeature, ResetTextFontFeature, GetTextFontFeature, GetTextDetectEnable, SetTextDataDetectorConfig,
1248 GetTextDataDetectorConfig, ResetTextDataDetectorConfig, SetTextLineSpacing, GetTextLineSpacing,
1249 ResetTextLineSpacing, SetTextSelectedBackgroundColor, GetTextSelectedBackgroundColor,
1250 ResetTextSelectedBackgroundColor, SetLineBreakStrategy, ResetLineBreakStrategy, GetTextLineBreakStrategy,
1251 SetTextContentWithStyledString, ResetTextContentWithStyledString, SetTextSelection, ResetTextSelection,
1252 SetTextSelectableMode, ResetTextSelectableMode, SetTextDataDetectorConfigWithEvent,
1253 ResetTextDataDetectorConfigWithEvent, SetTextOnCopy, ResetTextOnCopy, SetTextOnTextSelectionChange,
1254 ResetTextOnTextSelectionChange };
1255
1256 return &modifier;
1257 }
1258
SetOnDetectResultUpdate(ArkUINodeHandle node,void * extraParam)1259 void SetOnDetectResultUpdate(ArkUINodeHandle node, void* extraParam)
1260 {
1261 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1262 CHECK_NULL_VOID(frameNode);
1263 auto onDetectResultUpdate = [node, extraParam](const std::string& str) {
1264 ArkUINodeEvent event;
1265 event.kind = TEXT_INPUT;
1266 event.extraParam = reinterpret_cast<intptr_t>(extraParam);
1267 event.textInputEvent.subKind = ON_DETECT_RESULT_UPDATE;
1268 event.textInputEvent.nativeStringPtr = reinterpret_cast<intptr_t>(str.c_str());
1269 SendArkUIAsyncEvent(&event);
1270 };
1271 TextModelNG::SetOnDetectResultUpdate(frameNode, std::move(onDetectResultUpdate));
1272 }
1273
ResetOnDetectResultUpdate(ArkUINodeHandle node)1274 void ResetOnDetectResultUpdate(ArkUINodeHandle node)
1275 {
1276 auto* frameNode = reinterpret_cast<FrameNode*>(node);
1277 CHECK_NULL_VOID(frameNode);
1278 TextModelNG::SetOnDetectResultUpdate(frameNode, nullptr);
1279 }
1280 } // namespace NodeModifier
1281 } // namespace OHOS::Ace::NG
1282