/* static */ DeltaValues WheelTransaction::AccelerateWheelDelta(WidgetWheelEvent* aEvent, bool aAllowScrollSpeedOverride) { DeltaValues result(aEvent); // Don't accelerate the delta values if the event isn't line scrolling. if (aEvent->deltaMode != nsIDOMWheelEvent::DOM_DELTA_LINE) { return result; } if (aAllowScrollSpeedOverride) { result = OverrideSystemScrollSpeed(aEvent); } // Accelerate by the sScrollSeriesCounter int32_t start = GetAccelerationStart(); if (start >= 0 && sScrollSeriesCounter >= start) { int32_t factor = GetAccelerationFactor(); if (factor > 0) { result.deltaX = ComputeAcceleratedWheelDelta(result.deltaX, factor); result.deltaY = ComputeAcceleratedWheelDelta(result.deltaY, factor); } } return result; }
float Axis::GetDisplacementForDuration(float aScale, const TimeDuration& aDelta) { if (fabsf(mVelocity) < gVelocityThreshold) { mAcceleration = 0; } float accelerationFactor = GetAccelerationFactor(); float displacement = mVelocity * aScale * aDelta.ToMilliseconds() * accelerationFactor; // If this displacement will cause an overscroll, throttle it. Can potentially // bring it to 0 even if the velocity is high. if (DisplacementWillOverscroll(displacement) != OVERSCROLL_NONE) { // No need to have a velocity along this axis anymore; it won't take us // anywhere, so we're just spinning needlessly. mVelocity = 0.0f; mAcceleration = 0; displacement -= DisplacementWillOverscrollAmount(displacement); } return displacement; }