Lines Matching refs:ScalarBezCurve
53 class ScalarBezCurve {
58 ScalarBezCurve() : fDegree(kDegreeInvalid) {}
61 explicit ScalarBezCurve(int degree) : fDegree(degree) {
67 ScalarBezCurve(int degree, const std::vector<float>& weights) : ScalarBezCurve(degree) {
90 static float Eval(const ScalarBezCurve& curve, float t) {
92 ScalarBezCurve result = curve;
105 void split(float t, ScalarBezCurve* left, ScalarBezCurve* right) const {
110 void split(float tmin, float tmax, ScalarBezCurve* result) const {
113 ScalarBezCurve ll, rl, rr;
119 static void Split(const ScalarBezCurve& curve,
121 ScalarBezCurve* left,
122 ScalarBezCurve* right) {
125 ScalarBezCurve result = curve;
126 *left = ScalarBezCurve(degree);
127 *right = ScalarBezCurve(degree);
163 static ScalarBezCurve ElevateDegree(const ScalarBezCurve& curve, int newDegree) {
170 ScalarBezCurve elevated(newDegree);
194 static std::vector<float> ZeroSet(const ScalarBezCurve& curve) {
202 static ScalarBezCurve Mul(const ScalarBezCurve& curve, float f) {
203 ScalarBezCurve result = curve;
215 static ScalarBezCurve Mul(const ScalarBezCurve& a, const ScalarBezCurve& b) {
220 ScalarBezCurve result(newDegree);
235 static ScalarBezCurve AddSquares(const ScalarBezCurve& a, const ScalarBezCurve& b) {
238 ScalarBezCurve result(newDegree);
255 static ScalarBezCurve Sub(const ScalarBezCurve& a, const ScalarBezCurve& b) {
256 ScalarBezCurve result = a;
262 void sub(const ScalarBezCurve& other) {
287 static void ZeroSetRec(const ScalarBezCurve& curve,
309 ScalarBezCurve left(curve.fDegree), right(curve.fDegree);
392 std::unique_ptr<ScalarBezCurve> outerErr;
434 const ScalarBezCurve& varWidth,
435 const ScalarBezCurve& varWidthInner,
455 const ScalarBezCurve& varWidth,
456 const ScalarBezCurve& varWidthInner,
466 const ScalarBezCurve& distanceFunc) const;
496 const ScalarBezCurve& distFnc,
500 static ScalarBezCurve identityVarWidth(float strokeWidth) {
501 return ScalarBezCurve(0, {strokeWidth / 2.0f});
508 ScalarBezCurve fVarWidth, fVarWidthInner;
523 const ScalarBezCurve& varWidth,
524 const ScalarBezCurve& varWidthInner,
567 ScalarBezCurve partVarWidth, partVarWidthInner;
570 partVarWidthInner = ScalarBezCurve::Mul(partVarWidthInner, -1);
628 const ScalarBezCurve& varWidth,
629 const ScalarBezCurve& varWidthInner,
639 const PathSegment& seg, const ScalarBezCurve& distanceFunc) const {
643 ScalarBezCurve fDistFnc, fDistFncSqd;
644 ScalarBezCurve fSegX, fSegY;
647 const ScalarBezCurve& distFnc,
648 const ScalarBezCurve& distFncSqd)
651 fSegX = ScalarBezCurve(segDegree);
652 fSegY = ScalarBezCurve(segDegree);
662 stack.push(Item(seg, distanceFunc, ScalarBezCurve::Mul(distanceFunc, distanceFunc)));
672 const ScalarBezCurve& distFnc = item.fDistFnc;
673 ScalarBezCurve distFncSqd = item.fDistFncSqd;
679 ScalarBezCurve quadApproxX(2), quadApproxY(2);
687 ScalarBezCurve segX = item.fSegX, segY = item.fSegY;
693 ScalarBezCurve deltaX = ScalarBezCurve::Sub(quadApproxX, segX);
694 ScalarBezCurve deltaY = ScalarBezCurve::Sub(quadApproxY, segY);
697 ScalarBezCurve E = ScalarBezCurve::AddSquares(deltaX, deltaY);
711 outerErr = std::make_unique<ScalarBezCurve>(E);
725 ScalarBezCurve distFncL, distFncR;
728 ScalarBezCurve distFncSqdL, distFncSqdR;
905 ScalarBezCurve x(degree), y(degree);
911 ScalarBezCurve leftX(degree), rightX(degree), leftY(degree), rightY(degree);
923 const ScalarBezCurve& distFnc,
1143 static ScalarBezCurve makeDistFnc(const std::vector<DistFncMenuItem>& fncs, float strokeWidth) {
1147 return ScalarBezCurve::Mul(ScalarBezCurve(df.fDegree, df.fWeights), radius);
1151 return ScalarBezCurve(0, {radius});
1163 ScalarBezCurve distFnc = makeDistFnc(fDistFncs, fWidth);
1164 ScalarBezCurve distFncInner =
1250 void drawErrorCurve(SkCanvas* canvas, const ScalarBezCurve& E) {
1262 ScalarBezCurve left(deg), right(deg);
1265 ScalarBezCurve rl(deg), rr(deg);