diff options
author | Mike Reed <reed@google.com> | 2017-03-22 10:01:53 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-03-22 14:59:56 +0000 |
commit | 2a65cc0ff16bd597e2d4a190b757573b482f43be (patch) | |
tree | c1f67861aafd95d677b9d2e68e02d47234133c36 /src/core/SkRasterClip.cpp | |
parent | 20c322ef0cd04cf8e2592879d05d9f4e6cb19596 (diff) |
test (and fix) clip_restriction in canvas
BUG=skia:
Change-Id: I86d25d0fd82be35d01471fba59f77b360be5373c
Reviewed-on: https://skia-review.googlesource.com/9995
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Derek Sollenberger <djsollen@google.com>
Diffstat (limited to 'src/core/SkRasterClip.cpp')
-rw-r--r-- | src/core/SkRasterClip.cpp | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/src/core/SkRasterClip.cpp b/src/core/SkRasterClip.cpp index 6f9eb6baa6..090297d8ba 100644 --- a/src/core/SkRasterClip.cpp +++ b/src/core/SkRasterClip.cpp @@ -62,43 +62,35 @@ static MutateResult mutate_conservative_op(SkRegion::Op* op, bool inverseFilled) void SkConservativeClip::op(const SkRect& localRect, const SkMatrix& ctm, const SkIRect& devBounds, SkRegion::Op op, bool doAA) { - SkRect devRect; - - SkIRect bounds(devBounds); - this->applyClipRestriction(op, &bounds); SkIRect ir; switch (mutate_conservative_op(&op, false)) { case kDoNothing_MutateResult: return; case kReplaceClippedAgainstGlobalBounds_MutateResult: - ir = bounds; + ir = devBounds; break; - case kContinue_MutateResult: + case kContinue_MutateResult: { + SkRect devRect; ctm.mapRect(&devRect, localRect); ir = doAA ? devRect.roundOut() : devRect.round(); - break; + } break; } this->op(ir, op); } void SkConservativeClip::op(const SkRRect& rrect, const SkMatrix& ctm, const SkIRect& devBounds, SkRegion::Op op, bool doAA) { - SkIRect bounds(devBounds); - this->applyClipRestriction(op, &bounds); - this->op(rrect.getBounds(), ctm, bounds, op, doAA); + this->op(rrect.getBounds(), ctm, devBounds, op, doAA); } void SkConservativeClip::op(const SkPath& path, const SkMatrix& ctm, const SkIRect& devBounds, SkRegion::Op op, bool doAA) { - SkIRect bounds(devBounds); - this->applyClipRestriction(op, &bounds); - SkIRect ir; switch (mutate_conservative_op(&op, path.isInverseFillType())) { case kDoNothing_MutateResult: return; case kReplaceClippedAgainstGlobalBounds_MutateResult: - ir = bounds; + ir = devBounds; break; case kContinue_MutateResult: { SkRect bounds = path.getBounds(); @@ -129,6 +121,7 @@ void SkConservativeClip::op(const SkIRect& devRect, SkRegion::Op op) { SkRegion result; result.op(SkRegion(fBounds), SkRegion(devRect), op); fBounds = result.getBounds(); + this->applyClipRestriction(op, &fBounds); } /////////////////////////////////////////////////////////////////////////////////////////////////// |