X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=base%2Fdali-toolkit%2Finternal%2Fcontrols%2Fscrollable%2Fscroll-view%2Fscroll-overshoot-indicator-impl.h;h=ce0b8d563f044e2ea56e0e66a69a2e13de3dd516;hb=2ce55266059eb3dfc3b8a90a5a3ca266bb84674a;hp=04536c57f98a8e7cf3052ed2087fbafc8794c570;hpb=d5e3ed5f5b1c8fdba3ae97ead8729620f54b3836;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-overshoot-indicator-impl.h b/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-overshoot-indicator-impl.h index 04536c5..ce0b8d5 100644 --- a/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-overshoot-indicator-impl.h +++ b/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-overshoot-indicator-impl.h @@ -43,10 +43,8 @@ public: /** * ScrollOvershootIndicator constructor. - * @param[in] scrollView reference to ScrollView implementation - * or horizontally (false) */ - ScrollOvershootIndicator( Scrollable& scrollable); + ScrollOvershootIndicator(); /** * Virtual destructor @@ -54,10 +52,18 @@ public: virtual ~ScrollOvershootIndicator(); /** - * Enables and disables the indicator - * ¶m[in] enable true to enable, false to disable + * Attaches the scroll indicator to a scrollable actor + * + * ¶m[in] scrollable The scrollable actor to attach to */ - void Enable(bool enable); + void AttachToScrollable(Scrollable& scrollable); + + /** + * Detaches the scroll indicator from a scrollable actor + * + * ¶m[in] scrollable The scrollable actor to detach from + */ + void DetachFromScrollable(Scrollable& scrollable); /** * Resets the indicator @@ -66,14 +72,12 @@ public: /** * Create an initialized ScrollOvershootIndicator - * @param[in] scrollView reference to ScrollView implementation - * or horizontally (false) + * * @return A pointer to the created ScrollOvershootIndicator. */ - static ScrollOvershootIndicator* New( Scrollable& scrollable); + static ScrollOvershootIndicator* New(); private: - Scrollable& mScrollable; ///< Internal::Scrollable object ScrollOvershootEffectPtr mEffectX; ///< effect used for x-axis/horizontal display ScrollOvershootEffectPtr mEffectY; ///< effect used for y-axis/vertical display }; @@ -90,7 +94,7 @@ public: * * @param[in] vertical whether this effect is a vertical or horizontal one */ - ScrollOvershootEffect(bool vertical); + ScrollOvershootEffect( bool vertical ); /** * Virtual destructor @@ -102,21 +106,21 @@ public: * * @return true or false */ - inline bool IsVertical() { return mVertical; } + bool IsVertical() const; /** * Applies the indicator effect, all derived effects must implement this function * * @param[in] scrollable the scrollable object to apply this effect to */ - virtual void Apply(Scrollable& scrollable) = 0; + virtual void Apply() = 0; /** * Removes the indicator effect, all derived effects must implement this function * * @param[in] scrollable the scrollable object to remove this effect from */ - virtual void Remove(Scrollable& scrollable) = 0; + virtual void Remove( Scrollable& scrollable ) = 0; /** * Resets this overshoot effect @@ -124,18 +128,9 @@ public: virtual void Reset() = 0; /** - * Updates the constraints used for the overshoot effect - * - * @param[in] scrollable the container for the overshoot effect - */ - virtual void UpdateConstraints(Actor& scrollable) {} - - /** * Sets up property notifications for overshoot values - * - * @param[in] scrollable the container for the overshoot effect */ - virtual void SetPropertyNotifications(Actor& scrollable) {} + virtual void UpdatePropertyNotifications() {} private: bool mVertical; ///< whether this is a vertical/horizontal effect @@ -147,21 +142,31 @@ private: */ struct ScrollOvershootEffectRipple : public ScrollOvershootEffect, public ConnectionTracker { + enum AnimationState + { + AnimatingIn = 0x01, ///< animating overshoot to 0 + AnimatingOut = 0x02, ///< animating overshoot to negative (overshoot image displays in +ve area of screen) + AnimateBack = 0x04, ///< indicates that we need to animate overshoot back to zero immediately after it has finished animating in + }; + public: + /** * Create a new gradient overshoot effect, passing in whether it is vertical or horizontal + * + * @param[in] vertical Whether this indicator is vertical or horizontal */ - ScrollOvershootEffectRipple(bool vertical); + ScrollOvershootEffectRipple( bool vertical, Scrollable& scrollable ); /** * @copydoc ScrollOvershootEffect::Apply */ - virtual void Apply(Scrollable& scrollable); + virtual void Apply(); /** * @copydoc ScrollOvershootEffect::Remove */ - virtual void Remove(Scrollable& scrollable); + virtual void Remove( Scrollable& scrollable ); /** * @copydoc ScrollOvershootEffect::Reset @@ -169,46 +174,33 @@ public: virtual void Reset(); /** - * @copydoc ScrollOvershootEffect::UpdateConstraints(Actor& scrollable) - */ - virtual void UpdateConstraints(Actor& scrollable); - - /** - * @copydoc ScrollOvershootEffect::SetPropertyNotification - */ - virtual void SetPropertyNotifications(Actor& scrollable); - - /** - * Constrains the size of the gradient image - * @param[in] current current position of the image actor - * @param[in] parentSizeProperty size of the scrollable area so we can position image on the edge of it - * @param[in] overshootProperty current overshoot amount for this indicator's axis - * @return new position of the gradient image actor + * @copydoc ScrollOvershootEffect::UpdatePropertyNotifications */ - Vector3 PositionConstraint(const Vector3& current, const PropertyInput& parentSizeProperty, const PropertyInput& overshootProperty); + void UpdatePropertyNotifications(); /** - * Informs overshoot effect to update image position and to animate effect overshoot value for a - * positive overshoot value from scrollview + * Updates the vibility of the overshoot image as well as updating its size, position and rotation + * This function is called when animation starts and finishes * - * @param[in] source the property notification that triggered this callback + * @param[in] visible Whether to set the image visible or not */ - void OnPositiveOvershootNotification(PropertyNotification& source); + void UpdateVisibility( bool visible ); /** * Informs overshoot effect to update image position and to animate effect overshoot value for a - * negative overshoot value from scrollview + * positive overshoot value from scrollview * * @param[in] source the property notification that triggered this callback */ - void OnNegativeOvershootNotification(PropertyNotification& source); + void OnOvershootNotification(PropertyNotification& source); /** - * Function to animate effect overshoot value either to -1.0f/1.0f or 0.0f + * Sets shader overshoot value, either immediately of by animating over time * - * @param[in] overshootAmount the amount to animate overshoot to [-1.0f,0.0f,1.0f] + * @param[in] amount The amount to set overshoot to [-1.0f,1.0f] + * @param[in] animate Whether to animate or set immediately */ - void AnimateScrollOvershoot(float overshootAmount); + void SetOvershoot(float amount, bool animate = true); /** * Connects to the animation finished signal of our overshoot animation @@ -219,24 +211,26 @@ public: /** * Creates a new ScrollOvershootEffectGradient objects and returns a pointer to it + * * @param[in] vertical whether to create a vertical(true) or horizontal effect * @return a pointer to the new effect */ - static ScrollOvershootEffectRipplePtr New( bool vertical ); + static ScrollOvershootEffectRipplePtr New( bool vertical, Scrollable& scrollable ); private: - - float mMaxOvershootImageSize; ///< maximum size of the image when overshoot value is 1.0f - ImageActor mOvershootImage; ///< the overshoot image... - Animation mScrollOvershootAnimation; ///< animation - bool mAnimatingOvershootOn; ///< whether we are currently animating overshoot to 1.0f/-1.0f (on) or to 0.0f (off) - bool mAnimateOvershootOff; ///< whether we are currently animating overshoot to 1.0f/-1.0f (on) or to 0.0f (off) - int mCanScrollPropertyIndex; ///< property index to a property that informs indicator if it is needed - BouncingEffect mRippleEffect; // the ripple vertex/fragment shader effect - PropertyNotification mOvershootPositiveNotification; // stores the property notification used for positive overshoot values - PropertyNotification mOvershootNegativeNotification; // stores the property notification used for negative overshoot values - ActiveConstraint mSizeConstraint; // active constraint handle used to store the image width constraint - ActiveConstraint mPositionConstraint; // active constraint handle used to store the image position constraint + ImageActor mOvershootImage; ///< the overshoot image... + Scrollable& mAttachedScrollView; ///< the actor that this indicator has been attached to + BouncingEffect mRippleEffect; ///< the ripple vertex/fragment shader effect + Animation mScrollOvershootAnimation; ///< overshoot animation + PropertyNotification mOvershootIncreaseNotification;///< notification used to inform as overshoot increases + PropertyNotification mOvershootDecreaseNotification;///< notification used to inform as overshoot decreases + Property::Index mCanScrollPropertyIndex; ///< property index to a property that informs indicator if it is needed + Property::Index mOvershootProperty; ///< index of the overshoot property in the scrollable actor + Property::Index mEffectOvershootProperty; ///< index of the effect's overshoot property + float mMaxOvershootImageSize; ///< maximum height of the image when overshoot value is 1.0f + float mOvershootAnimationDuration; ///< time taken for overshoot to go from fully offscreen to fully onscreen and vice versa + float mOvershoot; ///< last overshoot value as detected by notifications + unsigned short mAnimationStateFlags; ///< contains flags indicating the current state of the overshoot animation }; } // namespace Internal