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 "native_type.h"
17 #include "node/node_model.h"
18 
19 #include "base/utils/utils.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
OH_ArkUI_GuidelineOption_Create(int32_t size)25 ArkUI_GuidelineOption* OH_ArkUI_GuidelineOption_Create(int32_t size)
26 {
27     ArkUI_GuidelineOption* guidelinePtr = new ArkUI_GuidelineOption;
28     guidelinePtr->styles.resize(size);
29     return guidelinePtr;
30 }
31 
OH_ArkUI_GuidelineOption_Dispose(ArkUI_GuidelineOption * guideline)32 void OH_ArkUI_GuidelineOption_Dispose(ArkUI_GuidelineOption* guideline)
33 {
34     if (guideline == nullptr) {
35         return;
36     }
37     delete guideline;
38 }
39 
OH_ArkUI_GuidelineOption_SetId(ArkUI_GuidelineOption * guideline,const char * value,int32_t index)40 void OH_ArkUI_GuidelineOption_SetId(ArkUI_GuidelineOption* guideline, const char* value, int32_t index)
41 {
42     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
43         return;
44     }
45     guideline->styles[index].id = value;
46 }
47 
OH_ArkUI_GuidelineOption_SetDirection(ArkUI_GuidelineOption * guideline,ArkUI_Axis value,int32_t index)48 void OH_ArkUI_GuidelineOption_SetDirection(ArkUI_GuidelineOption* guideline, ArkUI_Axis value, int32_t index)
49 {
50     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
51         return;
52     }
53     guideline->styles[index].direction = value;
54 }
55 
OH_ArkUI_GuidelineOption_SetPositionStart(ArkUI_GuidelineOption * guideline,float value,int32_t index)56 void OH_ArkUI_GuidelineOption_SetPositionStart(ArkUI_GuidelineOption* guideline, float value, int32_t index)
57 {
58     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
59         return;
60     }
61     guideline->styles[index].hasStart = true;
62     guideline->styles[index].start = value;
63 }
64 
OH_ArkUI_GuidelineOption_SetPositionEnd(ArkUI_GuidelineOption * guideline,float value,int32_t index)65 void OH_ArkUI_GuidelineOption_SetPositionEnd(ArkUI_GuidelineOption* guideline, float value, int32_t index)
66 {
67     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
68         return;
69     }
70     guideline->styles[index].hasEnd = true;
71     guideline->styles[index].end = value;
72 }
73 
OH_ArkUI_GuidelineOption_GetId(ArkUI_GuidelineOption * guideline,int32_t index)74 const char* OH_ArkUI_GuidelineOption_GetId(ArkUI_GuidelineOption* guideline, int32_t index)
75 {
76     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
77         return nullptr;
78     }
79     return guideline->styles[index].id.c_str();
80 }
81 
OH_ArkUI_GuidelineOption_GetDirection(ArkUI_GuidelineOption * guideline,int32_t index)82 ArkUI_Axis OH_ArkUI_GuidelineOption_GetDirection(ArkUI_GuidelineOption* guideline, int32_t index)
83 {
84     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
85         return static_cast<ArkUI_Axis>(-1);
86     }
87     return guideline->styles[index].direction;
88 }
89 
OH_ArkUI_GuidelineOption_GetPositionStart(ArkUI_GuidelineOption * guideline,int32_t index)90 float OH_ArkUI_GuidelineOption_GetPositionStart(ArkUI_GuidelineOption* guideline, int32_t index)
91 {
92     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
93         return 0.0f;
94     }
95     return guideline->styles[index].start;
96 }
97 
OH_ArkUI_GuidelineOption_GetPositionEnd(ArkUI_GuidelineOption * guideline,int32_t index)98 float OH_ArkUI_GuidelineOption_GetPositionEnd(ArkUI_GuidelineOption* guideline, int32_t index)
99 {
100     if (guideline == nullptr || index < 0 || index >= static_cast<int32_t>(guideline->styles.size())) {
101         return 0.0f;
102     }
103     return guideline->styles[index].end;
104 }
105 
OH_ArkUI_BarrierOption_Create(int32_t size)106 ArkUI_BarrierOption* OH_ArkUI_BarrierOption_Create(int32_t size)
107 {
108     ArkUI_BarrierOption* barrierStylePtr = new ArkUI_BarrierOption;
109     if (size < 0) {
110         return barrierStylePtr;
111     }
112     barrierStylePtr->styles.resize(static_cast<uint32_t>(size));
113     return barrierStylePtr;
114 }
115 
OH_ArkUI_BarrierOption_Dispose(ArkUI_BarrierOption * barrierStyle)116 void OH_ArkUI_BarrierOption_Dispose(ArkUI_BarrierOption* barrierStyle)
117 {
118     if (barrierStyle == nullptr) {
119         return;
120     }
121     delete barrierStyle;
122 }
123 
OH_ArkUI_BarrierOption_SetId(ArkUI_BarrierOption * barrierStyle,const char * value,int32_t index)124 void OH_ArkUI_BarrierOption_SetId(ArkUI_BarrierOption* barrierStyle, const char* value, int32_t index)
125 {
126     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size())) {
127         return;
128     }
129     barrierStyle->styles[index].id = value;
130 }
131 
OH_ArkUI_BarrierOption_SetDirection(ArkUI_BarrierOption * barrierStyle,ArkUI_BarrierDirection value,int32_t index)132 void OH_ArkUI_BarrierOption_SetDirection(ArkUI_BarrierOption* barrierStyle, ArkUI_BarrierDirection value, int32_t index)
133 {
134     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size())) {
135         return;
136     }
137     barrierStyle->styles[index].direction = value;
138 }
139 
OH_ArkUI_BarrierOption_SetReferencedId(ArkUI_BarrierOption * barrierStyle,const char * value,int32_t index)140 void OH_ArkUI_BarrierOption_SetReferencedId(ArkUI_BarrierOption* barrierStyle, const char* value, int32_t index)
141 {
142     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size())) {
143         return;
144     }
145     barrierStyle->styles[index].referencedId.push_back(value);
146 }
147 
OH_ArkUI_BarrierOption_GetId(ArkUI_BarrierOption * barrierStyle,int32_t index)148 const char* OH_ArkUI_BarrierOption_GetId(ArkUI_BarrierOption* barrierStyle, int32_t index)
149 {
150     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size())) {
151         return nullptr;
152     }
153     return barrierStyle->styles[index].id.c_str();
154 }
155 
OH_ArkUI_BarrierOption_GetDirection(ArkUI_BarrierOption * barrierStyle,int32_t index)156 ArkUI_BarrierDirection OH_ArkUI_BarrierOption_GetDirection(ArkUI_BarrierOption* barrierStyle, int32_t index)
157 {
158     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size())) {
159         return ARKUI_BARRIER_DIRECTION_TOP; // or any default value
160     }
161     return barrierStyle->styles[index].direction;
162 }
163 
OH_ArkUI_BarrierOption_GetReferencedId(ArkUI_BarrierOption * barrierStyle,int32_t index,int32_t referencedIndex)164 const char* OH_ArkUI_BarrierOption_GetReferencedId(
165     ArkUI_BarrierOption* barrierStyle, int32_t index, int32_t referencedIndex)
166 {
167     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size()) ||
168         referencedIndex < 0 ||
169         referencedIndex >= static_cast<int32_t>(barrierStyle->styles[index].referencedId.size())) {
170         return nullptr;
171     }
172     return barrierStyle->styles[index].referencedId[referencedIndex].c_str();
173 }
174 
OH_ArkUI_BarrierOption_GetReferencedIdSize(ArkUI_BarrierOption * barrierStyle,int32_t index)175 int32_t OH_ArkUI_BarrierOption_GetReferencedIdSize(ArkUI_BarrierOption* barrierStyle, int32_t index)
176 {
177     if (barrierStyle == nullptr || index < 0 || index >= static_cast<int32_t>(barrierStyle->styles.size())) {
178         return 0;
179     }
180     return static_cast<int32_t>(barrierStyle->styles[index].referencedId.size());
181 }
182 
OH_ArkUI_AlignmentRuleOption_Create()183 ArkUI_AlignmentRuleOption* OH_ArkUI_AlignmentRuleOption_Create()
184 {
185     ArkUI_AlignmentRuleOption* option = new ArkUI_AlignmentRuleOption { .biasHorizontal = 0.5, .biasVertical = 0.5 };
186     return option;
187 }
188 
OH_ArkUI_AlignmentRuleOption_Dispose(ArkUI_AlignmentRuleOption * option)189 void OH_ArkUI_AlignmentRuleOption_Dispose(ArkUI_AlignmentRuleOption* option)
190 {
191     if (option == nullptr) {
192         return;
193     }
194     delete option;
195 }
OH_ArkUI_AlignmentRuleOption_SetStart(ArkUI_AlignmentRuleOption * option,const char * id,ArkUI_HorizontalAlignment alignment)196 void OH_ArkUI_AlignmentRuleOption_SetStart(
197     ArkUI_AlignmentRuleOption* option, const char* id, ArkUI_HorizontalAlignment alignment)
198 {
199     if (option == nullptr) {
200         return;
201     }
202     if (!id) {
203         option->left.hasValue = false;
204         return;
205     }
206     option->left.hasValue = true;
207     option->left.anchor = id;
208     option->left.align = alignment;
209 }
210 
OH_ArkUI_AlignmentRuleOption_SetEnd(ArkUI_AlignmentRuleOption * option,const char * id,ArkUI_HorizontalAlignment alignment)211 void OH_ArkUI_AlignmentRuleOption_SetEnd(
212     ArkUI_AlignmentRuleOption* option, const char* id, ArkUI_HorizontalAlignment alignment)
213 {
214     if (option == nullptr) {
215         return;
216     }
217     if (!id) {
218         option->right.hasValue = false;
219         return;
220     }
221     option->right.hasValue = true;
222     option->right.anchor = id;
223     option->right.align = alignment;
224 }
225 
OH_ArkUI_AlignmentRuleOption_SetCenterHorizontal(ArkUI_AlignmentRuleOption * option,const char * id,ArkUI_HorizontalAlignment alignment)226 void OH_ArkUI_AlignmentRuleOption_SetCenterHorizontal(
227     ArkUI_AlignmentRuleOption* option, const char* id, ArkUI_HorizontalAlignment alignment)
228 {
229     if (option == nullptr) {
230         return;
231     }
232     if (!id) {
233         option->middle.hasValue = false;
234         return;
235     }
236     option->middle.hasValue = true;
237     option->middle.anchor = id;
238     option->middle.align = alignment;
239 }
240 
OH_ArkUI_AlignmentRuleOption_SetTop(ArkUI_AlignmentRuleOption * option,const char * id,ArkUI_VerticalAlignment alignment)241 void OH_ArkUI_AlignmentRuleOption_SetTop(
242     ArkUI_AlignmentRuleOption* option, const char* id, ArkUI_VerticalAlignment alignment)
243 {
244     if (option == nullptr) {
245         return;
246     }
247     if (!id) {
248         option->top.hasValue = false;
249         return;
250     }
251     option->top.hasValue = true;
252     option->top.anchor = id;
253     option->top.align = alignment;
254 }
255 
OH_ArkUI_AlignmentRuleOption_SetBottom(ArkUI_AlignmentRuleOption * option,const char * id,ArkUI_VerticalAlignment alignment)256 void OH_ArkUI_AlignmentRuleOption_SetBottom(
257     ArkUI_AlignmentRuleOption* option, const char* id, ArkUI_VerticalAlignment alignment)
258 {
259     if (option == nullptr) {
260         return;
261     }
262     if (!id) {
263         option->bottom.hasValue = false;
264         return;
265     }
266     option->bottom.hasValue = true;
267     option->bottom.anchor = id;
268     option->bottom.align = alignment;
269 }
270 
OH_ArkUI_AlignmentRuleOption_SetCenterVertical(ArkUI_AlignmentRuleOption * option,const char * id,ArkUI_VerticalAlignment alignment)271 void OH_ArkUI_AlignmentRuleOption_SetCenterVertical(
272     ArkUI_AlignmentRuleOption* option, const char* id, ArkUI_VerticalAlignment alignment)
273 {
274     if (option == nullptr) {
275         return;
276     }
277     if (!id) {
278         option->center.hasValue = false;
279         return;
280     }
281     option->center.hasValue = true;
282     option->center.anchor = id;
283     option->center.align = alignment;
284 }
285 
OH_ArkUI_AlignmentRuleOption_SetBiasHorizontal(ArkUI_AlignmentRuleOption * option,float horizontal)286 void OH_ArkUI_AlignmentRuleOption_SetBiasHorizontal(ArkUI_AlignmentRuleOption* option, float horizontal)
287 {
288     if (option == nullptr) {
289         return;
290     }
291     option->biasHorizontal = horizontal;
292 }
293 
OH_ArkUI_AlignmentRuleOption_SetBiasVertical(ArkUI_AlignmentRuleOption * option,float vertical)294 void OH_ArkUI_AlignmentRuleOption_SetBiasVertical(ArkUI_AlignmentRuleOption* option, float vertical)
295 {
296     if (option == nullptr) {
297         return;
298     }
299     option->biasVertical = vertical;
300 }
301 
OH_ArkUI_AlignmentRuleOption_GetStartId(ArkUI_AlignmentRuleOption * option)302 const char* OH_ArkUI_AlignmentRuleOption_GetStartId(ArkUI_AlignmentRuleOption* option)
303 {
304     if (option == nullptr || !option->left.hasValue) {
305         return nullptr;
306     }
307     return option->left.anchor.c_str();
308 }
309 
OH_ArkUI_AlignmentRuleOption_GetStartAlignment(ArkUI_AlignmentRuleOption * option)310 ArkUI_HorizontalAlignment OH_ArkUI_AlignmentRuleOption_GetStartAlignment(ArkUI_AlignmentRuleOption* option)
311 {
312     if (option == nullptr || !option->left.hasValue) {
313         return static_cast<ArkUI_HorizontalAlignment>(-1);
314     }
315     return option->left.align;
316 }
317 
OH_ArkUI_AlignmentRuleOption_GetEndId(ArkUI_AlignmentRuleOption * option)318 const char* OH_ArkUI_AlignmentRuleOption_GetEndId(ArkUI_AlignmentRuleOption* option)
319 {
320     if (option == nullptr || !option->right.hasValue) {
321         return nullptr;
322     }
323     return option->right.anchor.c_str();
324 }
325 
OH_ArkUI_AlignmentRuleOption_GetEndAlignment(ArkUI_AlignmentRuleOption * option)326 ArkUI_HorizontalAlignment OH_ArkUI_AlignmentRuleOption_GetEndAlignment(ArkUI_AlignmentRuleOption* option)
327 {
328     if (option == nullptr || !option->right.hasValue) {
329         return static_cast<ArkUI_HorizontalAlignment>(-1);
330     }
331     return option->right.align;
332 }
333 
OH_ArkUI_AlignmentRuleOption_GetCenterIdHorizontal(ArkUI_AlignmentRuleOption * option)334 const char* OH_ArkUI_AlignmentRuleOption_GetCenterIdHorizontal(ArkUI_AlignmentRuleOption* option)
335 {
336     if (option == nullptr || !option->middle.hasValue) {
337         return nullptr;
338     }
339     return option->middle.anchor.c_str();
340 }
341 
OH_ArkUI_AlignmentRuleOption_GetCenterAlignmentHorizontal(ArkUI_AlignmentRuleOption * option)342 ArkUI_HorizontalAlignment OH_ArkUI_AlignmentRuleOption_GetCenterAlignmentHorizontal(ArkUI_AlignmentRuleOption* option)
343 {
344     if (option == nullptr || !option->middle.hasValue) {
345         return static_cast<ArkUI_HorizontalAlignment>(-1);
346     }
347     return option->middle.align;
348 }
349 
OH_ArkUI_AlignmentRuleOption_GetTopId(ArkUI_AlignmentRuleOption * option)350 const char* OH_ArkUI_AlignmentRuleOption_GetTopId(ArkUI_AlignmentRuleOption* option)
351 {
352     if (option == nullptr || !option->top.hasValue) {
353         return nullptr;
354     }
355     return option->top.anchor.c_str();
356 }
357 
OH_ArkUI_AlignmentRuleOption_GetTopAlignment(ArkUI_AlignmentRuleOption * option)358 ArkUI_VerticalAlignment OH_ArkUI_AlignmentRuleOption_GetTopAlignment(ArkUI_AlignmentRuleOption* option)
359 {
360     if (option == nullptr || !option->top.hasValue) {
361         return static_cast<ArkUI_VerticalAlignment>(-1);
362     }
363     return option->top.align;
364 }
OH_ArkUI_AlignmentRuleOption_GetBottomId(ArkUI_AlignmentRuleOption * option)365 const char* OH_ArkUI_AlignmentRuleOption_GetBottomId(ArkUI_AlignmentRuleOption* option)
366 {
367     if (option == nullptr || !option->bottom.hasValue) {
368         return nullptr;
369     }
370     return option->bottom.anchor.c_str();
371 }
372 
OH_ArkUI_AlignmentRuleOption_GetBottomAlignment(ArkUI_AlignmentRuleOption * option)373 ArkUI_VerticalAlignment OH_ArkUI_AlignmentRuleOption_GetBottomAlignment(ArkUI_AlignmentRuleOption* option)
374 {
375     if (option == nullptr || !option->bottom.hasValue) {
376         return static_cast<ArkUI_VerticalAlignment>(-1);
377     }
378     return option->bottom.align;
379 }
380 
OH_ArkUI_AlignmentRuleOption_GetCenterIdVertical(ArkUI_AlignmentRuleOption * option)381 const char* OH_ArkUI_AlignmentRuleOption_GetCenterIdVertical(ArkUI_AlignmentRuleOption* option)
382 {
383     if (option == nullptr || !option->center.hasValue) {
384         return nullptr;
385     }
386     return option->center.anchor.c_str();
387 }
388 
OH_ArkUI_AlignmentRuleOption_GetCenterAlignmentVertical(ArkUI_AlignmentRuleOption * option)389 ArkUI_VerticalAlignment OH_ArkUI_AlignmentRuleOption_GetCenterAlignmentVertical(ArkUI_AlignmentRuleOption* option)
390 {
391     if (option == nullptr || !option->center.hasValue) {
392         return static_cast<ArkUI_VerticalAlignment>(-1);
393     }
394     return option->center.align;
395 }
396 
OH_ArkUI_AlignmentRuleOption_GetBiasHorizontal(ArkUI_AlignmentRuleOption * option)397 float OH_ArkUI_AlignmentRuleOption_GetBiasHorizontal(ArkUI_AlignmentRuleOption* option)
398 {
399     if (option == nullptr) {
400         return -1.0f;
401     }
402     return option->biasHorizontal;
403 }
404 
OH_ArkUI_AlignmentRuleOption_GetBiasVertical(ArkUI_AlignmentRuleOption * option)405 float OH_ArkUI_AlignmentRuleOption_GetBiasVertical(ArkUI_AlignmentRuleOption* option)
406 {
407     if (option == nullptr) {
408         return -1.0f;
409     }
410     return option->biasVertical;
411 }
412 #ifdef __cplusplus
413 };
414 #endif