+ /**
+ * Negotiate size for a specific dimension
+ *
+ * The algorithm adopts a recursive dependency checking approach. Meaning, that wherever dependencies
+ * are found, e.g. an actor dependent on its parent, the dependency will be calculated first with NegotiatedDimension and
+ * LayoutDimensionNegotiated flags being filled in on the actor.
+ *
+ * @post All actors that exist in the dependency chain connected to the given actor will have had their NegotiatedDimensions
+ * calculated and set as well as the LayoutDimensionNegotiated flags.
+ *
+ * @param[in] dimension The dimension to negotiate on
+ * @param[in] allocatedSize The size constraint that the actor must respect
+ */
+ void NegotiateDimension( Dimension::Type dimension, const Vector2& allocatedSize, ActorDimensionStack& recursionStack );
+
+ /**
+ * @brief Calculate the size of a dimension
+ *
+ * @param[in] dimension The dimension to calculate the size for
+ * @param[in] maximumSize The upper bounds on the size
+ * @return Return the calculated size for the dimension
+ */
+ float CalculateSize( Dimension::Type dimension, const Vector2& maximumSize );
+
+ /**
+ * @brief Clamp a dimension given the relayout constraints on this actor
+ *
+ * @param[in] size The size to constrain
+ * @param[in] dimension The dimension the size exists in
+ * @return Return the clamped size
+ */
+ float ClampDimension( float size, Dimension::Type dimension );
+
+ /**
+ * Negotiate a dimension based on the size of the parent
+ *
+ * @param[in] dimension The dimension to negotiate on
+ * @return Return the negotiated size
+ */
+ float NegotiateFromParent( Dimension::Type dimension );
+
+ /**
+ * Negotiate a dimension based on the size of the parent. Fitting inside.
+ *
+ * @param[in] dimension The dimension to negotiate on
+ * @return Return the negotiated size
+ */
+ float NegotiateFromParentFit( Dimension::Type dimension );
+
+ /**
+ * Negotiate a dimension based on the size of the parent. Flooding the whole space.
+ *
+ * @param[in] dimension The dimension to negotiate on
+ * @return Return the negotiated size
+ */
+ float NegotiateFromParentFlood( Dimension::Type dimension );
+
+ /**
+ * @brief Negotiate a dimension based on the size of the children
+ *
+ * @param[in] dimension The dimension to negotiate on
+ * @return Return the negotiated size
+ */
+ float NegotiateFromChildren( Dimension::Type dimension );
+
+ /**
+ * Set the negotiated dimension value for the given dimension(s)
+ *
+ * @param negotiatedDimension The value to set
+ * @param dimension The dimension(s) to set the value for
+ */
+ void SetNegotiatedDimension( float negotiatedDimension, Dimension::Type dimension = Dimension::ALL_DIMENSIONS );
+
+ /**
+ * Return the value of negotiated dimension for the given dimension
+ *
+ * @param dimension The dimension to retrieve
+ * @return Return the value of the negotiated dimension
+ */
+ float GetNegotiatedDimension( Dimension::Type dimension ) const;
+
+ /**
+ * @brief Set the padding for a dimension
+ *
+ * @param[in] padding Padding for the dimension. X = start (e.g. left, bottom), y = end (e.g. right, top)
+ * @param[in] dimension The dimension to set
+ */
+ void SetPadding( const Vector2& padding, Dimension::Type dimension );
+
+ /**
+ * Return the value of padding for the given dimension
+ *
+ * @param dimension The dimension to retrieve
+ * @return Return the value of padding for the dimension
+ */
+ Vector2 GetPadding( Dimension::Type dimension ) const;
+
+ /**
+ * Return the actor size for a given dimension
+ *
+ * @param[in] dimension The dimension to retrieve the size for
+ * @return Return the size for the given dimension
+ */
+ float GetSize( Dimension::Type dimension ) const;
+
+ /**
+ * Return the natural size of the actor for a given dimension
+ *
+ * @param[in] dimension The dimension to retrieve the size for
+ * @return Return the natural size for the given dimension
+ */
+ float GetNaturalSize( Dimension::Type dimension ) const;
+
+ /**
+ * @brief Return the amount of size allocated for relayout
+ *
+ * May include padding
+ *
+ * @param[in] dimension The dimension to retrieve
+ * @return Return the size
+ */
+ float GetRelayoutSize( Dimension::Type dimension ) const;
+
+ /**
+ * @brief If the size has been negotiated return that else return normal size
+ *
+ * @param[in] dimension The dimension to retrieve
+ * @return Return the size
+ */
+ float GetLatestSize( Dimension::Type dimension ) const;
+
+ /**
+ * Apply the negotiated size to the actor
+ *
+ * @param[in] container The container to fill with actors that require further relayout
+ */
+ void SetNegotiatedSize( RelayoutContainer& container );
+
+ /**
+ * @brief Flag the actor as having it's layout dimension negotiated.
+ *
+ * @param[in] negotiated The status of the flag to set.
+ * @param[in] dimension The dimension to set the flag for
+ */
+ void SetLayoutNegotiated( bool negotiated, Dimension::Type dimension = Dimension::ALL_DIMENSIONS );
+
+ /**
+ * @brief Test whether the layout dimension for this actor has been negotiated or not.
+ *
+ * @param[in] dimension The dimension to determine the value of the flag for
+ * @return Return if the layout dimension is negotiated or not.
+ */
+ bool IsLayoutNegotiated( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ) const;
+
+ /**
+ * @brief provides the Actor implementation of GetHeightForWidth
+ * @param width to use.
+ * @return the height based on the width.
+ */
+ float GetHeightForWidthBase( float width );
+
+ /**
+ * @brief provides the Actor implementation of GetWidthForHeight
+ * @param height to use.
+ * @return the width based on the height.
+ */
+ float GetWidthForHeightBase( float height );
+
+ /**
+ * @brief Calculate the size for a child
+ *
+ * @param[in] child The child actor to calculate the size for
+ * @param[in] dimension The dimension to calculate the size for. E.g. width or height.
+ * @return Return the calculated size for the given dimension
+ */
+ float CalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension );
+
+ /**
+ * @brief Set the preferred size for size negotiation
+ *
+ * @param[in] size The preferred size to set
+ */
+ void SetPreferredSize( const Vector2& size );
+
+ /**
+ * @brief Return the preferred size used for size negotiation
+ *
+ * @return Return the preferred size
+ */
+ Vector2 GetPreferredSize() const;
+
+ /**
+ * @copydoc Dali::Actor::SetMinimumSize
+ */
+ void SetMinimumSize( float size, Dimension::Type dimension = Dimension::ALL_DIMENSIONS );
+
+ /**
+ * @copydoc Dali::Actor::GetMinimumSize
+ */
+ float GetMinimumSize( Dimension::Type dimension ) const;
+
+ /**
+ * @copydoc Dali::Actor::SetMaximumSize
+ */
+ void SetMaximumSize( float size, Dimension::Type dimension = Dimension::ALL_DIMENSIONS );
+
+ /**
+ * @copydoc Dali::Actor::GetMaximumSize
+ */
+ float GetMaximumSize( Dimension::Type dimension ) const;
+
+ /**
+ * @copydoc Dali::Actor::AddRenderer()
+ */
+ unsigned int AddRenderer( Renderer& renderer );
+
+ /**
+ * @copydoc Dali::Actor::GetRendererCount()
+ */
+ unsigned int GetRendererCount() const;
+
+ /**
+ * @copydoc Dali::Actor::GetRendererAt()
+ */
+ RendererPtr GetRendererAt( unsigned int index );
+
+ /**
+ * @copydoc Dali::Actor::RemoveRenderer()
+ */
+ void RemoveRenderer( Renderer& renderer );
+
+ /**
+ * @copydoc Dali::Actor::RemoveRenderer()
+ */
+ void RemoveRenderer( unsigned int index );