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
{
WrappedQuaternionConstraint( Dali::Toolkit::ItemLayout::QuaternionFunction wrapMe, unsigned int itemId )
:mWrapMe(wrapMe),
- mItemId(itemId)
+ mItemId(itemId),
+ mInitialised( false )
{
}
float offsetLayoutPosition = inputs[0]->GetFloat() + static_cast<float>(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 )
{
}
float offsetLayoutPosition = inputs[0]->GetFloat() + static_cast<float>(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 )
{
}
float offsetLayoutPosition = inputs[0]->GetFloat() + static_cast<float>(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
ItemLayout::ItemLayout()
: mOrientation( ControlOrientation::Up ),
- mAlphaFunction( AlphaFunctions::Linear ),
+ mAlphaFunction( AlphaFunction::LINEAR ),
mWeightObject()
{
}
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();
}
}