Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Unified Diff: src/core/SkCanvas.cpp

Issue 340453003: Add getCurrentClipPath() to SkCanvas. Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: add SkCanvas::getCurrentClipPath() Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/core/SkCanvas.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « include/core/SkCanvas.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698