Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 1 | #Topic Picture |
| 2 | #Alias Pictures ## |
| 3 | #Alias Picture_Reference ## |
| 4 | |
| 5 | #Class SkPicture |
| 6 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 7 | Picture records drawing commands made to Canvas. The command stream may be |
| 8 | played in whole or in part at a later time. |
| 9 | |
| 10 | Picture is an abstract class. Picture may be generated by Picture_Recorder |
| 11 | or Drawable, or from Picture previously saved to Data or Stream. |
| 12 | |
| 13 | Picture may contain any Canvas drawing command, as well as one or more |
| 14 | Canvas_Matrix or Canvas_Clip. Picture has a cull Rect, which is used as |
| 15 | a bounding box hint. To limit Picture bounds, use Canvas_Clip when |
| 16 | recording or drawing Picture. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 17 | |
| 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 Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 33 | #Line # utility to stop picture playback ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 34 | |
| 35 | #Code |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 36 | class AbortCallback { |
| 37 | public: |
| 38 | AbortCallback() {} |
| 39 | virtual ~AbortCallback() {} |
| 40 | virtual bool abort() = 0; |
| 41 | }; |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 42 | ## |
| 43 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 44 | AbortCallback is an abstract class. An implementation of AbortCallback may |
| 45 | passed as a parameter to SkPicture::playback, to stop it before all drawing |
| 46 | commands have been processed. |
| 47 | |
| 48 | If AbortCallback::abort returns true, SkPicture::playback is interrupted. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 49 | |
| 50 | # ------------------------------------------------------------------------------ |
| 51 | |
| 52 | #Method AbortCallback() |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 53 | #In Constructor |
| 54 | #Line # defines default constructor ## |
| 55 | Has no effect. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 56 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 57 | #Return abstract class cannot be instantiated ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 58 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 59 | #NoExample |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 60 | ## |
| 61 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 62 | #SeeAlso playback |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 63 | |
| 64 | #Method ## |
| 65 | |
| 66 | # ------------------------------------------------------------------------------ |
| 67 | |
| 68 | #Method virtual ~AbortCallback() |
| 69 | #In Constructor |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 70 | #Line # defines default destructor ## |
| 71 | Has no effect. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 72 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 73 | #NoExample |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 74 | ## |
| 75 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 76 | #SeeAlso playback |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 77 | |
| 78 | #Method ## |
| 79 | |
| 80 | # ------------------------------------------------------------------------------ |
| 81 | |
| 82 | #Method virtual bool abort() = 0 |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 83 | #In Utility |
| 84 | #Line # aborts playback by callback ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 85 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 86 | Stops Picture playback when some condition is met. A subclass of |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 87 | AbortCallback provides an override for abort() that can stop SkPicture::playback. |
| 88 | |
| 89 | The part of Picture drawn when aborted is undefined. Picture instantiations are |
| 90 | free to stop drawing at different points during playback. |
| 91 | |
| 92 | If the abort happens inside one or more calls to SkCanvas::save(), stack |
| 93 | of Canvas_Matrix and Canvas_Clip values is restored to its state before |
| 94 | SkPicture::playback was called. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 95 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 96 | #Return true to stop playback ## |
| 97 | |
| 98 | #NoExample |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 99 | ## |
| 100 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 101 | #SeeAlso playback |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 102 | |
| 103 | #Method ## |
| 104 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 105 | #Example |
| 106 | #Description |
| 107 | JustOneDraw allows the black rectangle to draw but stops playback before the |
| 108 | white rectangle appears. |
| 109 | ## |
| 110 | #Function |
| 111 | class JustOneDraw : public SkPicture::AbortCallback { |
| 112 | public: |
| 113 | bool abort() override { return fCalls++ > 0; } |
| 114 | private: |
| 115 | int fCalls = 0; |
| 116 | }; |
| 117 | ## |
| 118 | |
| 119 | void 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 133 | #Class AbortCallback ## |
| 134 | |
| 135 | # ------------------------------------------------------------------------------ |
| 136 | |
| 137 | #Method static sk_sp<SkPicture> MakeFromStream(SkStream* stream, |
| 138 | const SkDeserialProcs* procs = nullptr) |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 139 | #In Constructor |
| 140 | #Line # constructs Picture from stream ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 141 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 142 | Recreates a picture that was serialized into a stream. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 143 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 144 | #Param stream container for serial data ## |
| 145 | #Param procs custom serial data decoders; may be nullptr ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 146 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 147 | #Return Picture constructed from stream data ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 148 | |
| 149 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 150 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 162 | ## |
| 163 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 164 | #SeeAlso MakeFromData SkPictureRecorder |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 165 | |
| 166 | #Method ## |
| 167 | |
| 168 | # ------------------------------------------------------------------------------ |
| 169 | |
| 170 | #Method static sk_sp<SkPicture> MakeFromData(const SkData* data, |
| 171 | const SkDeserialProcs* procs = nullptr) |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 172 | #In Constructor |
| 173 | #Line # constructs Picture from data ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 174 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 175 | Recreates a picture that was serialized into data. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 176 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 177 | #Param data container for serial data ## |
| 178 | #Param procs custom serial data decoders; may be nullptr ## |
| 179 | |
| 180 | #Return Picture constructed from data ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 181 | |
| 182 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 183 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 195 | ## |
| 196 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 197 | #SeeAlso MakeFromStream SkPictureRecorder |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 198 | |
| 199 | #Method ## |
| 200 | |
| 201 | # ------------------------------------------------------------------------------ |
| 202 | |
| 203 | #Method static sk_sp<SkPicture> MakeFromData(const void* data, size_t size, |
| 204 | const SkDeserialProcs* procs = nullptr) |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 205 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 206 | #Param data pointer to serial data ## |
| 207 | #Param size size of data ## |
| 208 | #Param procs custom serial data decoders; may be nullptr ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 209 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 210 | Recreates a picture that was serialized into data. |
| 211 | |
| 212 | #Return Picture constructed from data ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 213 | |
| 214 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 215 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 227 | ## |
| 228 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 229 | #SeeAlso MakeFromStream SkPictureRecorder |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 230 | |
| 231 | #Method ## |
| 232 | |
| 233 | # ------------------------------------------------------------------------------ |
| 234 | |
| 235 | #Method virtual void playback(SkCanvas* canvas, AbortCallback* callback = nullptr) const = 0 |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 236 | #In Action |
| 237 | #Line # replays drawing commands on canvas ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 238 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 239 | Replays the drawing commands on the specified canvas. In the case that the |
| 240 | commands are recorded, each command in the Picture is sent separately to canvas. |
| 241 | |
| 242 | To add a single command to draw Picture to recording canvas, call |
| 243 | SkCanvas::drawPicture instead. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 244 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 245 | #Param canvas receiver of drawing commands ## |
| 246 | #Param callback allows interruption of playback ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 247 | |
| 248 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 249 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 257 | ## |
| 258 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 259 | #SeeAlso SkCanvas::drawPicture |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 260 | |
| 261 | #Method ## |
| 262 | |
| 263 | # ------------------------------------------------------------------------------ |
| 264 | |
| 265 | #Method virtual SkRect cullRect() const = 0 |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 266 | #In Property |
| 267 | #Line # returns bounds used to record Picture ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 268 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 269 | Returns cull Rect for this picture, passed in when Picture was created. |
| 270 | Returned Rect does not specify clipping Rect for Picture; cull is hint |
| 271 | of Picture bounds. |
| 272 | |
| 273 | Picture is free to discard recorded drawing commands that fall outside |
| 274 | cull. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 275 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 276 | #Return bounds passed when Picture was created ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 277 | |
| 278 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 279 | #Description |
| 280 | Picture recorded bounds are smaller than contents; contents outside recorded |
| 281 | bounds 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 294 | ## |
| 295 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 296 | #SeeAlso SkCanvas::clipRect |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 297 | |
| 298 | #Method ## |
| 299 | |
| 300 | # ------------------------------------------------------------------------------ |
| 301 | |
| 302 | #Method uint32_t uniqueID() const |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 303 | #In Property |
| 304 | #Line # returns identifier for Picture ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 305 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 306 | Returns a non-zero value unique among Pictures in Skia process. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 307 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 308 | #Return identifier for Picture ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 309 | |
| 310 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 311 | 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 |
| 318 | empty picture id = 1
|
| 319 | placeholder id = 2 |
| 320 | ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 321 | ## |
| 322 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 323 | #SeeAlso SkRefCnt |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 324 | |
| 325 | #Method ## |
| 326 | |
| 327 | # ------------------------------------------------------------------------------ |
| 328 | |
| 329 | #Method sk_sp<SkData> serialize(const SkSerialProcs* procs = nullptr) const |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 330 | #In Utility |
| 331 | #Line # writes Picture to data ## |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 332 | Returns storage containing data describing Picture, using optional custom |
| 333 | encoders. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 334 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 335 | #Param procs custom serial data encoders; may be nullptr ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 336 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 337 | #Return storage containing serialized Picture ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 338 | |
| 339 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 340 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 350 | ## |
| 351 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 352 | #SeeAlso MakeFromData SkData SkSerialProcs |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 353 | |
| 354 | #Method ## |
| 355 | |
| 356 | # ------------------------------------------------------------------------------ |
| 357 | |
| 358 | #Method void serialize(SkWStream* stream, const SkSerialProcs* procs = nullptr) const |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 359 | Writes picture to stream, using optional custom encoders. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 360 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 361 | #Param stream writable serial data stream ## |
| 362 | #Param procs custom serial data encoders; may be nullptr ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 363 | |
| 364 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 365 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 377 | ## |
| 378 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 379 | #SeeAlso MakeFromStream SkWStream SkSerialProcs |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 380 | |
| 381 | #Method ## |
| 382 | |
| 383 | # ------------------------------------------------------------------------------ |
| 384 | |
| 385 | #Method static sk_sp<SkPicture> MakePlaceholder(SkRect cull) |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 386 | #In Constructor |
| 387 | #Line # constructs placeholder with unique identifier ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 388 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 389 | Returns a placeholder SkPicture. Result does not draw, and contains only |
| 390 | cull Rect, a hint of its bounds. Result is immutable; it cannot be changed |
| 391 | later. Result identifier is unique. |
| 392 | |
| 393 | Returned placeholder can be intercepted during playback to insert other |
| 394 | commands into Canvas draw stream. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 395 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 396 | #Param cull placeholder dimensions |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 397 | ## |
| 398 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 399 | #Return placeholder with unique identifier ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 400 | |
| 401 | #Example |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 402 | #Function |
| 403 | class MyCanvas : public SkCanvas { |
| 404 | public: |
| 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 Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 416 | ## |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 417 | SkPictureRecorder recorder;
|
| 418 | SkCanvas* pictureCanvas = recorder.beginRecording({0, 0, 256, 256});
|
| 419 | sk_sp<SkPicture> placeholder = SkPicture::MakePlaceholder({10, 40, 80, 110});
|
| 420 | pictureCanvas->drawPicture(placeholder);
|
| 421 | sk_sp<SkPicture> picture = recorder.finishRecordingAsPicture();
|
| 422 | MyCanvas myCanvas(canvas);
|
| 423 | myCanvas.drawPicture(picture);
|
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 424 | ## |
| 425 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 426 | #SeeAlso MakeFromStream MakeFromData uniqueID |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 427 | |
| 428 | #Method ## |
| 429 | |
| 430 | # ------------------------------------------------------------------------------ |
| 431 | |
| 432 | #Method virtual int approximateOpCount() const = 0 |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 433 | #In Property |
| 434 | #Line # returns approximate operation count ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 435 | |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 436 | Returns the approximate number of operations in Picture. Returned value |
| 437 | may be greater or less than the number of SkCanvas calls |
| 438 | recorded: some calls may be recorded as more than one operation, other |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 439 | calls may be optimized away. |
| 440 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 441 | #Return approximate operation count ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 442 | |
| 443 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 444 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 454 | ## |
| 455 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 456 | #SeeAlso approximateBytesUsed |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 457 | |
| 458 | #Method ## |
| 459 | |
| 460 | # ------------------------------------------------------------------------------ |
| 461 | |
| 462 | #Method virtual size_t approximateBytesUsed() const = 0 |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 463 | #In Property |
| 464 | #Line # returns approximate size ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 465 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 466 | Returns the approximate byte size of Picture. Does not include large objects |
Cary Clark | f960398 | 2018-07-17 08:20:27 -0400 | [diff] [blame] | 467 | referenced by Picture. |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 468 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 469 | #Return approximate size ## |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 470 | |
| 471 | #Example |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 472 | 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 Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 482 | ## |
| 483 | |
Cary Clark | 80247e5 | 2018-07-11 16:18:41 -0400 | [diff] [blame] | 484 | #SeeAlso approximateOpCount |
Cary Clark | 224c700 | 2018-06-27 11:00:21 -0400 | [diff] [blame] | 485 | |
| 486 | #Method ## |
| 487 | |
| 488 | #Class SkPicture ## |
| 489 | |
| 490 | #Topic Picture ## |