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  
16  #include "drawing_text_typography.h"
17  #include "native_styled_string.h"
18  #include "node_extened.h"
19  #include "styled_string.h"
20  
21  #include "base/utils/utils.h"
22  
23  #ifdef __cplusplus
24  extern "C" {
25  #endif
26  
27  constexpr int NUM_0 = 0;
28  constexpr int NUM_1 = 1;
29  constexpr int NUM_2 = 2;
30  constexpr int NUM_3 = 3;
31  constexpr int NUM_4 = 4;
32  constexpr int NUM_5 = 5;
33  constexpr int32_t MAX_DISPLAY_COUNT_MIN = 6;
34  constexpr int32_t MAX_DISPLAY_COUNT_MAX = 9;
35  
OH_ArkUI_LayoutConstraint_Create()36  ArkUI_LayoutConstraint* OH_ArkUI_LayoutConstraint_Create()
37  {
38      ArkUI_LayoutConstraint* layoutConstraint = new ArkUI_LayoutConstraint { 0, 0, 0, 0, 0, 0 };
39      return layoutConstraint;
40  }
41  
OH_ArkUI_LayoutConstraint_Copy(const ArkUI_LayoutConstraint * constraint)42  ArkUI_LayoutConstraint* OH_ArkUI_LayoutConstraint_Copy(const ArkUI_LayoutConstraint* constraint)
43  {
44      CHECK_NULL_RETURN(constraint, nullptr);
45      ArkUI_LayoutConstraint* layoutConstraint = new ArkUI_LayoutConstraint { 0, 0, 0, 0, 0, 0 };
46      layoutConstraint->minWidth = constraint->minWidth;
47      layoutConstraint->maxWidth = constraint->maxWidth;
48      layoutConstraint->minHeight = constraint->minHeight;
49      layoutConstraint->maxHeight = constraint->maxHeight;
50      layoutConstraint->percentReferWidth = constraint->percentReferWidth;
51      layoutConstraint->percentReferHeight = constraint->percentReferHeight;
52      return layoutConstraint;
53  }
54  
OH_ArkUI_LayoutConstraint_Dispose(ArkUI_LayoutConstraint * constraint)55  void* OH_ArkUI_LayoutConstraint_Dispose(ArkUI_LayoutConstraint* constraint)
56  {
57      delete constraint;
58      return nullptr;
59  }
60  
OH_ArkUI_NodeCustomEvent_GetLayoutConstraintInMeasure(ArkUI_NodeCustomEvent * event)61  ArkUI_LayoutConstraint* OH_ArkUI_NodeCustomEvent_GetLayoutConstraintInMeasure(ArkUI_NodeCustomEvent* event)
62  {
63      CHECK_NULL_RETURN(event, nullptr);
64      ArkUI_LayoutConstraint* layoutConstraint = new ArkUI_LayoutConstraint;
65      layoutConstraint->minWidth = event->event->data[NUM_0];
66      layoutConstraint->minHeight = event->event->data[NUM_1];
67      layoutConstraint->maxWidth = event->event->data[NUM_2];
68      layoutConstraint->maxHeight = event->event->data[NUM_3];
69      layoutConstraint->percentReferWidth = event->event->data[NUM_4];
70      layoutConstraint->percentReferHeight = event->event->data[NUM_5];
71      return layoutConstraint;
72  }
73  
OH_ArkUI_NodeCustomEvent_GetPositionInLayout(ArkUI_NodeCustomEvent * event)74  ArkUI_IntOffset OH_ArkUI_NodeCustomEvent_GetPositionInLayout(ArkUI_NodeCustomEvent* event)
75  {
76      ArkUI_IntOffset intOffset;
77      CHECK_NULL_RETURN(event, intOffset);
78      intOffset.x = event->event->data[NUM_0];
79      intOffset.y = event->event->data[NUM_1];
80      return intOffset;
81  }
82  
OH_ArkUI_NodeCustomEvent_GetDrawContextInDraw(ArkUI_NodeCustomEvent * event)83  ArkUI_DrawContext* OH_ArkUI_NodeCustomEvent_GetDrawContextInDraw(ArkUI_NodeCustomEvent* event)
84  {
85      CHECK_NULL_RETURN(event, nullptr);
86      ArkUI_DrawContext* drawContext = new ArkUI_DrawContext();
87      drawContext->width = event->event->data[NUM_2];
88      drawContext->height = event->event->data[NUM_3];
89      drawContext->canvas = reinterpret_cast<void*>(event->event->canvas);
90      return drawContext;
91  }
92  
OH_ArkUI_NodeCustomEvent_GetEventTargetId(ArkUI_NodeCustomEvent * event)93  int32_t OH_ArkUI_NodeCustomEvent_GetEventTargetId(ArkUI_NodeCustomEvent* event)
94  {
95      CHECK_NULL_RETURN(event, -1);
96      return event->targetId;
97  }
98  
OH_ArkUI_NodeCustomEvent_GetUserData(ArkUI_NodeCustomEvent * event)99  void* OH_ArkUI_NodeCustomEvent_GetUserData(ArkUI_NodeCustomEvent* event)
100  {
101      CHECK_NULL_RETURN(event, nullptr);
102      return event->userData;
103  }
104  
OH_ArkUI_NodeCustomEvent_GetNodeHandle(ArkUI_NodeCustomEvent * event)105  ArkUI_NodeHandle OH_ArkUI_NodeCustomEvent_GetNodeHandle(ArkUI_NodeCustomEvent* event)
106  {
107      CHECK_NULL_RETURN(event, nullptr);
108      return event->node;
109  }
110  
OH_ArkUI_NodeCustomEvent_GetEventType(ArkUI_NodeCustomEvent * event)111  ArkUI_NodeCustomEventType OH_ArkUI_NodeCustomEvent_GetEventType(ArkUI_NodeCustomEvent* event)
112  {
113      CHECK_NULL_RETURN(event, static_cast<ArkUI_NodeCustomEventType>(-1));
114      return static_cast<ArkUI_NodeCustomEventType>(event->event->kind);
115  }
116  
OH_ArkUI_NodeCustomEvent_GetCustomSpanMeasureInfo(ArkUI_NodeCustomEvent * event,ArkUI_CustomSpanMeasureInfo * info)117  int32_t OH_ArkUI_NodeCustomEvent_GetCustomSpanMeasureInfo(
118      ArkUI_NodeCustomEvent* event, ArkUI_CustomSpanMeasureInfo* info)
119  {
120      if (!event || !info || !event->event) {
121          return ARKUI_ERROR_CODE_PARAM_INVALID;
122      }
123      info->fontSize = event->event->numberData[0].f32;
124      return ARKUI_ERROR_CODE_NO_ERROR;
125  }
126  
OH_ArkUI_NodeCustomEvent_SetCustomSpanMetrics(ArkUI_NodeCustomEvent * event,ArkUI_CustomSpanMetrics * metrics)127  int32_t OH_ArkUI_NodeCustomEvent_SetCustomSpanMetrics(
128      ArkUI_NodeCustomEvent* event, ArkUI_CustomSpanMetrics* metrics)
129  {
130      if (!event || !metrics || !event->event) {
131          return ARKUI_ERROR_CODE_PARAM_INVALID;
132      }
133      event->event->numberReturnData[0].f32 = metrics->width;
134      event->event->numberReturnData[1].f32 = metrics->height;
135      return ARKUI_ERROR_CODE_NO_ERROR;
136  }
137  
OH_ArkUI_NodeCustomEvent_GetCustomSpanDrawInfo(ArkUI_NodeCustomEvent * event,ArkUI_CustomSpanDrawInfo * info)138  int32_t OH_ArkUI_NodeCustomEvent_GetCustomSpanDrawInfo(
139      ArkUI_NodeCustomEvent* event, ArkUI_CustomSpanDrawInfo* info)
140  {
141      if (!event || !info || !event->event) {
142          return ARKUI_ERROR_CODE_PARAM_INVALID;
143      }
144      info->optionsX = event->event->numberData[0].f32; // 0: x offset
145      info->optionsLineTop = event->event->numberData[1].f32; // 1: LineTop value
146      info->optionsLineBottom = event->event->numberData[2].f32; // 2: LineBottom value
147      info->optionsBaseLine = event->event->numberData[3].f32; // 3: BaseLine value
148      return ARKUI_ERROR_CODE_NO_ERROR;
149  }
150  
OH_ArkUI_CustomSpanMeasureInfo_Create(void)151  ArkUI_CustomSpanMeasureInfo* OH_ArkUI_CustomSpanMeasureInfo_Create(void)
152  {
153      ArkUI_CustomSpanMeasureInfo* info = new ArkUI_CustomSpanMeasureInfo { 0 };
154      return info;
155  }
156  
OH_ArkUI_CustomSpanMeasureInfo_Dispose(ArkUI_CustomSpanMeasureInfo * info)157  void OH_ArkUI_CustomSpanMeasureInfo_Dispose(ArkUI_CustomSpanMeasureInfo* info)
158  {
159      if (!info) {
160          return;
161      }
162      delete info;
163      info = nullptr;
164  }
165  
OH_ArkUI_CustomSpanMeasureInfo_GetFontSize(ArkUI_CustomSpanMeasureInfo * info)166  float OH_ArkUI_CustomSpanMeasureInfo_GetFontSize(ArkUI_CustomSpanMeasureInfo* info)
167  {
168      if (!info) {
169          return 0.0f;
170      }
171      return info->fontSize;
172  }
173  
OH_ArkUI_CustomSpanMetrics_Create(void)174  ArkUI_CustomSpanMetrics* OH_ArkUI_CustomSpanMetrics_Create(void)
175  {
176      ArkUI_CustomSpanMetrics* metrics = new ArkUI_CustomSpanMetrics { 0, 0 };
177      return metrics;
178  }
179  
OH_ArkUI_CustomSpanMetrics_Dispose(ArkUI_CustomSpanMetrics * metrics)180  void OH_ArkUI_CustomSpanMetrics_Dispose(ArkUI_CustomSpanMetrics* metrics)
181  {
182      if (!metrics) {
183          return;
184      }
185      delete metrics;
186      metrics = nullptr;
187  }
188  
OH_ArkUI_CustomSpanMetrics_SetWidth(ArkUI_CustomSpanMetrics * metrics,float width)189  int32_t OH_ArkUI_CustomSpanMetrics_SetWidth(ArkUI_CustomSpanMetrics* metrics, float width)
190  {
191      if (!metrics) {
192          return ARKUI_ERROR_CODE_PARAM_INVALID;
193      }
194      metrics->width = width;
195      return ARKUI_ERROR_CODE_NO_ERROR;
196  }
197  
OH_ArkUI_CustomSpanMetrics_SetHeight(ArkUI_CustomSpanMetrics * metrics,float height)198  int32_t OH_ArkUI_CustomSpanMetrics_SetHeight(ArkUI_CustomSpanMetrics* metrics, float height)
199  {
200      if (!metrics) {
201          return ARKUI_ERROR_CODE_PARAM_INVALID;
202      }
203      metrics->height = height;
204      return ARKUI_ERROR_CODE_NO_ERROR;
205  }
206  
OH_ArkUI_CustomSpanDrawInfo_Create(void)207  ArkUI_CustomSpanDrawInfo* OH_ArkUI_CustomSpanDrawInfo_Create(void)
208  {
209      ArkUI_CustomSpanDrawInfo* info = new ArkUI_CustomSpanDrawInfo { 0, 0, 0, 0 };
210      return info;
211  }
212  
OH_ArkUI_CustomSpanDrawInfo_Dispose(ArkUI_CustomSpanDrawInfo * info)213  void OH_ArkUI_CustomSpanDrawInfo_Dispose(ArkUI_CustomSpanDrawInfo* info)
214  {
215      if (!info) {
216          return;
217      }
218      delete info;
219      info = nullptr;
220  }
221  
OH_ArkUI_CustomSpanDrawInfo_GetXOffset(ArkUI_CustomSpanDrawInfo * info)222  float OH_ArkUI_CustomSpanDrawInfo_GetXOffset(ArkUI_CustomSpanDrawInfo* info)
223  {
224      if (!info) {
225          return 0.0f;
226      }
227      return info->optionsX;
228  }
229  
OH_ArkUI_CustomSpanDrawInfo_GetLineTop(ArkUI_CustomSpanDrawInfo * info)230  float OH_ArkUI_CustomSpanDrawInfo_GetLineTop(ArkUI_CustomSpanDrawInfo* info)
231  {
232      if (!info) {
233          return 0.0f;
234      }
235      return info->optionsLineTop;
236  }
237  
OH_ArkUI_CustomSpanDrawInfo_GetLineBottom(ArkUI_CustomSpanDrawInfo * info)238  float OH_ArkUI_CustomSpanDrawInfo_GetLineBottom(ArkUI_CustomSpanDrawInfo* info)
239  {
240      if (!info) {
241          return 0.0f;
242      }
243      return info->optionsLineBottom;
244  }
245  
OH_ArkUI_CustomSpanDrawInfo_GetBaseline(ArkUI_CustomSpanDrawInfo * info)246  float OH_ArkUI_CustomSpanDrawInfo_GetBaseline(ArkUI_CustomSpanDrawInfo* info)
247  {
248      if (!info) {
249          return 0.0f;
250      }
251      return info->optionsBaseLine;
252  }
253  
OH_ArkUI_LayoutConstraint_GetMaxWidth(const ArkUI_LayoutConstraint * constraint)254  int32_t OH_ArkUI_LayoutConstraint_GetMaxWidth(const ArkUI_LayoutConstraint* constraint)
255  {
256      CHECK_NULL_RETURN(constraint, -1);
257      return constraint->maxWidth;
258  }
OH_ArkUI_LayoutConstraint_GetMinWidth(const ArkUI_LayoutConstraint * constraint)259  int32_t OH_ArkUI_LayoutConstraint_GetMinWidth(const ArkUI_LayoutConstraint* constraint)
260  {
261      CHECK_NULL_RETURN(constraint, -1);
262      return constraint->minWidth;
263  }
OH_ArkUI_LayoutConstraint_GetMaxHeight(const ArkUI_LayoutConstraint * constraint)264  int32_t OH_ArkUI_LayoutConstraint_GetMaxHeight(const ArkUI_LayoutConstraint* constraint)
265  {
266      CHECK_NULL_RETURN(constraint, -1);
267      return constraint->maxHeight;
268  }
OH_ArkUI_LayoutConstraint_GetMinHeight(const ArkUI_LayoutConstraint * constraint)269  int32_t OH_ArkUI_LayoutConstraint_GetMinHeight(const ArkUI_LayoutConstraint* constraint)
270  {
271      CHECK_NULL_RETURN(constraint, -1);
272      return constraint->minHeight;
273  }
OH_ArkUI_LayoutConstraint_GetPercentReferenceWidth(const ArkUI_LayoutConstraint * constraint)274  int32_t OH_ArkUI_LayoutConstraint_GetPercentReferenceWidth(const ArkUI_LayoutConstraint* constraint)
275  {
276      CHECK_NULL_RETURN(constraint, -1);
277      return constraint->percentReferWidth;
278  }
OH_ArkUI_LayoutConstraint_GetPercentReferenceHeight(const ArkUI_LayoutConstraint * constraint)279  int32_t OH_ArkUI_LayoutConstraint_GetPercentReferenceHeight(const ArkUI_LayoutConstraint* constraint)
280  {
281      CHECK_NULL_RETURN(constraint, -1);
282      return constraint->percentReferHeight;
283  }
284  
OH_ArkUI_LayoutConstraint_SetMinWidth(ArkUI_LayoutConstraint * constraint,int32_t value)285  void OH_ArkUI_LayoutConstraint_SetMinWidth(ArkUI_LayoutConstraint* constraint, int32_t value)
286  {
287      CHECK_NULL_VOID(constraint);
288      constraint->minWidth = value;
289  }
OH_ArkUI_LayoutConstraint_SetMaxWidth(ArkUI_LayoutConstraint * constraint,int32_t value)290  void OH_ArkUI_LayoutConstraint_SetMaxWidth(ArkUI_LayoutConstraint* constraint, int32_t value)
291  {
292      CHECK_NULL_VOID(constraint);
293      constraint->maxWidth = value;
294  }
295  
OH_ArkUI_LayoutConstraint_SetMaxHeight(ArkUI_LayoutConstraint * constraint,int32_t value)296  void OH_ArkUI_LayoutConstraint_SetMaxHeight(ArkUI_LayoutConstraint* constraint, int32_t value)
297  {
298      CHECK_NULL_VOID(constraint);
299      constraint->maxHeight = value;
300  }
OH_ArkUI_LayoutConstraint_SetMinHeight(ArkUI_LayoutConstraint * constraint,int32_t value)301  void OH_ArkUI_LayoutConstraint_SetMinHeight(ArkUI_LayoutConstraint* constraint, int32_t value)
302  {
303      CHECK_NULL_VOID(constraint);
304      constraint->minHeight = value;
305  }
OH_ArkUI_LayoutConstraint_SetPercentReferenceWidth(ArkUI_LayoutConstraint * constraint,int32_t value)306  void OH_ArkUI_LayoutConstraint_SetPercentReferenceWidth(ArkUI_LayoutConstraint* constraint, int32_t value)
307  {
308      CHECK_NULL_VOID(constraint);
309      constraint->percentReferWidth = value;
310  }
OH_ArkUI_LayoutConstraint_SetPercentReferenceHeight(ArkUI_LayoutConstraint * constraint,int32_t value)311  void OH_ArkUI_LayoutConstraint_SetPercentReferenceHeight(ArkUI_LayoutConstraint* constraint, int32_t value)
312  {
313      CHECK_NULL_VOID(constraint);
314      constraint->percentReferHeight = value;
315  }
316  
OH_ArkUI_DrawContext_GetCanvas(ArkUI_DrawContext * context)317  void* OH_ArkUI_DrawContext_GetCanvas(ArkUI_DrawContext* context)
318  {
319      return context ? context->canvas : nullptr;
320  }
OH_ArkUI_DrawContext_GetSize(ArkUI_DrawContext * context)321  ArkUI_IntSize OH_ArkUI_DrawContext_GetSize(ArkUI_DrawContext* context)
322  {
323      ArkUI_IntSize intSize;
324      if (context == nullptr) {
325          return intSize;
326      }
327      intSize.width = context->width;
328      intSize.height = context->height;
329      return intSize;
330  }
331  
OH_ArkUI_SwiperIndicator_Create(ArkUI_SwiperIndicatorType indicatorType)332  ArkUI_SwiperIndicator* OH_ArkUI_SwiperIndicator_Create(ArkUI_SwiperIndicatorType indicatorType)
333  {
334      if (indicatorType != ARKUI_SWIPER_INDICATOR_TYPE_DOT) {
335          return nullptr;
336      }
337      ArkUI_SwiperIndicator* indicator = new ArkUI_SwiperIndicator;
338      indicator->type = indicatorType;
339      indicator->dimLeft = ArkUI_OptionalFloat { 0, 0.0f };
340      indicator->dimRight = ArkUI_OptionalFloat { 0, 0.0f };
341      indicator->dimTop = ArkUI_OptionalFloat { 0, 0.0f };
342      indicator->dimBottom = ArkUI_OptionalFloat { 0, 0.0f };
343      if (indicatorType == ARKUI_SWIPER_INDICATOR_TYPE_DOT) {
344          indicator->itemWidth = ArkUI_OptionalFloat { 0, 0.0f };
345          indicator->itemHeight = ArkUI_OptionalFloat { 0, 0.0f };
346          indicator->selectedItemWidth = ArkUI_OptionalFloat { 0, 0.0f };
347          indicator->selectedItemHeight = ArkUI_OptionalFloat { 0, 0.0f };
348          indicator->maskValue = ArkUI_OptionalInt { 0, 0 };
349          indicator->colorValue = ArkUI_OptionalUint { 0, 0xFF000000 };
350          indicator->selectedColorValue = ArkUI_OptionalUint { 0, 0xFF000000 };
351          indicator->maxDisplayCount = ArkUI_OptionalInt { 0, 0 };
352      } else {
353          return nullptr;
354      }
355      return indicator;
356  }
357  
OH_ArkUI_SwiperIndicator_Dispose(ArkUI_SwiperIndicator * indicator)358  void OH_ArkUI_SwiperIndicator_Dispose(ArkUI_SwiperIndicator* indicator)
359  {
360      delete indicator;
361  }
362  
OH_ArkUI_SwiperIndicator_SetStartPosition(ArkUI_SwiperIndicator * indicator,float value)363  void OH_ArkUI_SwiperIndicator_SetStartPosition(ArkUI_SwiperIndicator* indicator, float value)
364  {
365      CHECK_NULL_VOID(indicator);
366      indicator->dimLeft.isSet = 1;
367      indicator->dimLeft.value = value;
368  }
369  
OH_ArkUI_SwiperIndicator_GetStartPosition(ArkUI_SwiperIndicator * indicator)370  float OH_ArkUI_SwiperIndicator_GetStartPosition(ArkUI_SwiperIndicator* indicator)
371  {
372      CHECK_NULL_RETURN(indicator, 0.0f);
373      return indicator->dimLeft.value;
374  }
375  
OH_ArkUI_SwiperIndicator_SetTopPosition(ArkUI_SwiperIndicator * indicator,float value)376  void OH_ArkUI_SwiperIndicator_SetTopPosition(ArkUI_SwiperIndicator* indicator, float value)
377  {
378      CHECK_NULL_VOID(indicator);
379      indicator->dimTop.isSet = 1;
380      indicator->dimTop.value = value;
381  }
382  
OH_ArkUI_SwiperIndicator_GetTopPosition(ArkUI_SwiperIndicator * indicator)383  float OH_ArkUI_SwiperIndicator_GetTopPosition(ArkUI_SwiperIndicator* indicator)
384  {
385      CHECK_NULL_RETURN(indicator, 0.0f);
386      return indicator->dimTop.value;
387  }
388  
OH_ArkUI_SwiperIndicator_SetEndPosition(ArkUI_SwiperIndicator * indicator,float value)389  void OH_ArkUI_SwiperIndicator_SetEndPosition(ArkUI_SwiperIndicator* indicator, float value)
390  {
391      CHECK_NULL_VOID(indicator);
392      indicator->dimRight.isSet = 1;
393      indicator->dimRight.value = value;
394  }
395  
OH_ArkUI_SwiperIndicator_GetEndPosition(ArkUI_SwiperIndicator * indicator)396  float OH_ArkUI_SwiperIndicator_GetEndPosition(ArkUI_SwiperIndicator* indicator)
397  {
398      CHECK_NULL_RETURN(indicator, 0.0f);
399      return indicator->dimRight.value;
400  }
401  
OH_ArkUI_SwiperIndicator_SetBottomPosition(ArkUI_SwiperIndicator * indicator,float value)402  void OH_ArkUI_SwiperIndicator_SetBottomPosition(ArkUI_SwiperIndicator* indicator, float value)
403  {
404      CHECK_NULL_VOID(indicator);
405      indicator->dimBottom.isSet = 1;
406      indicator->dimBottom.value = value;
407  }
408  
OH_ArkUI_SwiperIndicator_GetBottomPosition(ArkUI_SwiperIndicator * indicator)409  float OH_ArkUI_SwiperIndicator_GetBottomPosition(ArkUI_SwiperIndicator* indicator)
410  {
411      CHECK_NULL_RETURN(indicator, 0.0f);
412      return indicator->dimBottom.value;
413  }
414  
OH_ArkUI_SwiperIndicator_SetItemWidth(ArkUI_SwiperIndicator * indicator,float value)415  void OH_ArkUI_SwiperIndicator_SetItemWidth(ArkUI_SwiperIndicator* indicator, float value)
416  {
417      CHECK_NULL_VOID(indicator);
418      indicator->itemWidth.isSet = 1;
419      indicator->itemWidth.value = value;
420  }
421  
OH_ArkUI_SwiperIndicator_GetItemWidth(ArkUI_SwiperIndicator * indicator)422  float OH_ArkUI_SwiperIndicator_GetItemWidth(ArkUI_SwiperIndicator* indicator)
423  {
424      CHECK_NULL_RETURN(indicator, 0.0f);
425      return indicator->itemWidth.value;
426  }
427  
OH_ArkUI_SwiperIndicator_SetItemHeight(ArkUI_SwiperIndicator * indicator,float value)428  void OH_ArkUI_SwiperIndicator_SetItemHeight(ArkUI_SwiperIndicator* indicator, float value)
429  {
430      CHECK_NULL_VOID(indicator);
431      indicator->itemHeight.isSet = 1;
432      indicator->itemHeight.value = value;
433  }
434  
OH_ArkUI_SwiperIndicator_GetItemHeight(ArkUI_SwiperIndicator * indicator)435  float OH_ArkUI_SwiperIndicator_GetItemHeight(ArkUI_SwiperIndicator* indicator)
436  {
437      CHECK_NULL_RETURN(indicator, 0.0f);
438      return indicator->itemHeight.value;
439  }
440  
OH_ArkUI_SwiperIndicator_SetSelectedItemWidth(ArkUI_SwiperIndicator * indicator,float value)441  void OH_ArkUI_SwiperIndicator_SetSelectedItemWidth(ArkUI_SwiperIndicator* indicator, float value)
442  {
443      CHECK_NULL_VOID(indicator);
444      indicator->selectedItemWidth.isSet = 1;
445      indicator->selectedItemWidth.value = value;
446  }
447  
OH_ArkUI_SwiperIndicator_GetSelectedItemWidth(ArkUI_SwiperIndicator * indicator)448  float OH_ArkUI_SwiperIndicator_GetSelectedItemWidth(ArkUI_SwiperIndicator* indicator)
449  {
450      CHECK_NULL_RETURN(indicator, 0.0f);
451      return indicator->selectedItemWidth.value;
452  }
453  
OH_ArkUI_SwiperIndicator_SetSelectedItemHeight(ArkUI_SwiperIndicator * indicator,float value)454  void OH_ArkUI_SwiperIndicator_SetSelectedItemHeight(ArkUI_SwiperIndicator* indicator, float value)
455  {
456      CHECK_NULL_VOID(indicator);
457      indicator->selectedItemHeight.isSet = 1;
458      indicator->selectedItemHeight.value = value;
459  }
460  
OH_ArkUI_SwiperIndicator_GetSelectedItemHeight(ArkUI_SwiperIndicator * indicator)461  float OH_ArkUI_SwiperIndicator_GetSelectedItemHeight(ArkUI_SwiperIndicator* indicator)
462  {
463      CHECK_NULL_RETURN(indicator, 0.0f);
464      return indicator->selectedItemHeight.value;
465  }
466  
OH_ArkUI_SwiperIndicator_SetMask(ArkUI_SwiperIndicator * indicator,int32_t mask)467  void OH_ArkUI_SwiperIndicator_SetMask(ArkUI_SwiperIndicator* indicator, int32_t mask)
468  {
469      CHECK_NULL_VOID(indicator);
470      indicator->maskValue.isSet = 1;
471      indicator->maskValue.value = mask;
472  }
473  
OH_ArkUI_SwiperIndicator_GetMask(ArkUI_SwiperIndicator * indicator)474  int32_t OH_ArkUI_SwiperIndicator_GetMask(ArkUI_SwiperIndicator* indicator)
475  {
476      CHECK_NULL_RETURN(indicator, 0);
477      return indicator->maskValue.value;
478  }
479  
OH_ArkUI_SwiperIndicator_SetColor(ArkUI_SwiperIndicator * indicator,uint32_t color)480  void OH_ArkUI_SwiperIndicator_SetColor(ArkUI_SwiperIndicator* indicator, uint32_t color)
481  {
482      CHECK_NULL_VOID(indicator);
483      indicator->colorValue.isSet = 1;
484      indicator->colorValue.value = color;
485  }
486  
OH_ArkUI_SwiperIndicator_GetColor(ArkUI_SwiperIndicator * indicator)487  uint32_t OH_ArkUI_SwiperIndicator_GetColor(ArkUI_SwiperIndicator* indicator)
488  {
489      CHECK_NULL_RETURN(indicator, 0);
490      return indicator->colorValue.value;
491  }
492  
OH_ArkUI_SwiperIndicator_SetSelectedColor(ArkUI_SwiperIndicator * indicator,uint32_t selectedColor)493  void OH_ArkUI_SwiperIndicator_SetSelectedColor(ArkUI_SwiperIndicator* indicator, uint32_t selectedColor)
494  {
495      CHECK_NULL_VOID(indicator);
496      indicator->selectedColorValue.isSet = 1;
497      indicator->selectedColorValue.value = selectedColor;
498  }
499  
OH_ArkUI_SwiperIndicator_GetSelectedColor(ArkUI_SwiperIndicator * indicator)500  uint32_t OH_ArkUI_SwiperIndicator_GetSelectedColor(ArkUI_SwiperIndicator* indicator)
501  {
502      CHECK_NULL_RETURN(indicator, 0);
503      return indicator->selectedColorValue.value;
504  }
505  
506  
OH_ArkUI_SwiperIndicator_SetMaxDisplayCount(ArkUI_SwiperIndicator * indicator,int32_t maxDisplayCount)507  int32_t OH_ArkUI_SwiperIndicator_SetMaxDisplayCount(ArkUI_SwiperIndicator* indicator, int32_t maxDisplayCount)
508  {
509      CHECK_NULL_RETURN(indicator, ARKUI_ERROR_CODE_PARAM_INVALID);
510      if (maxDisplayCount < MAX_DISPLAY_COUNT_MIN || maxDisplayCount > MAX_DISPLAY_COUNT_MAX) {
511          return ARKUI_ERROR_CODE_PARAM_INVALID;
512      }
513      indicator->maxDisplayCount.isSet = 1;
514      indicator->maxDisplayCount.value = maxDisplayCount;
515      return ARKUI_ERROR_CODE_NO_ERROR;
516  }
517  
OH_ArkUI_SwiperIndicator_GetMaxDisplayCount(ArkUI_SwiperIndicator * indicator)518  int32_t OH_ArkUI_SwiperIndicator_GetMaxDisplayCount(ArkUI_SwiperIndicator* indicator)
519  {
520      CHECK_NULL_RETURN(indicator, 0);
521      return indicator->maxDisplayCount.value;
522  }
523  
OH_ArkUI_StyledString_Create(OH_Drawing_TypographyStyle * typoStyle,OH_Drawing_FontCollection * collection)524  ArkUI_StyledString* OH_ArkUI_StyledString_Create(
525      OH_Drawing_TypographyStyle* typoStyle, OH_Drawing_FontCollection* collection)
526  {
527      ArkUI_StyledString* storage = new ArkUI_StyledString;
528      storage->builder = OH_Drawing_CreateTypographyHandler(typoStyle, collection);
529      OH_Drawing_TypographyStyle* typographyStyle = OH_Drawing_CreateTypographyStyle();
530      storage->paragraphStyle = typographyStyle;
531      return storage;
532  }
533  
OH_ArkUI_StyledString_Destroy(ArkUI_StyledString * storage)534  void OH_ArkUI_StyledString_Destroy(ArkUI_StyledString* storage)
535  {
536      OH_Drawing_DestroyTypographyHandler(reinterpret_cast<OH_Drawing_TypographyCreate*>(storage->builder));
537      for (auto item : storage->items) {
538          if (item->placeholder) {
539              delete reinterpret_cast<OH_Drawing_PlaceholderSpan*>(item->placeholder);
540              item->placeholder = nullptr;
541          }
542          delete item;
543      }
544      while (!storage->styles.empty()) {
545          auto style = reinterpret_cast<OH_Drawing_TextStyle*>(storage->styles.top());
546          OH_Drawing_DestroyTextStyle(style);
547          storage->styles.pop();
548      }
549      storage->styles = std::stack<void*>();
550      storage->items.clear();
551      OH_Drawing_TypographyStyle* paragraphStyle =
552          reinterpret_cast<OH_Drawing_TypographyStyle*>(storage->paragraphStyle);
553      OH_Drawing_DestroyTypographyStyle(paragraphStyle);
554      delete storage;
555  }
556  
OH_ArkUI_StyledString_PushTextStyle(ArkUI_StyledString * storage,OH_Drawing_TextStyle * style)557  void OH_ArkUI_StyledString_PushTextStyle(ArkUI_StyledString* storage, OH_Drawing_TextStyle* style)
558  {
559      OH_Drawing_TypographyHandlerPushTextStyle(reinterpret_cast<OH_Drawing_TypographyCreate*>(storage->builder), style);
560      OH_Drawing_TextStyle* textStyle = OH_Drawing_CreateTextStyle();
561      // copy text style
562      if (style) {
563          OH_Drawing_SetTextStyleColor(textStyle, OH_Drawing_TextStyleGetColor(style));
564          OH_Drawing_SetTextStyleFontSize(textStyle, OH_Drawing_TextStyleGetFontSize(style));
565          OH_Drawing_SetTextStyleFontWeight(textStyle, OH_Drawing_TextStyleGetFontWeight(style));
566          OH_Drawing_SetTextStyleBaseLine(textStyle, OH_Drawing_TextStyleGetBaseline(style));
567          OH_Drawing_SetTextStyleFontHeight(textStyle, OH_Drawing_TextStyleGetFontHeight(style));
568          OH_Drawing_SetTextStyleFontStyle(textStyle, OH_Drawing_TextStyleGetFontStyle(style));
569      }
570      storage->styles.push(textStyle);
571  }
572  
OH_ArkUI_StyledString_AddText(ArkUI_StyledString * storage,const char * content)573  void OH_ArkUI_StyledString_AddText(ArkUI_StyledString* storage, const char* content)
574  {
575      OH_Drawing_TypographyHandlerAddText(reinterpret_cast<OH_Drawing_TypographyCreate*>(storage->builder), content);
576  
577      ArkUI_SpanItem* spanItem = new ArkUI_SpanItem;
578      spanItem->content = content;
579      if (storage->styles.empty()) {
580          spanItem->textStyle = nullptr;
581      } else {
582          spanItem->textStyle = storage->styles.top();
583      }
584      storage->items.emplace_back(spanItem);
585  }
586  
OH_ArkUI_StyledString_PopTextStyle(ArkUI_StyledString * storage)587  void OH_ArkUI_StyledString_PopTextStyle(ArkUI_StyledString* storage)
588  {
589      OH_Drawing_TypographyHandlerPopTextStyle(reinterpret_cast<OH_Drawing_TypographyCreate*>(storage->builder));
590      if (storage->styles.empty()) {
591          return;
592      }
593      storage->styles.pop();
594  }
595  
OH_ArkUI_StyledString_CreateTypography(ArkUI_StyledString * storage)596  OH_Drawing_Typography* OH_ArkUI_StyledString_CreateTypography(ArkUI_StyledString* storage)
597  {
598      OH_Drawing_Typography* paragraph =
599          OH_Drawing_CreateTypography(reinterpret_cast<OH_Drawing_TypographyCreate*>(storage->builder));
600      storage->paragraph = paragraph;
601      return reinterpret_cast<OH_Drawing_Typography*>(paragraph);
602  }
603  
OH_ArkUI_StyledString_AddPlaceholder(ArkUI_StyledString * storage,OH_Drawing_PlaceholderSpan * placeholder)604  void OH_ArkUI_StyledString_AddPlaceholder(ArkUI_StyledString* storage, OH_Drawing_PlaceholderSpan* placeholder)
605  {
606      OH_Drawing_TypographyHandlerAddPlaceholder(
607          reinterpret_cast<OH_Drawing_TypographyCreate*>(storage->builder), placeholder);
608      ArkUI_SpanItem* spanItem = new ArkUI_SpanItem;
609      if (placeholder) {
610          spanItem->placeholder = new OH_Drawing_PlaceholderSpan {
611              placeholder->width, placeholder->height,
612              placeholder->alignment, placeholder->baseline,
613              placeholder->baselineOffset };
614      } else {
615          spanItem->placeholder = new OH_Drawing_PlaceholderSpan();
616      }
617      storage->items.emplace_back(spanItem);
618  }
619  
OH_ArkUI_AccessibilityState_Create()620  ArkUI_AccessibilityState* OH_ArkUI_AccessibilityState_Create()
621  {
622      ArkUI_AccessibilityState* state = new ArkUI_AccessibilityState;
623      state->isDisabled = ArkUI_OptionalInt { 0, 0 };
624      state->isSelected = ArkUI_OptionalInt { 0, 0 };
625      state->checkedType = ArkUI_OptionalInt { 0, 0 };
626      return state;
627  }
628  
OH_ArkUI_AccessibilityState_Dispose(ArkUI_AccessibilityState * state)629  void OH_ArkUI_AccessibilityState_Dispose(ArkUI_AccessibilityState* state)
630  {
631      delete state;
632  }
633  
OH_ArkUI_AccessibilityState_SetDisabled(ArkUI_AccessibilityState * state,int32_t isDisabled)634  void OH_ArkUI_AccessibilityState_SetDisabled(ArkUI_AccessibilityState* state, int32_t isDisabled)
635  {
636      CHECK_NULL_VOID(state);
637      state->isDisabled.isSet = 1;
638      state->isDisabled.value = isDisabled;
639  }
640  
OH_ArkUI_AccessibilityState_IsDisabled(ArkUI_AccessibilityState * state)641  int32_t OH_ArkUI_AccessibilityState_IsDisabled(ArkUI_AccessibilityState* state)
642  {
643      CHECK_NULL_RETURN(state, 0);
644      return state->isDisabled.value;
645  }
646  
OH_ArkUI_AccessibilityState_SetSelected(ArkUI_AccessibilityState * state,int32_t isSelected)647  void OH_ArkUI_AccessibilityState_SetSelected(ArkUI_AccessibilityState* state, int32_t isSelected)
648  {
649      CHECK_NULL_VOID(state);
650      state->isSelected.isSet = 1;
651      state->isSelected.value = isSelected;
652  }
653  
OH_ArkUI_AccessibilityState_IsSelected(ArkUI_AccessibilityState * state)654  int32_t OH_ArkUI_AccessibilityState_IsSelected(ArkUI_AccessibilityState* state)
655  {
656      CHECK_NULL_RETURN(state, 0);
657      return state->isSelected.value;
658  }
659  
OH_ArkUI_AccessibilityState_SetCheckedState(ArkUI_AccessibilityState * state,int32_t checkedState)660  void OH_ArkUI_AccessibilityState_SetCheckedState(ArkUI_AccessibilityState* state, int32_t checkedState)
661  {
662      CHECK_NULL_VOID(state);
663      state->checkedType.isSet = 1;
664      state->checkedType.value = checkedState;
665  }
666  
OH_ArkUI_AccessibilityState_GetCheckedState(ArkUI_AccessibilityState * state)667  int32_t OH_ArkUI_AccessibilityState_GetCheckedState(ArkUI_AccessibilityState* state)
668  {
669      CHECK_NULL_RETURN(state, 0);
670      return state->checkedType.value;
671  }
672  
OH_ArkUI_AccessibilityValue_Create()673  ArkUI_AccessibilityValue* OH_ArkUI_AccessibilityValue_Create()
674  {
675      ArkUI_AccessibilityValue* value = new ArkUI_AccessibilityValue;
676      value->min = ArkUI_OptionalInt { 0, -1 };
677      value->max = ArkUI_OptionalInt { 0, -1 };
678      value->current = ArkUI_OptionalInt { 0, -1 };
679      value->text = ArkUI_OptionalCharPtr { 0, "" };
680      return value;
681  }
682  
OH_ArkUI_AccessibilityValue_Dispose(ArkUI_AccessibilityValue * value)683  void OH_ArkUI_AccessibilityValue_Dispose(ArkUI_AccessibilityValue* value)
684  {
685      delete value;
686  }
687  
OH_ArkUI_AccessibilityValue_SetMin(ArkUI_AccessibilityValue * value,int32_t min)688  void OH_ArkUI_AccessibilityValue_SetMin(ArkUI_AccessibilityValue* value, int32_t min)
689  {
690      CHECK_NULL_VOID(value);
691      value->min.isSet = 1;
692      value->min.value = min;
693  }
694  
OH_ArkUI_AccessibilityValue_GetMin(ArkUI_AccessibilityValue * value)695  int32_t OH_ArkUI_AccessibilityValue_GetMin(ArkUI_AccessibilityValue* value)
696  {
697      CHECK_NULL_RETURN(value, -1);
698      return value->min.value;
699  }
700  
OH_ArkUI_AccessibilityValue_SetMax(ArkUI_AccessibilityValue * value,int32_t max)701  void OH_ArkUI_AccessibilityValue_SetMax(ArkUI_AccessibilityValue* value, int32_t max)
702  {
703      CHECK_NULL_VOID(value);
704      value->max.isSet = 1;
705      value->max.value = max;
706  }
707  
OH_ArkUI_AccessibilityValue_GetMax(ArkUI_AccessibilityValue * value)708  int32_t OH_ArkUI_AccessibilityValue_GetMax(ArkUI_AccessibilityValue* value)
709  {
710      CHECK_NULL_RETURN(value, -1);
711      return value->max.value;
712  }
713  
OH_ArkUI_AccessibilityValue_SetCurrent(ArkUI_AccessibilityValue * value,int32_t current)714  void OH_ArkUI_AccessibilityValue_SetCurrent(ArkUI_AccessibilityValue* value, int32_t current)
715  {
716      CHECK_NULL_VOID(value);
717      value->current.isSet = 1;
718      value->current.value = current;
719  }
720  
OH_ArkUI_AccessibilityValue_GetCurrent(ArkUI_AccessibilityValue * value)721  int32_t OH_ArkUI_AccessibilityValue_GetCurrent(ArkUI_AccessibilityValue* value)
722  {
723      CHECK_NULL_RETURN(value, -1);
724      return value->current.value;
725  }
726  
OH_ArkUI_AccessibilityValue_SetText(ArkUI_AccessibilityValue * value,const char * text)727  void OH_ArkUI_AccessibilityValue_SetText(ArkUI_AccessibilityValue* value, const char* text)
728  {
729      CHECK_NULL_VOID(value);
730      value->text.isSet = 1;
731      value->text.value = text;
732  }
733  
OH_ArkUI_AccessibilityValue_GetText(ArkUI_AccessibilityValue * value)734  const char* OH_ArkUI_AccessibilityValue_GetText(ArkUI_AccessibilityValue* value)
735  {
736      CHECK_NULL_RETURN(value, "");
737      return value->text.value;
738  }
739  #ifdef __cplusplus
740  };
741  #endif
742