OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2007 The Android Open Source Project | 3 * Copyright 2007 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkPicture_DEFINED | 10 #ifndef SkPicture_DEFINED |
11 #define SkPicture_DEFINED | 11 #define SkPicture_DEFINED |
12 | 12 |
13 #include "SkBitmap.h" | 13 #include "SkBitmap.h" |
| 14 #include "SkImageDecoder.h" |
14 #include "SkRefCnt.h" | 15 #include "SkRefCnt.h" |
15 | 16 |
16 class SkBBoxHierarchy; | 17 class SkBBoxHierarchy; |
17 class SkCanvas; | 18 class SkCanvas; |
18 class SkDrawPictureCallback; | 19 class SkDrawPictureCallback; |
19 class SkData; | 20 class SkData; |
20 class SkPicturePlayback; | 21 class SkPicturePlayback; |
21 class SkPictureRecord; | 22 class SkPictureRecord; |
22 class SkStream; | 23 class SkStream; |
23 class SkWStream; | 24 class SkWStream; |
24 | 25 |
| 26 struct SkPictInfo; |
| 27 |
25 /** \class SkPicture | 28 /** \class SkPicture |
26 | 29 |
27 The SkPicture class records the drawing commands made to a canvas, to | 30 The SkPicture class records the drawing commands made to a canvas, to |
28 be played back at a later time. | 31 be played back at a later time. |
29 */ | 32 */ |
30 class SK_API SkPicture : public SkRefCnt { | 33 class SK_API SkPicture : public SkRefCnt { |
31 public: | 34 public: |
32 SK_DECLARE_INST_COUNT(SkPicture) | 35 SK_DECLARE_INST_COUNT(SkPicture) |
33 | 36 |
34 /** The constructor prepares the picture to record. | 37 /** The constructor prepares the picture to record. |
35 @param width the width of the virtual device the picture records. | 38 @param width the width of the virtual device the picture records. |
36 @param height the height of the virtual device the picture records. | 39 @param height the height of the virtual device the picture records. |
37 */ | 40 */ |
38 SkPicture(); | 41 SkPicture(); |
39 /** Make a copy of the contents of src. If src records more drawing after | 42 /** Make a copy of the contents of src. If src records more drawing after |
40 this call, those elements will not appear in this picture. | 43 this call, those elements will not appear in this picture. |
41 */ | 44 */ |
42 SkPicture(const SkPicture& src); | 45 SkPicture(const SkPicture& src); |
43 | 46 |
44 /** | 47 /** |
45 * Recreate a picture that was serialized into a stream. | |
46 * On failure, silently creates an empty picture. | |
47 * @param SkStream Serialized picture data. | |
48 */ | |
49 explicit SkPicture(SkStream*); | |
50 | |
51 /** | |
52 * Function signature defining a function that sets up an SkBitmap from enc
oded data. On | 48 * Function signature defining a function that sets up an SkBitmap from enc
oded data. On |
53 * success, the SkBitmap should have its Config, width, height, rowBytes an
d pixelref set. | 49 * success, the SkBitmap should have its Config, width, height, rowBytes an
d pixelref set. |
54 * If the installed pixelref has decoded the data into pixels, then the src
buffer need not be | 50 * If the installed pixelref has decoded the data into pixels, then the src
buffer need not be |
55 * copied. If the pixelref defers the actual decode until its lockPixels()
is called, then it | 51 * copied. If the pixelref defers the actual decode until its lockPixels()
is called, then it |
56 * must make a copy of the src buffer. | 52 * must make a copy of the src buffer. |
57 * @param src Encoded data. | 53 * @param src Encoded data. |
58 * @param length Size of the encoded data, in bytes. | 54 * @param length Size of the encoded data, in bytes. |
59 * @param dst SkBitmap to install the pixel ref on. | 55 * @param dst SkBitmap to install the pixel ref on. |
60 * @param bool Whether or not a pixel ref was successfully installed. | 56 * @param bool Whether or not a pixel ref was successfully installed. |
61 */ | 57 */ |
62 typedef bool (*InstallPixelRefProc)(const void* src, size_t length, SkBitmap
* dst); | 58 typedef bool (*InstallPixelRefProc)(const void* src, size_t length, SkBitmap
* dst); |
63 | 59 |
64 /** | 60 /** |
65 * Recreate a picture that was serialized into a stream. | 61 * Recreate a picture that was serialized into a stream. |
66 * @param SkStream Serialized picture data. | 62 * @param SkStream Serialized picture data. |
67 * @param success Output parameter. If non-NULL, will be set to true if the
picture was | |
68 * deserialized successfully and false otherwise. | |
69 * @param proc Function pointer for installing pixelrefs on SkBitmaps repre
senting the | 63 * @param proc Function pointer for installing pixelrefs on SkBitmaps repre
senting the |
70 * encoded bitmap data from the stream. | 64 * encoded bitmap data from the stream. |
| 65 * @return A new SkPicture representing the serialized data, or NULL if the
stream is |
| 66 * invalid. |
71 */ | 67 */ |
72 SkPicture(SkStream*, bool* success, InstallPixelRefProc proc); | 68 static SkPicture* CreateFromStream(SkStream*, |
| 69 InstallPixelRefProc proc = &SkImageDecode
r::DecodeMemory); |
73 | 70 |
74 virtual ~SkPicture(); | 71 virtual ~SkPicture(); |
75 | 72 |
76 /** | 73 /** |
77 * Swap the contents of the two pictures. Guaranteed to succeed. | 74 * Swap the contents of the two pictures. Guaranteed to succeed. |
78 */ | 75 */ |
79 void swap(SkPicture& other); | 76 void swap(SkPicture& other); |
80 | 77 |
81 /** | 78 /** |
82 * Creates a thread-safe clone of the picture that is ready for playback. | 79 * Creates a thread-safe clone of the picture that is ready for playback. |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 // V12: add conics to SkPath, use new SkPathRef flattening | 210 // V12: add conics to SkPath, use new SkPathRef flattening |
214 static const uint32_t PICTURE_VERSION = 12; | 211 static const uint32_t PICTURE_VERSION = 12; |
215 | 212 |
216 // fPlayback, fRecord, fWidth & fHeight are protected to allow derived class
es to | 213 // fPlayback, fRecord, fWidth & fHeight are protected to allow derived class
es to |
217 // install their own SkPicturePlayback-derived players,SkPictureRecord-deriv
ed | 214 // install their own SkPicturePlayback-derived players,SkPictureRecord-deriv
ed |
218 // recorders and set the picture size | 215 // recorders and set the picture size |
219 SkPicturePlayback* fPlayback; | 216 SkPicturePlayback* fPlayback; |
220 SkPictureRecord* fRecord; | 217 SkPictureRecord* fRecord; |
221 int fWidth, fHeight; | 218 int fWidth, fHeight; |
222 | 219 |
| 220 // Create a new SkPicture from an existing SkPicturePlayback. Ref count of |
| 221 // playback is unchanged. |
| 222 SkPicture(SkPicturePlayback*, int width, int height); |
| 223 |
223 // For testing. Derived classes may instantiate an alternate | 224 // For testing. Derived classes may instantiate an alternate |
224 // SkBBoxHierarchy implementation | 225 // SkBBoxHierarchy implementation |
225 virtual SkBBoxHierarchy* createBBoxHierarchy() const; | 226 virtual SkBBoxHierarchy* createBBoxHierarchy() const; |
226 | 227 |
| 228 // Return true if the SkStream represents a serialized picture, and fills ou
t |
| 229 // SkPictInfo. After this function returns, the SkStream is not rewound; it |
| 230 // will be ready to be parsed to create an SkPicturePlayback. |
| 231 // If false is returned, SkPictInfo is unmodified. |
| 232 static bool StreamIsSKP(SkStream*, SkPictInfo*); |
227 private: | 233 private: |
228 void initFromStream(SkStream*, bool* success, InstallPixelRefProc); | |
229 | |
230 friend class SkFlatPicture; | 234 friend class SkFlatPicture; |
231 friend class SkPicturePlayback; | 235 friend class SkPicturePlayback; |
232 | 236 |
233 typedef SkRefCnt INHERITED; | 237 typedef SkRefCnt INHERITED; |
234 }; | 238 }; |
235 | 239 |
236 class SkAutoPictureRecord : SkNoncopyable { | 240 class SkAutoPictureRecord : SkNoncopyable { |
237 public: | 241 public: |
238 SkAutoPictureRecord(SkPicture* pict, int width, int height, | 242 SkAutoPictureRecord(SkPicture* pict, int width, int height, |
239 uint32_t recordingFlags = 0) { | 243 uint32_t recordingFlags = 0) { |
(...skipping 25 matching lines...) Expand all Loading... |
265 */ | 269 */ |
266 class SK_API SkDrawPictureCallback { | 270 class SK_API SkDrawPictureCallback { |
267 public: | 271 public: |
268 SkDrawPictureCallback() {} | 272 SkDrawPictureCallback() {} |
269 virtual ~SkDrawPictureCallback() {} | 273 virtual ~SkDrawPictureCallback() {} |
270 | 274 |
271 virtual bool abortDrawing() = 0; | 275 virtual bool abortDrawing() = 0; |
272 }; | 276 }; |
273 | 277 |
274 #endif | 278 #endif |
OLD | NEW |