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
23 #include "base/utils/utils.h"
24 #include "base/error/error_code.h"
25 #include "core/interfaces/arkoala/arkoala_api.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
OH_ArkUI_NodeUtils_GetLayoutSize(ArkUI_NodeHandle node,ArkUI_IntSize * size)31 int32_t OH_ArkUI_NodeUtils_GetLayoutSize(ArkUI_NodeHandle node, ArkUI_IntSize* size)
32 {
33 if (node == nullptr) {
34 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
35 }
36 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
37 ArkUI_Int32* tempSize = new ArkUI_Int32[2];
38 impl->getNodeModifiers()->getFrameNodeModifier()->getLayoutSize(node->uiNodeHandle, tempSize);
39 size->width = tempSize[0];
40 size->height = tempSize[1];
41 return OHOS::Ace::ERROR_CODE_NO_ERROR;
42 }
43
OH_ArkUI_NodeUtils_GetLayoutPosition(ArkUI_NodeHandle node,ArkUI_IntOffset * localOffset)44 int32_t OH_ArkUI_NodeUtils_GetLayoutPosition(ArkUI_NodeHandle node, ArkUI_IntOffset* localOffset)
45 {
46 if (node == nullptr) {
47 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
48 }
49 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
50 auto value = impl->getNodeModifiers()->getFrameNodeModifier()->getLayoutPositionWithoutMargin(node->uiNodeHandle);
51 localOffset->x = static_cast<int32_t>(value[0]);
52 localOffset->y = static_cast<int32_t>(value[1]);
53
54 return OHOS::Ace::ERROR_CODE_NO_ERROR;
55 }
56
OH_ArkUI_NodeUtils_GetLayoutPositionInWindow(ArkUI_NodeHandle node,ArkUI_IntOffset * globalOffset)57 int32_t OH_ArkUI_NodeUtils_GetLayoutPositionInWindow(ArkUI_NodeHandle node, ArkUI_IntOffset* globalOffset)
58 {
59 if (node == nullptr) {
60 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
61 }
62 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
63 ArkUI_Float32 tempOffset[2];
64 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToWindow(node->uiNodeHandle, &tempOffset, false);
65 globalOffset->x = tempOffset[0];
66 globalOffset->y = tempOffset[1];
67
68 return OHOS::Ace::ERROR_CODE_NO_ERROR;
69 }
70
OH_ArkUI_NodeUtils_GetLayoutPositionInScreen(ArkUI_NodeHandle node,ArkUI_IntOffset * screenOffset)71 int32_t OH_ArkUI_NodeUtils_GetLayoutPositionInScreen(ArkUI_NodeHandle node, ArkUI_IntOffset* screenOffset)
72 {
73 if (node == nullptr) {
74 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
75 }
76 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
77 ArkUI_Float32 tempOffset[2];
78 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToScreen(node->uiNodeHandle, &tempOffset, false);
79 screenOffset->x = tempOffset[0];
80 screenOffset->y = tempOffset[1];
81
82 return OHOS::Ace::ERROR_CODE_NO_ERROR;
83 }
84
OH_ArkUI_NodeUtils_GetPositionWithTranslateInWindow(ArkUI_NodeHandle node,ArkUI_IntOffset * translateOffset)85 int32_t OH_ArkUI_NodeUtils_GetPositionWithTranslateInWindow(ArkUI_NodeHandle node, ArkUI_IntOffset* translateOffset)
86 {
87 if (node == nullptr) {
88 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
89 }
90 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
91 ArkUI_Float32 tempOffset[2];
92 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToWindowWithTransform(
93 node->uiNodeHandle, &tempOffset, false);
94 translateOffset->x = tempOffset[0];
95 translateOffset->y = tempOffset[1];
96
97 return OHOS::Ace::ERROR_CODE_NO_ERROR;
98 }
99
OH_ArkUI_NodeUtils_GetPositionWithTranslateInScreen(ArkUI_NodeHandle node,ArkUI_IntOffset * translateOffset)100 int32_t OH_ArkUI_NodeUtils_GetPositionWithTranslateInScreen(ArkUI_NodeHandle node, ArkUI_IntOffset* translateOffset)
101 {
102 if (node == nullptr) {
103 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
104 }
105 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
106 ArkUI_Float32 tempOffset[2];
107 impl->getNodeModifiers()->getFrameNodeModifier()->getPositionToScreenWithTransform(
108 node->uiNodeHandle, &tempOffset, false);
109 translateOffset->x = tempOffset[0];
110 translateOffset->y = tempOffset[1];
111
112 return OHOS::Ace::ERROR_CODE_NO_ERROR;
113 }
114
OH_ArkUI_RegisterSystemColorModeChangeEvent(ArkUI_NodeHandle node,void * userData,void (* onColorModeChange)(ArkUI_SystemColorMode colorMode,void * userData))115 int32_t OH_ArkUI_RegisterSystemColorModeChangeEvent(
116 ArkUI_NodeHandle node, void* userData, void (*onColorModeChange)(ArkUI_SystemColorMode colorMode, void* userData))
117 {
118 if (node == nullptr) {
119 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
120 }
121 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
122 impl->getNodeModifiers()->getFrameNodeModifier()->setSystemColorModeChangeEvent(
123 node->uiNodeHandle, userData, reinterpret_cast<void*>(onColorModeChange));
124
125 return OHOS::Ace::ERROR_CODE_NO_ERROR;
126 }
127
OH_ArkUI_UnregisterSystemColorModeChangeEvent(ArkUI_NodeHandle node)128 void OH_ArkUI_UnregisterSystemColorModeChangeEvent(ArkUI_NodeHandle node)
129 {
130 if (node == nullptr) {
131 return;
132 }
133 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
134 impl->getNodeModifiers()->getFrameNodeModifier()->resetSystemColorModeChangeEvent(node->uiNodeHandle);
135 }
136
OH_ArkUI_RegisterSystemFontStyleChangeEvent(ArkUI_NodeHandle node,void * userData,void (* onFontStyleChange)(ArkUI_SystemFontStyleEvent * event,void * userData))137 int32_t OH_ArkUI_RegisterSystemFontStyleChangeEvent(
138 ArkUI_NodeHandle node, void* userData, void (*onFontStyleChange)(ArkUI_SystemFontStyleEvent* event, void* userData))
139 {
140 if (node == nullptr) {
141 return OHOS::Ace::ERROR_CODE_PARAM_INVALID;
142 }
143 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
144 impl->getNodeModifiers()->getFrameNodeModifier()->setSystemFontStyleChangeEvent(
145 node->uiNodeHandle, userData, reinterpret_cast<void*>(onFontStyleChange));
146
147 return OHOS::Ace::ERROR_CODE_NO_ERROR;
148 }
149
OH_ArkUI_UnregisterSystemFontStyleChangeEvent(ArkUI_NodeHandle node)150 void OH_ArkUI_UnregisterSystemFontStyleChangeEvent(ArkUI_NodeHandle node)
151 {
152 if (node == nullptr) {
153 return;
154 }
155 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
156 impl->getNodeModifiers()->getFrameNodeModifier()->resetSystemFontStyleChangeEvent(node->uiNodeHandle);
157 }
158
OH_ArkUI_SystemFontStyleEvent_GetFontSizeScale(const ArkUI_SystemFontStyleEvent * event)159 float OH_ArkUI_SystemFontStyleEvent_GetFontSizeScale(const ArkUI_SystemFontStyleEvent* event)
160 {
161 return event->fontSize;
162 }
163
OH_ArkUI_SystemFontStyleEvent_GetFontWeightScale(const ArkUI_SystemFontStyleEvent * event)164 float OH_ArkUI_SystemFontStyleEvent_GetFontWeightScale(const ArkUI_SystemFontStyleEvent* event)
165 {
166 return event->fontWeight;
167 }
168
OH_ArkUI_NodeUtils_AddCustomProperty(ArkUI_NodeHandle node,const char * name,const char * value)169 void OH_ArkUI_NodeUtils_AddCustomProperty(ArkUI_NodeHandle node, const char* name, const char* value)
170 {
171 if (node == nullptr) {
172 return;
173 }
174 if (name == nullptr || value == nullptr) {
175 LOGF("AddCustomProperty input params name or value is nullptr");
176 abort();
177 }
178 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
179 impl->getNodeModifiers()->getFrameNodeModifier()->addCustomProperty(node->uiNodeHandle, name, value);
180 }
181
OH_ArkUI_NodeUtils_RemoveCustomProperty(ArkUI_NodeHandle node,const char * name)182 void OH_ArkUI_NodeUtils_RemoveCustomProperty(ArkUI_NodeHandle node, const char* name)
183 {
184 if (node == nullptr) {
185 return;
186 }
187 if (name == nullptr) {
188 LOGF("RemoveCustomProperty input params name is nullptr");
189 abort();
190 }
191 auto* impl = OHOS::Ace::NodeModel::GetFullImpl();
192 impl->getNodeModifiers()->getFrameNodeModifier()->removeCustomProperty(node->uiNodeHandle, name);
193 }
194
195 #ifdef __cplusplus
196 };
197 #endif
198