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 #include "core/interfaces/native/node/node_xcomponent_modifier.h"
16
17 #include "core/components_ng/base/frame_node.h"
18 #include "core/components_ng/pattern/xcomponent/xcomponent_model_ng.h"
19 #include "core/components_ng/pattern/xcomponent/xcomponent_pattern.h"
20 #include "core/pipeline/base/element_register.h"
21 #include "core/components_ng/base/view_abstract.h"
22 #include "frameworks/bridge/common/utils/utils.h"
23 #include "core/interfaces/native/node/node_api.h"
24
25 namespace OHOS::Ace::NG {
26 namespace {
27 const uint32_t ERROR_UINT_CODE = -1;
28 std::string g_strValue;
29
SetXComponentEnableAnalyzer(ArkUINodeHandle node,ArkUI_Bool enable)30 void SetXComponentEnableAnalyzer(ArkUINodeHandle node, ArkUI_Bool enable)
31 {
32 auto* frameNode = reinterpret_cast<FrameNode*>(node);
33 CHECK_NULL_VOID(frameNode);
34 XComponentModelNG::EnableAnalyzer(frameNode, enable);
35 }
36
ResetXComponentEnableAnalyzer(ArkUINodeHandle node)37 void ResetXComponentEnableAnalyzer(ArkUINodeHandle node)
38 {
39 auto* frameNode = reinterpret_cast<FrameNode*>(node);
40 CHECK_NULL_VOID(frameNode);
41 XComponentModelNG::EnableAnalyzer(frameNode, false);
42 }
43
SetXComponentBackgroundColor(ArkUINodeHandle node,uint32_t color)44 void SetXComponentBackgroundColor(ArkUINodeHandle node, uint32_t color)
45 {
46 auto *frameNode = reinterpret_cast<FrameNode *>(node);
47 CHECK_NULL_VOID(frameNode);
48 auto type = XComponentModelNG::GetType(frameNode);
49 if (!XComponentModel::IsBackGroundColorAvailable(type)) {
50 return;
51 }
52 ViewAbstract::SetBackgroundColor(frameNode, Color(color));
53 }
54
ResetXComponentBackgroundColor(ArkUINodeHandle node)55 void ResetXComponentBackgroundColor(ArkUINodeHandle node)
56 {
57 auto *frameNode = reinterpret_cast<FrameNode *>(node);
58 CHECK_NULL_VOID(frameNode);
59 auto type = XComponentModelNG::GetType(frameNode);
60 if (!XComponentModel::IsBackGroundColorAvailable(type)) {
61 return;
62 }
63 ViewAbstract::SetBackgroundColor(frameNode, (type == XComponentType::SURFACE) ? Color::BLACK : Color::TRANSPARENT);
64 }
65
SetXComponentOpacity(ArkUINodeHandle node,ArkUI_Float32 opacity)66 void SetXComponentOpacity(ArkUINodeHandle node, ArkUI_Float32 opacity)
67 {
68 auto *frameNode = reinterpret_cast<FrameNode *>(node);
69 CHECK_NULL_VOID(frameNode);
70 if (!XComponentModelNG::IsTexture(frameNode)) {
71 return;
72 }
73 if ((LessNotEqual(opacity, 0.0)) || opacity > 1) {
74 opacity = 1.0f;
75 }
76 ViewAbstract::SetOpacity(frameNode, opacity);
77 }
78
ResetXComponentOpacity(ArkUINodeHandle node)79 void ResetXComponentOpacity(ArkUINodeHandle node)
80 {
81 auto* frameNode = reinterpret_cast<FrameNode*>(node);
82 CHECK_NULL_VOID(frameNode);
83 if (!XComponentModelNG::IsTexture(frameNode)) {
84 return;
85 }
86 ViewAbstract::SetOpacity(frameNode, 1.0f);
87 }
88
SetXComponentId(ArkUINodeHandle node,const char * id)89 void SetXComponentId(ArkUINodeHandle node, const char* id)
90 {
91 auto* frameNode = reinterpret_cast<FrameNode*>(node);
92 CHECK_NULL_VOID(frameNode);
93 XComponentModelNG::SetXComponentId(frameNode, id);
94 }
95
SetXComponentType(ArkUINodeHandle node,uint32_t type)96 void SetXComponentType(ArkUINodeHandle node, uint32_t type)
97 {
98 auto* frameNode = reinterpret_cast<FrameNode*>(node);
99 CHECK_NULL_VOID(frameNode);
100 XComponentModelNG::SetXComponentType(frameNode, static_cast<XComponentType>(type));
101 }
102
SetXComponentSurfaceSize(ArkUINodeHandle node,uint32_t width,uint32_t height)103 void SetXComponentSurfaceSize(ArkUINodeHandle node, uint32_t width, uint32_t height)
104 {
105 auto* frameNode = reinterpret_cast<FrameNode*>(node);
106 CHECK_NULL_VOID(frameNode);
107 XComponentModelNG::SetXComponentSurfaceSize(frameNode, width, height);
108 }
109
GetXComponentId(ArkUINodeHandle node)110 ArkUI_CharPtr GetXComponentId(ArkUINodeHandle node)
111 {
112 auto *frameNode = reinterpret_cast<FrameNode *>(node);
113 CHECK_NULL_RETURN(frameNode, "");
114 g_strValue = XComponentModelNG::GetXComponentId(frameNode);
115 return g_strValue.c_str();
116 }
117
GetXComponentType(ArkUINodeHandle node)118 ArkUI_Int32 GetXComponentType(ArkUINodeHandle node)
119 {
120 auto *frameNode = reinterpret_cast<FrameNode *>(node);
121 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
122 return static_cast<ArkUI_Int32>(XComponentModelNG::GetXComponentType(frameNode));
123 }
124
GetXComponentSurfaceWidth(ArkUINodeHandle node)125 ArkUI_Uint32 GetXComponentSurfaceWidth(ArkUINodeHandle node)
126 {
127 auto *frameNode = reinterpret_cast<FrameNode *>(node);
128 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
129 return XComponentModelNG::GetXComponentSurfaceWidth(frameNode);
130 }
131
GetXComponentSurfaceHeight(ArkUINodeHandle node)132 ArkUI_Uint32 GetXComponentSurfaceHeight(ArkUINodeHandle node)
133 {
134 auto *frameNode = reinterpret_cast<FrameNode *>(node);
135 CHECK_NULL_RETURN(frameNode, ERROR_UINT_CODE);
136 return XComponentModelNG::GetXComponentSurfaceHeight(frameNode);
137 }
138
GetNativeXComponent(ArkUINodeHandle node)139 void* GetNativeXComponent(ArkUINodeHandle node)
140 {
141 auto *frameNode = reinterpret_cast<FrameNode *>(node);
142 CHECK_NULL_RETURN(frameNode, nullptr);
143 auto xcPattern = frameNode->GetPattern<XComponentPattern>();
144 CHECK_NULL_RETURN(xcPattern, nullptr);
145 auto pair = xcPattern->GetNativeXComponent();
146 return reinterpret_cast<void*>(pair.second.lock().get());
147 }
148
SetXComponentLibraryname(ArkUINodeHandle node,const char * libraryname)149 void SetXComponentLibraryname(ArkUINodeHandle node, const char* libraryname)
150 {
151 auto* frameNode = reinterpret_cast<FrameNode*>(node);
152 CHECK_NULL_VOID(frameNode);
153 XComponentModelNG::SetXComponentLibraryname(frameNode, libraryname);
154 }
155
SetImageAIOptions(ArkUINodeHandle node,void * options)156 void SetImageAIOptions(ArkUINodeHandle node, void* options)
157 {
158 auto* frameNode = reinterpret_cast<FrameNode*>(node);
159 CHECK_NULL_VOID(frameNode);
160 XComponentModelNG::SetImageAIOptions(frameNode, options);
161 }
162
InitXComponent(ArkUINodeHandle node)163 void InitXComponent(ArkUINodeHandle node)
164 {
165 auto* frameNode = reinterpret_cast<FrameNode*>(node);
166 CHECK_NULL_VOID(frameNode);
167 XComponentModelNG::InitXComponent(frameNode);
168 }
169
SetXComponentEnableSecure(ArkUINodeHandle node,ArkUI_Bool enable)170 void SetXComponentEnableSecure(ArkUINodeHandle node, ArkUI_Bool enable)
171 {
172 auto* frameNode = reinterpret_cast<FrameNode*>(node);
173 CHECK_NULL_VOID(frameNode);
174 XComponentModelNG::EnableSecure(frameNode, enable);
175 }
176
ResetXComponentEnableSecure(ArkUINodeHandle node)177 void ResetXComponentEnableSecure(ArkUINodeHandle node)
178 {
179 auto* frameNode = reinterpret_cast<FrameNode*>(node);
180 CHECK_NULL_VOID(frameNode);
181 XComponentModelNG::EnableSecure(frameNode, false);
182 }
183 } // namespace
184
185 namespace NodeModifier {
GetXComponentModifier()186 const ArkUIXComponentModifier* GetXComponentModifier()
187 {
188 static const ArkUIXComponentModifier modifier = {
189 nullptr, // loadXComponent
190 nullptr, // setXComponentOptions
191 nullptr, // getXComponentSurfaceId
192 nullptr, // getXComponentController
193 SetXComponentEnableAnalyzer,
194 ResetXComponentEnableAnalyzer,
195 SetXComponentBackgroundColor,
196 ResetXComponentBackgroundColor,
197 SetXComponentOpacity,
198 ResetXComponentOpacity,
199 SetXComponentId,
200 SetXComponentType,
201 SetXComponentSurfaceSize,
202 GetXComponentId,
203 GetXComponentType,
204 GetXComponentSurfaceWidth,
205 GetXComponentSurfaceHeight,
206 GetNativeXComponent,
207 SetXComponentLibraryname,
208 SetImageAIOptions,
209 InitXComponent,
210 SetXComponentEnableSecure,
211 ResetXComponentEnableSecure,
212 };
213
214 return &modifier;
215 }
216
GetCJUIXComponentModifier()217 const CJUIXComponentModifier* GetCJUIXComponentModifier()
218 {
219 static const CJUIXComponentModifier modifier = {
220 nullptr, // loadXComponent
221 nullptr, // setXComponentOptions
222 nullptr, // getXComponentSurfaceId
223 nullptr, // getXComponentController
224 SetXComponentBackgroundColor,
225 ResetXComponentBackgroundColor,
226 SetXComponentOpacity,
227 ResetXComponentOpacity,
228 SetXComponentId,
229 SetXComponentType,
230 SetXComponentSurfaceSize,
231 GetXComponentId,
232 GetXComponentType,
233 GetXComponentSurfaceWidth,
234 GetXComponentSurfaceHeight,
235 GetNativeXComponent,
236 SetXComponentLibraryname,
237 SetImageAIOptions,
238 };
239
240 return &modifier;
241 }
242 } // namespace NodeModifier
243 } // namespace OHOS::Ace::NG