1  /*
2   * Copyright (c) 2023 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_EXTENED_H
17  #define FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_NODE_NODE_EXTENED_H
18  
19  #include "drawable_descriptor.h"
20  #include "native_node.h"
21  #include "native_type.h"
22  #include "resource.h"
23  
24  #include "core/components_v2/inspector/inspector_constants.h"
25  #include "frameworks/core/interfaces/arkoala/arkoala_api.h"
26  #include "interfaces/inner_api/drawable_descriptor/drawable_descriptor.h"
27  #include "pixelmap_native_impl.h"
28  
29  #ifdef __cplusplus
30  extern "C" {
31  #endif
32  struct ArkUI_LayoutConstraint {
33      /** 元素最小宽度。 */
34      int32_t minWidth;
35      /** 元素最小高度。 */
36      int32_t minHeight;
37      /** 元素最大宽度。 */
38      int32_t maxWidth;
39      /** 元素最小宽度。 */
40      int32_t maxHeight;
41      /** 元素宽度百分比基准。 */
42      int32_t percentReferWidth;
43      /** 元素高度百分比基准。*/
44      int32_t percentReferHeight;
45  };
46  
47  /**
48   * @brief 定义自定义组件回调事件的参数类型。
49   *
50   * @since 12
51   */
52  struct ArkUI_CustomNodeAsyncEvent {
53      /** 数据数组对象。*/
54      ArkUI_NumberValue data[MAX_COMPONENT_EVENT_ARG_NUM];
55  };
56  
57  /**
58   * 定义组件绘制上下文类型结构。
59   *
60   * @since 12
61   */
62  struct ArkUI_DrawContext {
63      /** 画布宽度。*/
64      int32_t width;
65      /** 画布高度。*/
66      int32_t height;
67      /** 绘制的画布。*/
68      void* canvas;
69  };
70  
71  /**
72   * @brief 定义自定义组件事件的通用结构类型。
73   *
74   * @since 12
75   */
76  struct ArkUI_NodeCustomEvent {
77      int32_t targetId;
78      ArkUI_NodeHandle node;
79      ArkUICustomNodeEvent* event;
80      ArkUI_LayoutConstraint constraint;
81      void* userData;
82  };
83  
84  struct ArkUI_OptionalFloat {
85      int32_t isSet;
86      float value;
87  };
88  
89  struct ArkUI_OptionalInt {
90      int32_t isSet;
91      int32_t value;
92  };
93  
94  struct ArkUI_OptionalUint {
95      int32_t isSet;
96      uint32_t value;
97  };
98  
99  struct ArkUI_OptionalCharPtr {
100      int32_t isSet;
101      const char* value;
102  };
103  
104  struct ArkUI_SwiperIndicator {
105      ArkUI_SwiperIndicatorType type;
106      ArkUI_OptionalFloat dimLeft;
107      ArkUI_OptionalFloat dimTop;
108      ArkUI_OptionalFloat dimRight;
109      ArkUI_OptionalFloat dimBottom;
110      ArkUI_OptionalFloat itemWidth;
111      ArkUI_OptionalFloat itemHeight;
112      ArkUI_OptionalFloat selectedItemWidth;
113      ArkUI_OptionalFloat selectedItemHeight;
114      ArkUI_OptionalInt maskValue;
115      ArkUI_OptionalUint colorValue;
116      ArkUI_OptionalUint selectedColorValue;
117      ArkUI_OptionalInt maxDisplayCount;
118  };
119  
120  struct ArkUI_DrawableDescriptor {
121      OH_PixelmapNativeHandle pixelMap;
122      OH_PixelmapNativeHandle* pixelMapArray;
123      ArkUI_Int32 size;
124      std::shared_ptr<OHOS::Ace::Napi::DrawableDescriptor> drawableDescriptor;
125      std::shared_ptr<OHOS::Ace::Napi::AnimatedDrawableDescriptor> animatedDrawableDescriptor;
126      std::shared_ptr<OHOS::Ace::Napi::LayeredDrawableDescriptor> layeredDrawableDescriptor;
127      std::shared_ptr<ArkUI_Resource> resource;
128  };
129  
130  struct ArkUI_AccessibilityState {
131      ArkUI_OptionalInt isDisabled;
132      ArkUI_OptionalInt isSelected;
133      ArkUI_OptionalInt checkedType;
134  };
135  
136  struct ArkUI_AccessibilityValue {
137      ArkUI_OptionalInt min;
138      ArkUI_OptionalInt max;
139      ArkUI_OptionalInt current;
140      ArkUI_OptionalCharPtr text;
141  };
142  
143  struct ArkUI_CustomSpanMeasureInfo {
144      float fontSize;
145  };
146  
147  struct ArkUI_CustomSpanMetrics {
148      float width;
149      float height;
150  };
151  
152  struct ArkUI_CustomSpanDrawInfo {
153      float optionsX;
154      float optionsLineTop;
155      float optionsLineBottom;
156      float optionsBaseLine;
157  };
158  
159  struct ArkUI_CustomProperty {
160      char* value;
161  };
162  
163  struct ArkUI_ActiveChildrenInfo {
164      ArkUI_NodeHandle* nodeList;
165      int32_t nodeCount;
166  };
167  
168  #ifdef __cplusplus
169  };
170  #endif
171  
172  namespace OHOS::Ace::NodeModel {
173  
174  void NodeAddExtraData(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType, int32_t targetId, void* userData);
175  int32_t RegisterNodeCustomEvent(
176      ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType, int32_t targetId, void* userData);
177  void NodeRemoveExtraData(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType);
178  void UnregisterNodeCustomEvent(ArkUI_NodeHandle node, ArkUI_NodeCustomEventType eventType);
179  void RegisterNodeCustomReceiver(void (*eventReceiver)(ArkUI_NodeCustomEvent* event));
180  void UnregisterNodeCustomEventReceiver();
181  void HandleInnerCustomEvent(ArkUICustomNodeEvent* origin);
182  void HandleCustomEvent(ArkUI_NodeCustomEvent* event);
183  int32_t AddNodeCustomEventReceiver(ArkUI_NodeHandle nodePtr, void (*eventReceiver)(ArkUI_NodeCustomEvent* event));
184  int32_t RemoveNodeCustomEventReceiver(ArkUI_NodeHandle nodePtr,
185      void (*eventReceiver)(ArkUI_NodeCustomEvent* event));
186  int32_t SetMeasuredSize(ArkUI_NodeHandle node, int32_t width, int32_t height);
187  int32_t SetLayoutPosition(ArkUI_NodeHandle node, int32_t positionX, int32_t positionY);
188  int32_t GetLayoutConstraint(ArkUI_NodeHandle node, ArkUI_LayoutConstraint* layoutConstraint);
189  ArkUI_IntSize GetMeasuredSize(ArkUI_NodeHandle node);
190  ArkUI_IntOffset GetLayoutPosition(ArkUI_NodeHandle node);
191  int32_t MeasureNode(ArkUI_NodeHandle node, ArkUI_LayoutConstraint* constraint);
192  int32_t LayoutNode(ArkUI_NodeHandle node, int32_t positionX, int32_t positionY);
193  
194  uint32_t GetTotalChildCount(ArkUI_NodeHandle node);
195  ArkUI_NodeHandle GetChildAt(ArkUI_NodeHandle node, int32_t position);
196  ArkUI_NodeHandle GetFirstChild(ArkUI_NodeHandle node);
197  ArkUI_NodeHandle GetLastChild(ArkUI_NodeHandle node);
198  ArkUI_NodeHandle GetPreviousSibling(ArkUI_NodeHandle node);
199  ArkUI_NodeHandle GetNextSibling(ArkUI_NodeHandle node);
200  ArkUI_NodeHandle GetParent(ArkUI_NodeHandle node);
201  int32_t RemoveAllChildren(ArkUI_NodeHandle parentNode);
202  } // namespace OHOS::Ace::NodeModel
203  #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_INTERFACES_NATIVE_NODE_NODE_EXTENED_H