| Index: third_party/WebKit/Source/platform/animation/UnitBezier.cpp
|
| diff --git a/third_party/WebKit/Source/platform/animation/UnitBezier.cpp b/third_party/WebKit/Source/platform/animation/UnitBezier.cpp
|
| deleted file mode 100644
|
| index 41aeac29d2520d8c5b4cfe2cd2966719bcf18b8f..0000000000000000000000000000000000000000
|
| --- a/third_party/WebKit/Source/platform/animation/UnitBezier.cpp
|
| +++ /dev/null
|
| @@ -1,113 +0,0 @@
|
| -// Copyright 2016 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "platform/animation/UnitBezier.h"
|
| -
|
| -namespace blink {
|
| -
|
| -const double UnitBezier::kBezierEpsilon = 1e-7;
|
| -
|
| -UnitBezier::UnitBezier(double p1x, double p1y, double p2x, double p2y)
|
| -{
|
| - initCoefficients(p1x, p1y, p2x, p2y);
|
| - initGradients(p1x, p1y, p2x, p2y);
|
| - initRange(p1y, p2y);
|
| -}
|
| -
|
| -void UnitBezier::initCoefficients(double p1x, double p1y, double p2x, double p2y)
|
| -{
|
| - // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).
|
| - cx = 3.0 * p1x;
|
| - bx = 3.0 * (p2x - p1x) - cx;
|
| - ax = 1.0 - cx -bx;
|
| -
|
| - cy = 3.0 * p1y;
|
| - by = 3.0 * (p2y - p1y) - cy;
|
| - ay = 1.0 - cy - by;
|
| -}
|
| -
|
| -void UnitBezier::initGradients(double p1x, double p1y, double p2x, double p2y)
|
| -{
|
| - // End-point gradients are used to calculate timing function results
|
| - // outside the range [0, 1].
|
| - //
|
| - // There are three possibilities for the gradient at each end:
|
| - // (1) the closest control point is not horizontally coincident with regard to
|
| - // (0, 0) or (1, 1). In this case the line between the end point and
|
| - // the control point is tangent to the bezier at the end point.
|
| - // (2) the closest control point is coincident with the end point. In
|
| - // this case the line between the end point and the far control
|
| - // point is tangent to the bezier at the end point.
|
| - // (3) the closest control point is horizontally coincident with the end
|
| - // point, but vertically distinct. In this case the gradient at the
|
| - // end point is Infinite. However, this causes issues when
|
| - // interpolating. As a result, we break down to a simple case of
|
| - // 0 gradient under these conditions.
|
| -
|
| - if (p1x > 0)
|
| - m_startGradient = p1y / p1x;
|
| - else if (!p1y && p2x > 0)
|
| - m_startGradient = p2y / p2x;
|
| - else
|
| - m_startGradient = 0;
|
| -
|
| - if (p2x < 1)
|
| - m_endGradient = (p2y - 1) / (p2x - 1);
|
| - else if (p2x == 1 && p1x < 1)
|
| - m_endGradient = (p1y - 1) / (p1x - 1);
|
| - else
|
| - m_endGradient = 0;
|
| -}
|
| -
|
| -void UnitBezier::initRange(double p1y, double p2y)
|
| -{
|
| - m_rangeMin = 0;
|
| - m_rangeMax = 1;
|
| - if (0 <= p1y && p1y < 1 && 0 <= p2y && p2y <= 1)
|
| - return;
|
| -
|
| - // Represent the function's derivative in the form at^2 + bt + c
|
| - // as in sampleCurveDerivativeY.
|
| - // (Technically this is (dy/dt)*(1/3), which is suitable for finding zeros
|
| - // but does not actually give the slope of the curve.)
|
| - const double a = 3.0 * ay;
|
| - const double b = 2.0 * by;
|
| - const double c = cy;
|
| -
|
| - // Check if the derivative is constant.
|
| - if (std::abs(a) < kBezierEpsilon && std::abs(b) < kBezierEpsilon)
|
| - return;
|
| -
|
| - // Zeros of the function's derivative.
|
| - double t1 = 0;
|
| - double t2 = 0;
|
| -
|
| - if (std::abs(a) < kBezierEpsilon) {
|
| - // The function's derivative is linear.
|
| - t1 = -c / b;
|
| - } else {
|
| - // The function's derivative is a quadratic. We find the zeros of this
|
| - // quadratic using the quadratic formula.
|
| - double discriminant = b * b - 4 * a * c;
|
| - if (discriminant < 0)
|
| - return;
|
| - double discriminantSqrt = sqrt(discriminant);
|
| - t1 = (-b + discriminantSqrt) / (2 * a);
|
| - t2 = (-b - discriminantSqrt) / (2 * a);
|
| - }
|
| -
|
| - double sol1 = 0;
|
| - double sol2 = 0;
|
| -
|
| - if (0 < t1 && t1 < 1)
|
| - sol1 = sampleCurveY(t1);
|
| -
|
| - if (0 < t2 && t2 < 1)
|
| - sol2 = sampleCurveY(t2);
|
| -
|
| - m_rangeMin = std::min(std::min(m_rangeMin, sol1), sol2);
|
| - m_rangeMax = std::max(std::max(m_rangeMax, sol1), sol2);
|
| -}
|
| -
|
| -} // namespace blink
|
|
|