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