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;
|
(*pBottomBounceNeeded) = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
float icTopPos = _innerContainer->getTopBoundary();
|
float icTopPos = _innerContainer->getTopBoundary();
|
||||||
if (icTopPos < _topBoundary)
|
if (icTopPos < _topBoundary)
|
||||||
{
|
{
|
||||||
|
@ -448,6 +449,7 @@ void ScrollView::checkBounceBoundary(bool* pTopBounceNeeded, bool* pBottomBounce
|
||||||
{
|
{
|
||||||
(*pTopBounceNeeded) = false;
|
(*pTopBounceNeeded) = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
float icRightPos = _innerContainer->getRightBoundary();
|
float icRightPos = _innerContainer->getRightBoundary();
|
||||||
if (icRightPos < _rightBoundary)
|
if (icRightPos < _rightBoundary)
|
||||||
{
|
{
|
||||||
|
@ -458,6 +460,7 @@ void ScrollView::checkBounceBoundary(bool* pTopBounceNeeded, bool* pBottomBounce
|
||||||
{
|
{
|
||||||
(*pRightBounceNeeded) = false;
|
(*pRightBounceNeeded) = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
float icLeftPos = _innerContainer->getLeftBoundary();
|
float icLeftPos = _innerContainer->getLeftBoundary();
|
||||||
if (icLeftPos > _leftBoundary)
|
if (icLeftPos > _leftBoundary)
|
||||||
{
|
{
|
||||||
|
@ -554,137 +557,97 @@ void ScrollView::stopAutoScrollChildren()
|
||||||
_autoScrollAddUpTime = 0.0f;
|
_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 ScrollView::bounceScrollChildren(float touchOffsetX, float touchOffsetY)
|
||||||
{
|
{
|
||||||
bool scrollenabled = true;
|
bool scrollenabled = true;
|
||||||
if (touchOffsetX > 0.0f && touchOffsetY > 0.0f) //first quadrant //bounce to top-right
|
|
||||||
{
|
|
||||||
float realOffsetX = touchOffsetX;
|
float realOffsetX = touchOffsetX;
|
||||||
float realOffsetY = touchOffsetY;
|
float realOffsetY = touchOffsetY;
|
||||||
float icRightPos = _innerContainer->getRightBoundary();
|
|
||||||
if (icRightPos + realOffsetX >= _rightBoundary)
|
if (touchOffsetY > 0.0f) //first quadrant //bounce to top-right
|
||||||
{
|
{
|
||||||
realOffsetX = _rightBoundary - icRightPos;
|
if (touchOffsetX > 0.0f) //first quadrant //bounce to top-right
|
||||||
processScrollEvent(MoveDirection::RIGHT, true);
|
{
|
||||||
scrollenabled = false;
|
scrollenabled = processBounceScrollLeft(&realOffsetX, touchOffsetX);
|
||||||
}
|
}
|
||||||
float icTopPos = _innerContainer->getTopBoundary();
|
else if(touchOffsetX < 0.0f) //second quadrant //bounce to top-left
|
||||||
if (icTopPos + touchOffsetY >= _topBoundary)
|
|
||||||
{
|
{
|
||||||
realOffsetY = _topBoundary - icTopPos;
|
scrollenabled = processBounceScrollRight(&realOffsetX, touchOffsetX);
|
||||||
processScrollEvent(MoveDirection::TOP, true);
|
}
|
||||||
scrollenabled = false;
|
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);
|
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);
|
|
||||||
}
|
|
||||||
return scrollenabled;
|
return scrollenabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -843,19 +806,6 @@ bool ScrollView::checkCustomScrollDestination(float* touchOffsetX, float* touchO
|
||||||
return scrollenabled;
|
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)
|
bool ScrollView::processScrollTop(float* offsetYResult, float touchOffsetY)
|
||||||
{
|
{
|
||||||
float boundary = (_bounceEnabled ? _bounceBottomBoundary : _bottomBoundary);
|
float boundary = (_bounceEnabled ? _bounceBottomBoundary : _bottomBoundary);
|
||||||
|
@ -869,14 +819,14 @@ bool ScrollView::processScrollTop(float* offsetYResult, float touchOffsetY)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ScrollView::processScrollRight(float* offsetXResult, float touchOffsetX)
|
bool ScrollView::processScrollBottom(float* offsetYResult, float touchOffsetY)
|
||||||
{
|
{
|
||||||
float boundary = (_bounceEnabled ? _bounceLeftBoundary : _leftBoundary);
|
float boundary = (_bounceEnabled ? _bounceTopBoundary : _topBoundary);
|
||||||
float icLeftPos = _innerContainer->getLeftBoundary();
|
float icTopPos = _innerContainer->getTopBoundary();
|
||||||
if (icLeftPos + touchOffsetX >= boundary)
|
if (icTopPos + touchOffsetY <= boundary)
|
||||||
{
|
{
|
||||||
(*offsetXResult) = boundary - icLeftPos;
|
(*offsetYResult) = boundary - icTopPos;
|
||||||
processScrollEvent(MoveDirection::LEFT, false);
|
processScrollEvent(MoveDirection::TOP, false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -895,6 +845,19 @@ bool ScrollView::processScrollLeft(float* offsetXResult, float touchOffsetX)
|
||||||
return true;
|
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)
|
bool ScrollView::scrollChildren(float touchOffsetX, float touchOffsetY)
|
||||||
{
|
{
|
||||||
processScrollingEvent();
|
processScrollingEvent();
|
||||||
|
|
|
@ -441,13 +441,20 @@ protected:
|
||||||
|
|
||||||
virtual bool scrollChildren(float touchOffsetX, float touchOffsetY);
|
virtual bool scrollChildren(float touchOffsetX, float touchOffsetY);
|
||||||
|
|
||||||
//
|
// Without bounce
|
||||||
bool processScrollBottom(float* offsetYResult, float touchOffsetY);
|
|
||||||
bool processScrollTop(float* offsetYResult, float touchOffsetY);
|
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 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);
|
bool bounceScrollChildren(float touchOffsetX, float touchOffsetY);
|
||||||
|
|
||||||
void startRecordSlidAction();
|
void startRecordSlidAction();
|
||||||
virtual void endRecordSlidAction();
|
virtual void endRecordSlidAction();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue