diff options
Diffstat (limited to 'src/core/SkMatrix.cpp')
-rw-r--r-- | src/core/SkMatrix.cpp | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/src/core/SkMatrix.cpp b/src/core/SkMatrix.cpp index 71ef24c5e8..492f3f6ac4 100644 --- a/src/core/SkMatrix.cpp +++ b/src/core/SkMatrix.cpp @@ -1097,7 +1097,8 @@ void SkMatrix::mapVectors(SkPoint dst[], const SkPoint src[], int count) const { } } -SkRect SkMatrix::mapRectScaleTranslate(SkRect src) const { +void SkMatrix::mapRectScaleTranslate(SkRect* dst, const SkRect& src) const { + SkASSERT(dst); SkASSERT(this->isScaleTranslate()); SkScalar sx = fMat[kMScaleX]; @@ -1106,7 +1107,7 @@ SkRect SkMatrix::mapRectScaleTranslate(SkRect src) const { SkScalar ty = fMat[kMTransY]; Sk4f scale(sx, sy, sx, sy); Sk4f trans(tx, ty, tx, ty); - + Sk4f ltrb = Sk4f::Load(&src.fLeft) * scale + trans; // need to sort so we're not inverted Sk4f rblt(ltrb[2], ltrb[3], ltrb[0], ltrb[1]); @@ -1114,16 +1115,14 @@ SkRect SkMatrix::mapRectScaleTranslate(SkRect src) const { Sk4f max = Sk4f::Max(ltrb, rblt); // We can extract either pair [0,1] or [2,3] from min and max and be correct, but on // ARM this sequence generates the fastest (a single instruction). - SkRect dst; - Sk4f(min[0], min[1], max[0], max[1]).store(&dst.fLeft); - return dst; + Sk4f(min[2], min[3], max[0], max[1]).store(&dst->fLeft); } bool SkMatrix::mapRect(SkRect* dst, const SkRect& src) const { SkASSERT(dst); if (this->isScaleTranslate()) { - *dst = this->mapRectScaleTranslate(src); + this->mapRectScaleTranslate(dst, src); return true; } else { SkPoint quad[4]; |