aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkRasterClip.cpp
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-03-22 10:01:53 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-03-22 14:59:56 +0000
commit2a65cc0ff16bd597e2d4a190b757573b482f43be (patch)
treec1f67861aafd95d677b9d2e68e02d47234133c36 /src/core/SkRasterClip.cpp
parent20c322ef0cd04cf8e2592879d05d9f4e6cb19596 (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.cpp21
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);
}
///////////////////////////////////////////////////////////////////////////////////////////////////