Chromium Code Reviews| Index: src/core/SkCanvas.cpp |
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
| index e53a104c47fa28406f1d440dbcd670365d877a24..c09d6d402814b470610b600dbd572cb5c8b263ce 100644 |
| --- a/src/core/SkCanvas.cpp |
| +++ b/src/core/SkCanvas.cpp |
| @@ -345,8 +345,7 @@ public: |
| bool next() { |
| if (fMultiDeviceCS && fDevice) { |
| // remove the previous device's bounds |
| - fMultiDeviceCS->clipDevRect(compute_device_bounds(fDevice), |
| - SkRegion::kDifference_Op); |
| + fMultiDeviceCS->clipDevRect(compute_device_bounds(fDevice), SkCanvas::kDifference_Op); |
| } |
| // skip over recs with empty clips |
| @@ -1111,7 +1110,7 @@ bool SkCanvas::clipRectBounds(const SkRect* bounds, SaveLayerFlags saveLayerFlag |
| if (BoundsAffectsClip(saveLayerFlags)) { |
| // Simplify the current clips since they will be applied properly during restore() |
| - fClipStack->clipDevRect(ir, SkRegion::kReplace_Op); |
| + fClipStack->clipDevRect(ir, kReplace_Op); |
| fMCRec->fRasterClip.setRect(ir); |
| fDeviceClipBounds = qr_clip_bounds(ir); |
| } |
| @@ -1543,7 +1542,7 @@ sk_sp<SkLights> SkCanvas::getLights() const { |
| ////////////////////////////////////////////////////////////////////////////// |
| -void SkCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { |
| +void SkCanvas::clipRect(const SkRect& rect, ClipOp op, bool doAA) { |
| if (!fAllowSoftClip) { |
| doAA = false; |
| } |
| @@ -1572,7 +1571,7 @@ void SkCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { |
| this->onClipRect(rect, op, edgeStyle); |
| } |
| -void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edgeStyle) { |
| +void SkCanvas::onClipRect(const SkRect& rect, ClipOp op, ClipEdgeStyle edgeStyle) { |
| #ifdef SK_ENABLE_CLIP_QUICKREJECT |
| if (SkRegion::kIntersect_Op == op) { |
|
f(malita)
2016/09/19 19:43:25
kIntersect_Op
reed1
2016/09/19 20:42:50
deleted
|
| if (fMCRec->fRasterClip.isEmpty()) { |
| @@ -1598,10 +1597,7 @@ void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edg |
| } |
| #ifndef SK_SUPPORT_PRECHECK_CLIPRECT |
| - if (SkRegion::kIntersect_Op == op && |
| - kHard_ClipEdgeStyle == edgeStyle |
| - && isScaleTrans) |
| - { |
| + if (kIntersect_Op == op && kHard_ClipEdgeStyle == edgeStyle && isScaleTrans) { |
| if (devR.round().contains(fMCRec->fRasterClip.getBounds())) { |
| #if 0 |
| SkDebugf("------- ignored clipRect [%g %g %g %g]\n", |
| @@ -1619,7 +1615,7 @@ void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edg |
| if (isScaleTrans) { |
| const bool isAA = kSoft_ClipEdgeStyle == edgeStyle; |
| fClipStack->clipDevRect(devR, op, isAA); |
| - fMCRec->fRasterClip.op(devR, this->getTopLayerBounds(), op, isAA); |
| + fMCRec->fRasterClip.op(devR, this->getTopLayerBounds(), (SkRegion::Op)op, isAA); |
|
f(malita)
2016/09/19 19:43:25
Maybe add static asserts for all ClipOp values mat
reed1
2016/09/19 20:42:50
Done.
|
| } else { |
| // since we're rotated or some such thing, we convert the rect to a path |
| // and clip against that, since it can handle any matrix. However, to |
| @@ -1635,7 +1631,7 @@ void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edg |
| fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds()); |
| } |
| -void SkCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) { |
| +void SkCanvas::clipRRect(const SkRRect& rrect, ClipOp op, bool doAA) { |
| this->checkForDeferredSave(); |
| ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle; |
| if (rrect.isRect()) { |
| @@ -1645,7 +1641,7 @@ void SkCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) { |
| } |
| } |
| -void SkCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle edgeStyle) { |
| +void SkCanvas::onClipRRect(const SkRRect& rrect, ClipOp op, ClipEdgeStyle edgeStyle) { |
| SkRRect transformedRRect; |
| if (rrect.transform(fMCRec->fMatrix, &transformedRRect)) { |
| AutoValidateClip avc(this); |
| @@ -1657,7 +1653,7 @@ void SkCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle |
| fClipStack->clipDevRRect(transformedRRect, op, kSoft_ClipEdgeStyle == edgeStyle); |
| - fMCRec->fRasterClip.op(transformedRRect, this->getTopLayerBounds(), op, |
| + fMCRec->fRasterClip.op(transformedRRect, this->getTopLayerBounds(), (SkRegion::Op)op, |
| kSoft_ClipEdgeStyle == edgeStyle); |
| fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds()); |
| return; |
| @@ -1670,7 +1666,7 @@ void SkCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle |
| this->SkCanvas::onClipPath(path, op, edgeStyle); |
| } |
| -void SkCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { |
| +void SkCanvas::clipPath(const SkPath& path, ClipOp op, bool doAA) { |
| this->checkForDeferredSave(); |
| ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle; |
| @@ -1695,7 +1691,7 @@ void SkCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { |
| this->onClipPath(path, op, edgeStyle); |
| } |
| -void SkCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edgeStyle) { |
| +void SkCanvas::onClipPath(const SkPath& path, ClipOp op, ClipEdgeStyle edgeStyle) { |
| #ifdef SK_ENABLE_CLIP_QUICKREJECT |
| if (SkRegion::kIntersect_Op == op && !path.isInverseFillType()) { |
|
f(malita)
2016/09/19 19:43:25
kIntersect_Op
reed1
2016/09/19 20:42:50
deleted
|
| if (fMCRec->fRasterClip.isEmpty()) { |
| @@ -1748,19 +1744,19 @@ void SkCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edg |
| edgeStyle = kSoft_ClipEdgeStyle; |
| } |
| - op = SkRegion::kReplace_Op; |
| + op = kReplace_Op; |
| } |
| - fMCRec->fRasterClip.op(devPath, this->getTopLayerBounds(), op, edgeStyle); |
| + fMCRec->fRasterClip.op(devPath, this->getTopLayerBounds(), (SkRegion::Op)op, edgeStyle); |
| fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds()); |
| } |
| -void SkCanvas::clipRegion(const SkRegion& rgn, SkRegion::Op op) { |
| +void SkCanvas::clipRegion(const SkRegion& rgn, ClipOp op) { |
| this->checkForDeferredSave(); |
| this->onClipRegion(rgn, op); |
| } |
| -void SkCanvas::onClipRegion(const SkRegion& rgn, SkRegion::Op op) { |
| +void SkCanvas::onClipRegion(const SkRegion& rgn, ClipOp op) { |
| AutoValidateClip avc(this); |
| fDeviceCMDirty = true; |
| @@ -1769,7 +1765,7 @@ void SkCanvas::onClipRegion(const SkRegion& rgn, SkRegion::Op op) { |
| // we have to ignore it, and use the region directly? |
| fClipStack->clipDevRect(rgn.getBounds(), op); |
| - fMCRec->fRasterClip.op(rgn, op); |
| + fMCRec->fRasterClip.op(rgn, (SkRegion::Op)op); |
| fDeviceClipBounds = qr_clip_bounds(fMCRec->fRasterClip.getBounds()); |
| } |
| @@ -1792,7 +1788,7 @@ void SkCanvas::validateClip() const { |
| switch (element->getType()) { |
| case SkClipStack::Element::kRect_Type: |
| element->getRect().round(&ir); |
| - tmpClip.op(ir, element->getOp()); |
| + tmpClip.op(ir, (SkRegion::Op)element->getOp()); |
| break; |
| case SkClipStack::Element::kEmpty_Type: |
| tmpClip.setEmpty(); |
| @@ -1800,7 +1796,8 @@ void SkCanvas::validateClip() const { |
| default: { |
| SkPath path; |
| element->asPath(&path); |
| - tmpClip.op(path, this->getTopLayerBounds(), element->getOp(), element->isAA()); |
| + tmpClip.op(path, this->getTopLayerBounds(), (SkRegion::Op)element->getOp(), |
| + element->isAA()); |
| break; |
| } |
| } |
| @@ -3511,3 +3508,21 @@ SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p |
| return this->makeSurface(info, props).release(); |
| } |
| #endif |
| + |
| +///////////////////////////////// |
| + |
| +#ifdef SK_SUPPORT_LEGACY_CLIP_REGIONOPS |
| +const SkCanvas::ClipOp SkCanvas::kDifference_Op; |
| +const SkCanvas::ClipOp SkCanvas::kIntersect_Op; |
| +const SkCanvas::ClipOp SkCanvas::kUnion_Op; |
| +const SkCanvas::ClipOp SkCanvas::kXOR_Op; |
| +const SkCanvas::ClipOp SkCanvas::kReverseDifference_Op; |
| +const SkCanvas::ClipOp SkCanvas::kReplace_Op; |
| +#else |
| +const SkCanvas::ClipOp SkCanvas::kDifference_Op; |
| +const SkCanvas::ClipOp SkCanvas::kIntersect_Op; |
| +const SkCanvas::ClipOp SkCanvas::kUnion_Op; |
| +const SkCanvas::ClipOp SkCanvas::kXOR_Op; |
| +const SkCanvas::ClipOp SkCanvas::kReverseDifference_Op; |
| +const SkCanvas::ClipOp SkCanvas::kReplace_Op; |
| +#endif |