From 90bf427001fd4f6d9fcee88911deb015aeb4ab7c Mon Sep 17 00:00:00 2001 From: "mike@reedtribe.org" Date: Sat, 14 Apr 2012 19:06:16 +0000 Subject: proper handling if SkMatrix::invert failes, addresses hack fix in rev. 3657 git-svn-id: http://skia.googlecode.com/svn/trunk@3679 2bbb7eff-a529-9590-31e7-b0007b416f81 --- src/core/SkCanvas.cpp | 10 ++++------ src/effects/Sk2DPathEffect.cpp | 16 ++++++++++------ 2 files changed, 14 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp index 56ac2da646..fc308d4058 100644 --- a/src/core/SkCanvas.cpp +++ b/src/core/SkCanvas.cpp @@ -1365,12 +1365,10 @@ void SkCanvas::setExternalMatrix(const SkMatrix* matrix) { } fUseExternalMatrix = false; } else { - fUseExternalMatrix = true; - fDeviceCMDirty = true; // |= (fExternalMatrix != *matrix) - - fExternalMatrix = *matrix; - if (!matrix->invert(&fExternalInverse)) { - fExternalInverse.reset(); + if (matrix->invert(&fExternalInverse)) { + fExternalMatrix = *matrix; + fUseExternalMatrix = true; + fDeviceCMDirty = true; // |= (fExternalMatrix != *matrix) } } } diff --git a/src/effects/Sk2DPathEffect.cpp b/src/effects/Sk2DPathEffect.cpp index dd067be186..8693157f16 100644 --- a/src/effects/Sk2DPathEffect.cpp +++ b/src/effects/Sk2DPathEffect.cpp @@ -28,12 +28,14 @@ private: /////////////////////////////////////////////////////////////////////////////// Sk2DPathEffect::Sk2DPathEffect(const SkMatrix& mat) : fMatrix(mat) { - if (!mat.invert(&fInverse)) { - fInverse.reset(); - } + fMatrixIsInvertible = mat.invert(&fInverse); } bool Sk2DPathEffect::filterPath(SkPath* dst, const SkPath& src, SkScalar* width) { + if (!fMatrixIsInvertible) { + return false; + } + Sk2DPathEffectBlitter blitter(this, dst); SkPath tmp; SkIRect ir; @@ -49,6 +51,10 @@ bool Sk2DPathEffect::filterPath(SkPath* dst, const SkPath& src, SkScalar* width) } void Sk2DPathEffect::nextSpan(int x, int y, int count, SkPath* path) { + if (!fMatrixIsInvertible) { + return; + } + const SkMatrix& mat = this->getMatrix(); SkPoint src, dst; @@ -80,9 +86,7 @@ Sk2DPathEffect::Sk2DPathEffect(SkFlattenableReadBuffer& buffer) { SkASSERT(size <= sizeof(storage)); buffer.read(storage, size); fMatrix.unflatten(storage); - if (!fMatrix.invert(&fInverse)) { - fInverse.reset(); - } + fMatrixIsInvertible = fMatrix.invert(&fInverse); } /////////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3