• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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