[problem] If wrapping is on, the overshoot animation would still be animated for 0.35s
[cause] Values used to compare were at opposite ends of scroll view due to wrapping
[solution] Wrap the correct value back round so in wrapping mode they were both the same, in this case Snapping overshoot is avoided
Change-Id: I4d85cc5cb814a4cdc48c3edca66a7d4e6bc945ad
Signed-off-by: Julien Heanley <j.heanley@partner.samsung.com>
Signed-off-by: Adeel Kazmi <adeel.kazmi@samsung.com>
Vector3 currentScrollPosition = GetCurrentScrollPosition();
Self().SetProperty( mPropertyScrollStartPagePosition, currentScrollPosition );
Vector3 currentScrollPosition = GetCurrentScrollPosition();
Self().SetProperty( mPropertyScrollStartPagePosition, currentScrollPosition );
- if(mScrolling) // are we interrupting a current scroll?
+ if( mScrolling ) // are we interrupting a current scroll?
{
// set mScrolling to false, in case user has code that interrogates mScrolling Getter() in complete.
mScrolling = false;
{
// set mScrolling to false, in case user has code that interrogates mScrolling Getter() in complete.
mScrolling = false;
if(mRulerX->IsEnabled())
{
if(mRulerX->IsEnabled())
{
- float dir = VectorInDomain(-mScrollPostPosition.x, -mScrollTargetPosition.x, rulerDomainX.min, rulerDomainX.max, horizontalBias);
- mScrollTargetPosition.x = mScrollPostPosition.x + -dir;
+ float dir = VectorInDomain(-mScrollPrePosition.x, -mScrollTargetPosition.x, rulerDomainX.min, rulerDomainX.max, horizontalBias);
+ mScrollTargetPosition.x = mScrollPrePosition.x + -dir;
}
if(mRulerY->IsEnabled())
{
}
if(mRulerY->IsEnabled())
{
- float dir = VectorInDomain(-mScrollPostPosition.y, -mScrollTargetPosition.y, rulerDomainY.min, rulerDomainY.max, verticalBias);
- mScrollTargetPosition.y = mScrollPostPosition.y + -dir;
+ float dir = VectorInDomain(-mScrollPrePosition.y, -mScrollTargetPosition.y, rulerDomainY.min, rulerDomainY.max, verticalBias);
+ mScrollTargetPosition.y = mScrollPrePosition.y + -dir;
{
self.SetProperty(mPropertyPrePosition, mScrollTargetPosition);
mScrollPrePosition = mScrollTargetPosition;
{
self.SetProperty(mPropertyPrePosition, mScrollTargetPosition);
mScrollPrePosition = mScrollTargetPosition;
+ mScrollPostPosition = mScrollTargetPosition;
+ WrapPosition(mScrollPostPosition);
scrollingFinished = true;
}
mInternalXAnimation.Reset();
scrollingFinished = true;
}
mInternalXAnimation.Reset();
+ // wrap pre scroll x position and set it
+ if( mWrapMode )
+ {
+ const RulerDomain rulerDomain = mRulerX->GetDomain();
+ mScrollPrePosition.x = -WrapInDomain(-mScrollPrePosition.x, rulerDomain.min, rulerDomain.max);
+ handle.SetProperty(mPropertyPrePosition, mScrollPrePosition);
+ }
SnapInternalXTo(mScrollPostPosition.x);
}
SnapInternalXTo(mScrollPostPosition.x);
}
scrollingFinished = true;
}
mInternalYAnimation.Reset();
scrollingFinished = true;
}
mInternalYAnimation.Reset();
+ if( mWrapMode )
+ {
+ // wrap pre scroll y position and set it
+ const RulerDomain rulerDomain = mRulerY->GetDomain();
+ mScrollPrePosition.y = -WrapInDomain(-mScrollPrePosition.y, rulerDomain.min, rulerDomain.max);
+ handle.SetProperty(mPropertyPrePosition, mScrollPrePosition);
+ }
SnapInternalYTo(mScrollPostPosition.y);
}
SnapInternalYTo(mScrollPostPosition.y);
}
SetScrollUpdateNotification(false);
mScrolling = false;
Self().SetProperty(mPropertyScrolling, false);
SetScrollUpdateNotification(false);
mScrolling = false;
Self().SetProperty(mPropertyScrolling, false);
+
+ if( fabs(mScrollPrePosition.x - mScrollTargetPosition.x) > Math::MACHINE_EPSILON_10 )
+ {
+ SnapInternalXTo(mScrollTargetPosition.x);
+ }
+ if( fabs(mScrollPrePosition.y - mScrollTargetPosition.y) > Math::MACHINE_EPSILON_10 )
+ {
+ SnapInternalYTo(mScrollTargetPosition.y);
+ }
Vector3 currentScrollPosition = GetCurrentScrollPosition();
DALI_LOG_SCROLL_STATE("[0x%X] mScrollCompletedSignalV2 6 [%.2f, %.2f]", this, currentScrollPosition.x, currentScrollPosition.y);
mScrollCompletedSignalV2.Emit( currentScrollPosition );
Vector3 currentScrollPosition = GetCurrentScrollPosition();
DALI_LOG_SCROLL_STATE("[0x%X] mScrollCompletedSignalV2 6 [%.2f, %.2f]", this, currentScrollPosition.x, currentScrollPosition.y);
mScrollCompletedSignalV2.Emit( currentScrollPosition );