Merge branch 'devel/master' (1.1.28) into tizen
[platform/core/uifw/dali-core.git] / dali / internal / render / common / render-item.h
index 35c1107..85c6fb9 100644 (file)
@@ -22,6 +22,7 @@
 #include <dali/public-api/common/vector-wrapper.h>
 #include <dali/public-api/actors/layer.h>
 #include <dali/public-api/math/matrix.h>
+#include <dali/internal/update/nodes/node.h>
 
 namespace Dali
 {
@@ -29,10 +30,14 @@ namespace Dali
 namespace Internal
 {
 
+namespace Render
+{
+class Renderer;
+}
+
 namespace SceneGraph
 {
 
-class Renderer;
 class RenderItem;
 
 typedef std::vector< RenderItem > RendererItemContainer;
@@ -45,9 +50,9 @@ class RenderItem
 public:
 
   /**
-   * Create a new render-item.
+   * Construct a new RenderItem
    */
-  RenderItem();
+  static RenderItem* New();
 
   /**
    * Non-virtual destructor; RenderItem is not suitable as a base class.
@@ -55,6 +60,12 @@ public:
   ~RenderItem();
 
   /**
+   * Overriden delete operator.
+   * Deletes the RenderItem from its global memory pool
+   */
+  void operator delete( void* ptr );
+
+  /**
    * Reset the render-item.
    */
   void Reset();
@@ -63,15 +74,29 @@ public:
    * Retrieve the renderer.
    * @return The renderer.
    */
-  const Renderer* GetRenderer() const;
+  Render::Renderer& GetRenderer() const;
 
   /**
    * Set the renderer
    * @param[in] renderer The renderer
    */
-  void SetRenderer( Renderer* renderer );
+  void SetRenderer( Render::Renderer* renderer );
 
   /**
+   * Set the node
+   * @param[in] node The node
+   */
+  void SetNode( Node* node );
+
+  /**
+   * Retrieve the node
+   * @return The node
+   */
+  const Node& GetNode() const
+  {
+    return *mNode;
+  }
+  /**
    * Retrieve the modelView matrix.
    * @return The modelView matrix.
    */
@@ -96,15 +121,56 @@ public:
    */
   void SetDepthIndex( int depthIndex );
 
+  /**
+   * Set if the RenderItem is opaque
+   * @param[in] isOpaque true if the RenderItem is opaque, false otherwise
+   */
+  void SetIsOpaque( bool isOpaque );
+
+  /**
+   * Check if the RenderItem is opaque
+   * @return True if it is opaque, false otherwise
+   */
+  bool IsOpaque() const
+  {
+    return mIsOpaque;
+  }
+
+  /**
+   * Sets the size of the render item
+   * @param[in] size The size of the render item
+   */
+  void SetSize( const Vector3& size)
+  {
+    mSize = size;
+  }
+
+  /**
+   * Retrives the size of the render item
+   * @return The size of the render item
+   */
+  const Vector3& GetSize() const
+  {
+    return mSize;
+  }
+
 private:
 
+  /**
+   * Private constructor. See RenderItem::New
+   */
+  RenderItem();
+
   // RenderItems should not be copied as they are heavy
   RenderItem( const RenderItem& item );
   RenderItem& operator = ( const RenderItem& item );
 
-  Matrix    mModelViewMatrix;
-  Renderer* mRenderer;
-  int       mDepthIndex;
+  Matrix            mModelViewMatrix;
+  Vector3           mSize;
+  Render::Renderer* mRenderer;
+  Node*             mNode;
+  int               mDepthIndex;
+  bool              mIsOpaque:1;
 };
 
 } // namespace SceneGraph