aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkCanvas.cpp
diff options
context:
space:
mode:
authorGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-23 11:44:08 +0000
committerGravatar robertphillips@google.com <robertphillips@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-05-23 11:44:08 +0000
commit49d9fd5fdb9ffd48538c8fc5a2f6f2d43a2e4fe9 (patch)
treed9ac469c4bc3a933872276d3047d67b616efb507 /src/core/SkCanvas.cpp
parentaf46cff4ee6099cebf3aa395805748af7d193a31 (diff)
Plumbing to propagate save & restore from SkCanvas down to GrContext & lower
Diffstat (limited to 'src/core/SkCanvas.cpp')
-rw-r--r--src/core/SkCanvas.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/core/SkCanvas.cpp b/src/core/SkCanvas.cpp
index f50728421a..af2e066b4f 100644
--- a/src/core/SkCanvas.cpp
+++ b/src/core/SkCanvas.cpp
@@ -700,6 +700,14 @@ int SkCanvas::internalSave(SaveFlags flags) {
fClipStack.save();
SkASSERT(fClipStack.getSaveCount() == this->getSaveCount() - 1);
+ for (DeviceCM* curLayer = fMCRec->fTopLayer;
+ curLayer;
+ curLayer = curLayer->fNext) {
+ if (NULL != curLayer->fDevice) {
+ curLayer->fDevice->postSave();
+ }
+ }
+
return saveCount;
}
@@ -870,6 +878,14 @@ void SkCanvas::restore() {
void SkCanvas::internalRestore() {
SkASSERT(fMCStack.count() != 0);
+ for (DeviceCM* curLayer = fMCRec->fTopLayer;
+ curLayer;
+ curLayer = curLayer->fNext) {
+ if (NULL != curLayer->fDevice) {
+ curLayer->fDevice->preRestore();
+ }
+ }
+
fDeviceCMDirty = true;
fLocalBoundsCompareTypeDirty = true;
fLocalBoundsCompareTypeDirtyBW = true;