/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2015 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
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()
{
}
return GetScrollSpeedFactor();
}
-void ItemLayout::ApplyConstraints( Actor& actor, const int itemId, const float durationSeconds, Handle scrollPositionObject, const Actor& itemViewActor )
+void ItemLayout::ApplyConstraints( Actor& actor, const int itemId, const float durationSeconds, const Actor& itemViewActor )
{
// This just implements the default behaviour of constraint application.
// Custom layouts can override this function to apply their custom constraints.
- Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast( itemViewActor );
- if(itemView && scrollPositionObject)
+ Toolkit::ItemView itemView = Toolkit::ItemView::DownCast( itemViewActor );
+ if(itemView)
{
- Property::Index scrollSpeedProperty = itemView.GetPropertyIndex("item-view-scroll-speed");
- Property::Index scrollPositionProperty = scrollPositionObject.GetPropertyIndex("scroll-position");
-
// We want to animate the layout in so use a weight object to do this
if ( !mWeightObject )
{
{
WrappedVector3Constraint wrapped(positionConstraint, itemId);
Constraint constraint = Constraint::New<Vector3>( actor, Actor::Property::POSITION, wrapped );
- constraint.AddSource( Source( scrollPositionObject, scrollPositionProperty ) );
- constraint.AddSource( ParentSource( scrollSpeedProperty ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_POSITION ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_SPEED ) );
constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
constraint.AddSource( Source( mWeightObject, WeightObject::WEIGHT ) );
constraint.Apply();
WrappedQuaternionConstraint wrapped(rotationConstraint, itemId);
Constraint constraint = Constraint::New<Quaternion>( actor, Actor::Property::ORIENTATION, wrapped );
- constraint.AddSource( Source( scrollPositionObject, scrollPositionProperty ) );
- constraint.AddSource( ParentSource( scrollSpeedProperty ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_POSITION ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_SPEED ) );
constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
constraint.AddSource( Source( mWeightObject, WeightObject::WEIGHT ) );
constraint.Apply();
WrappedVector3Constraint wrapped(scaleConstraint, itemId);
Constraint constraint = Constraint::New<Vector3>( actor, Actor::Property::SCALE, wrapped );
- constraint.AddSource( Source( scrollPositionObject, scrollPositionProperty ) );
- constraint.AddSource( ParentSource( scrollSpeedProperty ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_POSITION ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_SPEED ) );
constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
constraint.AddSource( Source( mWeightObject, WeightObject::WEIGHT ) );
constraint.Apply();
WrappedVector4Constraint wrapped(colorConstraint, itemId);
Constraint constraint = Constraint::New<Vector4>( actor, Actor::Property::COLOR, wrapped );
- constraint.AddSource( Source( scrollPositionObject, scrollPositionProperty ) );
- constraint.AddSource( ParentSource( scrollSpeedProperty ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_POSITION ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_SPEED ) );
constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
constraint.AddSource( Source( mWeightObject, WeightObject::WEIGHT ) );
constraint.SetRemoveAction(Dali::Constraint::Discard);
WrappedBoolConstraint wrapped(visibilityConstraint, itemId);
Constraint constraint = Constraint::New<bool>( actor, Actor::Property::VISIBLE, wrapped );
- constraint.AddSource( Source( scrollPositionObject, scrollPositionProperty ) );
- constraint.AddSource( ParentSource( scrollSpeedProperty ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::LAYOUT_POSITION ) );
+ constraint.AddSource( ParentSource( Toolkit::ItemView::Property::SCROLL_SPEED ) );
constraint.AddSource( ParentSource( Actor::Property::SIZE ) );
constraint.AddSource( Source( mWeightObject, WeightObject::WEIGHT ) );
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();
}
}