public override void Act(float delta)
{
base.Act(delta);
bool panning = false; // TODO: flickScrollListener
if (_fadeAlpha > 0 && _fadeScrollBars && !panning && !_touchScrollH && !_touchScrollV) {
_fadeDelay -= delta;
if (_fadeDelay <= 0)
_fadeAlpha = Math.Max(0, _fadeAlpha - delta);
}
if (_flingTimer > 0) {
ResetFade();
float alpha = _flingTimer / FlingTime;
ScrollX -= _velocityX * alpha * delta;
ScrollY -= _velocityY * alpha * delta;
Clamp();
// Stop fling if hit overscroll distance.
if (ScrollX == -OverscrollDistance)
_velocityX = 0;
if (ScrollX >= MaxX + OverscrollDistance)
_velocityX = 0;
if (ScrollY == -OverscrollDistance)
_velocityY = 0;
if (ScrollY >= MaxY + OverscrollDistance)
_velocityY = 0;
_flingTimer -= delta;
if (_flingTimer <= 0) {
_velocityX = 0;
_velocityY = 0;
}
}
if (SmoothScrolling && _flingTimer <= 0 && !_touchScrollH && !_touchScrollV && !panning) {
if (_visualAmountX != ScrollX) {
if (_visualAmountX < ScrollX)
VisualScrollX = Math.Min(ScrollX, _visualAmountX + Math.Max(150 * delta, (ScrollX - _visualAmountX) * 5 * delta));
else
VisualScrollX = Math.Max(ScrollX, _visualAmountX - Math.Max(150 * delta, (_visualAmountX - ScrollX) * 5 * delta));
}
if (_visualAmountY != ScrollY) {
if (_visualAmountY < ScrollY)
VisualScrollY = Math.Min(ScrollY, _visualAmountY + Math.Max(150 * delta, (ScrollY - _visualAmountY) * 5 * delta));
else
VisualScrollY = Math.Max(ScrollY, _visualAmountY - Math.Max(150 * delta, (_visualAmountY - ScrollY) * 5 * delta));
}
}
else {
if (_visualAmountX != ScrollX)
VisualScrollX = ScrollX;
if (_visualAmountY != ScrollY)
VisualScrollY = ScrollY;
}
if (!panning) {
if (OverscrollX && IsScrollX) {
if (ScrollX < 0) {
ResetFade();
ScrollX += (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * -ScrollX / OverscrollDistance) * delta;
if (ScrollX > 0)
ScrollX = 0;
}
else if (ScrollX > MaxX) {
ResetFade();
ScrollX -= (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * (-MaxX - ScrollX) / OverscrollDistance) * delta;
if (ScrollX < MaxX)
ScrollX = MaxX;
}
}
if (OverscrollY && IsScrollY) {
if (ScrollY < 0) {
ResetFade();
ScrollY += (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * -ScrollY / OverscrollDistance) * delta;
if (ScrollY > 0)
ScrollY = 0;
}
else if (ScrollY > MaxY) {
ResetFade();
ScrollY -= (OverscrollSpeedMin + (OverscrollSpeedMax - OverscrollSpeedMin) * (-MaxY - ScrollY) / OverscrollDistance) * delta;
if (ScrollY < MaxY)
ScrollY = MaxY;
}
}
}
}