Simplify clip inside a layer -- will be applied in restore
authorreed <reed@google.com>
Wed, 11 Mar 2015 17:39:04 +0000 (10:39 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 11 Mar 2015 17:39:05 +0000 (10:39 -0700)
This reverts commit 44124650895833378938b4b174302fbf64403fe2.

NOTREECHECKS=True
BUG=skia:

Review URL: https://codereview.chromium.org/996233002

src/core/SkCanvas.cpp

index 55b3b7ba7a7987ec878e82692eb94fc94cf98506..a31ded05864a9b436532e6320f09e8efc413cd7d 100644 (file)
@@ -833,7 +833,6 @@ static bool bounds_affects_clip(SkCanvas::SaveFlags flags) {
 bool SkCanvas::clipRectBounds(const SkRect* bounds, SaveFlags flags,
                               SkIRect* intersection, const SkImageFilter* imageFilter) {
     SkIRect clipBounds;
-    SkRegion::Op op = SkRegion::kIntersect_Op;
     if (!this->getClipDeviceBounds(&clipBounds)) {
         return false;
     }
@@ -842,8 +841,6 @@ bool SkCanvas::clipRectBounds(const SkRect* bounds, SaveFlags flags,
 
     if (imageFilter) {
         imageFilter->filterBounds(clipBounds, ctm, &clipBounds);
-        // Filters may grow the bounds beyond the device bounds.
-        op = SkRegion::kReplace_Op;
     }
     SkIRect ir;
     if (bounds) {
@@ -862,14 +859,13 @@ bool SkCanvas::clipRectBounds(const SkRect* bounds, SaveFlags flags,
     } else {    // no user bounds, so just use the clip
         ir = clipBounds;
     }
+    SkASSERT(!ir.isEmpty());
 
     if (bounds_affects_clip(flags)) {
+        // Simplify the current clips since they will be applied properly during restore()
         fCachedLocalClipBoundsDirty = true;
-        fClipStack->clipDevRect(ir, op);
-        // early exit if the clip is now empty
-        if (!fMCRec->fRasterClip.op(ir, op)) {
-            return false;
-        }
+        fClipStack->clipDevRect(ir, SkRegion::kReplace_Op);
+        fMCRec->fRasterClip.setRect(ir);
     }
 
     if (intersection) {