+void ScrollView::StartTouchDownTimer()
+{
+ if ( !mTouchDownTimer )
+ {
+ mTouchDownTimer = Timer::New( TOUCH_DOWN_TIMER_INTERVAL );
+ mTouchDownTimer.TickSignal().Connect( this, &ScrollView::OnTouchDownTimeout );
+ }
+
+ mTouchDownTimer.Start();
+}
+
+void ScrollView::StopTouchDownTimer()
+{
+ if ( mTouchDownTimer )
+ {
+ mTouchDownTimer.Stop();
+ }
+}
+
+bool ScrollView::OnTouchDownTimeout()
+{
+ mTouchDownTimeoutReached = true;
+
+ if( mSnapAnimation || mSnapXAnimation || mSnapYAnimation || mSnapOvershootAnimation )
+ {
+ mScrollInterrupted = true;
+ StopAnimation();
+ }
+
+ if(mScrolling) // are we interrupting a current scroll?
+ {
+ // reset domain offset as scrolling from original plane.
+ mDomainOffset = Vector3::ZERO;
+ Self().SetProperty(mPropertyDomainOffset, Vector3::ZERO);
+
+ mScrolling = false;
+ Vector3 currentScrollPosition = GetCurrentScrollPosition();
+ mScrollCompletedSignalV2.Emit( currentScrollPosition );
+ }
+
+ return false;
+}
+