| Index: src/core/SkCanvas.cpp
|
| diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
|
| index bdbcd3be740fbd79fd7cdae4c4a954d63a88b31c..fc288dbc1dc837740ddb93541fd43340015045f9 100644
|
| --- a/src/core/SkCanvas.cpp
|
| +++ b/src/core/SkCanvas.cpp
|
| @@ -1793,6 +1793,35 @@ void SkCanvas::internal_private_getTotalClipAsPath(SkPath* path) const {
|
| (void)rgn.getBoundaryPath(path);
|
| }
|
|
|
| +void SkCanvas::getCurrentClipPath(SkPath* path) const {
|
| +
|
| + if (!path)
|
| + return;
|
| +
|
| + const SkClipStack* clipStack = getClipStack();
|
| + SkClipStack::Iter iter(*clipStack, SkClipStack::Iter::kBottom_IterStart);
|
| + const SkClipStack::Element* element;
|
| +
|
| + SkPath totalClipPath;
|
| + totalClipPath.setFillType(SkPath::kInverseEvenOdd_FillType);
|
| +
|
| + while ((element = iter.next())) {
|
| +
|
| + SkClipStack::Element::Type type = element->getType();
|
| + SkPath clipPath;
|
| + if (type != SkClipStack::Element::kEmpty_Type)
|
| + element->asPath(&clipPath);
|
| +
|
| + SkRegion::Op elementOp = element->getOp();
|
| + if (elementOp == SkRegion::kReplace_Op)
|
| + totalClipPath = clipPath;
|
| + else
|
| + Op(totalClipPath, clipPath, (SkPathOp)elementOp, &totalClipPath);
|
| + }
|
| +
|
| + *path = totalClipPath;
|
| +}
|
| +
|
| GrRenderTarget* SkCanvas::internal_private_accessTopLayerRenderTarget() {
|
| SkBaseDevice* dev = this->getTopDevice();
|
| return dev ? dev->accessRenderTarget() : NULL;
|
|
|