• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-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 #ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_NODE_NODE_MODEL_H
17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_NODE_NODE_MODEL_H
18 
19 #include <cstdint>
20 #include <set>
21 #include <vector>
22 #include <string>
23 
24 #include "native_compatible.h"
25 #include "native_node.h"
26 #include "native_type.h"
27 
28 #include "frameworks/core/common/ace_application_info.h"
29 #include "frameworks/core/interfaces/arkoala/arkoala_api.h"
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 struct ArkUI_Node {
36     int32_t type;
37     ArkUINodeHandle uiNodeHandle = nullptr;
38     bool cNode = false;
39     bool threadSafeNode = false;
40     bool buildNode = false;
41     void* extraData = nullptr;
42     void* extraCustomData = nullptr;
43     ArkUI_LengthMetricUnit lengthMetricUnit = ARKUI_LENGTH_METRIC_UNIT_DEFAULT;
44     void* eventListeners = nullptr;
45     void* barrierOption = nullptr;
46     void* guidelineOption = nullptr;
47     void* alignRuleOption = nullptr;
48     void* userData = nullptr;
49     void* swiperIndicator = nullptr;
50     void* drawableDescriptor = nullptr;
51     void* imageFrameInfos = nullptr;
52     int32_t linearGradientDirection = -1;
53     void* customEventListeners = nullptr;
54     void* altDrawableDescriptor = nullptr;
55     ArkUI_AttributeItem* areaChangeRadio = nullptr;
56     void* transitionOption = nullptr;
57     void* progressLinearStyle = nullptr;
58     void* visibleAreaEventOptions = nullptr;
59     bool isBindNative = false;
60 };
61 
62 struct ArkUI_Context {
63     int32_t id;
64 };
65 
66 struct ArkUI_GuidelineStyle {
67     std::string id;
68     ArkUI_Axis direction;
69     float start;
70     bool hasStart;
71     float end;
72     bool hasEnd;
73 };
74 
75 struct ArkUI_GuidelineOption {
76     std::vector<ArkUI_GuidelineStyle> styles;
77 };
78 
79 struct ArkUI_BarrierStyle {
80     std::string id;
81     ArkUI_BarrierDirection direction;
82     std::vector<std::string> referencedId;
83 };
84 
85 struct ArkUI_BarrierOption {
86     std::vector<ArkUI_BarrierStyle> styles;
87 };
88 
89 struct ArkUI_HorizontalAlignRule {
90     bool hasValue;
91     std::string anchor;
92     ArkUI_HorizontalAlignment align;
93 };
94 
95 struct ArkUI_VerticalAlignRule {
96     bool hasValue;
97     std::string anchor;
98     ArkUI_VerticalAlignment align;
99 };
100 
101 struct ArkUI_AlignmentRuleOption {
102     ArkUI_HorizontalAlignRule left;
103     ArkUI_HorizontalAlignRule middle;
104     ArkUI_HorizontalAlignRule right;
105     ArkUI_VerticalAlignRule top;
106     ArkUI_VerticalAlignRule center;
107     ArkUI_VerticalAlignRule bottom;
108     float biasHorizontal;
109     float biasVertical;
110 };
111 
112 constexpr int BASIC_COMPONENT_NUM = 22;
113 
114 #ifdef __cplusplus
115 };
116 #endif
117 
118 struct ArkUIFullNodeAPI;
119 
120 namespace OHOS::Ace::NodeModel {
121 
UsePXUnit(ArkUI_NodeHandle nodePtr)122 inline bool UsePXUnit(ArkUI_NodeHandle nodePtr)
123 {
124     return nodePtr && (nodePtr->lengthMetricUnit == ARKUI_LENGTH_METRIC_UNIT_PX);
125 }
126 
127 bool InitialFullImpl();
128 ArkUIFullNodeAPI* GetFullImpl();
129 ArkUI_NodeHandle CreateNode(ArkUI_NodeType type);
130 void DisposeNativeSource(ArkUI_NodeHandle nativePtr);
131 void DisposeNode(ArkUI_NodeHandle nativePtr);
132 bool IsValidArkUINode(ArkUI_NodeHandle nodePtr);
133 
134 int32_t AddChild(ArkUI_NodeHandle parentNode, ArkUI_NodeHandle childNode);
135 int32_t RemoveChild(ArkUI_NodeHandle parentNode, ArkUI_NodeHandle childNode);
136 int32_t InsertChildAfter(ArkUI_NodeHandle parentNode, ArkUI_NodeHandle childNode, ArkUI_NodeHandle siblingNode);
137 int32_t InsertChildBefore(ArkUI_NodeHandle parentNode, ArkUI_NodeHandle childNode, ArkUI_NodeHandle siblingNode);
138 int32_t InsertChildAt(ArkUI_NodeHandle parentNode, ArkUI_NodeHandle childNode, int32_t position);
139 
140 // deprecated.
141 [[deprecated]] void SetAttribute(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute, const char* value);
142 
143 int32_t SetAttribute(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute, const ArkUI_AttributeItem* value);
144 const ArkUI_AttributeItem* GetAttribute(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute);
145 int32_t ResetAttribute(ArkUI_NodeHandle node, ArkUI_NodeAttributeType attribute);
146 
147 int32_t RegisterNodeEvent(ArkUI_NodeHandle nodePtr, ArkUI_NodeEventType eventType, int32_t targetId);
148 int32_t RegisterNodeEvent(ArkUI_NodeHandle nodePtr, ArkUI_NodeEventType eventType, int32_t targetId, void* userData);
149 void UnregisterNodeEvent(ArkUI_NodeHandle nodePtr, ArkUI_NodeEventType eventType);
150 bool GreatOrEqualTargetAPIVersion(OHOS::Ace::PlatformVersion platfromVersion);
151 void RegisterOnEvent(void (*eventReceiver)(ArkUI_NodeEvent* event));
152 void RegisterOnEvent(void (*eventReceiver)(ArkUI_CompatibleNodeEvent* event));
153 void UnregisterOnEvent();
154 void HandleTouchEvent(ArkUI_UIInputEvent& uiEvent, ArkUINodeEvent* innerEvent);
155 void HandleMouseEvent(ArkUI_UIInputEvent& uiEvent, ArkUINodeEvent* innerEvent);
156 void HandleKeyEvent(ArkUI_UIInputEvent& uiEvent, ArkUINodeEvent* innerEvent);
157 void HandleFocusAxisEvent(ArkUI_UIInputEvent& uiEvent, ArkUINodeEvent* innerEvent);
158 void HandleHoverEvent(ArkUI_UIInputEvent& uiEvent, ArkUINodeEvent* innerEvent);
159 void HandleClickEvent(ArkUI_UIInputEvent& uiEvent, ArkUINodeEvent* innerEvent);
160 int32_t CheckEvent(ArkUI_NodeEvent* event);
161 void HandleInnerNodeEvent(ArkUINodeEvent* innerEvent);
162 int32_t GetNativeNodeEventType(ArkUINodeEvent* innerEvent);
163 void HandleNodeEvent(ArkUI_NodeEvent* event);
164 void TriggerNodeEvent(ArkUI_NodeEvent* event, std::set<void (*)(ArkUI_NodeEvent*)>* eventListenersSet);
165 void ApplyModifierFinish(ArkUI_NodeHandle nodePtr);
166 void MarkDirty(ArkUI_NodeHandle nodePtr, ArkUI_NodeDirtyFlag dirtyFlag);
167 
168 int32_t SetUserData(ArkUI_NodeHandle node, void* userData);
169 void* GetUserData(ArkUI_NodeHandle node);
170 int32_t SetLengthMetricUnit(ArkUI_NodeHandle nodePtr, ArkUI_LengthMetricUnit unit);
171 int32_t AddNodeEventReceiver(ArkUI_NodeHandle node, void (*eventReceiver)(ArkUI_NodeEvent* event));
172 int32_t RemoveNodeEventReceiver(ArkUI_NodeHandle node, void (*eventReceiver)(ArkUI_NodeEvent* event));
173 void* GetParseJsMedia();
174 bool CheckIsCNode(ArkUI_NodeHandle node);
175 bool CheckIsCNodeOrCrossLanguage(ArkUI_NodeHandle node);
176 ArkUI_NodeHandle GetArkUINode(ArkUINodeHandle node);
177 int32_t GetNodeTypeByTag(ArkUI_NodeHandle node);
178 std::string ConvertNodeTypeToTag(ArkUI_NodeType nodeType);
179 void RegisterBindNativeNode(ArkUI_NodeHandle node);
180 }; // namespace OHOS::Ace::NodeModel
181 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_NODE_NODE_MODEL_H
182