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