X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Factors%2Factor-impl.h;h=d601a2011a137ce5a1c773beecd8d34e1290d2b3;hb=cf6aefb867c26e7544b4dbdcb09488d28d1e17c9;hp=41a03fa787b32fb48057e6d7674b6d9268df259f;hpb=c93722c1550a92fb60b19fa8582cadb0ce43eec9;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/actors/actor-impl.h b/dali/internal/event/actors/actor-impl.h index 41a03fa..d601a20 100644 --- a/dali/internal/event/actors/actor-impl.h +++ b/dali/internal/event/actors/actor-impl.h @@ -22,30 +22,27 @@ #include // INTERNAL INCLUDES -#include -#include #include +#include #include #include #include -#include +#include #include -#include #include #include +#include +#include +#include #include -#ifdef DYNAMICS_SUPPORT -#include -#endif - namespace Dali { struct KeyEvent; struct TouchEvent; struct HoverEvent; -struct MouseWheelEvent; +struct WheelEvent; namespace Internal { @@ -54,10 +51,9 @@ class Actor; class ActorGestureData; class Animation; class RenderTask; -struct DynamicsData; +class Renderer; -typedef IntrusivePtr< Actor > ActorPtr; -typedef Dali::ActorContainer ActorContainer; // Store handles to return via public-api +typedef std::vector< ActorPtr > ActorContainer; typedef ActorContainer::iterator ActorIter; typedef ActorContainer::const_iterator ActorConstIter; @@ -86,7 +82,7 @@ public: * @param[in] newActor The actor to assign * @param[in] newDimension The dimension to assign */ - ActorDimensionPair( Actor* newActor, Dimension newDimension ) + ActorDimensionPair( Actor* newActor, Dimension::Type newDimension ) : actor( newActor ), dimension( newDimension ) { @@ -104,7 +100,7 @@ public: } Actor* actor; ///< The actor to hold - Dimension dimension; ///< The dimension to hold + Dimension::Type dimension; ///< The dimension to hold }; typedef std::vector< ActorDimensionPair > ActorDimensionStack; @@ -231,19 +227,7 @@ public: /** * @copydoc Dali::Actor::GetChildAt */ - Dali::Actor GetChildAt( unsigned int index ) const; - - /** - * Retrieve the Actor's children. - * @return A copy of the container of children. - */ - ActorContainer GetChildren(); - - /** - * Retrieve the Actor's children. - * @return A const reference to the container of children. - */ - const ActorContainer& GetChildren() const; + ActorPtr GetChildAt( unsigned int index ) const; /** * Retrieve a reference to Actor's children. @@ -487,6 +471,13 @@ public: const Vector3& GetCurrentPosition() const; /** + * Retrieve the target position of the Actor. + * The coordinates are relative to the Actor's parent. + * @return the Actor's position. + */ + const Vector3& GetTargetPosition() const; + + /** * @copydoc Dali::Actor::GetCurrentWorldPosition() */ const Vector3& GetCurrentWorldPosition() const; @@ -548,14 +539,14 @@ public: /** * Sets the factor of the parents size used for the child actor. - * Note: Only used if ResizePolicy is SIZE_RELATIVE_TO_PARENT or SIZE_FIXED_OFFSET_FROM_PARENT. + * Note: Only used if ResizePolicy is ResizePolicy::SIZE_RELATIVE_TO_PARENT or ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT. * @param[in] factor The vector to multiply the parents size by to get the childs size. */ void SetSizeModeFactor( const Vector3& factor ); /** * Gets the factor of the parents size used for the child actor. - * Note: Only used if ResizePolicy is SIZE_RELATIVE_TO_PARENT or SIZE_FIXED_OFFSET_FROM_PARENT. + * Note: Only used if ResizePolicy is ResizePolicy::SIZE_RELATIVE_TO_PARENT or ResizePolicy::SIZE_FIXED_OFFSET_FROM_PARENT. * @return The vector being used to multiply the parents size by to get the childs size. */ const Vector3& GetSizeModeFactor() const; @@ -717,28 +708,6 @@ public: bool IsOverlay() const; /** - * Sets whether an actor transmits geometry scaling to it's children. - * The default value is for it not to transmit scaling. - * @param[in] transmitGeometryScaling True to transmit scaling. - */ - void SetTransmitGeometryScaling( bool transmitGeometryScaling ); - - /** - * Get the TransmitGeometryScaling property for this actor. - * @return True if geometry scaling is applied to the inherited scale. - */ - bool GetTransmitGeometryScaling() const; - - /** - * Sets the initial volume of the actor. Used for scaling the - * actor appropriately as the actor is sized when transmitGeometryScaling - * is set to true. - * - * @param[in] volume the volume of the model and it's children - */ - void SetInitialVolume( const Vector3& volume ); - - /** * Sets the actor's color. The final color of actor depends on its color mode. * This final color is applied to the drawable elements of an actor. * @param [in] color The new color. @@ -787,6 +756,19 @@ public: */ const Vector4& GetCurrentWorldColor() const; + /** + * @copydoc Dali::Actor::GetHierarchyDepth() + */ + int GetHierarchyDepth() const + { + if( mIsOnStage ) + { + return static_cast(mDepth); + } + + return -1; + } + public: // Size negotiation virtual functions @@ -817,7 +799,7 @@ public: * @param[in] policy The policy being set * @param[in] dimension The dimension the policy is being set for */ - virtual void OnSetResizePolicy( ResizePolicy policy, Dimension dimension ) {} + virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension ) {} /** * @brief Virtual method to notify deriving classes that relayout dependencies have been @@ -825,7 +807,7 @@ public: * * @param dimension The dimension that is about to be calculated */ - virtual void OnCalculateRelayoutSize( Dimension dimension ); + virtual void OnCalculateRelayoutSize( Dimension::Type dimension ); /** * @brief Virtual method to notify deriving classes that the size for a dimension @@ -834,7 +816,7 @@ public: * @param[in] size The new size for the given dimension * @param[in] dimension The dimension that was just negotiated */ - virtual void OnLayoutNegotiated( float size, Dimension dimension ); + virtual void OnLayoutNegotiated( float size, Dimension::Type dimension ); /** * @brief Determine if this actor is dependent on it's children for relayout @@ -842,7 +824,7 @@ public: * @param dimension The dimension(s) to check for * @return Return if the actor is dependent on it's children */ - virtual bool RelayoutDependentOnChildren( Dimension dimension = ALL_DIMENSIONS ); + virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @brief Determine if this actor is dependent on it's children for relayout. @@ -852,7 +834,7 @@ public: * @param dimension The dimension(s) to check for * @return Return if the actor is dependent on it's children */ - virtual bool RelayoutDependentOnChildrenBase( Dimension dimension = ALL_DIMENSIONS ); + virtual bool RelayoutDependentOnChildrenBase( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @brief Calculate the size for a child @@ -861,7 +843,7 @@ public: * @param[in] dimension The dimension to calculate the size for. E.g. width or height. * @return Return the calculated size for the given dimension */ - virtual float CalculateChildSize( const Dali::Actor& child, Dimension dimension ); + virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension ); /** * @brief This method is called during size negotiation when a height is required for a given width. @@ -904,40 +886,44 @@ public: /** * @copydoc Dali::Actor::SetResizePolicy() */ - void SetResizePolicy( ResizePolicy policy, Dimension dimension = ALL_DIMENSIONS ); + void SetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @copydoc Dali::Actor::GetResizePolicy() */ - ResizePolicy GetResizePolicy( Dimension dimension ) const; + ResizePolicy::Type GetResizePolicy( Dimension::Type dimension ) const; /** * @copydoc Dali::Actor::SetSizeScalePolicy() */ - void SetSizeScalePolicy( SizeScalePolicy policy ); + void SetSizeScalePolicy( SizeScalePolicy::Type policy ); /** * @copydoc Dali::Actor::GetSizeScalePolicy() */ - SizeScalePolicy GetSizeScalePolicy() const; + SizeScalePolicy::Type GetSizeScalePolicy() const; /** * @copydoc Dali::Actor::SetDimensionDependency() */ - void SetDimensionDependency( Dimension dimension, Dimension dependency ); + void SetDimensionDependency( Dimension::Type dimension, Dimension::Type dependency ); /** * @copydoc Dali::Actor::GetDimensionDependency() */ - Dimension GetDimensionDependency( Dimension dimension ) const; + Dimension::Type GetDimensionDependency( Dimension::Type dimension ) const; /** - * @copydoc Dali::Actor::SetRelayoutEnabled() + * @brief Set the size negotiation relayout enabled on this actor + * + * @param[in] relayoutEnabled Boolean to enable or disable relayout */ void SetRelayoutEnabled( bool relayoutEnabled ); /** - * @copydoc Dali::Actor::IsRelayoutEnabled() + * @brief Return if relayout is enabled + * + * @return Return if relayout is enabled or not for this actor */ bool IsRelayoutEnabled() const; @@ -947,7 +933,7 @@ public: * @param dirty Whether to mark actor as dirty or not * @param dimension The dimension(s) to mark as dirty */ - void SetLayoutDirty( bool dirty, Dimension dimension = ALL_DIMENSIONS ); + void SetLayoutDirty( bool dirty, Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @brief Return if any of an actor's dimensions are marked as dirty @@ -955,21 +941,21 @@ public: * @param dimension The dimension(s) to check * @return Return if any of the requested dimensions are dirty */ - bool IsLayoutDirty( Dimension dimension = ALL_DIMENSIONS ) const; + bool IsLayoutDirty( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ) const; /** * @brief Returns if relayout is enabled and the actor is not dirty * * @return Return if it is possible to relayout the actor */ - bool RelayoutPossible( Dimension dimension = ALL_DIMENSIONS ) const; + bool RelayoutPossible( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ) const; /** * @brief Returns if relayout is enabled and the actor is dirty * * @return Return if it is required to relayout the actor */ - bool RelayoutRequired( Dimension dimension = ALL_DIMENSIONS ) const; + bool RelayoutRequired( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ) const; /** * @brief Request a relayout, which means performing a size negotiation on this actor, its parent and children (and potentially whole scene) @@ -984,21 +970,7 @@ public: * @note RelayoutRequest() can be called multiple times; the size negotiation is still * only performed once, i.e. there is no need to keep track of this in the calling side. */ - void RelayoutRequest( Dimension dimension = ALL_DIMENSIONS ); - - /** - * @brief Request to relayout of all actors in the sub-tree below the given actor. - * - * This flags the actor and all actors below it for relayout. The actual - * relayout is performed at the end of the frame. This means that multiple calls to relayout - * will not cause multiple relayouts to occur. - */ - void RelayoutRequestTree(); - - /* - * @copydoc Dali::Actor::PropagateRelayoutFlags - */ - void PropagateRelayoutFlags(); + void RelayoutRequest( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @brief Determine if this actor is dependent on it's parent for relayout @@ -1006,7 +978,7 @@ public: * @param dimension The dimension(s) to check for * @return Return if the actor is dependent on it's parent */ - bool RelayoutDependentOnParent( Dimension dimension = ALL_DIMENSIONS ); + bool RelayoutDependentOnParent( Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @brief Determine if this actor has another dimension depedent on the specified one @@ -1015,7 +987,7 @@ public: * @param dependentDimension The dimension to check for dependency with * @return Return if the actor is dependent on this dimension */ - bool RelayoutDependentOnDimension( Dimension dimension, Dimension dependentDimension ); + bool RelayoutDependentOnDimension( Dimension::Type dimension, Dimension::Type dependentDimension ); /** * Negotiate sizes for a control in all dimensions @@ -1037,7 +1009,7 @@ public: * @param[in] dimension The dimension to negotiate on * @param[in] allocatedSize The size constraint that the actor must respect */ - void NegotiateDimension( Dimension dimension, const Vector2& allocatedSize, ActorDimensionStack& recursionStack ); + void NegotiateDimension( Dimension::Type dimension, const Vector2& allocatedSize, ActorDimensionStack& recursionStack ); /** * @brief Calculate the size of a dimension @@ -1046,16 +1018,16 @@ public: * @param[in] maximumSize The upper bounds on the size * @return Return the calculated size for the dimension */ - float CalculateSize( Dimension dimension, const Vector2& maximumSize ); + float CalculateSize( Dimension::Type dimension, const Vector2& maximumSize ); /** - * @brief Constain a dimension given the relayout constraints on this actor + * @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 constrained size + * @return Return the clamped size */ - float ConstrainDimension( float size, Dimension dimension ); + float ClampDimension( float size, Dimension::Type dimension ); /** * Negotiate a dimension based on the size of the parent @@ -1063,7 +1035,7 @@ public: * @param[in] dimension The dimension to negotiate on * @return Return the negotiated size */ - float NegotiateFromParent( Dimension dimension ); + float NegotiateFromParent( Dimension::Type dimension ); /** * Negotiate a dimension based on the size of the parent. Fitting inside. @@ -1071,7 +1043,7 @@ public: * @param[in] dimension The dimension to negotiate on * @return Return the negotiated size */ - float NegotiateFromParentFit( Dimension dimension ); + float NegotiateFromParentFit( Dimension::Type dimension ); /** * Negotiate a dimension based on the size of the parent. Flooding the whole space. @@ -1079,7 +1051,7 @@ public: * @param[in] dimension The dimension to negotiate on * @return Return the negotiated size */ - float NegotiateFromParentFlood( Dimension dimension ); + float NegotiateFromParentFlood( Dimension::Type dimension ); /** * @brief Negotiate a dimension based on the size of the children @@ -1087,7 +1059,7 @@ public: * @param[in] dimension The dimension to negotiate on * @return Return the negotiated size */ - float NegotiateFromChildren( Dimension dimension ); + float NegotiateFromChildren( Dimension::Type dimension ); /** * Set the negotiated dimension value for the given dimension(s) @@ -1095,7 +1067,7 @@ public: * @param negotiatedDimension The value to set * @param dimension The dimension(s) to set the value for */ - void SetNegotiatedDimension( float negotiatedDimension, Dimension dimension = ALL_DIMENSIONS ); + void SetNegotiatedDimension( float negotiatedDimension, Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * Return the value of negotiated dimension for the given dimension @@ -1103,7 +1075,7 @@ public: * @param dimension The dimension to retrieve * @return Return the value of the negotiated dimension */ - float GetNegotiatedDimension( Dimension dimension ) const; + float GetNegotiatedDimension( Dimension::Type dimension ) const; /** * @brief Set the padding for a dimension @@ -1111,7 +1083,7 @@ public: * @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 dimension ); + void SetPadding( const Vector2& padding, Dimension::Type dimension ); /** * Return the value of padding for the given dimension @@ -1119,7 +1091,7 @@ public: * @param dimension The dimension to retrieve * @return Return the value of padding for the dimension */ - Vector2 GetPadding( Dimension dimension ) const; + Vector2 GetPadding( Dimension::Type dimension ) const; /** * Return the actor size for a given dimension @@ -1127,7 +1099,7 @@ public: * @param[in] dimension The dimension to retrieve the size for * @return Return the size for the given dimension */ - float GetSize( Dimension dimension ) const; + float GetSize( Dimension::Type dimension ) const; /** * Return the natural size of the actor for a given dimension @@ -1135,7 +1107,7 @@ public: * @param[in] dimension The dimension to retrieve the size for * @return Return the natural size for the given dimension */ - float GetNaturalSize( Dimension dimension ) const; + float GetNaturalSize( Dimension::Type dimension ) const; /** * @brief Return the amount of size allocated for relayout @@ -1145,7 +1117,7 @@ public: * @param[in] dimension The dimension to retrieve * @return Return the size */ - float GetRelayoutSize( Dimension dimension ) const; + float GetRelayoutSize( Dimension::Type dimension ) const; /** * @brief If the size has been negotiated return that else return normal size @@ -1153,7 +1125,7 @@ public: * @param[in] dimension The dimension to retrieve * @return Return the size */ - float GetLatestSize( Dimension dimension ) const; + float GetLatestSize( Dimension::Type dimension ) const; /** * Apply the negotiated size to the actor @@ -1168,7 +1140,7 @@ public: * @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 dimension = ALL_DIMENSIONS ); + void SetLayoutNegotiated( bool negotiated, Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @brief Test whether the layout dimension for this actor has been negotiated or not. @@ -1176,7 +1148,21 @@ public: * @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 dimension = ALL_DIMENSIONS ) const; + 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 @@ -1185,7 +1171,7 @@ public: * @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 dimension ); + float CalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension ); /** * @brief Set the preferred size for size negotiation @@ -1204,110 +1190,50 @@ public: /** * @copydoc Dali::Actor::SetMinimumSize */ - void SetMinimumSize( float size, Dimension dimension = ALL_DIMENSIONS ); + void SetMinimumSize( float size, Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @copydoc Dali::Actor::GetMinimumSize */ - float GetMinimumSize( Dimension dimension ) const; + float GetMinimumSize( Dimension::Type dimension ) const; /** * @copydoc Dali::Actor::SetMaximumSize */ - void SetMaximumSize( float size, Dimension dimension = ALL_DIMENSIONS ); + void SetMaximumSize( float size, Dimension::Type dimension = Dimension::ALL_DIMENSIONS ); /** * @copydoc Dali::Actor::GetMaximumSize */ - float GetMaximumSize( Dimension dimension ) const; - -#ifdef DYNAMICS_SUPPORT - - // Dynamics - - /// @copydoc Dali::Actor::DisableDynamics - void DisableDynamics(); - - /// @copydoc Dali::Actor::EnableDynamics(Dali::DynamicsBodyConfig) - DynamicsBodyPtr EnableDynamics(DynamicsBodyConfigPtr bodyConfig); - - /// @copydoc Dali::Actor::GetDynamicsBody - DynamicsBodyPtr GetDynamicsBody() const; - - /// @copydoc Dali::Actor::AddDynamicsJoint(Dali::Actor,const Vector3&) - DynamicsJointPtr AddDynamicsJoint( ActorPtr attachedActor, const Vector3& offset ); - - /// @copydoc Dali::Actor::AddDynamicsJoint(Dali::Actor,const Vector3&,const Vector3&) - DynamicsJointPtr AddDynamicsJoint( ActorPtr attachedActor, const Vector3& offsetA, const Vector3& offsetB ); - - /// @copydoc Dali::Actor::GetNumberOfJoints - const int GetNumberOfJoints() const; - - /// @copydoc Dali::Actor::GetDynamicsJointByIndex - DynamicsJointPtr GetDynamicsJointByIndex( const int index ) const; - - /// @copydoc Dali::Actor::GetDynamicsJoint - DynamicsJointPtr GetDynamicsJoint( ActorPtr attachedActor ) const; - - /// @copydoc Dali::Actor::RemoveDynamicsJoint - void RemoveDynamicsJoint( DynamicsJointPtr joint ); - - /** - * Hold a reference to a DynamicsJoint - * @param[in] joint The joint - */ - void ReferenceJoint( DynamicsJointPtr joint ); - - /** - * Release a reference to a DynamicsJoint - * @param[in] joint The joint - */ - void ReleaseJoint( DynamicsJointPtr joint ); - - /** - * Set this actor to be the root actor in the dynamics simulation - * All children of the actor are added/removed from the simulation. - * @param[in] flag When true sets this actor to be the simulation world root actor and - * if OnStage() all dynamics enabled child actors are added to the simulation, - * when false stops this actor being the simulation root and if OnStage() all - * dynamics enabled child actors are removed from the simulation. - */ - void SetDynamicsRoot(bool flag); - -private: + float GetMaximumSize( Dimension::Type dimension ) const; + /** - * Check if this actor is the root actor in the dynamics simulation - * @return true if this is the dynamics root actor. + * @copydoc Dali::Actor::AddRenderer() */ - bool IsDynamicsRoot() const; + unsigned int AddRenderer( Renderer& renderer ); /** - * Add actor to the dynamics simulation - * Invoked when the actor is staged, or it's parent becomes the simulation root + * @copydoc Dali::Actor::GetRendererCount() */ - void ConnectDynamics(); + unsigned int GetRendererCount() const; /** - * Remove actor from the dynamics simulation - * Invoked when the actor is unstaged, or it's parent stops being the the simulation root + * @copydoc Dali::Actor::GetRendererAt() */ - void DisconnectDynamics(); + Renderer& GetRendererAt( unsigned int index ); /** - * An actor in a DynamicsJoint relationship has been staged - * @param[in] actor The actor passed into AddDynamicsJoint() + * @copydoc Dali::Actor::RemoveRenderer() */ - void AttachedActorOnStage( Dali::Actor actor ); + void RemoveRenderer( Renderer& renderer ); /** - * An actor in a DynamicsJoint relationship has been unstaged - * @param[in] actor The actor passed into AddDynamicsJoint() + * @copydoc Dali::Actor::RemoveRenderer() */ - void AttachedActorOffStage( Dali::Actor actor ); - -#endif // DYNAMICS_SUPPORT + void RemoveRenderer( unsigned int index ); public: + /** * Converts screen coordinates into the actor's coordinate system. * @note The actor coordinates are relative to the top-left (0.0, 0.0, 0.5) @@ -1415,10 +1341,10 @@ public: bool GetHoverRequired() const; /** - * Query whether the application or derived actor type requires mouse wheel events. - * @return True if mouse wheel events are required. + * Query whether the application or derived actor type requires wheel events. + * @return True if wheel events are required. */ - bool GetMouseWheelEventRequired() const; + bool GetWheelEventRequired() const; /** * Query whether the actor is actually hittable. This method checks whether the actor is @@ -1462,11 +1388,11 @@ public: bool EmitHoverEventSignal( const HoverEvent& event ); /** - * Used by the EventProcessor to emit mouse wheel event signals. - * @param[in] event The mouse wheel event. + * Used by the EventProcessor to emit wheel event signals. + * @param[in] event The wheel event. * @return True if the event was consumed. */ - bool EmitMouseWheelEventSignal( const MouseWheelEvent& event ); + bool EmitWheelEventSignal( const WheelEvent& event ); /** * @copydoc Dali::Actor::TouchedSignal() @@ -1479,9 +1405,9 @@ public: Dali::Actor::HoverSignalType& HoveredSignal(); /** - * @copydoc Dali::Actor::MouseWheelEventSignal() + * @copydoc Dali::Actor::WheelEventSignal() */ - Dali::Actor::MouseWheelEventSignalType& MouseWheelEventSignal(); + Dali::Actor::WheelEventSignalType& WheelEventSignal(); /** * @copydoc Dali::Actor::OnStageSignal() @@ -1521,13 +1447,13 @@ public: */ static bool DoAction( BaseObject* object, const std::string& actionName, - const std::vector< Property::Value >& attributes ); + const Property::Map& attributes ); public: // For Animation /** - * This should only be called by Animation, when the actor is resized using Animation::Resize(). + * This should only be called by Animation, when the actors SIZE property is animated. * * @param[in] animation The animation that resized the actor * @param[in] targetSize The new target size of the actor @@ -1535,6 +1461,14 @@ public: void NotifySizeAnimation( Animation& animation, const Vector3& targetSize ); /** + * This should only be called by Animation, when the actors SIZE_WIDTH or SIZE_HEIGHT property is animated. + * + * @param[in] animation The animation that resized the actor + * @param[in] targetSize The new target size of the actor + */ + void NotifySizeAnimation( Animation& animation, float targetSize, Property::Index property ); + + /** * For use in derived classes. * This should only be called by Animation, when the actor is resized using Animation::Resize(). */ @@ -1569,17 +1503,19 @@ 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. */ - void ConnectToStage( int index = -1 ); + void ConnectToStage( unsigned int parentDepth, int index = -1 ); /** * 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[out] connectionList On return, the list of connected actors which require notification. */ - void RecursiveConnectToStage( ActorContainer& connectionList, int index = -1 ); + void RecursiveConnectToStage( ActorContainer& connectionList, unsigned int depth, int index = -1 ); /** * Connect the Node associated with this Actor to the scene-graph. @@ -1766,7 +1702,7 @@ private: * For use in external (CustomActor) derived classes. * This is called after the atomic ConnectToStage() traversal has been completed. */ - virtual void OnStageConnectionExternal() + virtual void OnStageConnectionExternal( int depth ) { } @@ -1826,11 +1762,11 @@ private: /** * For use in derived classes. - * This is only called if the mouse wheel signal was not consumed. - * @param[in] event The mouse event. + * This is only called if the wheel signal was not consumed. + * @param[in] event The wheel event. * @return True if the event should be consumed. */ - virtual bool OnMouseWheelEvent( const MouseWheelEvent& event ) + virtual bool OnWheelEvent( const WheelEvent& event ) { return false; } @@ -1838,7 +1774,7 @@ private: /** * @brief Ensure the relayout data is allocated */ - void EnsureRelayoutData() const; + void EnsureRelayoutData(); /** * @brief Apply the size set policy to the input size @@ -1850,7 +1786,6 @@ private: protected: - StagePtr mStage; ///< Used to send messages to Node; valid until Core destruction Actor* mParent; ///< Each actor (except the root) can have one parent ActorContainer* mChildren; ///< Container of referenced actors const SceneGraph::Node* mNode; ///< Not owned @@ -1858,11 +1793,7 @@ protected: Vector3* mAnchorPoint; ///< NULL means AnchorPoint::DEFAULT. AnchorPoint is non-animatable struct RelayoutData; - mutable RelayoutData* mRelayoutData; ///< Struct to hold optional collection of relayout variables - -#ifdef DYNAMICS_SUPPORT - DynamicsData* mDynamicsData; ///< optional physics data -#endif + RelayoutData* mRelayoutData; ///< Struct to hold optional collection of relayout variables ActorGestureData* mGestureData; ///< Optional Gesture data. Only created when actor requires gestures @@ -1871,28 +1802,30 @@ protected: // Signals Dali::Actor::TouchSignalType mTouchedSignal; Dali::Actor::HoverSignalType mHoveredSignal; - Dali::Actor::MouseWheelEventSignalType mMouseWheelEventSignal; + Dali::Actor::WheelEventSignalType mWheelEventSignal; Dali::Actor::OnStageSignalType mOnStageSignal; Dali::Actor::OffStageSignalType mOffStageSignal; Dali::Actor::OnRelayoutSignalType mOnRelayoutSignal; - Vector3 mTargetSize; ///< Event-side storage for size (not a pointer as most actors will have a size) + Vector3 mTargetSize; ///< Event-side storage for size (not a pointer as most actors will have a size) + Vector3 mTargetPosition; ///< Event-side storage for position (not a pointer as most actors will have a position) 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 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 bool mIsOnStage : 1; ///< Flag to identify whether the actor is on-stage - bool mIsDynamicsRoot : 1; ///< Flag to identify if this is the dynamics world root bool mSensitive : 1; ///< Whether the actor emits touch event signals bool mLeaveRequired : 1; ///< Whether a touch event signal is emitted when the a touch leaves the actor's bounds bool mKeyboardFocusable : 1; ///< Whether the actor should be focusable by keyboard navigation bool mDerivedRequiresTouch : 1; ///< Whether the derived actor type requires touch event signals bool mDerivedRequiresHover : 1; ///< Whether the derived actor type requires hover event signals - bool mDerivedRequiresMouseWheelEvent : 1; ///< Whether the derived actor type requires mouse wheel event signals + bool mDerivedRequiresWheelEvent : 1; ///< Whether the derived actor type requires wheel event signals bool mOnStageSignalled : 1; ///< Set to true before OnStageConnection signal is emitted, and false before OnStageDisconnection + bool mInsideOnSizeSet : 1; ///< Whether we are inside OnSizeSet bool mInheritOrientation : 1; ///< Cached: Whether the parent's orientation should be inherited. bool mInheritScale : 1; ///< Cached: Whether the parent's scale should be inherited. DrawMode::Type mDrawMode : 2; ///< Cached: How the actor and its children should be drawn