aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2015-11-24 09:30:12 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2015-11-24 09:30:13 -0800
commit39f0538178bcb182346fbbb1c746eb5a1c2925fd (patch)
tree55f24f3b59579a8090a4849b3d4f4eee8012a421 /src
parentbaf8fcbb1b7eb89d5190df804bbda33c2622eb88 (diff)
Add sniff for rect, oval & rrect to SkCanvas::clipPath
Diffstat (limited to 'src')
-rw-r--r--src/core/SkCanvas.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index e4fe63992c..1e49fe272d 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -1600,12 +1600,26 @@ void SkCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle
void SkCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
this->checkForDeferredSave();
ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle;
- SkRect r;
- if (!path.isInverseFillType() && path.isRect(&r)) {
- this->onClipRect(r, op, edgeStyle);
- } else {
- this->onClipPath(path, op, edgeStyle);
+
+ if (!path.isInverseFillType() && fMCRec->fMatrix.rectStaysRect()) {
+ SkRect r;
+ if (path.isRect(&r)) {
+ this->onClipRect(r, op, edgeStyle);
+ return;
+ }
+ SkRRect rrect;
+ if (path.isOval(&r)) {
+ rrect.setOval(r);
+ this->onClipRRect(rrect, op, edgeStyle);
+ return;
+ }
+ if (path.isRRect(&rrect)) {
+ this->onClipRRect(rrect, op, edgeStyle);
+ return;
+ }
}
+
+ this->onClipPath(path, op, edgeStyle);
}
void SkCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) {