blob: 18d35f261dd2b4734fe12d63ec4cc32965ce88d4 [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 Clark61313f32018-10-08 14:57:48 -04007#Code
8#Populate
9##
10
Cary Clarkf9603982018-07-17 08:20:27 -040011Picture records drawing commands made to Canvas. The command stream may be
12played in whole or in part at a later time.
13
14Picture is an abstract class. Picture may be generated by Picture_Recorder
15or Drawable, or from Picture previously saved to Data or Stream.
16
17Picture may contain any Canvas drawing command, as well as one or more
18Canvas_Matrix or Canvas_Clip. Picture has a cull Rect, which is used as
19a bounding box hint. To limit Picture bounds, use Canvas_Clip when
20recording or drawing Picture.
Cary Clark224c7002018-06-27 11:00:21 -040021
Cary Clark224c7002018-06-27 11:00:21 -040022# ------------------------------------------------------------------------------
23
24#Class AbortCallback
Cary Clark80247e52018-07-11 16:18:41 -040025#Line # utility to stop picture playback ##
Cary Clark224c7002018-06-27 11:00:21 -040026
27#Code
Cary Clark80247e52018-07-11 16:18:41 -040028 class AbortCallback {
29 public:
30 AbortCallback() {}
31 virtual ~AbortCallback() {}
32 virtual bool abort() = 0;
33 };
Cary Clark224c7002018-06-27 11:00:21 -040034##
35
Cary Clarkf9603982018-07-17 08:20:27 -040036AbortCallback is an abstract class. An implementation of AbortCallback may
37passed as a parameter to SkPicture::playback, to stop it before all drawing
38commands have been processed.
39
40If AbortCallback::abort returns true, SkPicture::playback is interrupted.
Cary Clark224c7002018-06-27 11:00:21 -040041
42# ------------------------------------------------------------------------------
43
44#Method AbortCallback()
Cary Clark61313f32018-10-08 14:57:48 -040045#In Constructors
Cary Clark80247e52018-07-11 16:18:41 -040046#Line # defines default constructor ##
47Has no effect.
Cary Clark224c7002018-06-27 11:00:21 -040048
Cary Clark80247e52018-07-11 16:18:41 -040049#Return abstract class cannot be instantiated ##
Cary Clark224c7002018-06-27 11:00:21 -040050
Cary Clark80247e52018-07-11 16:18:41 -040051#NoExample
Cary Clark224c7002018-06-27 11:00:21 -040052##
53
Cary Clark80247e52018-07-11 16:18:41 -040054#SeeAlso playback
Cary Clark224c7002018-06-27 11:00:21 -040055
56#Method ##
57
58# ------------------------------------------------------------------------------
59
60#Method virtual ~AbortCallback()
Cary Clark61313f32018-10-08 14:57:48 -040061#In Constructors
Cary Clark80247e52018-07-11 16:18:41 -040062#Line # defines default destructor ##
63Has no effect.
Cary Clark224c7002018-06-27 11:00:21 -040064
Cary Clark80247e52018-07-11 16:18:41 -040065#NoExample
Cary Clark224c7002018-06-27 11:00:21 -040066##
67
Cary Clark80247e52018-07-11 16:18:41 -040068#SeeAlso playback
Cary Clark224c7002018-06-27 11:00:21 -040069
70#Method ##
71
72# ------------------------------------------------------------------------------
73
74#Method virtual bool abort() = 0
Cary Clark80247e52018-07-11 16:18:41 -040075#In Utility
76#Line # aborts playback by callback ##
Cary Clark224c7002018-06-27 11:00:21 -040077
Cary Clark80247e52018-07-11 16:18:41 -040078Stops Picture playback when some condition is met. A subclass of
Cary Clarkf9603982018-07-17 08:20:27 -040079AbortCallback provides an override for abort() that can stop SkPicture::playback.
80
81The part of Picture drawn when aborted is undefined. Picture instantiations are
82free to stop drawing at different points during playback.
83
84If the abort happens inside one or more calls to SkCanvas::save(), stack
85of Canvas_Matrix and Canvas_Clip values is restored to its state before
86SkPicture::playback was called.
Cary Clark224c7002018-06-27 11:00:21 -040087
Cary Clark80247e52018-07-11 16:18:41 -040088#Return true to stop playback ##
89
90#NoExample
Cary Clark224c7002018-06-27 11:00:21 -040091##
92
Cary Clark80247e52018-07-11 16:18:41 -040093#SeeAlso playback
Cary Clark224c7002018-06-27 11:00:21 -040094
95#Method ##
96
Cary Clark80247e52018-07-11 16:18:41 -040097#Example
98#Description
99JustOneDraw allows the black rectangle to draw but stops playback before the
100white rectangle appears.
101##
102#Function
103class JustOneDraw : public SkPicture::AbortCallback {
104public:
105 bool abort() override { return fCalls++ > 0; }
106private:
107 int fCalls = 0;
108};
109##
110
111void draw(SkCanvas* canvas) {
112 SkPictureRecorder recorder;
113 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
114 SkPaint paint;
115 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
116 paint.setColor(SK_ColorWHITE);
117 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
118 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
119 JustOneDraw callback;
120 picture->playback(canvas, &callback);
121}
122
123##
124
Cary Clark224c7002018-06-27 11:00:21 -0400125#Class AbortCallback ##
126
127# ------------------------------------------------------------------------------
128
129#Method static sk_sp<SkPicture> MakeFromStream(SkStream* stream,
130 const SkDeserialProcs* procs = nullptr)
Cary Clark61313f32018-10-08 14:57:48 -0400131#In Constructors
Cary Clark80247e52018-07-11 16:18:41 -0400132#Line # constructs Picture from stream ##
Cary Clark224c7002018-06-27 11:00:21 -0400133
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400134Recreates Picture that was serialized into a stream. Returns constructed Picture
135if successful; otherwise, returns nullptr. Fails if data does not permit
136constructing valid Picture.
137
138procs.fPictureProc permits supplying a custom function to decode Picture.
139If procs.fPictureProc is nullptr, default decoding is used. procs.fPictureCtx
140may be used to provide user context to procs.fPictureProc; procs.fPictureProc
141is called with a pointer to data, data byte length, and user context.
Cary Clark224c7002018-06-27 11:00:21 -0400142
Cary Clark80247e52018-07-11 16:18:41 -0400143#Param stream container for serial data ##
144#Param procs custom serial data decoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400145
Cary Clark80247e52018-07-11 16:18:41 -0400146#Return Picture constructed from stream data ##
Cary Clark224c7002018-06-27 11:00:21 -0400147
148#Example
Cary Clark80247e52018-07-11 16:18:41 -0400149 SkPictureRecorder recorder;
150 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
151 SkPaint paint;
152 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
153 paint.setColor(SK_ColorWHITE);
154 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
155 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
156 SkDynamicMemoryWStream writableStream;
157 picture->serialize(&writableStream);
158 std::unique_ptr<SkStreamAsset> readableStream = writableStream.detachAsStream();
159 sk_sp<SkPicture> copy = SkPicture::MakeFromStream(readableStream.get());
160 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400161##
162
Cary Clark80247e52018-07-11 16:18:41 -0400163#SeeAlso MakeFromData SkPictureRecorder
Cary Clark224c7002018-06-27 11:00:21 -0400164
165#Method ##
166
167# ------------------------------------------------------------------------------
168
169#Method static sk_sp<SkPicture> MakeFromData(const SkData* data,
170 const SkDeserialProcs* procs = nullptr)
Cary Clark61313f32018-10-08 14:57:48 -0400171#In Constructors
Cary Clark80247e52018-07-11 16:18:41 -0400172#Line # constructs Picture from data ##
Cary Clark224c7002018-06-27 11:00:21 -0400173
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400174Recreates Picture that was serialized into data. Returns constructed Picture
175if successful; otherwise, returns nullptr. Fails if data does not permit
176constructing valid Picture.
177
178procs.fPictureProc permits supplying a custom function to decode Picture.
179If procs.fPictureProc is nullptr, default decoding is used. procs.fPictureCtx
180may be used to provide user context to procs.fPictureProc; procs.fPictureProc
181is called with a pointer to data, data byte length, and user context.
Cary Clark224c7002018-06-27 11:00:21 -0400182
Cary Clark80247e52018-07-11 16:18:41 -0400183#Param data container for serial data ##
184#Param procs custom serial data decoders; may be nullptr ##
185
186#Return Picture constructed from data ##
Cary Clark224c7002018-06-27 11:00:21 -0400187
188#Example
Cary Clark80247e52018-07-11 16:18:41 -0400189 SkPictureRecorder recorder;
190 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
191 SkPaint paint;
192 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
193 paint.setColor(SK_ColorWHITE);
194 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
195 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
196 SkDynamicMemoryWStream writableStream;
197 picture->serialize(&writableStream);
198 sk_sp<SkData> readableData = writableStream.detachAsData();
199 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData.get());
200 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400201##
202
Cary Clark80247e52018-07-11 16:18:41 -0400203#SeeAlso MakeFromStream SkPictureRecorder
Cary Clark224c7002018-06-27 11:00:21 -0400204
205#Method ##
206
207# ------------------------------------------------------------------------------
208
209#Method static sk_sp<SkPicture> MakeFromData(const void* data, size_t size,
210 const SkDeserialProcs* procs = nullptr)
Cary Clark224c7002018-06-27 11:00:21 -0400211
Cary Clark80247e52018-07-11 16:18:41 -0400212#Param data pointer to serial data ##
213#Param size size of data ##
214#Param procs custom serial data decoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400215
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400216Recreates Picture that was serialized into data. Returns constructed Picture
217if successful; otherwise, returns nullptr. Fails if size is smaller than
218required data length, or if data does not permit constructing valid Picture.
219
220procs.fPictureProc permits supplying a custom function to decode Picture.
221If procs.fPictureProc is nullptr, default decoding is used. procs.fPictureCtx
222may be used to provide user context to procs.fPictureProc; procs.fPictureProc
223is called with a pointer to data, data byte length, and user context.
Cary Clark80247e52018-07-11 16:18:41 -0400224
225#Return Picture constructed from data ##
Cary Clark224c7002018-06-27 11:00:21 -0400226
227#Example
Cary Clark80247e52018-07-11 16:18:41 -0400228 SkPictureRecorder recorder;
229 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
230 SkPaint paint;
231 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
232 paint.setColor(SK_ColorWHITE);
233 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
234 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
235 SkDynamicMemoryWStream writableStream;
236 picture->serialize(&writableStream);
237 sk_sp<SkData> readableData = writableStream.detachAsData();
238 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
239 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400240##
241
Cary Clark80247e52018-07-11 16:18:41 -0400242#SeeAlso MakeFromStream SkPictureRecorder
Cary Clark224c7002018-06-27 11:00:21 -0400243
244#Method ##
245
246# ------------------------------------------------------------------------------
247
248#Method virtual void playback(SkCanvas* canvas, AbortCallback* callback = nullptr) const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400249#In Action
250#Line # replays drawing commands on canvas ##
Cary Clark224c7002018-06-27 11:00:21 -0400251
Cary Clarkf9603982018-07-17 08:20:27 -0400252Replays the drawing commands on the specified canvas. In the case that the
253commands are recorded, each command in the Picture is sent separately to canvas.
254
255To add a single command to draw Picture to recording canvas, call
256SkCanvas::drawPicture instead.
Cary Clark224c7002018-06-27 11:00:21 -0400257
Cary Clark80247e52018-07-11 16:18:41 -0400258#Param canvas receiver of drawing commands ##
259#Param callback allows interruption of playback ##
Cary Clark224c7002018-06-27 11:00:21 -0400260
261#Example
Cary Clark80247e52018-07-11 16:18:41 -0400262 SkPictureRecorder recorder;
263 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
264 SkPaint paint;
265 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
266 paint.setColor(SK_ColorWHITE);
267 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
268 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
269 picture->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400270##
271
Cary Clark80247e52018-07-11 16:18:41 -0400272#SeeAlso SkCanvas::drawPicture
Cary Clark224c7002018-06-27 11:00:21 -0400273
274#Method ##
275
276# ------------------------------------------------------------------------------
277
278#Method virtual SkRect cullRect() const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400279#In Property
280#Line # returns bounds used to record Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400281
Cary Clarkf9603982018-07-17 08:20:27 -0400282Returns cull Rect for this picture, passed in when Picture was created.
283Returned Rect does not specify clipping Rect for Picture; cull is hint
284of Picture bounds.
285
286Picture is free to discard recorded drawing commands that fall outside
287cull.
Cary Clark224c7002018-06-27 11:00:21 -0400288
Cary Clark80247e52018-07-11 16:18:41 -0400289#Return bounds passed when Picture was created ##
Cary Clark224c7002018-06-27 11:00:21 -0400290
291#Example
Cary Clark80247e52018-07-11 16:18:41 -0400292#Description
293Picture recorded bounds are smaller than contents; contents outside recorded
294bounds may be drawn, and are drawn in this example.
295##
296 SkPictureRecorder recorder;
297 SkCanvas* pictureCanvas = recorder.beginRecording({64, 64, 192, 192});
298 SkPaint paint;
299 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
300 paint.setColor(SK_ColorWHITE);
301 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
302 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
303 picture->playback(canvas);
304 paint.setBlendMode(SkBlendMode::kModulate);
305 paint.setColor(0x40404040);
306 canvas->drawRect(picture->cullRect(), paint);
Cary Clark224c7002018-06-27 11:00:21 -0400307##
308
Cary Clark80247e52018-07-11 16:18:41 -0400309#SeeAlso SkCanvas::clipRect
Cary Clark224c7002018-06-27 11:00:21 -0400310
311#Method ##
312
313# ------------------------------------------------------------------------------
314
315#Method uint32_t uniqueID() const
Cary Clark80247e52018-07-11 16:18:41 -0400316#In Property
317#Line # returns identifier for Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400318
Cary Clarkf9603982018-07-17 08:20:27 -0400319Returns a non-zero value unique among Pictures in Skia process.
Cary Clark224c7002018-06-27 11:00:21 -0400320
Cary Clark80247e52018-07-11 16:18:41 -0400321#Return identifier for Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400322
323#Example
Cary Clark80247e52018-07-11 16:18:41 -0400324 SkPictureRecorder recorder;
325 recorder.beginRecording({0, 0, 0, 0});
326 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
327 SkDebugf("empty picture id = %d\n", picture->uniqueID());
328 sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({0, 0, 0, 0});
329 SkDebugf("placeholder id = %d\n", placeholder->uniqueID());
330#StdOut
331empty picture id = 1
332placeholder id = 2
333##
Cary Clark224c7002018-06-27 11:00:21 -0400334##
335
Cary Clark80247e52018-07-11 16:18:41 -0400336#SeeAlso SkRefCnt
Cary Clark224c7002018-06-27 11:00:21 -0400337
338#Method ##
339
340# ------------------------------------------------------------------------------
341
342#Method sk_sp<SkData> serialize(const SkSerialProcs* procs = nullptr) const
Cary Clark80247e52018-07-11 16:18:41 -0400343#In Utility
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400344#Line # writes Picture to Data ##
345Returns storage containing Data describing Picture, using optional custom
Cary Clarkf9603982018-07-17 08:20:27 -0400346encoders.
Cary Clark224c7002018-06-27 11:00:21 -0400347
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400348procs.fPictureProc permits supplying a custom function to encode Picture.
349If procs.fPictureProc is nullptr, default encoding is used. procs.fPictureCtx
350may be used to provide user context to procs.fPictureProc; procs.fPictureProc
351is called with a pointer to Picture and user context.
352
Cary Clark80247e52018-07-11 16:18:41 -0400353#Param procs custom serial data encoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400354
Cary Clark80247e52018-07-11 16:18:41 -0400355#Return storage containing serialized Picture ##
Cary Clark224c7002018-06-27 11:00:21 -0400356
357#Example
Cary Clark80247e52018-07-11 16:18:41 -0400358 SkPictureRecorder recorder;
359 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
360 SkPaint paint;
361 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
362 paint.setColor(SK_ColorWHITE);
363 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
364 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
365 sk_sp<SkData> readableData = picture->serialize();
366 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
367 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400368##
369
Cary Clark80247e52018-07-11 16:18:41 -0400370#SeeAlso MakeFromData SkData SkSerialProcs
Cary Clark224c7002018-06-27 11:00:21 -0400371
372#Method ##
373
374# ------------------------------------------------------------------------------
375
376#Method void serialize(SkWStream* stream, const SkSerialProcs* procs = nullptr) const
Cary Clark80247e52018-07-11 16:18:41 -0400377Writes picture to stream, using optional custom encoders.
Cary Clark224c7002018-06-27 11:00:21 -0400378
Cary Clarkd2ca79c2018-08-10 13:09:13 -0400379procs.fPictureProc permits supplying a custom function to encode Picture.
380If procs.fPictureProc is nullptr, default encoding is used. procs.fPictureCtx
381may be used to provide user context to procs.fPictureProc; procs.fPictureProc
382is called with a pointer to Picture and user context.
383
Cary Clark80247e52018-07-11 16:18:41 -0400384#Param stream writable serial data stream ##
385#Param procs custom serial data encoders; may be nullptr ##
Cary Clark224c7002018-06-27 11:00:21 -0400386
387#Example
Cary Clark80247e52018-07-11 16:18:41 -0400388 SkPictureRecorder recorder;
389 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
390 SkPaint paint;
391 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
392 paint.setColor(SK_ColorWHITE);
393 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
394 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
395 SkDynamicMemoryWStream writableStream;
396 picture->serialize(&writableStream);
397 sk_sp<SkData> readableData = writableStream.detachAsData();
398 sk_sp<SkPicture> copy = SkPicture::MakeFromData(readableData->data(), readableData->size());
399 copy->playback(canvas);
Cary Clark224c7002018-06-27 11:00:21 -0400400##
401
Cary Clark80247e52018-07-11 16:18:41 -0400402#SeeAlso MakeFromStream SkWStream SkSerialProcs
Cary Clark224c7002018-06-27 11:00:21 -0400403
404#Method ##
405
406# ------------------------------------------------------------------------------
407
408#Method static sk_sp<SkPicture> MakePlaceholder(SkRect cull)
Cary Clark61313f32018-10-08 14:57:48 -0400409#In Constructors
Cary Clark80247e52018-07-11 16:18:41 -0400410#Line # constructs placeholder with unique identifier ##
Cary Clark224c7002018-06-27 11:00:21 -0400411
Cary Clarkf9603982018-07-17 08:20:27 -0400412Returns a placeholder SkPicture. Result does not draw, and contains only
413cull Rect, a hint of its bounds. Result is immutable; it cannot be changed
414later. Result identifier is unique.
415
416Returned placeholder can be intercepted during playback to insert other
417commands into Canvas draw stream.
Cary Clark224c7002018-06-27 11:00:21 -0400418
Cary Clark80247e52018-07-11 16:18:41 -0400419#Param cull placeholder dimensions
Cary Clark224c7002018-06-27 11:00:21 -0400420##
421
Cary Clark80247e52018-07-11 16:18:41 -0400422#Return placeholder with unique identifier ##
Cary Clark224c7002018-06-27 11:00:21 -0400423
424#Example
Cary Clarkf9603982018-07-17 08:20:27 -0400425#Function
426class MyCanvas : public SkCanvas {
427public:
428 MyCanvas(SkCanvas* c) : canvas(c) {}
429 void onDrawPicture(const SkPicture* picture, const SkMatrix* ,
430 const SkPaint* ) override {
431 const SkRect rect = picture->cullRect();
432 SkPaint redPaint;
433 redPaint.setColor(SK_ColorRED);
434 canvas->drawRect(rect, redPaint);
435 }
436
437 SkCanvas* canvas;
438};
Cary Clark80247e52018-07-11 16:18:41 -0400439##
Cary Clarkf9603982018-07-17 08:20:27 -0400440SkPictureRecorder recorder;
441SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
442sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({10, 40, 80, 110});
443pictureCanvas->drawPicture(placeholder);
444sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
445MyCanvas myCanvas(canvas);
446myCanvas.drawPicture(picture);
Cary Clark224c7002018-06-27 11:00:21 -0400447##
448
Cary Clarkf9603982018-07-17 08:20:27 -0400449#SeeAlso MakeFromStream MakeFromData uniqueID
Cary Clark224c7002018-06-27 11:00:21 -0400450
451#Method ##
452
453# ------------------------------------------------------------------------------
454
455#Method virtual int approximateOpCount() const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400456#In Property
457#Line # returns approximate operation count ##
Cary Clark224c7002018-06-27 11:00:21 -0400458
Cary Clarkf9603982018-07-17 08:20:27 -0400459Returns the approximate number of operations in Picture. Returned value
460may be greater or less than the number of SkCanvas calls
461recorded: some calls may be recorded as more than one operation, other
Cary Clark224c7002018-06-27 11:00:21 -0400462calls may be optimized away.
463
Cary Clark80247e52018-07-11 16:18:41 -0400464#Return approximate operation count ##
Cary Clark224c7002018-06-27 11:00:21 -0400465
466#Example
Cary Clark80247e52018-07-11 16:18:41 -0400467 SkPictureRecorder recorder;
468 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
469 SkPaint paint;
470 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
471 paint.setColor(SK_ColorWHITE);
472 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
473 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
474 picture->playback(canvas);
475 std::string opCount = "approximate op count: " + std::to_string(picture->approximateOpCount());
476 canvas->drawString(opCount.c_str(), 50, 220, SkPaint());
Cary Clark224c7002018-06-27 11:00:21 -0400477##
478
Cary Clark80247e52018-07-11 16:18:41 -0400479#SeeAlso approximateBytesUsed
Cary Clark224c7002018-06-27 11:00:21 -0400480
481#Method ##
482
483# ------------------------------------------------------------------------------
484
485#Method virtual size_t approximateBytesUsed() const = 0
Cary Clark80247e52018-07-11 16:18:41 -0400486#In Property
487#Line # returns approximate size ##
Cary Clark224c7002018-06-27 11:00:21 -0400488
Cary Clark80247e52018-07-11 16:18:41 -0400489Returns the approximate byte size of Picture. Does not include large objects
Cary Clarkf9603982018-07-17 08:20:27 -0400490referenced by Picture.
Cary Clark224c7002018-06-27 11:00:21 -0400491
Cary Clark80247e52018-07-11 16:18:41 -0400492#Return approximate size ##
Cary Clark224c7002018-06-27 11:00:21 -0400493
494#Example
Cary Clark80247e52018-07-11 16:18:41 -0400495 SkPictureRecorder recorder;
496 SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
497 SkPaint paint;
498 pictureCanvas->drawRect(SkRect::MakeWH(200, 200), paint);
499 paint.setColor(SK_ColorWHITE);
500 pictureCanvas->drawRect(SkRect::MakeLTRB(20, 20, 180, 180), paint);
501 sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
502 picture->playback(canvas);
503 std::string opCount = "approximate bytes used: " + std::to_string(picture->approximateBytesUsed());
504 canvas->drawString(opCount.c_str(), 20, 220, SkPaint());
Cary Clark224c7002018-06-27 11:00:21 -0400505##
506
Cary Clark80247e52018-07-11 16:18:41 -0400507#SeeAlso approximateOpCount
Cary Clark224c7002018-06-27 11:00:21 -0400508
509#Method ##
510
511#Class SkPicture ##
512
513#Topic Picture ##