123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /*
- * Copyright 2018 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkCubicMap_DEFINED
- #define SkCubicMap_DEFINED
- #include "include/core/SkPoint.h"
- /**
- * Fast evaluation of a cubic ease-in / ease-out curve. This is defined as a parametric cubic
- * curve inside the unit square.
- *
- * pt[0] is implicitly { 0, 0 }
- * pt[3] is implicitly { 1, 1 }
- * pts[1,2].X are inside the unit [0..1]
- */
- class SK_API SkCubicMap {
- public:
- SkCubicMap(SkPoint p1, SkPoint p2);
- static bool IsLinear(SkPoint p1, SkPoint p2) {
- return SkScalarNearlyEqual(p1.fX, p1.fY) && SkScalarNearlyEqual(p2.fX, p2.fY);
- }
- float computeYFromX(float x) const;
- SkPoint computeFromT(float t) const;
- private:
- enum Type {
- kLine_Type, // x == y
- kCubeRoot_Type, // At^3 == x
- kSolver_Type, // general monotonic cubic solver
- };
- SkPoint fCoeff[3];
- Type fType;
- };
- #endif
|