diff options
author | robertphillips <robertphillips@google.com> | 2015-11-24 09:30:12 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-24 09:30:13 -0800 |
commit | 39f0538178bcb182346fbbb1c746eb5a1c2925fd (patch) | |
tree | 55f24f3b59579a8090a4849b3d4f4eee8012a421 /src | |
parent | baf8fcbb1b7eb89d5190df804bbda33c2622eb88 (diff) |
Add sniff for rect, oval & rrect to SkCanvas::clipPath
Review URL: https://codereview.chromium.org/1466303004
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkCanvas.cpp | 24 |
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) { |