void Axis::EndOverscrollAnimation() { ParentLayerCoord overscroll = GetOverscroll(); mFirstOverscrollAnimationSample = 0; mLastOverscrollPeak = 0; mOverscrollScale = 1.0f; mOverscroll = overscroll; }
float Axis::GetExcess() { switch (GetOverscroll()) { case OVERSCROLL_MINUS: return GetOrigin() - GetPageStart(); case OVERSCROLL_PLUS: return GetCompositionEnd() - GetPageEnd(); case OVERSCROLL_BOTH: return (GetCompositionEnd() - GetPageEnd()) + (GetPageStart() - GetOrigin()); default: return 0; } }
ParentLayerCoord Axis::ApplyResistance(ParentLayerCoord aRequestedOverscroll) const { // 'resistanceFactor' is a value between 0 and 1, which: // - tends to 1 as the existing overscroll tends to 0 // - tends to 0 as the existing overscroll tends to the composition length // The actual overscroll is the requested overscroll multiplied by this // factor; this should prevent overscrolling by more than the composition // length. float resistanceFactor = 1 - fabsf(GetOverscroll()) / GetCompositionLength(); return resistanceFactor < 0 ? ParentLayerCoord(0) : aRequestedOverscroll * resistanceFactor; }
ParentLayerCoord Axis::ApplyResistance(ParentLayerCoord aRequestedOverscroll) const { // 'resistanceFactor' is a value between 0 and 1/16, which: // - tends to 1/16 as the existing overscroll tends to 0 // - tends to 0 as the existing overscroll tends to the composition length // The actual overscroll is the requested overscroll multiplied by this // factor. float resistanceFactor = (1 - fabsf(GetOverscroll()) / GetCompositionLength()) / 16; float result = resistanceFactor < 0 ? ParentLayerCoord(0) : aRequestedOverscroll * resistanceFactor; result = clamped(result, -8.0f, 8.0f); return result; }
void Axis::StopSamplingOverscrollAnimation() { ParentLayerCoord overscroll = GetOverscroll(); ClearOverscroll(); mOverscroll = overscroll; }