Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index 55b3b7ba7a7987ec878e82692eb94fc94cf98506..a31ded05864a9b436532e6320f09e8efc413cd7d 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -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) { |