Revert "[Tizen] Partial Rendering"
[platform/core/uifw/dali-core.git] / dali / internal / update / nodes / node-messages.h
index c807f36..0fc422f 100644 (file)
@@ -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.
@@ -47,14 +47,7 @@ public:
   /**
    * Virtual destructor
    */
-  virtual ~NodePropertyMessageBase();
-
-protected:
-
-  /**
-   * Inform UpdateManager that the Node is now active
-   */
-  void NotifyUpdateManager( Node* node );
+  ~NodePropertyMessageBase() override;
 
 private:
 
@@ -74,51 +67,42 @@ template< typename P >
 class NodePropertyMessage : public NodePropertyMessageBase
 {
 public:
-
-  typedef void(AnimatableProperty<P>::*MemberFunction)( BufferIndex, typename ParameterType< P >::PassingType );
+  using MemberFunction = void ( AnimatableProperty<P>::* )( BufferIndex, typename ParameterType<P>::PassingType );
 
   /**
    * 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<P>* 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 );
   }
 
   /**
    * Virtual destructor
    */
-  virtual ~NodePropertyMessage()
-  {
-  }
+  ~NodePropertyMessage() override = default;
 
   /**
    * @copydoc MessageBase::Process
    */
-  virtual void Process( BufferIndex updateBufferIndex )
+  void Process( BufferIndex updateBufferIndex ) override
   {
     (mProperty->*mMemberFunction)( updateBufferIndex, mParam );
-
-    if( ! mNode->IsActive() )
-    {
-      // Inform UpdateManager that the Node is now active
-      NotifyUpdateManager( mNode );
-    }
   }
 
 private:
@@ -161,51 +145,42 @@ template< typename P >
 class NodePropertyComponentMessage : public NodePropertyMessageBase
 {
 public:
-
-  typedef void(AnimatableProperty<P>::*MemberFunction)( BufferIndex, float );
+  using MemberFunction = void ( AnimatableProperty<P>::* )( 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] 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<P>* 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 );
   }
 
   /**
    * Virtual destructor
    */
-  virtual ~NodePropertyComponentMessage()
-  {
-  }
+  ~NodePropertyComponentMessage() override = default;
 
   /**
    * @copydoc MessageBase::Process
    */
-  virtual void Process( BufferIndex updateBufferIndex )
+  void Process( BufferIndex updateBufferIndex ) override
   {
     (mProperty->*mMemberFunction)( updateBufferIndex, mParam );
-
-    if( ! mNode->IsActive() )
-    {
-      // Inform UpdateManager that the Node is now active
-      NotifyUpdateManager( mNode );
-    }
   }
 
 private:
@@ -241,10 +216,162 @@ private:
   float mParam;
 };
 
+
+template <typename P>
+class NodeTransformPropertyMessage : public NodePropertyMessageBase
+{
+public:
+  using MemberFunction = void ( TransformManagerPropertyHandler<P>::* )( 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<P>* 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
+   */
+  ~NodeTransformPropertyMessage() override = default;
+
+  /**
+   * @copydoc MessageBase::Process
+   */
+  void Process( BufferIndex updateBufferIndex ) override
+  {
+    (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<P>* property,
+                       MemberFunction member,
+                       const P& value )
+  : NodePropertyMessageBase( updateManager ),
+    mNode( const_cast< Node* >( node ) ),
+    mProperty( const_cast< TransformManagerPropertyHandler<P>* >( property ) ),
+    mMemberFunction( member ),
+    mParam( value )
+  {
+  }
+
+private:
+
+  Node* mNode;
+  TransformManagerPropertyHandler<P>* mProperty;
+  MemberFunction mMemberFunction;
+  P mParam;
+};
+
+
+template <typename P>
+class NodeTransformComponentMessage : public NodePropertyMessageBase
+{
+public:
+  using MemberFunction = void ( TransformManagerPropertyHandler<P>::* )( 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<P>* 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
+   */
+  ~NodeTransformComponentMessage() override = default;
+
+  /**
+   * @copydoc MessageBase::Process
+   */
+  void Process( BufferIndex updateBufferIndex ) override
+  {
+    (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<P>* property,
+                                MemberFunction member,
+                                float value )
+  : NodePropertyMessageBase( updateManager ),
+    mNode( const_cast< Node* >( node ) ),
+    mProperty( const_cast< TransformManagerPropertyHandler<P>* >( property ) ),
+    mMemberFunction( member ),
+    mParam( value )
+  {
+  }
+
+private:
+
+  Node* mNode;
+  TransformManagerPropertyHandler<P>* 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