SkPoint SkBoundaryPatch::eval(SkScalar unitU, SkScalar unitV) { SkBoundary* b = fBoundary; SkPoint u = SkPointInterp(b->eval(SkBoundary::kLeft, SK_Scalar1 - unitV), b->eval(SkBoundary::kRight, unitV), unitU); SkPoint v = SkPointInterp(b->eval(SkBoundary::kTop, unitU), b->eval(SkBoundary::kBottom, SK_Scalar1 - unitU), unitV); return SkMakePoint(SkScalarAve(u.fX, v.fX), SkScalarAve(u.fY, v.fY)); }
static void set_cubic(SkPoint pts[4], SkScalar x0, SkScalar y0, SkScalar x3, SkScalar y3, SkScalar scale = 1) { SkPoint tmp, tmp2; pts[0].set(x0, y0); pts[3].set(x3, y3); tmp = SkPointInterp(pts[0], pts[3], SK_Scalar1/3); tmp2 = pts[0] - tmp; tmp2.rotateCW(); tmp2.scale(scale); pts[1] = tmp + tmp2; tmp = SkPointInterp(pts[0], pts[3], 2*SK_Scalar1/3); tmp2 = pts[3] - tmp; tmp2.rotateCW(); tmp2.scale(scale); pts[2] = tmp + tmp2; }
SkPoint SkLineBoundary::eval(Edge e, SkScalar t) { SkASSERT((unsigned)e < 4); return SkPointInterp(fPts[e], fPts[(e + 1) & 3], t); }