| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index 31af0a10f3eac0dfc7242fc5e0873c9d95d8ddb2..f492ccb4d0528a9b581001e8b484d4d9e9250bdf 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -342,8 +342,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
|
| @@ -1108,7 +1107,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);
|
| }
|
| @@ -1540,7 +1539,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;
|
| }
|
| @@ -1550,17 +1549,14 @@ 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) {
|
| const bool isScaleTrans = fMCRec->fMatrix.isScaleTranslate();
|
| SkRect devR;
|
| if (isScaleTrans) {
|
| fMCRec->fMatrix.mapRectScaleTranslate(&devR, rect);
|
| }
|
|
|
| - 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",
|
| @@ -1577,7 +1573,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);
|
| } 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
|
| @@ -1593,7 +1589,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()) {
|
| @@ -1603,7 +1599,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);
|
| @@ -1615,7 +1611,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;
|
| @@ -1628,7 +1624,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;
|
|
|
| @@ -1653,7 +1649,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) {
|
| AutoValidateClip avc(this);
|
|
|
| fDeviceCMDirty = true;
|
| @@ -1688,19 +1684,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;
|
| @@ -1709,7 +1705,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());
|
| }
|
|
|
| @@ -1732,7 +1728,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();
|
| @@ -1740,7 +1736,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;
|
| }
|
| }
|
| @@ -3451,3 +3448,19 @@ SkSurface* SkCanvas::newSurface(const SkImageInfo& info, const SkSurfaceProps* p
|
| return this->makeSurface(info, props).release();
|
| }
|
| #endif
|
| +
|
| +/////////////////////////////////
|
| +
|
| +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;
|
| +
|
| +static_assert((int)SkRegion::kDifference_Op == (int)kDifference_SkClipOp, "");
|
| +static_assert((int)SkRegion::kIntersect_Op == (int)kIntersect_SkClipOp, "");
|
| +static_assert((int)SkRegion::kUnion_Op == (int)kUnion_SkClipOp, "");
|
| +static_assert((int)SkRegion::kXOR_Op == (int)kXOR_SkClipOp, "");
|
| +static_assert((int)SkRegion::kReverseDifference_Op == (int)kReverseDifference_SkClipOp, "");
|
| +static_assert((int)SkRegion::kReplace_Op == (int)kReplace_SkClipOp, "");
|
|
|