| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index ce08d41a1f76d3673eda3f8de94c34a4e74a0bed..c8c4b8749b9b748d7f84127f7e983f63b22f35a0 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -812,19 +812,17 @@ void SkCanvas::flush() {
|
| }
|
| }
|
|
|
| -SkISize SkCanvas::getTopLayerSize() const {
|
| - SkBaseDevice* d = this->getTopDevice();
|
| +SkISize SkCanvas::getBaseLayerSize() const {
|
| + SkBaseDevice* d = this->getDevice();
|
| return d ? SkISize::Make(d->width(), d->height()) : SkISize::Make(0, 0);
|
| }
|
|
|
| -SkIPoint SkCanvas::getTopLayerOrigin() const {
|
| +SkIRect SkCanvas::getTopLayerBounds() const {
|
| SkBaseDevice* d = this->getTopDevice();
|
| - return d ? d->getOrigin() : SkIPoint::Make(0, 0);
|
| -}
|
| -
|
| -SkISize SkCanvas::getBaseLayerSize() const {
|
| - SkBaseDevice* d = this->getDevice();
|
| - return d ? SkISize::Make(d->width(), d->height()) : SkISize::Make(0, 0);
|
| + if (!d) {
|
| + return SkIRect::MakeEmpty();
|
| + }
|
| + return SkIRect::MakeXYWH(d->getOrigin().x(), d->getOrigin().y(), d->width(), d->height());
|
| }
|
|
|
| SkBaseDevice* SkCanvas::getDevice() const {
|
| @@ -1516,7 +1514,7 @@ void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edg
|
| if (rectStaysRect) {
|
| const bool isAA = kSoft_ClipEdgeStyle == edgeStyle;
|
| fClipStack->clipDevRect(devR, op, isAA);
|
| - fMCRec->fRasterClip.op(devR, this->getBaseLayerSize(), op, isAA);
|
| + fMCRec->fRasterClip.op(devR, this->getTopLayerBounds(), 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
|
| @@ -1529,11 +1527,6 @@ void SkCanvas::onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle edg
|
| }
|
| }
|
|
|
| -static void rasterclip_path(SkRasterClip* rc, const SkCanvas* canvas, const SkPath& devPath,
|
| - SkRegion::Op op, bool doAA) {
|
| - rc->op(devPath, canvas->getBaseLayerSize(), op, doAA);
|
| -}
|
| -
|
| void SkCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) {
|
| this->checkForDeferredSave();
|
| ClipEdgeStyle edgeStyle = doAA ? kSoft_ClipEdgeStyle : kHard_ClipEdgeStyle;
|
| @@ -1557,7 +1550,7 @@ void SkCanvas::onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle
|
|
|
| fClipStack->clipDevRRect(transformedRRect, op, kSoft_ClipEdgeStyle == edgeStyle);
|
|
|
| - fMCRec->fRasterClip.op(transformedRRect, this->getBaseLayerSize(), op,
|
| + fMCRec->fRasterClip.op(transformedRRect, this->getTopLayerBounds(), op,
|
| kSoft_ClipEdgeStyle == edgeStyle);
|
| return;
|
| }
|
| @@ -1643,7 +1636,7 @@ void SkCanvas::onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle edg
|
| op = SkRegion::kReplace_Op;
|
| }
|
|
|
| - rasterclip_path(&fMCRec->fRasterClip, this, devPath, op, edgeStyle);
|
| + fMCRec->fRasterClip.op(devPath, this->getTopLayerBounds(), op, edgeStyle);
|
| }
|
|
|
| void SkCanvas::clipRegion(const SkRegion& rgn, SkRegion::Op op) {
|
| @@ -1691,7 +1684,7 @@ void SkCanvas::validateClip() const {
|
| default: {
|
| SkPath path;
|
| element->asPath(&path);
|
| - rasterclip_path(&tmpClip, this, path, element->getOp(), element->isAA());
|
| + tmpClip.op(path, this->getTopLayerBounds(), element->getOp(), element->isAA());
|
| break;
|
| }
|
| }
|
|
|