blob: 8ad642aa73eacd108ecee296c30b874f331183a8 [file] [log] [blame]
Cary Clark224c7002018-06-27 11:00:21 -04001#Topic Picture
2#Alias Pictures ##
3#Alias Picture_Reference ##
4
5#Class SkPicture
6
Cary Clarkf9603982018-07-17 08:20:27 -04007Picture records drawing commands made to Canvas. The command stream may be
8played in whole or in part at a later time.
9
10Picture is an abstract class. Picture may be generated by Picture_Recorder
11or Drawable, or from Picture previously saved to Data or Stream.
12
13Picture may contain any Canvas drawing command, as well as one or more
14Canvas_Matrix or Canvas_Clip. Picture has a cull Rect, which is used as
15a bounding box hint. To limit Picture bounds, use Canvas_Clip when
16recording or drawing Picture.
Cary Clark224c7002018-06-27 11:00:21 -040017
18#Subtopic Overview
19#Populate
20##
21
22#Subtopic Class
23#Populate
24##
25
26#Subtopic Member_Function
27#Populate
28##
29
30# ------------------------------------------------------------------------------
31
32#Class AbortCallback
Cary Clark80247e52018-07-11 16:18:41 -040033#Line # utility to stop picture playback ##
Cary Clark224c7002018-06-27 11:00:21 -040034
35#Code
Cary Clark80247e52018-07-11 16:18:41 -040036 class AbortCallback {
37 public:
38 AbortCallback() {}
39 virtual ~AbortCallback() {}
40 virtual bool abort() = 0;
41 };
Cary Clark224c7002018-06-27 11:00:21 -040042##
43
Cary Clarkf9603982018-07-17 08:20:27 -040044AbortCallback is an abstract class. An implementation of AbortCallback may
45passed as a parameter to SkPicture::playback, to stop it before all drawing
46commands have been processed.
47
48If AbortCallback::abort returns true, SkPicture::playback is interrupted.
Cary Clark224c7002018-06-27 11:00:21 -040049
50# ------------------------------------------------------------------------------
51
52#Method AbortCallback()
Cary Clark80247e52018-07-11 16:18:41 -040053#In Constructor
54#Line # defines default constructor ##
55Has no effect.
Cary Clark224c7002018-06-27 11:00:21 -040056
Cary Clark80247e52018-07-11 16:18:41 -040057#Return abstract class cannot be instantiated ##
Cary Clark224c7002018-06-27 11:00:21 -040058
Cary Clark80247e52018-07-11 16:18:41 -040059#NoExample
Cary Clark224c7002018-06-27 11:00:21 -040060##
61
Cary Clark80247e52018-07-11 16:18:41 -040062#SeeAlso playback
Cary Clark224c7002018-06-27 11:00:21 -040063
64#Method ##
65
66# ------------------------------------------------------------------------------
67
68#Method virtual ~AbortCallback()
69#In Constructor
Cary Clark80247e52018-07-11 16:18:41 -040070#Line # defines default destructor ##
71Has no effect.
Cary Clark224c7002018-06-27 11:00:21 -040072
Cary Clark80247e52018-07-11 16:18:41 -040073#NoExample
Cary Clark224c7002018-06-27 11:00:21 -040074##
75
Cary Clark80247e52018-07-11 16:18:41 -040076#SeeAlso playback
Cary Clark224c7002018-06-27 11:00:21 -040077
78#Method ##
79
80# ------------------------------------------------------------------------------
81
82#Method virtual bool abort() = 0
Cary Clark80247e52018-07-11 16:18:41 -040083#In Utility
84#Line # aborts playback by callback ##
Cary Clark224c7002018-06-27 11:00:21 -040085
Cary Clark80247e52018-07-11 16:18:41 -040086Stops Picture playback when some condition is met. A subclass of
Cary Clarkf9603982018-07-17 08:20:27 -040087AbortCallback provides an override for abort() that can stop SkPicture::playback.
88
89The part of Picture drawn when aborted is undefined. Picture instantiations are
90free to stop drawing at different points during playback.
91
92If the abort happens inside one or more calls to SkCanvas::save(), stack
93of Canvas_Matrix and Canvas_Clip values is restored to its state before
94SkPicture::playback was called.
Cary Clark224c7002018-06-27 11:00:21 -040095
Cary Clark80247e52018-07-11 16:18:41 -040096#Return true to stop playback ##
97
98#NoExample
Cary Clark224c7002018-06-27 11:00:21 -040099##
100
Cary Clark80247e52018-07-11 16:18:41 -0400101#SeeAlso playback
Cary Clark224c7002018-06-27 11:00:21 -0400102
103#Method ##
104
Cary Clark80247e52018-07-11 16:18:41 -0400105#Example
106#Description
107JustOneDraw allows the black rectangle to draw but stops playback before the
108white rectangle appears.
109##
110#Function
111class JustOneDraw : public SkPicture::AbortCallback {
112public:
113 bool abort() override { return fCalls++ > 0; }
114private:
115 int fCalls = 0;
116};
117##
118
119void draw(SkCanvas* canvas) {
120 SkPictureRecorder recorder;
121 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
122 SkPaint paint;
123 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
124 paint.setColor(SK_ColorWHITE);
125 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
126 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
127 JustOneDraw callback;
128 picture->playback(canvas, &callback);
129}
130
131##
132
Cary Clark224c7002018-06-27 11:00:21 -0400133#Class AbortCallback ##
134
135# ------------------------------------------------------------------------------
136
137#Method static sk_sp<SkPicture> MakeFromStream(SkStream* stream,
138 const SkDeserialProcs* procs = nullptr)
Cary Clark80247e52018-07-11 16:18:41 -0400139#In Constructor
140#Line # constructs Picture from stream ##
Cary Clark224c7002018-06-27 11:00:21 -0400141
Cary Clark80247e52018-07-11 16:18:41 -0400142Recreates a picture that was serialized into a stream.
Cary Clark224c7002018-06-27 11:00:21 -0400143
Cary Clark80247e52018-07-11 16:18:41 -0400144#Param stream container for serial data ##
145#Param procs custom serial data decoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400146
Cary Clark80247e52018-07-11 16:18:41 -0400147#Return Picture constructed from stream data ##
Cary Clark224c7002018-06-27 11:00:21 -0400148
149#Example
Cary Clark80247e52018-07-11 16:18:41 -0400150 SkPictureRecorder recorder;
151 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
152 SkPaint paint;
153 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
154 paint.setColor(SK_ColorWHITE);
155 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
156 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
157 SkDynamicMemoryWStream writableStream;
158 picture->serialize(&writableStream);
159 std::unique_ptr<SkStreamAsset> readableStream = writableStream.detachAsStream();
160 sk_sp<SkPicture> copy = SkPicture::MakeFromStream(readableStream.get());
161 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400162##
163
Cary Clark80247e52018-07-11 16:18:41 -0400164#SeeAlso MakeFromData SkPictureRecorder
Cary Clark224c7002018-06-27 11:00:21 -0400165
166#Method ##
167
168# ------------------------------------------------------------------------------
169
170#Method static sk_sp<SkPicture> MakeFromData(const SkData* data,
171 const SkDeserialProcs* procs = nullptr)
Cary Clark80247e52018-07-11 16:18:41 -0400172#In Constructor
173#Line # constructs Picture from data ##
Cary Clark224c7002018-06-27 11:00:21 -0400174
Cary Clark80247e52018-07-11 16:18:41 -0400175Recreates a picture that was serialized into data.
Cary Clark224c7002018-06-27 11:00:21 -0400176
Cary Clark80247e52018-07-11 16:18:41 -0400177#Param data container for serial data ##
178#Param procs custom serial data decoders; may be nullptr ##
179
180#Return Picture constructed from data ##
Cary Clark224c7002018-06-27 11:00:21 -0400181
182#Example
Cary Clark80247e52018-07-11 16:18:41 -0400183 SkPictureRecorder recorder;
184 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
185 SkPaint paint;
186 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
187 paint.setColor(SK_ColorWHITE);
188 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
189 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
190 SkDynamicMemoryWStream writableStream;
191 picture->serialize(&writableStream);
192 sk_sp<SkData> readableData = writableStream.detachAsData();
193 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData.get());
194 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400195##
196
Cary Clark80247e52018-07-11 16:18:41 -0400197#SeeAlso MakeFromStream SkPictureRecorder
Cary Clark224c7002018-06-27 11:00:21 -0400198
199#Method ##
200
201# ------------------------------------------------------------------------------
202
203#Method static sk_sp<SkPicture> MakeFromData(const void* data, size_t size,
204 const SkDeserialProcs* procs = nullptr)
Cary Clark224c7002018-06-27 11:00:21 -0400205
Cary Clark80247e52018-07-11 16:18:41 -0400206#Param data pointer to serial data ##
207#Param size size of data ##
208#Param procs custom serial data decoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400209
Cary Clark80247e52018-07-11 16:18:41 -0400210Recreates a picture that was serialized into data.
211
212#Return Picture constructed from data ##
Cary Clark224c7002018-06-27 11:00:21 -0400213
214#Example
Cary Clark80247e52018-07-11 16:18:41 -0400215 SkPictureRecorder recorder;
216 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
217 SkPaint paint;
218 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
219 paint.setColor(SK_ColorWHITE);
220 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
221 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
222 SkDynamicMemoryWStream writableStream;
223 picture->serialize(&writableStream);
224 sk_sp<SkData> readableData = writableStream.detachAsData();
225 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
226 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400227##
228
Cary Clark80247e52018-07-11 16:18:41 -0400229#SeeAlso MakeFromStream SkPictureRecorder
Cary Clark224c7002018-06-27 11:00:21 -0400230
231#Method ##
232
233# ------------------------------------------------------------------------------
234
235#Method virtual void playback(SkCanvas* canvas, AbortCallback* callback = nullptr) const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400236#In Action
237#Line # replays drawing commands on canvas ##
Cary Clark224c7002018-06-27 11:00:21 -0400238
Cary Clarkf9603982018-07-17 08:20:27 -0400239Replays the drawing commands on the specified canvas. In the case that the
240commands are recorded, each command in the Picture is sent separately to canvas.
241
242To add a single command to draw Picture to recording canvas, call
243SkCanvas::drawPicture instead.
Cary Clark224c7002018-06-27 11:00:21 -0400244
Cary Clark80247e52018-07-11 16:18:41 -0400245#Param canvas receiver of drawing commands ##
246#Param callback allows interruption of playback ##
Cary Clark224c7002018-06-27 11:00:21 -0400247
248#Example
Cary Clark80247e52018-07-11 16:18:41 -0400249 SkPictureRecorder recorder;
250 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
251 SkPaint paint;
252 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
253 paint.setColor(SK_ColorWHITE);
254 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
255 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
256 picture->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400257##
258
Cary Clark80247e52018-07-11 16:18:41 -0400259#SeeAlso SkCanvas::drawPicture
Cary Clark224c7002018-06-27 11:00:21 -0400260
261#Method ##
262
263# ------------------------------------------------------------------------------
264
265#Method virtual SkRect cullRect() const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400266#In Property
267#Line # returns bounds used to record Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400268
Cary Clarkf9603982018-07-17 08:20:27 -0400269Returns cull Rect for this picture, passed in when Picture was created.
270Returned Rect does not specify clipping Rect for Picture; cull is hint
271of Picture bounds.
272
273Picture is free to discard recorded drawing commands that fall outside
274cull.
Cary Clark224c7002018-06-27 11:00:21 -0400275
Cary Clark80247e52018-07-11 16:18:41 -0400276#Return bounds passed when Picture was created ##
Cary Clark224c7002018-06-27 11:00:21 -0400277
278#Example
Cary Clark80247e52018-07-11 16:18:41 -0400279#Description
280Picture recorded bounds are smaller than contents; contents outside recorded
281bounds may be drawn, and are drawn in this example.
282##
283 SkPictureRecorder recorder;
284 SkCanvas* pictureCanvas = recorder.beginRecording({64, 64, 192, 192});
285 SkPaint paint;
286 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
287 paint.setColor(SK_ColorWHITE);
288 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
289 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
290 picture->playback(canvas);
291 paint.setBlendMode(SkBlendMode::kModulate);
292 paint.setColor(0x40404040);
293 canvas->drawRect(picture->cullRect(), paint);
Cary Clark224c7002018-06-27 11:00:21 -0400294##
295
Cary Clark80247e52018-07-11 16:18:41 -0400296#SeeAlso SkCanvas::clipRect
Cary Clark224c7002018-06-27 11:00:21 -0400297
298#Method ##
299
300# ------------------------------------------------------------------------------
301
302#Method uint32_t uniqueID() const
Cary Clark80247e52018-07-11 16:18:41 -0400303#In Property
304#Line # returns identifier for Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400305
Cary Clarkf9603982018-07-17 08:20:27 -0400306Returns a non-zero value unique among Pictures in Skia process.
Cary Clark224c7002018-06-27 11:00:21 -0400307
Cary Clark80247e52018-07-11 16:18:41 -0400308#Return identifier for Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400309
310#Example
Cary Clark80247e52018-07-11 16:18:41 -0400311 SkPictureRecorder recorder;
312 recorder.beginRecording({0, 0, 0, 0});
313 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
314 SkDebugf("empty picture id = %d\n", picture->uniqueID());
315 sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({0, 0, 0, 0});
316 SkDebugf("placeholder id = %d\n", placeholder->uniqueID());
317#StdOut
318empty picture id = 1
319placeholder id = 2
320##
Cary Clark224c7002018-06-27 11:00:21 -0400321##
322
Cary Clark80247e52018-07-11 16:18:41 -0400323#SeeAlso SkRefCnt
Cary Clark224c7002018-06-27 11:00:21 -0400324
325#Method ##
326
327# ------------------------------------------------------------------------------
328
329#Method sk_sp<SkData> serialize(const SkSerialProcs* procs = nullptr) const
Cary Clark80247e52018-07-11 16:18:41 -0400330#In Utility
331#Line # writes Picture to data ##
Cary Clarkf9603982018-07-17 08:20:27 -0400332Returns storage containing data describing Picture, using optional custom
333encoders.
Cary Clark224c7002018-06-27 11:00:21 -0400334
Cary Clark80247e52018-07-11 16:18:41 -0400335#Param procs custom serial data encoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400336
Cary Clark80247e52018-07-11 16:18:41 -0400337#Return storage containing serialized Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400338
339#Example
Cary Clark80247e52018-07-11 16:18:41 -0400340 SkPictureRecorder recorder;
341 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
342 SkPaint paint;
343 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
344 paint.setColor(SK_ColorWHITE);
345 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
346 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
347 sk_sp<SkData> readableData = picture->serialize();
348 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
349 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400350##
351
Cary Clark80247e52018-07-11 16:18:41 -0400352#SeeAlso MakeFromData SkData SkSerialProcs
Cary Clark224c7002018-06-27 11:00:21 -0400353
354#Method ##
355
356# ------------------------------------------------------------------------------
357
358#Method void serialize(SkWStream* stream, const SkSerialProcs* procs = nullptr) const
Cary Clark80247e52018-07-11 16:18:41 -0400359Writes picture to stream, using optional custom encoders.
Cary Clark224c7002018-06-27 11:00:21 -0400360
Cary Clark80247e52018-07-11 16:18:41 -0400361#Param stream writable serial data stream ##
362#Param procs custom serial data encoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400363
364#Example
Cary Clark80247e52018-07-11 16:18:41 -0400365 SkPictureRecorder recorder;
366 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
367 SkPaint paint;
368 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
369 paint.setColor(SK_ColorWHITE);
370 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
371 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
372 SkDynamicMemoryWStream writableStream;
373 picture->serialize(&writableStream);
374 sk_sp<SkData> readableData = writableStream.detachAsData();
375 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
376 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400377##
378
Cary Clark80247e52018-07-11 16:18:41 -0400379#SeeAlso MakeFromStream SkWStream SkSerialProcs
Cary Clark224c7002018-06-27 11:00:21 -0400380
381#Method ##
382
383# ------------------------------------------------------------------------------
384
385#Method static sk_sp<SkPicture> MakePlaceholder(SkRect cull)
Cary Clark80247e52018-07-11 16:18:41 -0400386#In Constructor
387#Line # constructs placeholder with unique identifier ##
Cary Clark224c7002018-06-27 11:00:21 -0400388
Cary Clarkf9603982018-07-17 08:20:27 -0400389Returns a placeholder SkPicture. Result does not draw, and contains only
390cull Rect, a hint of its bounds. Result is immutable; it cannot be changed
391later. Result identifier is unique.
392
393Returned placeholder can be intercepted during playback to insert other
394commands into Canvas draw stream.
Cary Clark224c7002018-06-27 11:00:21 -0400395
Cary Clark80247e52018-07-11 16:18:41 -0400396#Param cull placeholder dimensions
Cary Clark224c7002018-06-27 11:00:21 -0400397##
398
Cary Clark80247e52018-07-11 16:18:41 -0400399#Return placeholder with unique identifier ##
Cary Clark224c7002018-06-27 11:00:21 -0400400
401#Example
Cary Clarkf9603982018-07-17 08:20:27 -0400402#Function
403class MyCanvas : public SkCanvas {
404public:
405 MyCanvas(SkCanvas* c) : canvas(c) {}
406 void onDrawPicture(const SkPicture* picture, const SkMatrix* ,
407 const SkPaint* ) override {
408 const SkRect rect = picture->cullRect();
409 SkPaint redPaint;
410 redPaint.setColor(SK_ColorRED);
411 canvas->drawRect(rect, redPaint);
412 }
413
414 SkCanvas* canvas;
415};
Cary Clark80247e52018-07-11 16:18:41 -0400416##
Cary Clarkf9603982018-07-17 08:20:27 -0400417SkPictureRecorder recorder;
418SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
419sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({10, 40, 80, 110});
420pictureCanvas->drawPicture(placeholder);
421sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
422MyCanvas myCanvas(canvas);
423myCanvas.drawPicture(picture);
Cary Clark224c7002018-06-27 11:00:21 -0400424##
425
Cary Clarkf9603982018-07-17 08:20:27 -0400426#SeeAlso MakeFromStream MakeFromData uniqueID
Cary Clark224c7002018-06-27 11:00:21 -0400427
428#Method ##
429
430# ------------------------------------------------------------------------------
431
432#Method virtual int approximateOpCount() const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400433#In Property
434#Line # returns approximate operation count ##
Cary Clark224c7002018-06-27 11:00:21 -0400435
Cary Clarkf9603982018-07-17 08:20:27 -0400436Returns the approximate number of operations in Picture. Returned value
437may be greater or less than the number of SkCanvas calls
438recorded: some calls may be recorded as more than one operation, other
Cary Clark224c7002018-06-27 11:00:21 -0400439calls may be optimized away.
440
Cary Clark80247e52018-07-11 16:18:41 -0400441#Return approximate operation count ##
Cary Clark224c7002018-06-27 11:00:21 -0400442
443#Example
Cary Clark80247e52018-07-11 16:18:41 -0400444 SkPictureRecorder recorder;
445 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
446 SkPaint paint;
447 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
448 paint.setColor(SK_ColorWHITE);
449 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
450 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
451 picture->playback(canvas);
452 std::string opCount = "approximate op count: " + std::to_string(picture->approximateOpCount());
453 canvas->drawString(opCount.c_str(), 50, 220, SkPaint());
Cary Clark224c7002018-06-27 11:00:21 -0400454##
455
Cary Clark80247e52018-07-11 16:18:41 -0400456#SeeAlso approximateBytesUsed
Cary Clark224c7002018-06-27 11:00:21 -0400457
458#Method ##
459
460# ------------------------------------------------------------------------------
461
462#Method virtual size_t approximateBytesUsed() const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400463#In Property
464#Line # returns approximate size ##
Cary Clark224c7002018-06-27 11:00:21 -0400465
Cary Clark80247e52018-07-11 16:18:41 -0400466Returns the approximate byte size of Picture. Does not include large objects
Cary Clarkf9603982018-07-17 08:20:27 -0400467referenced by Picture.
Cary Clark224c7002018-06-27 11:00:21 -0400468
Cary Clark80247e52018-07-11 16:18:41 -0400469#Return approximate size ##
Cary Clark224c7002018-06-27 11:00:21 -0400470
471#Example
Cary Clark80247e52018-07-11 16:18:41 -0400472 SkPictureRecorder recorder;
473 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
474 SkPaint paint;
475 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
476 paint.setColor(SK_ColorWHITE);
477 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
478 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
479 picture->playback(canvas);
480 std::string opCount = "approximate bytes used: " + std::to_string(picture->approximateBytesUsed());
481 canvas->drawString(opCount.c_str(), 20, 220, SkPaint());
Cary Clark224c7002018-06-27 11:00:21 -0400482##
483
Cary Clark80247e52018-07-11 16:18:41 -0400484#SeeAlso approximateOpCount
Cary Clark224c7002018-06-27 11:00:21 -0400485
486#Method ##
487
488#Class SkPicture ##
489
490#Topic Picture ##