X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fmanager%2Fupdate-proxy-impl.h;h=7ae5655a6a1733a701ed98f5378ea5dbdaa3bf65;hb=refs%2Fchanges%2F53%2F274253%2F3;hp=ac9c4a98132293b5c6e1a4df0cd73ad72e3440e5;hpb=b192f4f14bad2da813b76387b6abc35411246be4;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/manager/update-proxy-impl.h b/dali/internal/update/manager/update-proxy-impl.h index ac9c4a9..7ae5655 100644 --- a/dali/internal/update/manager/update-proxy-impl.h +++ b/dali/internal/update/manager/update-proxy-impl.h @@ -2,7 +2,7 @@ #define DALI_INTERNAL_UPDATE_PROXY_IMPL_H /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,19 +23,17 @@ #include // INTERNAL INCLUDES -#include -#include -#include #include #include #include +#include +#include +#include namespace Dali { - namespace Internal { - namespace SceneGraph { class UpdateManager; @@ -51,14 +49,13 @@ class UpdateManager; class UpdateProxy { public: - /** * @brief Constructor. * @param[in] updateManager Ref to the UpdateManager in order to add property resetters * @param[in] transformManager Ref to the TransformManager in order to set/get transform properties of nodes * @param[in] rootNode The root node for this proxy */ - UpdateProxy( SceneGraph::UpdateManager& updateManager, SceneGraph::TransformManager& transformManager, SceneGraph::Node& rootNode ); + UpdateProxy(SceneGraph::UpdateManager& updateManager, SceneGraph::TransformManager& transformManager, SceneGraph::Node& rootNode); /** * @brief Destructor. @@ -67,75 +64,80 @@ public: // Movable but not copyable - UpdateProxy( const UpdateProxy& ) = delete; ///< Deleted copy constructor. - UpdateProxy( UpdateProxy&& ) = default; ///< Default move constructor. - UpdateProxy& operator=( const UpdateProxy& ) = delete; ///< Deleted copy assignment operator. - UpdateProxy& operator=( UpdateProxy&& ) = delete; ///< Deleted move assignment operator. + UpdateProxy(const UpdateProxy&) = delete; ///< Deleted copy constructor. + UpdateProxy(UpdateProxy&&) = default; ///< Default move constructor. + UpdateProxy& operator=(const UpdateProxy&) = delete; ///< Deleted copy assignment operator. + UpdateProxy& operator=(UpdateProxy&&) = delete; ///< Deleted move assignment operator. /** * @copydoc Dali::UpdateProxy::GetPosition() */ - bool GetPosition( uint32_t id, Vector3& position) const; + bool GetPosition(uint32_t id, Vector3& position) const; /** * @copydoc Dali::UpdateProxy::SetPosition() */ - bool SetPosition( uint32_t id, const Vector3& position ); + bool SetPosition(uint32_t id, const Vector3& position); /** * @copydoc Dali::UpdateProxy::BakePosition() */ - bool BakePosition( uint32_t id, const Vector3& position ); + bool BakePosition(uint32_t id, const Vector3& position); /** * @copydoc Dali::UpdateProxy::GetSize() */ - bool GetSize( uint32_t id, Vector3& size ) const; + bool GetSize(uint32_t id, Vector3& size) const; /** * @copydoc Dali::UpdateProxy::SetSize() */ - bool SetSize( uint32_t id, const Vector3& size ); + bool SetSize(uint32_t id, const Vector3& size); /** * @copydoc Dali::UpdateProxy::BakeSize() */ - bool BakeSize( uint32_t id, const Vector3& size ); + bool BakeSize(uint32_t id, const Vector3& size); /** * @copydoc Dali::UpdateProxy::GetPositionAndSize() */ - bool GetPositionAndSize( uint32_t id, Vector3& position, Vector3& size ) const; + bool GetPositionAndSize(uint32_t id, Vector3& position, Vector3& size) const; + + /** + * @copydoc Dali::UpdateProxy::GetWorldPositionScaleAndSize() + */ + bool GetWorldPositionScaleAndSize(uint32_t id, Vector3& position, Vector3& scale, Vector3& size) const; /** * @copydoc Dali::UpdateProxy::GetScale() */ - bool GetScale( uint32_t id, Vector3& scale ) const; + bool GetScale(uint32_t id, Vector3& scale) const; /** * @copydoc Dali::UpdateProxy::SetScale() */ - bool SetScale( uint32_t id, const Vector3& scale ); + bool SetScale(uint32_t id, const Vector3& scale); /** * @copydoc Dali::UpdateProxy::BakeScale() */ - bool BakeScale( uint32_t id, const Vector3& scale ); + bool BakeScale(uint32_t id, const Vector3& scale); /** * @copydoc Dali::UpdateProxy::GetColor() */ - bool GetColor( uint32_t id, Vector4& color ) const; + bool GetColor(uint32_t id, Vector4& color) const; /** * @copydoc Dali::UpdateProxy::SetColor() */ - bool SetColor( uint32_t id, const Vector4& color ); + bool SetColor(uint32_t id, const Vector4& color); /** * @copydoc Dali::UpdateProxy::BakeColor() */ - bool BakeColor( uint32_t id, const Vector4& color ); + bool BakeColor(uint32_t id, const Vector4& color); /** * @brief Retrieves the root-node used by this class @@ -150,7 +152,7 @@ public: * @brief Sets the buffer index to use when processing the next callback. * @param[in] bufferIndex The current buffer index */ - void SetCurrentBufferIndex( BufferIndex bufferIndex ) + void SetCurrentBufferIndex(BufferIndex bufferIndex) { mCurrentBufferIndex = bufferIndex; } @@ -160,44 +162,48 @@ public: */ void NodeHierarchyChanged(); -private: + /** + * @brief Adds node resetter for each dirty node whose animatable properties have been changed. + */ + void AddNodeResetters(); +private: /** * @brief Retrieves the node with the specified ID. * @param[in] id The ID of the node required * @return A pointer to the required node if found. * @note This caches the last accessed node. */ - SceneGraph::Node* GetNodeWithId( uint32_t id ) const; + SceneGraph::Node* GetNodeWithId(uint32_t id) const; /** * @brief Adds a property-resetter for non-transform properties so that they can be reset to their base value every frame. * @param[in] node The node the property belongs to * @param[in] propertyBase The property itself */ - void AddResetter( SceneGraph::Node& node, SceneGraph::PropertyBase& propertyBase ); + void AddResetter(SceneGraph::Node& node, SceneGraph::PropertyBase& propertyBase); private: - /** * Structure to store the ID & Node pair */ struct IdNodePair { - uint32_t id; ///< The ID of the node + uint32_t id; ///< The ID of the node SceneGraph::Node* node; ///< The node itself }; class PropertyModifier; - using PropertyModifierPtr = std::unique_ptr< PropertyModifier >; + using PropertyModifierPtr = std::unique_ptr; - mutable std::vector< IdNodePair > mNodeContainer; ///< Used to store cached pointers to already searched for Nodes. - mutable IdNodePair mLastCachedIdNodePair; ///< Used to cache the last retrieved id-node pair. - BufferIndex mCurrentBufferIndex; + mutable std::vector mNodeContainer; ///< Used to store cached pointers to already searched for Nodes. + mutable IdNodePair mLastCachedIdNodePair; ///< Used to cache the last retrieved id-node pair. + mutable std::vector mDirtyNodes; ///< Used to store the ID of the dirty nodes with non-transform property modifications. + BufferIndex mCurrentBufferIndex; - SceneGraph::UpdateManager& mUpdateManager; ///< Reference to the Update Manager. + SceneGraph::UpdateManager& mUpdateManager; ///< Reference to the Update Manager. SceneGraph::TransformManager& mTransformManager; ///< Reference to the Transform Manager. - SceneGraph::Node& mRootNode; ///< The root node of this update proxy. + SceneGraph::Node& mRootNode; ///< The root node of this update proxy. PropertyModifierPtr mPropertyModifier; ///< To ensure non-transform property modifications reset to base values. };