mirror of https://github.com/axmolengine/axmol.git
Remove duplicated logic in bounceScrollChildren()
This commit is contained in:
parent
1971b01280
commit
a3ff9573b0
|
@ -438,6 +438,7 @@ void ScrollView::checkBounceBoundary(bool* pTopBounceNeeded, bool* pBottomBounce
|
|||
{
|
||||
(*pBottomBounceNeeded) = false;
|
||||
}
|
||||
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos < _topBoundary)
|
||||
{
|
||||
|
@ -448,6 +449,7 @@ void ScrollView::checkBounceBoundary(bool* pTopBounceNeeded, bool* pBottomBounce
|
|||
{
|
||||
(*pTopBounceNeeded) = false;
|
||||
}
|
||||
|
||||
float icRightPos = _innerContainer->getRightBoundary();
|
||||
if (icRightPos < _rightBoundary)
|
||||
{
|
||||
|
@ -458,6 +460,7 @@ void ScrollView::checkBounceBoundary(bool* pTopBounceNeeded, bool* pBottomBounce
|
|||
{
|
||||
(*pRightBounceNeeded) = false;
|
||||
}
|
||||
|
||||
float icLeftPos = _innerContainer->getLeftBoundary();
|
||||
if (icLeftPos > _leftBoundary)
|
||||
{
|
||||
|
@ -554,137 +557,97 @@ void ScrollView::stopAutoScrollChildren()
|
|||
_autoScrollAddUpTime = 0.0f;
|
||||
}
|
||||
|
||||
bool ScrollView::processBounceScrollTop(float* offsetYResult, float touchOffsetY)
|
||||
{
|
||||
float icBottomPos = _innerContainer->getBottomBoundary();
|
||||
if (icBottomPos + touchOffsetY <= _bottomBoundary)
|
||||
{
|
||||
(*offsetYResult) = _bottomBoundary - icBottomPos;
|
||||
processScrollEvent(MoveDirection::BOTTOM, true);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::processBounceScrollBottom(float* offsetYResult, float touchOffsetY)
|
||||
{
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos + touchOffsetY >= _topBoundary)
|
||||
{
|
||||
(*offsetYResult) = _topBoundary - icTopPos;
|
||||
processScrollEvent(MoveDirection::TOP, true);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::processBounceScrollLeft(float* offsetXResult, float touchOffsetX)
|
||||
{
|
||||
float icRightPos = _innerContainer->getRightBoundary();
|
||||
if (icRightPos + touchOffsetX >= _rightBoundary)
|
||||
{
|
||||
(*offsetXResult) = _rightBoundary - icRightPos;
|
||||
processScrollEvent(MoveDirection::RIGHT, true);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::processBounceScrollRight(float* offsetXResult, float touchOffsetX)
|
||||
{
|
||||
float icLefrPos = _innerContainer->getLeftBoundary();
|
||||
if (icLefrPos + touchOffsetX <= _leftBoundary)
|
||||
{
|
||||
(*offsetXResult) = _leftBoundary - icLefrPos;
|
||||
processScrollEvent(MoveDirection::LEFT, true);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::bounceScrollChildren(float touchOffsetX, float touchOffsetY)
|
||||
{
|
||||
bool scrollenabled = true;
|
||||
if (touchOffsetX > 0.0f && touchOffsetY > 0.0f) //first quadrant //bounce to top-right
|
||||
{
|
||||
float realOffsetX = touchOffsetX;
|
||||
float realOffsetY = touchOffsetY;
|
||||
float icRightPos = _innerContainer->getRightBoundary();
|
||||
if (icRightPos + realOffsetX >= _rightBoundary)
|
||||
{
|
||||
realOffsetX = _rightBoundary - icRightPos;
|
||||
processScrollEvent(MoveDirection::RIGHT, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos + touchOffsetY >= _topBoundary)
|
||||
{
|
||||
realOffsetY = _topBoundary - icTopPos;
|
||||
processScrollEvent(MoveDirection::TOP, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(realOffsetX, realOffsetY);
|
||||
}
|
||||
else if(touchOffsetX < 0.0f && touchOffsetY > 0.0f) //second quadrant //bounce to top-left
|
||||
{
|
||||
float realOffsetX = touchOffsetX;
|
||||
float realOffsetY = touchOffsetY;
|
||||
float icLefrPos = _innerContainer->getLeftBoundary();
|
||||
if (icLefrPos + realOffsetX <= _leftBoundary)
|
||||
{
|
||||
realOffsetX = _leftBoundary - icLefrPos;
|
||||
processScrollEvent(MoveDirection::LEFT, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos + touchOffsetY >= _topBoundary)
|
||||
{
|
||||
realOffsetY = _topBoundary - icTopPos;
|
||||
processScrollEvent(MoveDirection::TOP, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(realOffsetX, realOffsetY);
|
||||
}
|
||||
else if (touchOffsetX < 0.0f && touchOffsetY < 0.0f) //third quadrant //bounce to bottom-left
|
||||
{
|
||||
float realOffsetX = touchOffsetX;
|
||||
float realOffsetY = touchOffsetY;
|
||||
float icLefrPos = _innerContainer->getLeftBoundary();
|
||||
if (icLefrPos + realOffsetX <= _leftBoundary)
|
||||
{
|
||||
realOffsetX = _leftBoundary - icLefrPos;
|
||||
processScrollEvent(MoveDirection::LEFT, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
float icBottomPos = _innerContainer->getBottomBoundary();
|
||||
if (icBottomPos + touchOffsetY <= _bottomBoundary)
|
||||
{
|
||||
realOffsetY = _bottomBoundary - icBottomPos;
|
||||
processScrollEvent(MoveDirection::BOTTOM, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(realOffsetX, realOffsetY);
|
||||
}
|
||||
else if (touchOffsetX > 0.0f && touchOffsetY < 0.0f) //forth quadrant //bounce to bottom-right
|
||||
{
|
||||
float realOffsetX = touchOffsetX;
|
||||
float realOffsetY = touchOffsetY;
|
||||
float icRightPos = _innerContainer->getRightBoundary();
|
||||
if (icRightPos + realOffsetX >= _rightBoundary)
|
||||
{
|
||||
realOffsetX = _rightBoundary - icRightPos;
|
||||
processScrollEvent(MoveDirection::RIGHT, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
float icBottomPos = _innerContainer->getBottomBoundary();
|
||||
if (icBottomPos + touchOffsetY <= _bottomBoundary)
|
||||
{
|
||||
realOffsetY = _bottomBoundary - icBottomPos;
|
||||
processScrollEvent(MoveDirection::BOTTOM, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(realOffsetX, realOffsetY);
|
||||
}
|
||||
else if (touchOffsetX == 0.0f && touchOffsetY > 0.0f) // bounce to top
|
||||
{
|
||||
float realOffsetY = touchOffsetY;
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos + touchOffsetY >= _topBoundary)
|
||||
{
|
||||
realOffsetY = _topBoundary - icTopPos;
|
||||
processScrollEvent(MoveDirection::TOP, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(0.0f, realOffsetY);
|
||||
}
|
||||
else if (touchOffsetX == 0.0f && touchOffsetY < 0.0f) //bounce to bottom
|
||||
{
|
||||
float realOffsetY = touchOffsetY;
|
||||
float icBottomPos = _innerContainer->getBottomBoundary();
|
||||
if (icBottomPos + touchOffsetY <= _bottomBoundary)
|
||||
{
|
||||
realOffsetY = _bottomBoundary - icBottomPos;
|
||||
processScrollEvent(MoveDirection::BOTTOM, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(0.0f, realOffsetY);
|
||||
}
|
||||
else if (touchOffsetX > 0.0f && touchOffsetY == 0.0f) //bounce to right
|
||||
{
|
||||
float realOffsetX = touchOffsetX;
|
||||
float icRightPos = _innerContainer->getRightBoundary();
|
||||
if (icRightPos + realOffsetX >= _rightBoundary)
|
||||
{
|
||||
realOffsetX = _rightBoundary - icRightPos;
|
||||
processScrollEvent(MoveDirection::RIGHT, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(realOffsetX, 0.0f);
|
||||
}
|
||||
else if (touchOffsetX < 0.0f && touchOffsetY == 0.0f) //bounce to left
|
||||
{
|
||||
float realOffsetX = touchOffsetX;
|
||||
float icLeftPos = _innerContainer->getLeftBoundary();
|
||||
if (icLeftPos + realOffsetX <= _leftBoundary)
|
||||
{
|
||||
realOffsetX = _leftBoundary - icLeftPos;
|
||||
processScrollEvent(MoveDirection::LEFT, true);
|
||||
scrollenabled = false;
|
||||
}
|
||||
moveChildren(realOffsetX, 0.0f);
|
||||
}
|
||||
|
||||
float realOffsetX = touchOffsetX;
|
||||
float realOffsetY = touchOffsetY;
|
||||
|
||||
if (touchOffsetY > 0.0f) //first quadrant //bounce to top-right
|
||||
{
|
||||
if (touchOffsetX > 0.0f) //first quadrant //bounce to top-right
|
||||
{
|
||||
scrollenabled = processBounceScrollLeft(&realOffsetX, touchOffsetX);
|
||||
}
|
||||
else if(touchOffsetX < 0.0f) //second quadrant //bounce to top-left
|
||||
{
|
||||
scrollenabled = processBounceScrollRight(&realOffsetX, touchOffsetX);
|
||||
}
|
||||
scrollenabled = processBounceScrollBottom(&realOffsetY, touchOffsetY);
|
||||
}
|
||||
else if (touchOffsetY < 0.0f) //third quadrant //bounce to bottom-left
|
||||
{
|
||||
if (touchOffsetX < 0.0f) //third quadrant //bounce to bottom-left
|
||||
{
|
||||
scrollenabled = processBounceScrollRight(&realOffsetX, touchOffsetX);
|
||||
}
|
||||
else if (touchOffsetX > 0.0f) //forth quadrant //bounce to bottom-right
|
||||
{
|
||||
scrollenabled = processBounceScrollLeft(&realOffsetX, touchOffsetX);
|
||||
}
|
||||
scrollenabled = processBounceScrollTop(&realOffsetY, touchOffsetY);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (touchOffsetX > 0.0f) //bounce to right
|
||||
{
|
||||
scrollenabled = processBounceScrollLeft(&realOffsetX, touchOffsetX);
|
||||
}
|
||||
else if (touchOffsetX < 0.0f) //bounce to left
|
||||
{
|
||||
scrollenabled = processBounceScrollRight(&realOffsetX, touchOffsetX);
|
||||
}
|
||||
}
|
||||
moveChildren(realOffsetX, realOffsetY);
|
||||
return scrollenabled;
|
||||
}
|
||||
|
||||
|
@ -843,19 +806,6 @@ bool ScrollView::checkCustomScrollDestination(float* touchOffsetX, float* touchO
|
|||
return scrollenabled;
|
||||
}
|
||||
|
||||
bool ScrollView::processScrollBottom(float* offsetYResult, float touchOffsetY)
|
||||
{
|
||||
float boundary = (_bounceEnabled ? _bounceTopBoundary : _topBoundary);
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos + touchOffsetY <= boundary)
|
||||
{
|
||||
(*offsetYResult) = boundary - icTopPos;
|
||||
processScrollEvent(MoveDirection::TOP, false);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::processScrollTop(float* offsetYResult, float touchOffsetY)
|
||||
{
|
||||
float boundary = (_bounceEnabled ? _bounceBottomBoundary : _bottomBoundary);
|
||||
|
@ -869,14 +819,14 @@ bool ScrollView::processScrollTop(float* offsetYResult, float touchOffsetY)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::processScrollRight(float* offsetXResult, float touchOffsetX)
|
||||
bool ScrollView::processScrollBottom(float* offsetYResult, float touchOffsetY)
|
||||
{
|
||||
float boundary = (_bounceEnabled ? _bounceLeftBoundary : _leftBoundary);
|
||||
float icLeftPos = _innerContainer->getLeftBoundary();
|
||||
if (icLeftPos + touchOffsetX >= boundary)
|
||||
float boundary = (_bounceEnabled ? _bounceTopBoundary : _topBoundary);
|
||||
float icTopPos = _innerContainer->getTopBoundary();
|
||||
if (icTopPos + touchOffsetY <= boundary)
|
||||
{
|
||||
(*offsetXResult) = boundary - icLeftPos;
|
||||
processScrollEvent(MoveDirection::LEFT, false);
|
||||
(*offsetYResult) = boundary - icTopPos;
|
||||
processScrollEvent(MoveDirection::TOP, false);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
|
@ -895,6 +845,19 @@ bool ScrollView::processScrollLeft(float* offsetXResult, float touchOffsetX)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::processScrollRight(float* offsetXResult, float touchOffsetX)
|
||||
{
|
||||
float boundary = (_bounceEnabled ? _bounceLeftBoundary : _leftBoundary);
|
||||
float icLeftPos = _innerContainer->getLeftBoundary();
|
||||
if (icLeftPos + touchOffsetX >= boundary)
|
||||
{
|
||||
(*offsetXResult) = boundary - icLeftPos;
|
||||
processScrollEvent(MoveDirection::LEFT, false);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ScrollView::scrollChildren(float touchOffsetX, float touchOffsetY)
|
||||
{
|
||||
processScrollingEvent();
|
||||
|
|
|
@ -441,13 +441,20 @@ protected:
|
|||
|
||||
virtual bool scrollChildren(float touchOffsetX, float touchOffsetY);
|
||||
|
||||
//
|
||||
bool processScrollBottom(float* offsetYResult, float touchOffsetY);
|
||||
// Without bounce
|
||||
bool processScrollTop(float* offsetYResult, float touchOffsetY);
|
||||
bool processScrollRight(float* offsetXResult, float touchOffsetX);
|
||||
bool processScrollBottom(float* offsetYResult, float touchOffsetY);
|
||||
bool processScrollLeft(float* offsetXResult, float touchOffsetX);
|
||||
|
||||
bool processScrollRight(float* offsetXResult, float touchOffsetX);
|
||||
|
||||
// With bounce
|
||||
bool processBounceScrollTop(float* offsetYResult, float touchOffsetY);
|
||||
bool processBounceScrollBottom(float* offsetYResult, float touchOffsetY);
|
||||
bool processBounceScrollLeft(float* offsetXResult, float touchOffsetX);
|
||||
bool processBounceScrollRight(float* offsetXResult, float touchOffsetX);
|
||||
|
||||
bool bounceScrollChildren(float touchOffsetX, float touchOffsetY);
|
||||
|
||||
void startRecordSlidAction();
|
||||
virtual void endRecordSlidAction();
|
||||
|
||||
|
|
Loading…
Reference in New Issue