void CScrollView::onTouchMoved(Touch *pTouch, float fDuration) { Vec2 tNodePoint = convertToNodeSpace(pTouch->getLocation()); if( m_pSelectedWidget ) { if( m_eSelectedWidgetTouchModel == eWidgetTouchTransient && !m_bTouchMoved ) { float fDistance = tNodePoint.getDistance(m_tTouchBeganPoint); if(!m_bTouchMoved && fabs(ccScrollconvertPointToInch(fDistance)) < CSCROLLVIEW_MOVE_INCH) { m_pSelectedWidget->executeTouchMovedHandler(pTouch, fDuration); return; } m_bTouchMoved = true; m_pSelectedWidget->interruptTouch(pTouch, fDuration); } if(!m_pSelectedWidget->isTouchInterrupted()) { m_pSelectedWidget->executeTouchMovedHandler(pTouch, fDuration); if(!m_pSelectedWidget->isTouchInterrupted()) { return; } } } if( !m_bDragging ) { m_tTouchBeganPoint = tNodePoint; m_tLastMovePoint = tNodePoint; m_bDragging = true; stoppedDeaccelerateScroll(); stoppedAnimatedScroll(); } if( m_bDragable ) { m_tScrollDistance = tNodePoint - m_tLastMovePoint; m_tLastMovePoint = tNodePoint; switch( m_eDirection ) { case eScrollViewDirectionHorizontal: m_tScrollDistance.y = 0; break; case eScrollViewDirectionVertical: m_tScrollDistance.x = 0; break; default: break; } setContentOffset( getContentOffset() + m_tScrollDistance ); } }
CWidgetTouchModel CScrollView::onTouchBegan(Touch *pTouch) { Vec2 tNodePoint = convertToNodeSpace(pTouch->getLocation()); if( m_pContainer->getBoundingBox().containsPoint(tNodePoint) ) { m_pSelectedWidget = m_pContainer; } else { m_pSelectedWidget = NULL; } if( m_pSelectedWidget ) { m_eSelectedWidgetTouchModel = m_pSelectedWidget->executeTouchBeganHandler(pTouch); if( m_eSelectedWidgetTouchModel == eWidgetTouchNone ) { m_pSelectedWidget = NULL; } } m_tTouchBeganPoint = tNodePoint; if( m_eSelectedWidgetTouchModel == eWidgetTouchNone && m_bDragable ) { m_tLastMovePoint = tNodePoint; m_bDragging = true; stoppedDeaccelerateScroll(); stoppedAnimatedScroll(); } return eWidgetTouchSustained; }
void CScrollView::performedAnimatedScrolling(float dt) { if( m_bDragging ) { m_pContainer->stopActionByTag(CSCROLLVIEW_MOVE_ACTION_TAG); stoppedAnimatedScroll(); return; } this->onScrolling(); this->executeScrollingHandler(this); }
void CScrollView::onExit() { stoppedAnimatedScroll(); stoppedDeaccelerateScroll(); CLayout::onExit(); }
void ScrollView::stopAnimatedContentOffset() { stopAction(_animatedScrollAction); _animatedScrollAction->release(); _animatedScrollAction = nullptr; stoppedAnimatedScroll(this); }