1 #ifndef DALI_INTERNAL_SCENE_GRAPH_TRAVELER_H
2 #define DALI_INTERNAL_SCENE_GRAPH_TRAVELER_H
5 * Copyright (c) 2024 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <unordered_map>
25 #include <dali/internal/update/manager/scene-graph-traveler-interface.h>
31 class SceneGraphTraveler;
32 using SceneGraphTravelerPtr = IntrusivePtr<SceneGraphTraveler>;
35 * @brief Helper class to travel scene graph under root node.
37 class SceneGraphTraveler : public SceneGraphTravelerInterface, public SceneGraph::PropertyOwner::Observer
42 * @param[in] updateManager The update manager.
43 * @param[in] rootNode The root node of this traveler. The traveler will find only under this rootNode.
45 SceneGraphTraveler(SceneGraph::UpdateManager& updateManager, SceneGraph::Node& rootNode);
50 ~SceneGraphTraveler() override;
54 * @brief Call this method if hierarchy was changed under root node.
56 void NodeHierarchyChanged()
62 * @brief Whether root node is invalidated or not.
64 * @return True if root node is invalidated.
66 bool IsInvalidated() const
71 public: // From SceneGraphTravelerInterface
73 * @copydoc Dali::Internal::SceneGraphTravelerInterface::FindNode()
75 SceneGraph::Node* FindNode(uint32_t id) override;
77 private: // From SceneGraph::PropertyOwner::Observer
79 * @copydoc SceneGraph::PropertyOwner::Observer::PropertyOwnerConnected()
81 void PropertyOwnerConnected(SceneGraph::PropertyOwner& owner) override
86 * @copydoc SceneGraph::PropertyOwner::Observer::PropertyOwnerDisconnected()
88 void PropertyOwnerDisconnected(BufferIndex updateBufferIndex, SceneGraph::PropertyOwner& owner) override
93 * @copydoc SceneGraph::PropertyOwner::Observer::PropertyOwnerDisconnected()
95 void PropertyOwnerDestroyed(SceneGraph::PropertyOwner& owner) override
97 // Invalidate this traveler
106 SceneGraph::Node& mRootNode;
108 std::unordered_map<uint32_t, SceneGraph::Node*> mTravledNodeMap; ///< Used to store cached pointers to already searched for Nodes.
110 bool mInvalidated : 1; ///< True if root node was destroyed.
113 } // namespace Internal
117 #endif // DALI_INTERNAL_UPDATE_PROXY_SCENE_GRAPH_TRAVELER_H