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