1 /* 2 * Copyright (c) 2024 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 "ui/view_stack/view_stack_processor.h" 17 18 #include "interfaces/inner_api/ace_kit/src/view/frame_node_impl.h" 19 #include "ui/base/utils/utils.h" 20 21 #include "core/components_ng/base/view_stack_model.h" 22 #include "core/components_ng/base/view_stack_processor.h" 23 #include "core/components_ng/pattern/stack/stack_pattern.h" 24 25 namespace OHOS::Ace::Kit { 26 ClaimNodeId()27int32_t ViewStackProcessor::ClaimNodeId() 28 { 29 return NG::ViewStackProcessor::GetInstance()->ClaimNodeId(); 30 } 31 Push(const RefPtr<FrameNode> & node)32void ViewStackProcessor::Push(const RefPtr<FrameNode>& node) 33 { 34 auto nodeImpl = AceType::DynamicCast<FrameNodeImpl>(node); 35 CHECK_NULL_VOID(nodeImpl); 36 NG::ViewStackProcessor::GetInstance()->Push(nodeImpl->MoveOwnershipAndGetAceNode()); 37 } 38 GetTopNode()39RefPtr<FrameNode> ViewStackProcessor::GetTopNode() 40 { 41 auto* mainNode = NG::ViewStackProcessor::GetInstance()->GetMainFrameNode(); 42 CHECK_NULL_RETURN(mainNode, nullptr); 43 auto kitNode = mainNode->GetKitNode(); 44 if (!kitNode) { 45 kitNode = Referenced::MakeRefPtr<FrameNodeImpl>(mainNode); 46 mainNode->SetKitNode(kitNode); 47 } 48 return kitNode; 49 } 50 NewScope()51void ViewStackProcessor::NewScope() 52 { 53 Ace::ViewStackModel::GetInstance()->NewScope(); 54 } 55 Finish()56RefPtr<FrameNode> ViewStackProcessor::Finish() 57 { 58 auto node = Ace::ViewStackModel::GetInstance()->Finish(); 59 auto frameNode = AceType::DynamicCast<NG::FrameNode>(node); 60 61 if (frameNode) { 62 auto kitNode = frameNode->GetKitNode(); 63 if (!kitNode) { 64 kitNode = AceType::MakeRefPtr<FrameNodeImpl>(frameNode); 65 } 66 return kitNode; 67 } 68 69 auto nodeId = ElementRegister::GetInstance()->MakeUniqueId(); 70 auto proxyNode = NG::FrameNode::GetOrCreateFrameNode( 71 "BuilderProxyNode", nodeId, []() { return AceType::MakeRefPtr<NG::StackPattern>(); }); 72 proxyNode->AddChild(AceType::DynamicCast<NG::UINode>(node)); 73 74 return AceType::MakeRefPtr<FrameNodeImpl>(proxyNode); 75 } 76 77 } // namespace OHOS::Ace::Kit 78