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 <cstdint>
17 #include <cstdlib>
18 #include <vector>
19
20 #include "native_type.h"
21 #include "node_model.h"
22 #include "node_extened.h"
23
24 #include "base/utils/utils.h"
25 #include "base/error/error_code.h"
26 #include "core/interfaces/arkoala/arkoala_api.h"
27 #include "core/components_v2/inspector/inspector_constants.h"
28
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32
OH_ArkUI_NodeUtils_GetLayoutSize(ArkUI_NodeHandle node,ArkUI_IntSize * size)33 int32_t OH_ArkUI_NodeUtils_GetLayoutSize(ArkUI_NodeHandle node, ArkUI_IntSize* size)
34 {
35 if (node == nullptr) {
36 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
37 }
38 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
39 ArkUI_Int32* tempSize = new ArkUI_Int32[2];
40 impl->getNodeModifiers()->getFrameNodeModifier()->getLayoutSize(node->uiNodeHandle, tempSize);
41 size->width = tempSize[0];
42 size->height = tempSize[1];
43 return OHOS::Ace::ERROR_CODE_NO_ERROR;
44 }
45
OH_ArkUI_NodeUtils_GetLayoutPosition(ArkUI_NodeHandle node,ArkUI_IntOffset * localOffset)46 int32_t OH_ArkUI_NodeUtils_GetLayoutPosition(ArkUI_NodeHandle node, ArkUI_IntOffset* localOffset)
47 {
48 if (node == nullptr) {
49 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
50 }
51 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
52 auto value = impl->getNodeModifiers()->getFrameNodeModifier()->getLayoutPositionWithoutMargin(node->uiNodeHandle);
53 localOffset->x = static_cast<int32_t>(value[0]);
54 localOffset->y = static_cast<int32_t>(value[1]);
55
56 return OHOS::Ace::ERROR_CODE_NO_ERROR;
57 }
58
OH_ArkUI_NodeUtils_GetLayoutPositionInWindow(ArkUI_NodeHandle node,ArkUI_IntOffset * globalOffset)59 int32_t OH_ArkUI_NodeUtils_GetLayoutPositionInWindow(ArkUI_NodeHandle node, ArkUI_IntOffset* globalOffset)
60 {
61 if (node == nullptr) {
62 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
63 }
64 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
65 ArkUI_Float32 tempOffset[2];
66 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToWindow(node->uiNodeHandle, &tempOffset, false);
67 globalOffset->x = tempOffset[0];
68 globalOffset->y = tempOffset[1];
69
70 return OHOS::Ace::ERROR_CODE_NO_ERROR;
71 }
72
OH_ArkUI_NodeUtils_GetLayoutPositionInScreen(ArkUI_NodeHandle node,ArkUI_IntOffset * screenOffset)73 int32_t OH_ArkUI_NodeUtils_GetLayoutPositionInScreen(ArkUI_NodeHandle node, ArkUI_IntOffset* screenOffset)
74 {
75 if (node == nullptr) {
76 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
77 }
78 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
79 ArkUI_Float32 tempOffset[2];
80 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToScreen(node->uiNodeHandle, &tempOffset, false);
81 screenOffset->x = tempOffset[0];
82 screenOffset->y = tempOffset[1];
83
84 return OHOS::Ace::ERROR_CODE_NO_ERROR;
85 }
86
OH_ArkUI_NodeUtils_GetPositionWithTranslateInWindow(ArkUI_NodeHandle node,ArkUI_IntOffset * translateOffset)87 int32_t OH_ArkUI_NodeUtils_GetPositionWithTranslateInWindow(ArkUI_NodeHandle node, ArkUI_IntOffset* translateOffset)
88 {
89 if (node == nullptr) {
90 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
91 }
92 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
93 ArkUI_Float32 tempOffset[2];
94 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToWindowWithTransform(
95 node->uiNodeHandle, &tempOffset, false);
96 translateOffset->x = tempOffset[0];
97 translateOffset->y = tempOffset[1];
98
99 return OHOS::Ace::ERROR_CODE_NO_ERROR;
100 }
101
OH_ArkUI_NodeUtils_GetPositionWithTranslateInScreen(ArkUI_NodeHandle node,ArkUI_IntOffset * translateOffset)102 int32_t OH_ArkUI_NodeUtils_GetPositionWithTranslateInScreen(ArkUI_NodeHandle node, ArkUI_IntOffset* translateOffset)
103 {
104 if (node == nullptr) {
105 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
106 }
107 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
108 ArkUI_Float32 tempOffset[2];
109 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToScreenWithTransform(
110 node->uiNodeHandle, &tempOffset, false);
111 translateOffset->x = tempOffset[0];
112 translateOffset->y = tempOffset[1];
113
114 return OHOS::Ace::ERROR_CODE_NO_ERROR;
115 }
116
OH_ArkUI_RegisterSystemColorModeChangeEvent(ArkUI_NodeHandle node,void * userData,void (* onColorModeChange)(ArkUI_SystemColorMode colorMode,void * userData))117 int32_t OH_ArkUI_RegisterSystemColorModeChangeEvent(
118 ArkUI_NodeHandle node, void* userData, void (*onColorModeChange)(ArkUI_SystemColorMode colorMode, void* userData))
119 {
120 if (node == nullptr) {
121 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
122 }
123 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
124 impl->getNodeModifiers()->getFrameNodeModifier()->setSystemColorModeChangeEvent(
125 node->uiNodeHandle, userData, reinterpret_cast<void*>(onColorModeChange));
126
127 return OHOS::Ace::ERROR_CODE_NO_ERROR;
128 }
129
OH_ArkUI_UnregisterSystemColorModeChangeEvent(ArkUI_NodeHandle node)130 void OH_ArkUI_UnregisterSystemColorModeChangeEvent(ArkUI_NodeHandle node)
131 {
132 if (node == nullptr) {
133 return;
134 }
135 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
136 impl->getNodeModifiers()->getFrameNodeModifier()->resetSystemColorModeChangeEvent(node->uiNodeHandle);
137 }
138
OH_ArkUI_RegisterDrawCallbackOnNodeHandle(ArkUI_NodeHandle node,void * userData,void (* onDrawCompleted)(void * userData))139 int32_t OH_ArkUI_RegisterDrawCallbackOnNodeHandle(
140 ArkUI_NodeHandle node, void* userData, void (*onDrawCompleted)(void* userData))
141 {
142 if (node == nullptr) {
143 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
144 }
145 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
146 impl->getNodeModifiers()->getFrameNodeModifier()->setDrawCompleteEvent(
147 node->uiNodeHandle, userData, onDrawCompleted);
148
149 return OHOS::Ace::ERROR_CODE_NO_ERROR;
150 }
151
152
OH_ArkUI_UnregisterDrawCallbackOnNodeHandle(ArkUI_NodeHandle node)153 int32_t OH_ArkUI_UnregisterDrawCallbackOnNodeHandle(ArkUI_NodeHandle node)
154 {
155 if (node == nullptr) {
156 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
157 }
158 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
159 impl->getNodeModifiers()->getFrameNodeModifier()->resetDrawCompleteEvent(node->uiNodeHandle);
160 return OHOS::Ace::ERROR_CODE_NO_ERROR;
161 }
162
OH_ArkUI_RegisterLayoutCallbackOnNodeHandle(ArkUI_NodeHandle node,void * userData,void (* onLayoutCompleted)(void * userData))163 int32_t OH_ArkUI_RegisterLayoutCallbackOnNodeHandle(
164 ArkUI_NodeHandle node, void* userData, void (*onLayoutCompleted)(void* userData))
165 {
166 if (node == nullptr) {
167 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
168 }
169 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
170 impl->getNodeModifiers()->getFrameNodeModifier()->setLayoutEvent(
171 node->uiNodeHandle, userData, onLayoutCompleted);
172
173 return OHOS::Ace::ERROR_CODE_NO_ERROR;
174 }
175
176
OH_ArkUI_UnregisterLayoutCallbackOnNodeHandle(ArkUI_NodeHandle node)177 int32_t OH_ArkUI_UnregisterLayoutCallbackOnNodeHandle(ArkUI_NodeHandle node)
178 {
179 if (node == nullptr) {
180 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
181 }
182 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
183 impl->getNodeModifiers()->getFrameNodeModifier()->resetLayoutEvent(node->uiNodeHandle);
184 return OHOS::Ace::ERROR_CODE_NO_ERROR;
185 }
186
OH_ArkUI_RegisterSystemFontStyleChangeEvent(ArkUI_NodeHandle node,void * userData,void (* onFontStyleChange)(ArkUI_SystemFontStyleEvent * event,void * userData))187 int32_t OH_ArkUI_RegisterSystemFontStyleChangeEvent(
188 ArkUI_NodeHandle node, void* userData, void (*onFontStyleChange)(ArkUI_SystemFontStyleEvent* event, void* userData))
189 {
190 if (node == nullptr) {
191 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
192 }
193 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
194 impl->getNodeModifiers()->getFrameNodeModifier()->setSystemFontStyleChangeEvent(
195 node->uiNodeHandle, userData, reinterpret_cast<void*>(onFontStyleChange));
196
197 return OHOS::Ace::ERROR_CODE_NO_ERROR;
198 }
199
OH_ArkUI_UnregisterSystemFontStyleChangeEvent(ArkUI_NodeHandle node)200 void OH_ArkUI_UnregisterSystemFontStyleChangeEvent(ArkUI_NodeHandle node)
201 {
202 if (node == nullptr) {
203 return;
204 }
205 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
206 impl->getNodeModifiers()->getFrameNodeModifier()->resetSystemFontStyleChangeEvent(node->uiNodeHandle);
207 }
208
OH_ArkUI_SystemFontStyleEvent_GetFontSizeScale(const ArkUI_SystemFontStyleEvent * event)209 float OH_ArkUI_SystemFontStyleEvent_GetFontSizeScale(const ArkUI_SystemFontStyleEvent* event)
210 {
211 return event->fontSize;
212 }
213
OH_ArkUI_SystemFontStyleEvent_GetFontWeightScale(const ArkUI_SystemFontStyleEvent * event)214 float OH_ArkUI_SystemFontStyleEvent_GetFontWeightScale(const ArkUI_SystemFontStyleEvent* event)
215 {
216 return event->fontWeight;
217 }
218
OH_ArkUI_NodeUtils_AddCustomProperty(ArkUI_NodeHandle node,const char * name,const char * value)219 void OH_ArkUI_NodeUtils_AddCustomProperty(ArkUI_NodeHandle node, const char* name, const char* value)
220 {
221 if (node == nullptr) {
222 return;
223 }
224 if (name == nullptr || value == nullptr) {
225 LOGF("AddCustomProperty input params name or value is nullptr");
226 abort();
227 }
228 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
229 impl->getNodeModifiers()->getFrameNodeModifier()->addCustomProperty(node->uiNodeHandle, name, value);
230 }
231
OH_ArkUI_NodeUtils_RemoveCustomProperty(ArkUI_NodeHandle node,const char * name)232 void OH_ArkUI_NodeUtils_RemoveCustomProperty(ArkUI_NodeHandle node, const char* name)
233 {
234 if (node == nullptr) {
235 return;
236 }
237 if (name == nullptr) {
238 LOGF("RemoveCustomProperty input params name is nullptr");
239 abort();
240 }
241 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
242 impl->getNodeModifiers()->getFrameNodeModifier()->removeCustomProperty(node->uiNodeHandle, name);
243 }
244
OH_ArkUI_NodeUtils_GetCustomProperty(ArkUI_NodeHandle node,const char * name,ArkUI_CustomProperty ** handle)245 int32_t OH_ArkUI_NodeUtils_GetCustomProperty(ArkUI_NodeHandle node, const char* name, ArkUI_CustomProperty** handle)
246 {
247 if (node == nullptr || name == nullptr) {
248 return ARKUI_ERROR_CODE_PARAM_INVALID;
249 }
250 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
251 char* value = nullptr;
252 impl->getNodeModifiers()->getFrameNodeModifier()->getCustomProperty(node->uiNodeHandle, name, &value);
253 *handle = new ArkUI_CustomProperty({ .value = value });
254
255 return OHOS::Ace::ERROR_CODE_NO_ERROR;
256 }
257
OH_ArkUI_NodeUtils_GetActiveChildrenInfo(ArkUI_NodeHandle head,ArkUI_ActiveChildrenInfo ** handle)258 int32_t OH_ArkUI_NodeUtils_GetActiveChildrenInfo(ArkUI_NodeHandle head, ArkUI_ActiveChildrenInfo** handle)
259 {
260 CHECK_NULL_RETURN(head, ARKUI_ERROR_CODE_PARAM_INVALID);
261 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
262 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
263 ArkUINodeHandle* innerNodes = nullptr;
264 int32_t totalSize = 0;
265 impl->getNodeModifiers()->getFrameNodeModifier()->getActiveChildrenInfo(
266 head->uiNodeHandle, &innerNodes, &totalSize);
267 *handle = new ArkUI_ActiveChildrenInfo({ .nodeList = nullptr, .nodeCount = totalSize });
268 (*handle)->nodeCount = totalSize;
269 if (totalSize > 0) {
270 (*handle)->nodeList = new ArkUI_NodeHandle[totalSize] {};
271 for (int32_t i = 0; i < totalSize; i++) {
272 ((*handle)->nodeList[i]) = OHOS::Ace::NodeModel::GetArkUINode(innerNodes[i]);
273 }
274 }
275 delete[] innerNodes;
276 return OHOS::Ace::ERROR_CODE_NO_ERROR;
277 }
278
OH_ArkUI_NodeUtils_GetParentInPageTree(ArkUI_NodeHandle node)279 ArkUI_NodeHandle OH_ArkUI_NodeUtils_GetParentInPageTree(ArkUI_NodeHandle node)
280 {
281 if (node == nullptr) {
282 return nullptr;
283 }
284 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
285 auto* attachNode = impl->getNodeModifiers()->getFrameNodeModifier()->getParent(node->uiNodeHandle);
286 return OHOS::Ace::NodeModel::GetArkUINode(attachNode);
287 }
288
OH_ArkUI_NodeUtils_GetCurrentPageRootNode(ArkUI_NodeHandle node)289 ArkUI_NodeHandle OH_ArkUI_NodeUtils_GetCurrentPageRootNode(ArkUI_NodeHandle node)
290 {
291 if (node == nullptr) {
292 return nullptr;
293 }
294 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
295 auto* attachNode = impl->getNodeModifiers()->getFrameNodeModifier()->getCurrentPageRootNode(node->uiNodeHandle);
296 return OHOS::Ace::NodeModel::GetArkUINode(attachNode);
297 }
298
OH_ArkUI_NodeUtils_IsCreatedByNDK(ArkUI_NodeHandle node)299 bool OH_ArkUI_NodeUtils_IsCreatedByNDK(ArkUI_NodeHandle node)
300 {
301 if (node == nullptr) {
302 return 0;
303 }
304 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
305 return impl->getNodeModifiers()->getFrameNodeModifier()->getNodeTag(node->uiNodeHandle);
306 }
307
OH_ArkUI_NodeUtils_GetNodeType(ArkUI_NodeHandle node)308 int32_t OH_ArkUI_NodeUtils_GetNodeType(ArkUI_NodeHandle node)
309 {
310 if (node == nullptr) {
311 return -1;
312 }
313 if (node->type != -1) {
314 return node->type;
315 }
316
317 return OHOS::Ace::NodeModel::GetNodeTypeByTag(node);
318 }
319
OH_ArkUI_NodeUtils_GetWindowInfo(ArkUI_NodeHandle node,ArkUI_HostWindowInfo ** info)320 int32_t OH_ArkUI_NodeUtils_GetWindowInfo(ArkUI_NodeHandle node, ArkUI_HostWindowInfo** info)
321 {
322 CHECK_NULL_RETURN(node, ARKUI_ERROR_CODE_PARAM_INVALID);
323 CHECK_NULL_RETURN(info, ARKUI_ERROR_CODE_PARAM_INVALID);
324 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
325 char* name = nullptr;
326 int32_t error = impl->getNodeModifiers()->getFrameNodeModifier()->getWindowInfoByNode(node->uiNodeHandle, &name);
327 *info = new ArkUI_HostWindowInfo({ .name = name });
328 return error;
329 }
330
OH_ArkUI_HostWindowInfo_GetName(ArkUI_HostWindowInfo * info)331 const char* OH_ArkUI_HostWindowInfo_GetName(ArkUI_HostWindowInfo* info)
332 {
333 if (!info) {
334 LOGF("HostWindowInfo is nullptr");
335 abort();
336 }
337 return info->name;
338 }
339
OH_ArkUI_HostWindowInfo_Destroy(ArkUI_HostWindowInfo * info)340 void OH_ArkUI_HostWindowInfo_Destroy(ArkUI_HostWindowInfo* info)
341 {
342 delete[] info->name;
343 info->name = nullptr;
344 delete info;
345 info = nullptr;
346 }
347
OH_ArkUI_CustomProperty_Destroy(ArkUI_CustomProperty * handle)348 void OH_ArkUI_CustomProperty_Destroy(ArkUI_CustomProperty* handle)
349 {
350 delete[] handle->value;
351 handle->value = nullptr;
352 delete handle;
353 handle = nullptr;
354 }
355
OH_ArkUI_CustomProperty_GetStringValue(ArkUI_CustomProperty * handle)356 const char* OH_ArkUI_CustomProperty_GetStringValue(ArkUI_CustomProperty* handle)
357 {
358 if (!handle) {
359 LOGF("CustomProperty is nullptr");
360 abort();
361 }
362 return handle->value;
363 }
364
OH_ArkUI_ActiveChildrenInfo_Destroy(ArkUI_ActiveChildrenInfo * handle)365 void OH_ArkUI_ActiveChildrenInfo_Destroy(ArkUI_ActiveChildrenInfo* handle)
366 {
367 delete[] handle->nodeList;
368 handle->nodeList = nullptr;
369 delete handle;
370 handle = nullptr;
371 }
372
OH_ArkUI_ActiveChildrenInfo_GetNodeByIndex(ArkUI_ActiveChildrenInfo * handle,int32_t index)373 ArkUI_NodeHandle OH_ArkUI_ActiveChildrenInfo_GetNodeByIndex(ArkUI_ActiveChildrenInfo* handle, int32_t index)
374 {
375 if (!handle) {
376 LOGF("ActiveChildrenInfo is nullptr");
377 abort();
378 }
379 if (index < handle->nodeCount && index >= 0) {
380 return handle->nodeList[index];
381 }
382 return nullptr;
383 }
384
OH_ArkUI_ActiveChildrenInfo_GetCount(ArkUI_ActiveChildrenInfo * handle)385 int32_t OH_ArkUI_ActiveChildrenInfo_GetCount(ArkUI_ActiveChildrenInfo* handle)
386 {
387 if (!handle) {
388 LOGF("ActiveChildrenInfo is nullptr");
389 abort();
390 }
391 return handle->nodeCount;
392 }
393
OH_ArkUI_NodeUtils_GetAttachedNodeHandleById(const char * id,ArkUI_NodeHandle * node)394 int32_t OH_ArkUI_NodeUtils_GetAttachedNodeHandleById(const char* id, ArkUI_NodeHandle* node)
395 {
396 CHECK_NULL_RETURN(id, ARKUI_ERROR_CODE_PARAM_INVALID);
397 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
398 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
399 auto nodePtr = impl->getNodeModifiers()->getFrameNodeModifier()->getAttachedFrameNodeById(id);
400 CHECK_NULL_RETURN(nodePtr, ARKUI_ERROR_CODE_PARAM_INVALID);
401 *node = OHOS::Ace::NodeModel::GetArkUINode(nodePtr);
402 return ARKUI_ERROR_CODE_NO_ERROR;
403 }
404
OH_ArkUI_NodeUtils_SetCrossLanguageOption(ArkUI_NodeHandle node,ArkUI_CrossLanguageOption * option)405 int32_t OH_ArkUI_NodeUtils_SetCrossLanguageOption(ArkUI_NodeHandle node, ArkUI_CrossLanguageOption* option)
406 {
407 if (node == nullptr || option == nullptr || node->cNode == false) {
408 return ARKUI_ERROR_CODE_PARAM_INVALID;
409 }
410 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
411 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
412 auto errorCode = impl->getNodeModifiers()->getFrameNodeModifier()->setCrossLanguageOptions(
413 node->uiNodeHandle, option->attributeSetting);
414 return errorCode;
415 }
416
OH_ArkUI_NodeUtils_GetCrossLanguageOption(ArkUI_NodeHandle node,ArkUI_CrossLanguageOption * option)417 int32_t OH_ArkUI_NodeUtils_GetCrossLanguageOption(ArkUI_NodeHandle node, ArkUI_CrossLanguageOption* option)
418 {
419 if (node == nullptr) {
420 return ARKUI_ERROR_CODE_PARAM_INVALID;
421 }
422 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
423 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
424 bool isCross = impl->getNodeModifiers()->getFrameNodeModifier()->getCrossLanguageOptions(node->uiNodeHandle);
425 option = new ArkUI_CrossLanguageOption {
426 .attributeSetting = isCross
427 };
428 return ARKUI_ERROR_CODE_NO_ERROR;
429 }
430
OH_ArkUI_CrossLanguageOption_Create(void)431 ArkUI_CrossLanguageOption* OH_ArkUI_CrossLanguageOption_Create(void)
432 {
433 ArkUI_CrossLanguageOption* option = new ArkUI_CrossLanguageOption {
434 .attributeSetting = false
435 };
436 return option;
437 }
438
OH_ArkUI_CrossLanguageOption_Destroy(ArkUI_CrossLanguageOption * option)439 void OH_ArkUI_CrossLanguageOption_Destroy(ArkUI_CrossLanguageOption* option)
440 {
441 if (option == nullptr) {
442 return;
443 }
444 delete option;
445 }
446
OH_ArkUI_CrossLanguageOption_SetAttributeSettingStatus(ArkUI_CrossLanguageOption * option,bool enable)447 void OH_ArkUI_CrossLanguageOption_SetAttributeSettingStatus(ArkUI_CrossLanguageOption* option, bool enable)
448 {
449 if (option == nullptr) {
450 return;
451 }
452 option->attributeSetting = enable;
453 }
454
OH_ArkUI_CrossLanguageOption_GetAttributeSettingStatus(ArkUI_CrossLanguageOption * option)455 bool OH_ArkUI_CrossLanguageOption_GetAttributeSettingStatus(ArkUI_CrossLanguageOption* option)
456 {
457 if (option == nullptr) {
458 return false;
459 }
460 return option->attributeSetting;
461 }
462
OH_ArkUI_NodeUtils_GetFirstChildIndexWithoutExpand(ArkUI_NodeHandle node,uint32_t * index)463 int32_t OH_ArkUI_NodeUtils_GetFirstChildIndexWithoutExpand(ArkUI_NodeHandle node, uint32_t* index)
464 {
465 if (node == nullptr) {
466 return ARKUI_ERROR_CODE_PARAM_INVALID;
467 }
468 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
469 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
470 int32_t errorCode = impl->getNodeModifiers()->getFrameNodeModifier()->getFirstChildIndexWithoutExpand(
471 node->uiNodeHandle, index);
472 return errorCode;
473 }
474
OH_ArkUI_NodeUtils_GetLastChildIndexWithoutExpand(ArkUI_NodeHandle node,uint32_t * index)475 int32_t OH_ArkUI_NodeUtils_GetLastChildIndexWithoutExpand(ArkUI_NodeHandle node, uint32_t* index)
476 {
477 if (node == nullptr) {
478 return ARKUI_ERROR_CODE_PARAM_INVALID;
479 }
480 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
481 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
482 int32_t errorCode = impl->getNodeModifiers()->getFrameNodeModifier()->getLastChildIndexWithoutExpand(
483 node->uiNodeHandle, index);
484 return errorCode;
485 }
486
OH_ArkUI_NodeUtils_GetChildWithExpandMode(ArkUI_NodeHandle node,int32_t position,ArkUI_NodeHandle * subnode,uint32_t expandMode)487 int32_t OH_ArkUI_NodeUtils_GetChildWithExpandMode(ArkUI_NodeHandle node, int32_t position,
488 ArkUI_NodeHandle* subnode, uint32_t expandMode)
489 {
490 if (node == nullptr) {
491 return ARKUI_ERROR_CODE_PARAM_INVALID;
492 }
493 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
494 CHECK_NULL_RETURN(impl, ARKUI_ERROR_CODE_PARAM_INVALID);
495 auto nodePtr = impl->getNodeModifiers()->getFrameNodeModifier()->getChild(
496 node->uiNodeHandle, position, expandMode);
497 CHECK_NULL_RETURN(nodePtr, ARKUI_ERROR_CODE_PARAM_INVALID);
498 *subnode = OHOS::Ace::NodeModel::GetArkUINode(nodePtr);
499 return ARKUI_ERROR_CODE_NO_ERROR;
500 }
501
OH_ArkUI_NodeUtils_GetPositionToParent(ArkUI_NodeHandle node,ArkUI_IntOffset * globalOffset)502 int32_t OH_ArkUI_NodeUtils_GetPositionToParent(ArkUI_NodeHandle node, ArkUI_IntOffset* globalOffset)
503 {
504 if (node == nullptr) {
505 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
506 }
507 const auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
508 ArkUI_Float32 tempOffset[2];
509 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToParent(node->uiNodeHandle, &tempOffset, false);
510 globalOffset->x = tempOffset[0];
511 globalOffset->y = tempOffset[1];
512 return OHOS::Ace::ERROR_CODE_NO_ERROR;
513 }
514 #ifdef __cplusplus
515 };
516 #endif
517