From c80891229bdd801ce5cbc02d68453b4aa7b59397 Mon Sep 17 00:00:00 2001
From: Paul Wisbey
Date: Fri, 23 May 2014 15:54:39 +0100
Subject: [PATCH 1/1] Partial fix for homescreen panning issue
[problem] When flicking left-right quickly, sometimes homescreen page does not move
[cause] In some cases this is caused by ScrollView using a value before the update
thread has had time to react.
[solution] Added guard logic in positionSnap calculation.
---
.../controls/scrollable/scroll-view/scroll-view-impl.cpp | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp b/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp
index 395a3cb..b11b64c 100644
--- a/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp
+++ b/base/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp
@@ -1357,6 +1357,8 @@ bool ScrollView::SnapWithVelocity(Vector2 velocity)
const float orthoAngleRange = FLICK_ORTHO_ANGLE_RANGE * M_PI / 180.0f;
const float flickSpeedThreshold2 = FLICK_SPEED_THRESHOLD*FLICK_SPEED_THRESHOLD;
+ Vector3 positionSnap = mScrollPostPosition;
+
// Flick logic X Axis
if(mRulerX->IsEnabled())
@@ -1368,10 +1370,18 @@ bool ScrollView::SnapWithVelocity(Vector2 velocity)
if((angle >= -orthoAngleRange) && (angle < orthoAngleRange)) // Swiping East
{
biasX = 0.0f, horizontal = Left;
+
+ // This guards against an error where no movement occurs, due to the flick finishing
+ // before the update-thread has advanced mScrollPostPosition past the the previous snap point.
+ positionSnap.x += 1.0f;
}
else if((angle >= M_PI-orthoAngleRange) || (angle < -M_PI+orthoAngleRange)) // Swiping West
{
biasX = 1.0f, horizontal = Right;
+
+ // This guards against an error where no movement occurs, due to the flick finishing
+ // before the update-thread has advanced mScrollPostPosition past the the previous snap point.
+ positionSnap.x -= 1.0f;
}
}
}
@@ -1406,8 +1416,7 @@ bool ScrollView::SnapWithVelocity(Vector2 velocity)
alphaFunction = mFlickAlphaFunction;
}
- // Position Snap ////////////////////////////////////////////////////////////
- Vector3 positionSnap = mScrollPostPosition;
+ // Calculate next positionSnap ////////////////////////////////////////////////////////////
if(mActorAutoSnapEnabled)
{
--
2.7.4