1 /*
2  * Copyright (c) 2021-2022 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 RENDER_SERVICE_CLIENT_CORE_RENDER_RS_NODE_VISITOR_H
17 #define RENDER_SERVICE_CLIENT_CORE_RENDER_RS_NODE_VISITOR_H
18 
19 #include <memory>
20 
21 namespace OHOS {
22 namespace Rosen {
23 class RSRenderNode;
24 class RSCanvasRenderNode;
25 class RSDisplayRenderNode;
26 class RSProxyRenderNode;
27 class RSRootRenderNode;
28 class RSSurfaceRenderNode;
29 class RSEffectRenderNode;
30 
31 class RSNodeVisitor : public std::enable_shared_from_this<RSNodeVisitor> {
32 public:
33     RSNodeVisitor() = default;
34     RSNodeVisitor(const RSNodeVisitor&) = delete;
35     RSNodeVisitor(const RSNodeVisitor&&) = delete;
36     RSNodeVisitor& operator=(const RSNodeVisitor&) = delete;
37     RSNodeVisitor& operator=(const RSNodeVisitor&&) = delete;
38     virtual ~RSNodeVisitor() = default;
39 
QuickPrepareDisplayRenderNode(RSDisplayRenderNode & node)40     virtual void QuickPrepareDisplayRenderNode(RSDisplayRenderNode& node) {};
QuickPrepareSurfaceRenderNode(RSSurfaceRenderNode & node)41     virtual void QuickPrepareSurfaceRenderNode(RSSurfaceRenderNode& node) {};
QuickPrepareCanvasRenderNode(RSCanvasRenderNode & node)42     virtual void QuickPrepareCanvasRenderNode(RSCanvasRenderNode& node) {};
QuickPrepareEffectRenderNode(RSEffectRenderNode & node)43     virtual void QuickPrepareEffectRenderNode(RSEffectRenderNode& node) {};
QuickPrepareChildren(RSRenderNode & node)44     virtual void QuickPrepareChildren(RSRenderNode& node) {};
45 
46     virtual void PrepareChildren(RSRenderNode& node) = 0;
47     virtual void PrepareCanvasRenderNode(RSCanvasRenderNode& node) = 0;
48     virtual void PrepareDisplayRenderNode(RSDisplayRenderNode& node) = 0;
49     virtual void PrepareProxyRenderNode(RSProxyRenderNode& node) = 0;
50     virtual void PrepareRootRenderNode(RSRootRenderNode& node) = 0;
51     virtual void PrepareSurfaceRenderNode(RSSurfaceRenderNode& node) = 0;
52     virtual void PrepareEffectRenderNode(RSEffectRenderNode& node) = 0;
53 
54     virtual void ProcessChildren(RSRenderNode& node) = 0;
55     virtual void ProcessCanvasRenderNode(RSCanvasRenderNode& node) = 0;
56     virtual void ProcessDisplayRenderNode(RSDisplayRenderNode& node) = 0;
57     virtual void ProcessProxyRenderNode(RSProxyRenderNode& node) = 0;
58     virtual void ProcessRootRenderNode(RSRootRenderNode& node) = 0;
59     virtual void ProcessSurfaceRenderNode(RSSurfaceRenderNode& node) = 0;
60     virtual void ProcessEffectRenderNode(RSEffectRenderNode& node) = 0;
61 
AddSurfaceChangedCallBack(uint64_t id,const std::function<void (float,float,float,float)> & callback)62     virtual void AddSurfaceChangedCallBack(uint64_t id,
63         const std::function<void(float, float, float, float)>& callback) {};
RemoveSurfaceChangedCallBack(uint64_t id)64     virtual void RemoveSurfaceChangedCallBack(uint64_t id) {};
65 };
66 
67 } // namespace Rosen
68 } // namespace OHOS
69 
70 #endif // RENDER_SERVICE_CLIENT_CORE_RENDER_RS_NODE_VISITOR_H
71