blob: 5a1e2e05bf38c381a08c47de4a842872c8834736 [file] [log] [blame]
Cary Clark5081eed2018-01-22 07:55:48 -05001#Topic Automatic_Canvas_Restore
2
3#Class SkAutoCanvasRestore
4
Cary Clark186d08f2018-04-03 08:43:27 -04005Stack helper class calls SkCanvas::restoreToCount when SkAutoCanvasRestore
Cary Clark5081eed2018-01-22 07:55:48 -05006goes out of scope. Use this to guarantee that the canvas is restored to a known
7state.
8
Cary Clark682c58d2018-05-16 07:07:07 -04009#Subtopic Overview
10#Populate
11##
12
Cary Clark4855f782018-02-06 09:41:53 -050013#Subtopic Constructor
Cary Clark08895c42018-02-01 09:37:32 -050014#Populate
15##
Cary Clark5081eed2018-01-22 07:55:48 -050016
Cary Clark4855f782018-02-06 09:41:53 -050017#Subtopic Member_Function
Cary Clark08895c42018-02-01 09:37:32 -050018#Populate
19##
Cary Clark5081eed2018-01-22 07:55:48 -050020
21#Method SkAutoCanvasRestore(SkCanvas* canvas, bool doSave)
22
Cary Clarkab2621d2018-01-30 10:08:57 -050023#Line # preserves Canvas save count ##
Cary Clark5081eed2018-01-22 07:55:48 -050024Preserves Canvas save count. Optionally saves Canvas_Clip and Canvas_Matrix.
25
26#Param canvas Canvas to guard ##
27#Param doSave call SkCanvas::save() ##
28
29#Return utility to restore Canvas state on destructor ##
30
31#Example
32#Height 128
33 SkPaint p;
34 p.setAntiAlias(true);
35 p.setTextSize(64);
36 for (SkScalar sx : { -1, 1 } ) {
37 for (SkScalar sy : { -1, 1 } ) {
38 SkAutoCanvasRestore autoRestore(canvas, true);
39 SkMatrix m = SkMatrix::MakeAll(sx, 1, 96, 0, sy, 64, 0, 0, 1);
40 canvas->concat(m);
41 canvas->drawString("R", 0, 0, p);
42 }
43 }
44##
45
46#SeeAlso SkCanvas::save SkCanvas::restore
47
48##
49
50#Method ~SkAutoCanvasRestore()
51
Cary Clarkab2621d2018-01-30 10:08:57 -050052#Line # restores Canvas to saved state ##
Cary Clark5081eed2018-01-22 07:55:48 -050053Restores Canvas to saved state. Destructor is called when container goes out of
54scope.
55
56#NoExample
57##
58
59#SeeAlso SkCanvas::save SkCanvas::restore
60
61##
62
63#Method void restore()
Cary Clark78de7512018-02-07 07:27:09 -050064#In Member_Function
Cary Clarkab2621d2018-01-30 10:08:57 -050065#Line # restores Canvas to saved state ##
Cary Clark5081eed2018-01-22 07:55:48 -050066Restores Canvas to saved state immediately. Subsequent calls and
67~SkAutoCanvasRestore have no effect.
68
69#Example
70for (bool callRestore : { false, true } ) {
71 for (bool saveCanvas : {false, true} ) {
72 SkAutoCanvasRestore autoRestore(canvas, saveCanvas);
73 if (!saveCanvas) {
74 canvas->save();
75 }
76 SkDebugf("saveCanvas: %s before restore: %d\n",
77 saveCanvas ? "true" : "false", canvas->getSaveCount());
78 if (callRestore) autoRestore.restore();
79 SkDebugf("saveCanvas: %s after restore: %d\n",
80 saveCanvas ? "true" : "false", canvas->getSaveCount());
81 }
82}
83SkDebugf("final count: %d\n", canvas->getSaveCount());
84#StdOut
85saveCanvas: false before restore: 2
86saveCanvas: false after restore: 2
87saveCanvas: true before restore: 2
88saveCanvas: true after restore: 2
89saveCanvas: false before restore: 2
90saveCanvas: false after restore: 1
91saveCanvas: true before restore: 2
92saveCanvas: true after restore: 1
93final count: 1
94##
95##
96
97#SeeAlso SkCanvas::save SkCanvas::restore
98
99##
100
101#Class SkAutoCanvasRestore ##
102
103#Topic Automatic_Canvas_Restore ##