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; |