X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fnodes%2Fnode-messages.h;h=a005dd348b36efb56e98fd68fdce0760c76065f3;hb=b43741a90b40ca9dfbd33d6a9d390d3c09230e89;hp=c807f366ed9e94db9acd7ebddfa0c4377fb96266;hpb=27619bbc4c1d443e89a6cdd116e544f6d9657fa4;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/nodes/node-messages.h b/dali/internal/update/nodes/node-messages.h old mode 100644 new mode 100755 index c807f36..a005dd3 --- a/dali/internal/update/nodes/node-messages.h +++ b/dali/internal/update/nodes/node-messages.h @@ -1,8 +1,8 @@ -#ifndef __DALI_INTERNAL_SCENE_GRAPH_NODE_MESSAGES_H__ -#define __DALI_INTERNAL_SCENE_GRAPH_NODE_MESSAGES_H__ +#ifndef DALI_INTERNAL_SCENE_GRAPH_NODE_MESSAGES_H +#define DALI_INTERNAL_SCENE_GRAPH_NODE_MESSAGES_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 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. @@ -49,13 +49,6 @@ public: */ virtual ~NodePropertyMessageBase(); -protected: - - /** - * Inform UpdateManager that the Node is now active - */ - void NotifyUpdateManager( Node* node ); - private: // Undefined @@ -81,23 +74,23 @@ public: * Create a message. * @note The node is expected to be const in the thread which sends this message. * However it can be modified when Process() is called in a different thread. - * @param[in] updateManager The update-manager. + * @param[in] eventThreadServices The object used to send messages to the scene graph * @param[in] node The node. * @param[in] property The property to bake. * @param[in] member The member function of the object. * @param[in] value The new value of the property. */ - static void Send( UpdateManager& updateManager, + static void Send( EventThreadServices& eventThreadServices, const Node* node, const AnimatableProperty

* property, MemberFunction member, typename ParameterType< P >::PassingType value ) { // Reserve some memory inside the message queue - unsigned int* slot = updateManager.GetEventToUpdate().ReserveMessageSlot( sizeof( NodePropertyMessage ) ); + uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( NodePropertyMessage ) ); // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) NodePropertyMessage( updateManager, node, property, member, value ); + new (slot) NodePropertyMessage( eventThreadServices.GetUpdateManager(), node, property, member, value ); } /** @@ -112,13 +105,8 @@ public: */ virtual void Process( BufferIndex updateBufferIndex ) { + mNode->SetPropertyDirty( true ); (mProperty->*mMemberFunction)( updateBufferIndex, mParam ); - - if( ! mNode->IsActive() ) - { - // Inform UpdateManager that the Node is now active - NotifyUpdateManager( mNode ); - } } private: @@ -168,23 +156,23 @@ public: * Send a message. * @note The node is expected to be const in the thread which sends this message. * However it can be modified when Process() is called in a different thread. - * @param[in] updateManager The update-manager. + * @param[in] eventThreadServices The object used to send messages to the scene graph * @param[in] node The node. * @param[in] property The property to bake. * @param[in] member The member function of the object. * @param[in] value The new value of the X,Y,Z or W component. */ - static void Send( UpdateManager& updateManager, + static void Send( EventThreadServices& eventThreadServices, const Node* node, const AnimatableProperty

* property, MemberFunction member, float value ) { // Reserve some memory inside the message queue - unsigned int* slot = updateManager.GetEventToUpdate().ReserveMessageSlot( sizeof( NodePropertyComponentMessage ) ); + uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( NodePropertyComponentMessage ) ); // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) NodePropertyComponentMessage( updateManager, node, property, member, value ); + new (slot) NodePropertyComponentMessage( eventThreadServices.GetUpdateManager(), node, property, member, value ); } /** @@ -199,13 +187,8 @@ public: */ virtual void Process( BufferIndex updateBufferIndex ) { + mNode->SetPropertyDirty( true ); (mProperty->*mMemberFunction)( updateBufferIndex, mParam ); - - if( ! mNode->IsActive() ) - { - // Inform UpdateManager that the Node is now active - NotifyUpdateManager( mNode ); - } } private: @@ -241,10 +224,170 @@ private: float mParam; }; + +template +class NodeTransformPropertyMessage : public NodePropertyMessageBase +{ +public: + + typedef void(TransformManagerPropertyHandler

::*MemberFunction)( BufferIndex, const P& ); + + /** + * Create a message. + * @note The node is expected to be const in the thread which sends this message. + * However it can be modified when Process() is called in a different thread. + * @param[in] eventThreadServices The object used to send messages to the scene graph + * @param[in] node The node. + * @param[in] property The property to bake. + * @param[in] member The member function of the object. + * @param[in] value The new value of the property. + */ + static void Send( EventThreadServices& eventThreadServices, + const Node* node, + const TransformManagerPropertyHandler

* property, + MemberFunction member, + const P& value ) + { + // Reserve some memory inside the message queue + uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( NodeTransformPropertyMessage ) ); + + // Construct message in the message queue memory; note that delete should not be called on the return value + new (slot) NodeTransformPropertyMessage( eventThreadServices.GetUpdateManager(), node, property, member, value ); + } + + /** + * Virtual destructor + */ + virtual ~NodeTransformPropertyMessage() + { + } + + /** + * @copydoc MessageBase::Process + */ + virtual void Process( BufferIndex updateBufferIndex ) + { + mNode->SetPropertyDirty( true ); + (mProperty->*mMemberFunction)( updateBufferIndex, mParam ); + } + +private: + + /** + * Create a message. + * @note The node is expected to be const in the thread which sends this message. + * However it can be modified when Process() is called in a different thread. + * @param[in] updateManager The update-manager. + * @param[in] node The node. + * @param[in] property The property to bake. + * @param[in] member The member function of the object. + * @param[in] value The new value of the property. + */ + NodeTransformPropertyMessage( UpdateManager& updateManager, + const Node* node, + const TransformManagerPropertyHandler

* property, + MemberFunction member, + const P& value ) + : NodePropertyMessageBase( updateManager ), + mNode( const_cast< Node* >( node ) ), + mProperty( const_cast< TransformManagerPropertyHandler

* >( property ) ), + mMemberFunction( member ), + mParam( value ) + { + } + +private: + + Node* mNode; + TransformManagerPropertyHandler

