Index: src/core/SkCanvas.cpp |
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp |
index ce90275047a6466cf9217e32bc0e9505ed8eff36..6816d4ea9bb52a8856c9b9518cfc982787357ee3 100644 |
--- a/src/core/SkCanvas.cpp |
+++ b/src/core/SkCanvas.cpp |
@@ -294,17 +294,22 @@ public: |
SkMatrix fMatrix; |
int fDeferredSaveCount; |
+ // This is the current cumulative depth (aggregate of all done translateZ calls) |
+ SkScalar fCurDrawDepth; |
+ |
MCRec(bool conservativeRasterClip) : fRasterClip(conservativeRasterClip) { |
fFilter = nullptr; |
fLayer = nullptr; |
fTopLayer = nullptr; |
fMatrix.reset(); |
fDeferredSaveCount = 0; |
+ fCurDrawDepth = 0; |
// don't bother initializing fNext |
inc_rec(); |
} |
- MCRec(const MCRec& prev) : fRasterClip(prev.fRasterClip), fMatrix(prev.fMatrix) { |
+ MCRec(const MCRec& prev) : fRasterClip(prev.fRasterClip), fMatrix(prev.fMatrix), |
+ fCurDrawDepth(prev.fCurDrawDepth) { |
fFilter = SkSafeRef(prev.fFilter); |
fLayer = nullptr; |
fTopLayer = prev.fTopLayer; |
@@ -1521,6 +1526,16 @@ void SkCanvas::resetMatrix() { |
this->setMatrix(SkMatrix::I()); |
} |
+void SkCanvas::translateZ(SkScalar z) { |
+ this->checkForDeferredSave(); |
+ this->fMCRec->fCurDrawDepth += z; |
+ this->didTranslateZ(z); |
+} |
+ |
+SkScalar SkCanvas::getZ() const { |
+ return this->fMCRec->fCurDrawDepth; |
+} |
+ |
////////////////////////////////////////////////////////////////////////////// |
void SkCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { |