diff options
author | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-04-14 19:06:16 +0000 |
---|---|---|
committer | mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-04-14 19:06:16 +0000 |
commit | 90bf427001fd4f6d9fcee88911deb015aeb4ab7c (patch) | |
tree | 109f3ff22dd5d23a7a7fbe8e2afc4e5d26bf5c92 /src | |
parent | 6093e6582970364241a10d62b05efee50606c5e8 (diff) |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkCanvas.cpp | 10 | ||||
-rw-r--r-- | src/effects/Sk2DPathEffect.cpp | 16 |
2 files changed, 14 insertions, 12 deletions
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); } /////////////////////////////////////////////////////////////////////////////// |