* mProperty; + MemberFunction mMemberFunction; + P mParam; +}; + + +template +class NodeTransformComponentMessage : public NodePropertyMessageBase +{ +public: + + typedef void(TransformManagerPropertyHandler

::*MemberFunction)( BufferIndex, float ); + + /** + * Send a message. + * @note The node is expected to be const in the thread which sends this message. + * However it can be modified when Process() is called in a different thread. + * @param[in] eventThreadServices The object used to send messages to the scene graph + * @param[in] node The node. + * @param[in] property The property to bake. + * @param[in] member The member function of the object. + * @param[in] value The new value of the X,Y,Z or W component. + */ + static void Send( EventThreadServices& eventThreadServices, + const Node* node, + const TransformManagerPropertyHandler

* property, + MemberFunction member, + float value ) + { + // Reserve some memory inside the message queue + uint32_t* slot = eventThreadServices.ReserveMessageSlot( sizeof( NodeTransformComponentMessage ) ); + + // Construct message in the message queue memory; note that delete should not be called on the return value + new (slot) NodeTransformComponentMessage( eventThreadServices.GetUpdateManager(), node, property, member, value ); + } + + /** + * Virtual destructor + */ + virtual ~NodeTransformComponentMessage() + { + } + + /** + * @copydoc MessageBase::Process + */ + virtual void Process( BufferIndex updateBufferIndex ) + { + mNode->SetPropertyDirty( true ); + (mProperty->*mMemberFunction)( updateBufferIndex, mParam ); + } + +private: + + /** + * Create a message. + * @note The node is expected to be const in the thread which sends this message. + * However it can be modified when Process() is called in a different thread. + * @param[in] updateManager The update-manager. + * @param[in] node The node. + * @param[in] property The property to bake. + * @param[in] member The member function of the object. + * @param[in] value The new value of the X,Y,Z or W component. + */ + NodeTransformComponentMessage( UpdateManager& updateManager, + const Node* node, + const TransformManagerPropertyHandler

* property, + MemberFunction member, + float value ) + : NodePropertyMessageBase( updateManager ), + mNode( const_cast< Node* >( node ) ), + mProperty( const_cast< TransformManagerPropertyHandler

* >( property ) ), + mMemberFunction( member ), + mParam( value ) + { + } + +private: + + Node* mNode; + TransformManagerPropertyHandler

* mProperty; + MemberFunction mMemberFunction; + float mParam; +}; + } // namespace SceneGraph } // namespace Internal } // namespace Dali -#endif // __DALI_INTERNAL_SCENE_GRAPH_NODE_MESSAGES_H__ +#endif // DALI_INTERNAL_SCENE_GRAPH_NODE_MESSAGES_H