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 FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_ELEMENT_H 17 #define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_ELEMENT_H 18 19 #include "base/utils/macros.h" 20 #include "core/pipeline/base/element.h" 21 #include "core/pipeline/base/render_node.h" 22 23 namespace OHOS::Ace { 24 25 // RenderElement will have a RenderNode and displays in the screen. 26 class ACE_FORCE_EXPORT RenderElement : public Element { 27 DECLARE_ACE_TYPE(RenderElement, Element); 28 29 public: 30 RenderElement(); 31 ~RenderElement() override; 32 33 void Prepare(const WeakPtr<Element>& parent) override; 34 void Update() override; 35 void Detached() override; 36 void Deactivate() override; 37 RefPtr<Element> UpdateChild(const RefPtr<Element>& child, const RefPtr<Component>& newComponent) final; 38 GetRenderNode()39 RefPtr<RenderNode> GetRenderNode() const override 40 { 41 return renderNode_; 42 } 43 SetRenderNode(RefPtr<RenderNode> renderNode)44 void SetRenderNode(RefPtr<RenderNode> renderNode) 45 { 46 if (renderNode && !renderNode_) { 47 renderNode_ = renderNode; 48 } 49 } 50 ProvideRestoreInfo()51 std::string ProvideRestoreInfo() 52 { 53 return renderNode_->ProvideRestoreInfo(); 54 } 55 56 protected: 57 void UpdateAccessibilityNode(); 58 virtual RefPtr<RenderNode> CreateRenderNode(); GetCachedRenderNode()59 virtual RefPtr<RenderNode> GetCachedRenderNode() 60 { 61 return nullptr; 62 } 63 void Apply(const RefPtr<Element>& child) override; 64 void UmountRender() override; CountRenderNode()65 int32_t CountRenderNode() const override 66 { 67 return renderNode_ ? 1 : 0; 68 } 69 70 virtual void ApplyRenderChild(const RefPtr<RenderElement>& renderChild); 71 72 RefPtr<RenderNode> renderNode_; 73 74 private: 75 void SetAccessibilityNode(const WeakPtr<Element>& parent); 76 void SetAccessibilityNodeById(const ComposeId& id); 77 78 ComposeId composeId_; 79 // detach and attach event marker 80 using DisappearCallback = std::function<void()>; 81 DisappearCallback disappearCallback_; 82 bool nodeMounted_ = false; 83 }; 84 85 } // namespace OHOS::Ace 86 87 #endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_ELEMENT_H 88