Index: src/pdf/SkPDFDevice.cpp |
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp |
index e4b07f04fa794bcd27373564411445a039cd4afe..538422c510ba08f4e456a4ff813bcda9d97df9d0 100644 |
--- a/src/pdf/SkPDFDevice.cpp |
+++ b/src/pdf/SkPDFDevice.cpp |
@@ -973,16 +973,16 @@ void SkPDFDevice::drawPath(const SkDraw& d, const SkPath& origPath, |
} |
#ifdef SK_PDF_USE_PATHOPS |
- if (handleInversePath(d, origPath, paint, pathIsMutable)) { |
+ if (handleInversePath(d, origPath, paint, pathIsMutable, prePathMatrix)) { |
return; |
} |
#endif |
- if (handleRectAnnotation(pathPtr->getBounds(), *d.fMatrix, paint)) { |
+ if (handleRectAnnotation(pathPtr->getBounds(), matrix, paint)) { |
return; |
} |
- ScopedContentEntry content(this, d, paint); |
+ ScopedContentEntry content(this, d.fClipStack, *d.fClip, matrix, paint); |
if (!content.entry()) { |
return; |
} |
@@ -1485,7 +1485,8 @@ SkData* SkPDFDevice::copyContentToData() const { |
* in the first place. |
*/ |
bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath, |
- const SkPaint& paint, bool pathIsMutable) { |
+ const SkPaint& paint, bool pathIsMutable, |
+ const SkMatrix* prePathMatrix) { |
if (!origPath.isInverseFillType()) { |
return false; |
} |
@@ -1519,7 +1520,11 @@ bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath, |
// (clip bounds are given in device space). |
SkRect bounds; |
SkMatrix transformInverse; |
- if (!d.fMatrix->invert(&transformInverse)) { |
+ SkMatrix totalMatrix = *d.fMatrix; |
+ if (prePathMatrix) { |
+ totalMatrix.preConcat(*prePathMatrix); |
+ } |
+ if (!totalMatrix.invert(&transformInverse)) { |
return false; |
} |
bounds.set(d.fClip->getBounds()); |
@@ -1534,7 +1539,7 @@ bool SkPDFDevice::handleInversePath(const SkDraw& d, const SkPath& origPath, |
return false; |
} |
- drawPath(d, modifiedPath, noInversePaint, NULL, true); |
+ drawPath(d, modifiedPath, noInversePaint, prePathMatrix, true); |
return true; |
} |
#endif |