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