Index: src/core/SkPicture.cpp |
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp |
index ab2faea6b6b4eb38b6e0a9a9ac4ae5338cb46c8b..2b488dec02af69953e56124bb122f8831c7eeeb3 100644 |
--- a/src/core/SkPicture.cpp |
+++ b/src/core/SkPicture.cpp |
@@ -264,41 +264,47 @@ void SkPicture::draw(SkCanvas* surface, SkDrawPictureCallback* callback) { |
#include "SkStream.h" |
-SkPicture::SkPicture(SkStream* stream) { |
- this->initFromStream(stream, NULL, NULL); |
-} |
+bool SkPicture::StreamIsSKP(SkStream* stream, SkPictInfo* pInfo) { |
+ if (NULL == stream) { |
+ return false; |
+ } |
-SkPicture::SkPicture(SkStream* stream, bool* success, InstallPixelRefProc proc) { |
- this->initFromStream(stream, success, proc); |
-} |
+ SkPictInfo info; |
+ if (!stream->read(&info, sizeof(SkPictInfo))) { |
+ return false; |
+ } |
+ if (PICTURE_VERSION != info.fVersion) { |
+ return false; |
+ } |
-void SkPicture::initFromStream(SkStream* stream, bool* success, InstallPixelRefProc proc) { |
- if (success) { |
- *success = false; |
+ if (pInfo != NULL) { |
+ *pInfo = info; |
} |
- fRecord = NULL; |
- fPlayback = NULL; |
- fWidth = fHeight = 0; |
+ return true; |
+} |
+ |
+SkPicture::SkPicture(SkPicturePlayback* playback, int width, int height) |
+ : fPlayback(playback) |
+ , fRecord(NULL) |
+ , fWidth(width) |
+ , fHeight(height) {} |
+SkPicture* SkPicture::CreateFromStream(SkStream* stream, InstallPixelRefProc proc) { |
SkPictInfo info; |
- if (!stream->read(&info, sizeof(info))) { |
- return; |
- } |
- if (PICTURE_VERSION != info.fVersion) { |
- return; |
+ if (!StreamIsSKP(stream, &info)) { |
+ return NULL; |
} |
+ SkPicturePlayback* playback; |
+ // Check to see if there is a playback to recreate. |
if (stream->readBool()) { |
- fPlayback = SkNEW_ARGS(SkPicturePlayback, (stream, info, proc)); |
+ playback = SkNEW_ARGS(SkPicturePlayback, (stream, info, proc)); |
+ } else { |
+ playback = NULL; |
} |
- // do this at the end, so that they will be zero if we hit an error. |
- fWidth = info.fWidth; |
- fHeight = info.fHeight; |
- if (success) { |
- *success = true; |
- } |
+ return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight)); |
} |
void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { |