blob: fee55fbb208b2cefdb4dc37363de1c0137800a29 [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 Clark77b3f3a2018-11-07 14:59:03 -050015#Line # restores Canvas when out of scope ##
Cary Clark09d80c02018-10-31 12:14:03 -040016#Populate
Cary Clark5081eed2018-01-22 07:55:48 -050017
18#Example
19#Height 128
20 SkPaint p;
Mike Reed729bb192019-02-13 16:56:13 -050021 SkFont font(nullptr, 64);
Cary Clark5081eed2018-01-22 07:55:48 -050022 for (SkScalar sx : { -1, 1 } ) {
23 for (SkScalar sy : { -1, 1 } ) {
24 SkAutoCanvasRestore autoRestore(canvas, true);
25 SkMatrix m = SkMatrix::MakeAll(sx, 1, 96, 0, sy, 64, 0, 0, 1);
26 canvas->concat(m);
Mike Reed729bb192019-02-13 16:56:13 -050027 canvas->drawString("R", 0, 0, font, p);
Cary Clark5081eed2018-01-22 07:55:48 -050028 }
29 }
30##
31
32#SeeAlso SkCanvas::save SkCanvas::restore
33
34##
35
36#Method ~SkAutoCanvasRestore()
37
Cary Clarkab2621d2018-01-30 10:08:57 -050038#Line # restores Canvas to saved state ##
Cary Clark09d80c02018-10-31 12:14:03 -040039#Populate
Cary Clark5081eed2018-01-22 07:55:48 -050040
41#NoExample
42##
43
44#SeeAlso SkCanvas::save SkCanvas::restore
45
46##
47
48#Method void restore()
Cary Clark78de7512018-02-07 07:27:09 -050049#In Member_Function
Cary Clarkab2621d2018-01-30 10:08:57 -050050#Line # restores Canvas to saved state ##
Cary Clark09d80c02018-10-31 12:14:03 -040051#Populate
Cary Clark5081eed2018-01-22 07:55:48 -050052
53#Example
54for (bool callRestore : { false, true } ) {
55 for (bool saveCanvas : {false, true} ) {
56 SkAutoCanvasRestore autoRestore(canvas, saveCanvas);
57 if (!saveCanvas) {
58 canvas->save();
59 }
60 SkDebugf("saveCanvas: %s before restore: %d\n",
61 saveCanvas ? "true" : "false", canvas->getSaveCount());
62 if (callRestore) autoRestore.restore();
63 SkDebugf("saveCanvas: %s after restore: %d\n",
64 saveCanvas ? "true" : "false", canvas->getSaveCount());
65 }
66}
67SkDebugf("final count: %d\n", canvas->getSaveCount());
68#StdOut
69saveCanvas: false before restore: 2
70saveCanvas: false after restore: 2
71saveCanvas: true before restore: 2
72saveCanvas: true after restore: 2
73saveCanvas: false before restore: 2
74saveCanvas: false after restore: 1
75saveCanvas: true before restore: 2
76saveCanvas: true after restore: 1
77final count: 1
78##
79##
80
81#SeeAlso SkCanvas::save SkCanvas::restore
82
83##
84
85#Class SkAutoCanvasRestore ##
86
87#Topic Automatic_Canvas_Restore ##