X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fnodes%2Fnode.h;h=77bd5acc481fcbc44459da63b2737c16002e061f;hb=0b1a36885914bce024aec63a236058f83809e1db;hp=903f8c261a93100080642c4f75606f9f2d38cc93;hpb=3eb13bfd3b55e1750f21c86fc2d02d728a8fd956;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/nodes/node.h b/dali/internal/update/nodes/node.h old mode 100755 new mode 100644 index 903f8c2..77bd5ac --- a/dali/internal/update/nodes/node.h +++ b/dali/internal/update/nodes/node.h @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -46,7 +45,6 @@ namespace Internal // Value types used by messages. template <> struct ParameterType< ColorMode > : public BasicType< ColorMode > {}; -template <> struct ParameterType< PositionInheritanceMode > : public BasicType< PositionInheritanceMode > {}; template <> struct ParameterType< ClippingMode::Type > : public BasicType< ClippingMode::Type > {}; namespace SceneGraph @@ -74,16 +72,14 @@ class Node : public PropertyOwner, public NodeDataProvider public: // Defaults - static const PositionInheritanceMode DEFAULT_POSITION_INHERITANCE_MODE; static const ColorMode DEFAULT_COLOR_MODE; // Creation methods /** * Construct a new Node. - * @param[in] id The unique ID of the node */ - static Node* New( uint32_t id ); + static Node* New(); /** * Deletes a Node. @@ -95,6 +91,11 @@ public: */ void OnDestroy(); + /** + * @return the unique ID of the node + */ + uint32_t GetId() const; + // Layer interface /** @@ -112,7 +113,22 @@ public: */ virtual Layer* GetLayer() { - return NULL; + return nullptr; + } + + /** + * Mark an node and its sub tree according to the updated flag. + * @param[in] updated The updated flag + * (used for partial rendering to mark an animating sub tree for example). + */ + void SetUpdated(bool updated) override + { + mUpdated = updated; + + for (Node* child : mChildren) + { + child->SetUpdated(updated); + } } /** @@ -203,7 +219,7 @@ public: * Remove a renderer from the node * @param[in] renderer The renderer to be removed */ - void RemoveRenderer( Renderer* renderer ); + void RemoveRenderer( const Renderer* renderer ); /* * Get the renderer at the given index @@ -261,6 +277,14 @@ public: } /** + * @return true if the node is connected to SceneGraph + */ + bool ConnectedToScene() + { + return IsRoot() || GetParent(); + } + + /** * Connect a node to the scene-graph. * @pre A node cannot be added to itself. * @pre The parent node is connected to the scene-graph. @@ -605,6 +629,20 @@ public: } /** + * Retrieve the update size hint of the node. + * @return The update size hint. + */ + const Vector3& GetUpdateSizeHint() const + { + if( mTransformId != INVALID_TRANSFORM_ID ) + { + return mUpdateSizeHint.Get(0); + } + + return Vector3::ZERO; + } + + /** * Retrieve the bounding sphere of the node * @return A vector4 describing the bounding sphere. XYZ is the center and W is the radius */ @@ -718,7 +756,7 @@ public: * @brief Get the depth index of the node * @return Current depth index */ - uint32_t GetDepthIndex() + uint32_t GetDepthIndex() const { return mDepthIndex; } @@ -760,12 +798,17 @@ public: /** * @copydoc UniformMap::Add */ - void AddUniformMapping( OwnerPointer< UniformPropertyMapping >& map ); + void AddUniformMapping(const UniformPropertyMapping& map) override; /** * @copydoc UniformMap::Remove */ - void RemoveUniformMapping( const std::string& uniformName ); + void RemoveUniformMapping( const ConstString& uniformName ) override; + + /** + * @copydoc Dali::Internal::SceneGraph::PropertyOwner::IsAnimationPossible + */ + bool IsAnimationPossible() const override; /** * Prepare the node for rendering. @@ -799,22 +842,21 @@ protected: /** * Protected constructor; See also Node::New() - * @param[in] id The Unique ID of the actor creating the node */ - Node( uint32_t id ); + Node(); /** * Protected virtual destructor; See also Node::Delete( Node* ) * Kept protected to allow destructor chaining from layer */ - virtual ~Node(); + ~Node() override; private: // from NodeDataProvider /** * @copydoc NodeDataProvider::GetModelMatrix */ - virtual const Matrix& GetModelMatrix( BufferIndex bufferIndex ) const + const Matrix& GetModelMatrix( BufferIndex bufferIndex ) const override { return GetWorldMatrix( bufferIndex ); } @@ -822,7 +864,7 @@ private: // from NodeDataProvider /** * @copydoc NodeDataProvider::GetRenderColor */ - virtual const Vector4& GetRenderColor( BufferIndex bufferIndex ) const + const Vector4& GetRenderColor( BufferIndex bufferIndex ) const override { return GetWorldColor( bufferIndex ); } @@ -831,7 +873,7 @@ public: // From UniformMapDataProvider /** * @copydoc UniformMapDataProvider::GetUniformMapChanged */ - virtual bool GetUniformMapChanged( BufferIndex bufferIndex ) const + bool GetUniformMapChanged( BufferIndex bufferIndex ) const override { return mUniformMapChanged[bufferIndex]; } @@ -839,7 +881,7 @@ public: // From UniformMapDataProvider /** * @copydoc UniformMapDataProvider::GetUniformMap */ - virtual const CollectedUniformMap& GetUniformMap( BufferIndex bufferIndex ) const + const CollectedUniformMap& GetUniformMap( BufferIndex bufferIndex ) const override { return mCollectedUniformMap[bufferIndex]; } @@ -873,6 +915,8 @@ public: // Default properties AnimatableProperty mVisible; ///< Visibility can be inherited from the Node hierachy AnimatableProperty mCulled; ///< True if the node is culled. This is not animatable. It is just double-buffered. AnimatableProperty mColor; ///< Color can be inherited from the Node hierarchy + AnimatableProperty mUpdateSizeHint; ///< Update size hint is provided for damaged area calculation. This is not animatable. It is just double-buffered. (Because all these bloody properties are). + // Inherited properties; read-only from public API @@ -887,6 +931,8 @@ public: // Default properties protected: + static uint32_t mNodeCounter; ///< count of total nodes, used for unique ids + Node* mParent; ///< Pointer to parent node (a child is owned by its parent) RenderTask* mExclusiveRenderTask; ///< Nodes can be marked as exclusive to a single RenderTask @@ -910,6 +956,7 @@ protected: bool mIsRoot:1; ///< True if the node cannot have a parent bool mIsLayer:1; ///< True if the node is a layer bool mPositionUsesAnchorPoint:1; ///< True if the node should use the anchor-point when calculating the position + // Changes scope, should be at end of class DALI_LOG_OBJECT_STRING_DECLARATION; }; @@ -918,7 +965,7 @@ protected: inline void SetInheritOrientationMessage( EventThreadServices& eventThreadServices, const Node& node, bool inherit ) { - typedef MessageValue1< Node, bool > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -929,7 +976,7 @@ inline void SetInheritOrientationMessage( EventThreadServices& eventThreadServic inline void SetParentOriginMessage( EventThreadServices& eventThreadServices, const Node& node, const Vector3& origin ) { - typedef MessageValue1< Node, Vector3 > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -940,7 +987,7 @@ inline void SetParentOriginMessage( EventThreadServices& eventThreadServices, co inline void SetAnchorPointMessage( EventThreadServices& eventThreadServices, const Node& node, const Vector3& anchor ) { - typedef MessageValue1< Node, Vector3 > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -951,7 +998,7 @@ inline void SetAnchorPointMessage( EventThreadServices& eventThreadServices, con inline void SetInheritPositionMessage( EventThreadServices& eventThreadServices, const Node& node, bool inherit ) { - typedef MessageValue1< Node, bool > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -962,7 +1009,7 @@ inline void SetInheritPositionMessage( EventThreadServices& eventThreadServices, inline void SetInheritScaleMessage( EventThreadServices& eventThreadServices, const Node& node, bool inherit ) { - typedef MessageValue1< Node, bool > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -973,7 +1020,7 @@ inline void SetInheritScaleMessage( EventThreadServices& eventThreadServices, co inline void SetColorModeMessage( EventThreadServices& eventThreadServices, const Node& node, ColorMode colorMode ) { - typedef MessageValue1< Node, ColorMode > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -984,7 +1031,7 @@ inline void SetColorModeMessage( EventThreadServices& eventThreadServices, const inline void SetDrawModeMessage( EventThreadServices& eventThreadServices, const Node& node, DrawMode::Type drawMode ) { - typedef MessageValue1< Node, DrawMode::Type > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -993,31 +1040,31 @@ inline void SetDrawModeMessage( EventThreadServices& eventThreadServices, const new (slot) LocalType( &node, &Node::SetDrawMode, drawMode ); } -inline void AddRendererMessage( EventThreadServices& eventThreadServices, const Node& node, Renderer* renderer ) +inline void AttachRendererMessage( EventThreadServices& eventThreadServices, const Node& node, const Renderer& renderer ) { - typedef MessageValue1< Node, Renderer* > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &node, &Node::AddRenderer, renderer ); + new (slot) LocalType( &node, &Node::AddRenderer, const_cast( &renderer ) ); } -inline void RemoveRendererMessage( EventThreadServices& eventThreadServices, const Node& node, Renderer* renderer ) +inline void DetachRendererMessage( EventThreadServices& eventThreadServices, const Node& node, const Renderer& renderer ) { - typedef MessageValue1< Node, Renderer* > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &node, &Node::RemoveRenderer, renderer ); + new (slot) LocalType( &node, &Node::RemoveRenderer, &renderer ); } inline void SetDepthIndexMessage( EventThreadServices& eventThreadServices, const Node& node, uint32_t depthIndex ) { - typedef MessageValue1< Node, uint32_t > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -1028,7 +1075,7 @@ inline void SetDepthIndexMessage( EventThreadServices& eventThreadServices, cons inline void SetClippingModeMessage( EventThreadServices& eventThreadServices, const Node& node, ClippingMode::Type clippingMode ) { - typedef MessageValue1< Node, ClippingMode::Type > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -1039,7 +1086,7 @@ inline void SetClippingModeMessage( EventThreadServices& eventThreadServices, co inline void SetPositionUsesAnchorPointMessage( EventThreadServices& eventThreadServices, const Node& node, bool positionUsesAnchorPoint ) { - typedef MessageValue1< Node, bool > LocalType; + using LocalType = MessageValue1; // Reserve some memory inside the message queue uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( LocalType ) ); @@ -1054,10 +1101,10 @@ inline void SetPositionUsesAnchorPointMessage( EventThreadServices& eventThreadS template <> inline void OwnerPointer::Reset() { - if (mObject != NULL) + if (mObject != nullptr) { Dali::Internal::SceneGraph::Node::Delete(mObject); - mObject = NULL; + mObject = nullptr; } } } // namespace Internal