Chromium Code Reviews| Index: src/core/SkGeometry.cpp |
| diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp |
| index 71e22ab10472b0a8460fba951d85d0933197cc51..440ac3b9d38b6ea1caaa01f771596a6ed61d7750 100644 |
| --- a/src/core/SkGeometry.cpp |
| +++ b/src/core/SkGeometry.cpp |
| @@ -1535,3 +1535,23 @@ bool SkConic::findMaxCurvature(SkScalar* t) const { |
| // TODO: Implement me |
| return false; |
| } |
| + |
| +SkScalar SkConic::TransformW(const SkPoint pts[], SkScalar w, |
| + const SkMatrix& matrix) { |
| + if (!matrix.hasPerspective()) { |
| + return w; |
| + } |
| + |
| + SkP3D src[3], dst[3]; |
| + |
| + ratquad_mapTo3D(pts, w, src); |
| + |
| + matrix.mapHomogeneousPoints((SkScalar*)dst, (const SkScalar*)src, 3); |
|
caryclark
2014/12/17 15:52:43
&dst[0].fX, &src[0].fX would avoid the cast..
|
| + |
| + // w' = sqrt(w1*w1/w0*w2) |
| + SkScalar w0 = dst[0].fZ; |
| + SkScalar w1 = dst[1].fZ; |
| + SkScalar w2 = dst[2].fZ; |
| + w = SkScalarSqrt((w1 * w1) / (w0 * w2)); |
| + return w; |
| +} |