#Topic Automatic_Canvas_Restore #Class SkAutoCanvasRestore Stack helper class calls SkCanvas::restoreToCount when SkAutoCanvasRestore goes out of scope. Use this to guarantee that the canvas is restored to a known state. #Subtopic Overview #Populate ## #Subtopic Constructor #Populate ## #Subtopic Member_Function #Populate ## #Method SkAutoCanvasRestore(SkCanvas* canvas, bool doSave) #Line # preserves Canvas save count ## Preserves Canvas save count. Optionally saves Canvas_Clip and Canvas_Matrix. #Param canvas Canvas to guard ## #Param doSave call SkCanvas::save() ## #Return utility to restore Canvas state on destructor ## #Example #Height 128 SkPaint p; p.setAntiAlias(true); p.setTextSize(64); for (SkScalar sx : { -1, 1 } ) { for (SkScalar sy : { -1, 1 } ) { SkAutoCanvasRestore autoRestore(canvas, true); SkMatrix m = SkMatrix::MakeAll(sx, 1, 96, 0, sy, 64, 0, 0, 1); canvas->concat(m); canvas->drawString("R", 0, 0, p); } } ## #SeeAlso SkCanvas::save SkCanvas::restore ## #Method ~SkAutoCanvasRestore() #Line # restores Canvas to saved state ## Restores Canvas to saved state. Destructor is called when container goes out of scope. #NoExample ## #SeeAlso SkCanvas::save SkCanvas::restore ## #Method void restore() #In Member_Function #Line # restores Canvas to saved state ## Restores Canvas to saved state immediately. Subsequent calls and ~SkAutoCanvasRestore have no effect. #Example for (bool callRestore : { false, true } ) { for (bool saveCanvas : {false, true} ) { SkAutoCanvasRestore autoRestore(canvas, saveCanvas); if (!saveCanvas) { canvas->save(); } SkDebugf("saveCanvas: %s before restore: %d\n", saveCanvas ? "true" : "false", canvas->getSaveCount()); if (callRestore) autoRestore.restore(); SkDebugf("saveCanvas: %s after restore: %d\n", saveCanvas ? "true" : "false", canvas->getSaveCount()); } } SkDebugf("final count: %d\n", canvas->getSaveCount()); #StdOut saveCanvas: false before restore: 2 saveCanvas: false after restore: 2 saveCanvas: true before restore: 2 saveCanvas: true after restore: 2 saveCanvas: false before restore: 2 saveCanvas: false after restore: 1 saveCanvas: true before restore: 2 saveCanvas: true after restore: 1 final count: 1 ## ## #SeeAlso SkCanvas::save SkCanvas::restore ## #Class SkAutoCanvasRestore ## #Topic Automatic_Canvas_Restore ##