blob: a96919509abe243605d500774d5ba6116e5878eb [file] [log] [blame]
Cary Clark5081eed2018-01-22 07:55:48 -05001#Topic Automatic_Canvas_Restore
2
3#Class SkAutoCanvasRestore
4
Cary Clark61313f32018-10-08 14:57:48 -04005#Code
6#Populate
7##
8
Cary Clark186d08f2018-04-03 08:43:27 -04009Stack helper class calls SkCanvas::restoreToCount when SkAutoCanvasRestore
Cary Clark5081eed2018-01-22 07:55:48 -050010goes out of scope. Use this to guarantee that the canvas is restored to a known
11state.
12
Cary Clark5081eed2018-01-22 07:55:48 -050013#Method SkAutoCanvasRestore(SkCanvas* canvas, bool doSave)
14
Cary Clarkab2621d2018-01-30 10:08:57 -050015#Line # preserves Canvas save count ##
Cary Clark5081eed2018-01-22 07:55:48 -050016Preserves Canvas save count. Optionally saves Canvas_Clip and Canvas_Matrix.
17
18#Param canvas Canvas to guard ##
19#Param doSave call SkCanvas::save() ##
20
21#Return utility to restore Canvas state on destructor ##
22
23#Example
24#Height 128
25 SkPaint p;
26 p.setAntiAlias(true);
27 p.setTextSize(64);
28 for (SkScalar sx : { -1, 1 } ) {
29 for (SkScalar sy : { -1, 1 } ) {
30 SkAutoCanvasRestore autoRestore(canvas, true);
31 SkMatrix m = SkMatrix::MakeAll(sx, 1, 96, 0, sy, 64, 0, 0, 1);
32 canvas->concat(m);
33 canvas->drawString("R", 0, 0, p);
34 }
35 }
36##
37
38#SeeAlso SkCanvas::save SkCanvas::restore
39
40##
41
42#Method ~SkAutoCanvasRestore()
43
Cary Clarkab2621d2018-01-30 10:08:57 -050044#Line # restores Canvas to saved state ##
Cary Clark5081eed2018-01-22 07:55:48 -050045Restores Canvas to saved state. Destructor is called when container goes out of
46scope.
47
48#NoExample
49##
50
51#SeeAlso SkCanvas::save SkCanvas::restore
52
53##
54
55#Method void restore()
Cary Clark78de7512018-02-07 07:27:09 -050056#In Member_Function
Cary Clarkab2621d2018-01-30 10:08:57 -050057#Line # restores Canvas to saved state ##
Cary Clark5081eed2018-01-22 07:55:48 -050058Restores Canvas to saved state immediately. Subsequent calls and
59~SkAutoCanvasRestore have no effect.
60
61#Example
62for (bool callRestore : { false, true } ) {
63 for (bool saveCanvas : {false, true} ) {
64 SkAutoCanvasRestore autoRestore(canvas, saveCanvas);
65 if (!saveCanvas) {
66 canvas->save();
67 }
68 SkDebugf("saveCanvas: %s before restore: %d\n",
69 saveCanvas ? "true" : "false", canvas->getSaveCount());
70 if (callRestore) autoRestore.restore();
71 SkDebugf("saveCanvas: %s after restore: %d\n",
72 saveCanvas ? "true" : "false", canvas->getSaveCount());
73 }
74}
75SkDebugf("final count: %d\n", canvas->getSaveCount());
76#StdOut
77saveCanvas: false before restore: 2
78saveCanvas: false after restore: 2
79saveCanvas: true before restore: 2
80saveCanvas: true after restore: 2
81saveCanvas: false before restore: 2
82saveCanvas: false after restore: 1
83saveCanvas: true before restore: 2
84saveCanvas: true after restore: 1
85final count: 1
86##
87##
88
89#SeeAlso SkCanvas::save SkCanvas::restore
90
91##
92
93#Class SkAutoCanvasRestore ##
94
95#Topic Automatic_Canvas_Restore ##