aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2016-08-22 13:42:17 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-08-22 13:42:17 -0700
commitbdc335f9b9fb8d2eb1b4a00f88b34288b06112fa (patch)
tree1e276d706af71b4c599269c07d7d776d36212603 /src
parent236e272380dcb30ad3ea009efe1be7f734dd6d8c (diff)
Mark temporary paths created by SkCanvas for clipping as volatile
Diffstat (limited to 'src')
-rw-r--r--src/core/SkCanvas.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index 2564e37033..8f77afe78e 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1611,6 +1611,7 @@ void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edg
SkPath path;
path.addRect(rect);
+ path.setIsVolatile(true);
this->SkCanvas::onClipPath(path, op, edgeStyle);
}
@@ -1647,6 +1648,7 @@ void SkCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle
SkPath path;
path.addRRect(rrect);
+ path.setIsVolatile(true);
// call the non-virtual version
this->SkCanvas::onClipPath(path, op, edgeStyle);
}
@@ -1703,7 +1705,12 @@ void SkCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edg
}
SkPath devPath;
- path.transform(fMCRec->fMatrix, &devPath);
+ if (fMCRec->fMatrix.isIdentity()) {
+ devPath = path;
+ } else {
+ path.transform(fMCRec->fMatrix, &devPath);
+ devPath.setIsVolatile(true);
+ }
// Check if the transfomation, or the original path itself
// made us empty. Note this can also happen if we contained NaN