/* * 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