aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-04-14 19:06:16 +0000
committerGravatar mike@reedtribe.org <mike@reedtribe.org@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-04-14 19:06:16 +0000
commit90bf427001fd4f6d9fcee88911deb015aeb4ab7c (patch)
tree109f3ff22dd5d23a7a7fbe8e2afc4e5d26bf5c92 /src
parent6093e6582970364241a10d62b05efee50606c5e8 (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.cpp10
-rw-r--r--src/effects/Sk2DPathEffect.cpp16
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);
}
///////////////////////////////////////////////////////////////////////////////