[problem] Scroll-view can get stuck if it doesn't receive an up event after it receives a down
[cause] It is no longer the hit-actor (or a parent of the hit-actor).
[solution] Together with the core change (Emit Up to down consumer) -> comes as interrupted
React to interrupted event now in a similar manner to up event
Change-Id: I3c44276e3f8168fb2d9e9016e11f6ce497b40761
Signed-off-by: Adeel Kazmi <adeel.kazmi@samsung.com>
- if( event.GetPoint(0).state == TouchPoint::Down )
+ const TouchPoint::State pointState = event.GetPoint(0).state;
+ if( pointState == TouchPoint::Down )
{
DALI_LOG_SCROLL_STATE("[0x%X] Down", this);
{
DALI_LOG_SCROLL_STATE("[0x%X] Down", this);
StartTouchDownTimer();
}
}
StartTouchDownTimer();
}
}
- else if( event.GetPoint(0).state == TouchPoint::Up )
+ else if( ( pointState == TouchPoint::Up ) ||
+ ( ( pointState == TouchPoint::Interrupted ) && ( event.GetPoint(0).hitActor == Self() ) ) )
- DALI_LOG_SCROLL_STATE("[0x%X] Up", this);
+ DALI_LOG_SCROLL_STATE("[0x%X] %s", this, ( ( pointState == TouchPoint::Up ) ? "Up" : "Interrupted" ) );
// otherwise our scroll could be stopped (interrupted) half way through an animation.
if(mGestureStackDepth==0 && mTouchDownTimeoutReached)
{
// otherwise our scroll could be stopped (interrupted) half way through an animation.
if(mGestureStackDepth==0 && mTouchDownTimeoutReached)
{
- unsigned timeDelta( event.time - mTouchDownTime );
- if ( timeDelta >= MINIMUM_TIME_BETWEEN_DOWN_AND_UP_FOR_RESET )
+ if( ( event.GetPoint(0).state == TouchPoint::Interrupted ) ||
+ ( ( event.time - mTouchDownTime ) >= MINIMUM_TIME_BETWEEN_DOWN_AND_UP_FOR_RESET ) )
{
// Reset the velocity only if down was received a while ago
mLastVelocity = Vector2( 0.0f, 0.0f );
{
// Reset the velocity only if down was received a while ago
mLastVelocity = Vector2( 0.0f, 0.0f );