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