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 #include "command/rs_base_node_command.h"
17
18 #include "pipeline/rs_base_render_node.h"
19
20 namespace OHOS {
21 namespace Rosen {
22
Destroy(RSContext & context,NodeId nodeId)23 void BaseNodeCommandHelper::Destroy(RSContext& context, NodeId nodeId)
24 {
25 auto& nodeMap = context.GetMutableNodeMap();
26 auto node = nodeMap.GetRenderNode(nodeId);
27 if (node == nullptr) {
28 return;
29 }
30 node->ClearChildren();
31 node->RemoveFromTree();
32 nodeMap.UnregisterRenderNode(node->GetId());
33 }
34
AddChild(RSContext & context,NodeId nodeId,NodeId childNodeId,int32_t index)35 void BaseNodeCommandHelper::AddChild(RSContext& context, NodeId nodeId, NodeId childNodeId, int32_t index)
36 {
37 auto& nodeMap = context.GetNodeMap();
38 auto node = nodeMap.GetRenderNode(nodeId);
39 auto child = nodeMap.GetRenderNode(childNodeId);
40 if (node && child) {
41 node->AddChild(child, index);
42 }
43 }
44
MoveChild(RSContext & context,NodeId nodeId,NodeId childNodeId,int32_t index)45 void BaseNodeCommandHelper::MoveChild(RSContext& context, NodeId nodeId, NodeId childNodeId, int32_t index)
46 {
47 auto& nodeMap = context.GetNodeMap();
48 auto node = nodeMap.GetRenderNode(nodeId);
49 auto child = nodeMap.GetRenderNode(childNodeId);
50 if (node && child) {
51 node->MoveChild(child, index);
52 }
53 }
54
RemoveChild(RSContext & context,NodeId nodeId,NodeId childNodeId)55 void BaseNodeCommandHelper::RemoveChild(RSContext& context, NodeId nodeId, NodeId childNodeId)
56 {
57 auto& nodeMap = context.GetNodeMap();
58 auto node = nodeMap.GetRenderNode(nodeId);
59 auto child = nodeMap.GetRenderNode(childNodeId);
60 if (node && child) {
61 node->RemoveChild(child);
62 }
63 }
64
AddCrossParentChild(RSContext & context,NodeId id,NodeId childId,int32_t index)65 void BaseNodeCommandHelper::AddCrossParentChild(RSContext& context, NodeId id, NodeId childId, int32_t index)
66 {
67 auto& nodeMap = context.GetNodeMap();
68 auto node = nodeMap.GetRenderNode(id);
69 auto child = nodeMap.GetRenderNode(childId);
70 if (node && child) {
71 node->AddCrossParentChild(child, index);
72 }
73 }
74
RemoveCrossParentChild(RSContext & context,NodeId nodeId,NodeId childNodeId,NodeId newParentId)75 void BaseNodeCommandHelper::RemoveCrossParentChild(RSContext& context, NodeId nodeId, NodeId childNodeId,
76 NodeId newParentId)
77 {
78 auto& nodeMap = context.GetNodeMap();
79 auto node = nodeMap.GetRenderNode(nodeId);
80 auto child = nodeMap.GetRenderNode(childNodeId);
81 auto newParent = nodeMap.GetRenderNode(newParentId);
82 if (node && child && newParent) {
83 node->RemoveCrossParentChild(child, newParent);
84 }
85 }
86
RemoveFromTree(RSContext & context,NodeId nodeId)87 void BaseNodeCommandHelper::RemoveFromTree(RSContext& context, NodeId nodeId)
88 {
89 auto& nodeMap = context.GetNodeMap();
90 auto node = nodeMap.GetRenderNode(nodeId);
91 if (node == nullptr) {
92 return;
93 }
94 node->RemoveFromTree();
95 }
96
ClearChildren(RSContext & context,NodeId nodeId)97 void BaseNodeCommandHelper::ClearChildren(RSContext& context, NodeId nodeId)
98 {
99 auto& nodeMap = context.GetNodeMap();
100 auto node = nodeMap.GetRenderNode(nodeId);
101 if (node) {
102 node->ClearChildren();
103 }
104 }
105 } // namespace Rosen
106 } // namespace OHOS
107