X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Fpublic-api%2Fcontrols%2Fscrollable%2Fitem-view%2Fitem-layout.cpp;h=6b570ccf57fc15735d3fbf9a3927852205109fc6;hb=ac9c307fe5d0ab147938397a7d078fb858cc1f4b;hp=81f50bc5fd87335871309e12bc4ee90bef0a09c2;hpb=68106e2cbb8541c18a77f39770ea7759f44e02a0;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.cpp b/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.cpp index 81f50bc..6b570cc 100644 --- a/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.cpp +++ b/dali-toolkit/public-api/controls/scrollable/item-view/item-layout.cpp @@ -29,11 +29,11 @@ namespace { -// Lerps between current and target using the progress +// Lerps between initial and target using the progress template< typename Type > -void Lerp( Type& current, const Type& target, float progress ) +void Lerp( Type& current, const Type& initial, const Type& target, float progress ) { - current += ((target - current) * progress); + current = initial + ((target - initial) * progress); } // Functors which wrap constraint functions with stored item IDs @@ -41,7 +41,8 @@ struct WrappedQuaternionConstraint { WrappedQuaternionConstraint( Dali::Toolkit::ItemLayout::QuaternionFunction wrapMe, unsigned int itemId ) :mWrapMe(wrapMe), - mItemId(itemId) + mItemId(itemId), + mInitialised( false ) { } @@ -50,18 +51,28 @@ struct WrappedQuaternionConstraint float offsetLayoutPosition = inputs[0]->GetFloat() + static_cast(mItemId); float weight = inputs[3]->GetFloat(); - current = Dali::Quaternion::Slerp( current, mWrapMe( current, offsetLayoutPosition, inputs[1]->GetFloat(), inputs[2]->GetVector3() ), weight ); + if( !mInitialised ) + { + mInitialised = true; + mInitial = current; + } + + current = Dali::Quaternion::Slerp( mInitial, mWrapMe( current, offsetLayoutPosition, inputs[1]->GetFloat(), inputs[2]->GetVector3() ), weight ); } Dali::Toolkit::ItemLayout::QuaternionFunction mWrapMe; unsigned int mItemId; + Dali::Quaternion mInitial; + bool mInitialised:1; }; struct WrappedVector3Constraint { WrappedVector3Constraint( Dali::Toolkit::ItemLayout::Vector3Function wrapMe, unsigned int itemId ) : mWrapMe(wrapMe), - mItemId(itemId) + mItemId(itemId), + mInitial(), + mInitialised( false ) { } @@ -70,18 +81,28 @@ struct WrappedVector3Constraint float offsetLayoutPosition = inputs[0]->GetFloat() + static_cast(mItemId); float weight = inputs[3]->GetFloat(); - Lerp( current, mWrapMe( current, offsetLayoutPosition, inputs[1]->GetFloat(), inputs[2]->GetVector3() ), weight ); + if( !mInitialised ) + { + mInitialised = true; + mInitial = current; + } + + Lerp( current, mInitial, mWrapMe( current, offsetLayoutPosition, inputs[1]->GetFloat(), inputs[2]->GetVector3() ), weight ); } Dali::Toolkit::ItemLayout::Vector3Function mWrapMe; unsigned int mItemId; + Dali::Vector3 mInitial; + bool mInitialised:1; }; struct WrappedVector4Constraint { WrappedVector4Constraint( Dali::Toolkit::ItemLayout::Vector4Function wrapMe, unsigned int itemId ) : mWrapMe(wrapMe), - mItemId(itemId) + mItemId(itemId), + mInitial(), + mInitialised( false ) { } @@ -90,11 +111,19 @@ struct WrappedVector4Constraint float offsetLayoutPosition = inputs[0]->GetFloat() + static_cast(mItemId); float weight = inputs[3]->GetFloat(); - Lerp( current, mWrapMe( current, offsetLayoutPosition, inputs[1]->GetFloat(), inputs[2]->GetVector3() ), weight ); + if( !mInitialised ) + { + mInitialised = true; + mInitial = current; + } + + Lerp( current, mInitial, mWrapMe( current, offsetLayoutPosition, inputs[1]->GetFloat(), inputs[2]->GetVector3() ), weight ); } Dali::Toolkit::ItemLayout::Vector4Function mWrapMe; unsigned int mItemId; + Dali::Vector4 mInitial; + bool mInitialised:1; }; struct WrappedBoolConstraint @@ -130,7 +159,7 @@ namespace Toolkit ItemLayout::ItemLayout() : mOrientation( ControlOrientation::Up ), - mAlphaFunction( AlphaFunctions::Linear ), + mAlphaFunction( AlphaFunction::LINEAR ), mWeightObject() { } @@ -291,7 +320,7 @@ void ItemLayout::ApplyConstraints( Actor& actor, const int itemId, const float d keyFrames.Add( 1.0f, 1.0f ); Animation applyAnimation = Dali::Animation::New( durationSeconds ); - applyAnimation.AnimateBetween( Property( mWeightObject, WeightObject::WEIGHT ), keyFrames, mAlphaFunction, durationSeconds ); + applyAnimation.AnimateBetween( Property( mWeightObject, WeightObject::WEIGHT ), keyFrames, mAlphaFunction, TimePeriod(durationSeconds) ); applyAnimation.Play(); } }