Allow multiple renderers per Actor and sharing renderers between actors
[platform/core/uifw/dali-core.git] / dali / internal / event / actors / actor-impl.h
index d601a20..be4e6fb 100644 (file)
@@ -57,6 +57,9 @@ typedef std::vector< ActorPtr > ActorContainer;
 typedef ActorContainer::iterator ActorIter;
 typedef ActorContainer::const_iterator ActorConstIter;
 
+typedef std::vector< RendererPtr > RendererContainer;
+typedef RendererContainer::iterator RendererIter;
+
 /**
  * Actor is the primary object which Dali applications interact with.
  * UI controls can be built by combining multiple actors.
@@ -197,16 +200,6 @@ public:
   void Add( Actor& child );
 
   /**
-   * Inserts a child Actor to this Actor's child list
-   * @pre The child actor is not the same as the parent actor.
-   * @pre The child actor does not already have a parent.
-   * @param [in] index in childlist to insert child at
-   * @param [in] child The child.
-   * @post The child will be referenced by its parent.
-   */
-  void Insert( unsigned int index, Actor& child );
-
-  /**
    * Removes a child Actor from this Actor.
    * @param [in] child The child.
    * @post The child will be unreferenced.
@@ -1220,7 +1213,7 @@ public:
   /**
    * @copydoc Dali::Actor::GetRendererAt()
    */
-  Renderer& GetRendererAt( unsigned int index );
+  RendererPtr GetRendererAt( unsigned int index );
 
   /**
    * @copydoc Dali::Actor::RemoveRenderer()
@@ -1502,26 +1495,22 @@ protected:
 
   /**
    * Called on a child during Add() when the parent actor is connected to the Stage.
-   * @param[in] stage The stage.
-   * @param[in] parentDepth The depth of the parent in the hierarchy
-   * @param[in] index If set, it is only used for positioning the actor within the parent's child list.
+   * @param[in] parentDepth The depth of the parent in the hierarchy.
    */
-  void ConnectToStage( unsigned int parentDepth, int index = -1 );
+  void ConnectToStage( unsigned int parentDepth );
 
   /**
    * Helper for ConnectToStage, to recursively connect a tree of actors.
    * This is atomic i.e. not interrupted by user callbacks.
-   * @param[in] index If set, it is only used for positioning the actor within the parent's child list.
-   * @param[in] depth The depth in the hierarchy of the actor
+   * @param[in]  depth The depth in the hierarchy of the actor
    * @param[out] connectionList On return, the list of connected actors which require notification.
    */
-  void RecursiveConnectToStage( ActorContainer& connectionList, unsigned int depth, int index = -1 );
+  void RecursiveConnectToStage( ActorContainer& connectionList, unsigned int depth );
 
   /**
    * Connect the Node associated with this Actor to the scene-graph.
-   * @param[in] index If set, it is only used for positioning the actor within the parent's child list.
    */
-  void ConnectToSceneGraph( int index = -1 );
+  void ConnectToSceneGraph();
 
   /**
    * Helper for ConnectToStage, to notify a connected actor through the public API.
@@ -1556,16 +1545,8 @@ protected:
    */
   bool IsNodeConnected() const;
 
-  /**
-   * Calculate the size of the z dimension for a 2D size
-   *
-   * @param[in] size The 2D size (X, Y) to calculate Z from
-   *
-   * @return Return the Z dimension for this size
-   */
-  float CalculateSizeZ( const Vector2& size ) const;
-
 public:
+
   // Default property extensions from Object
 
   /**
@@ -1662,9 +1643,8 @@ private:
   /**
    * Set the actors parent.
    * @param[in] parent The new parent.
-   * @param[in] index If set, it is only used for positioning the actor within the parent's child list.
    */
-  void SetParent( Actor* parent, int index = -1 );
+  void SetParent( Actor* parent );
 
   /**
    * Helper to create a Node for this Actor.
@@ -1788,6 +1768,8 @@ protected:
 
   Actor* mParent;                 ///< Each actor (except the root) can have one parent
   ActorContainer* mChildren;      ///< Container of referenced actors
+  RendererContainer* mRenderers;   ///< Renderer container
+
   const SceneGraph::Node* mNode;  ///< Not owned
   Vector3* mParentOrigin;         ///< NULL means ParentOrigin::DEFAULT. ParentOrigin is non-animatable
   Vector3* mAnchorPoint;          ///< NULL means AnchorPoint::DEFAULT. AnchorPoint is non-animatable
@@ -1813,7 +1795,7 @@ protected:
   std::string     mName;      ///< Name of the actor
   unsigned int    mId;        ///< A unique ID to identify the actor starting from 1, and 0 is reserved
 
-  unsigned short mDepth                            :12; ///< The depth in the hierarchy of the actor. Only 4096 levels of depth are supported
+  unsigned short mDepth                            :12; ///< Cached: The depth in the hierarchy of the actor. Only 4096 levels of depth are supported
   const bool mIsRoot                               : 1; ///< Flag to identify the root actor
   const bool mIsRenderable                         : 1; ///< Flag to identify that this is a renderable actor
   const bool mIsLayer                              : 1; ///< Flag to identify that this is a layer