1 | /* |
2 | * Copyright 2018 Google Inc. |
3 | * |
4 | * Use of this source code is governed by a BSD-style license that can be |
5 | * found in the LICENSE file. |
6 | */ |
7 | |
8 | #ifndef SkCubicMap_DEFINED |
9 | #define SkCubicMap_DEFINED |
10 | |
11 | #include "include/core/SkPoint.h" |
12 | |
13 | /** |
14 | * Fast evaluation of a cubic ease-in / ease-out curve. This is defined as a parametric cubic |
15 | * curve inside the unit square. |
16 | * |
17 | * pt[0] is implicitly { 0, 0 } |
18 | * pt[3] is implicitly { 1, 1 } |
19 | * pts[1,2].X are inside the unit [0..1] |
20 | */ |
21 | class SK_API SkCubicMap { |
22 | public: |
23 | SkCubicMap(SkPoint p1, SkPoint p2); |
24 | |
25 | static bool IsLinear(SkPoint p1, SkPoint p2) { |
26 | return SkScalarNearlyEqual(p1.fX, p1.fY) && SkScalarNearlyEqual(p2.fX, p2.fY); |
27 | } |
28 | |
29 | float computeYFromX(float x) const; |
30 | |
31 | SkPoint computeFromT(float t) const; |
32 | |
33 | private: |
34 | enum Type { |
35 | kLine_Type, // x == y |
36 | kCubeRoot_Type, // At^3 == x |
37 | kSolver_Type, // general monotonic cubic solver |
38 | }; |
39 | |
40 | SkPoint fCoeff[3]; |
41 | Type fType; |
42 | }; |
43 | |
44 | #endif |
45 | |
46 | |