| 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) {
|
|
|