diff options
author | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-28 18:05:47 +0000 |
---|---|---|
committer | commit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2014-03-28 18:05:47 +0000 |
commit | 0943f5f58abcff15c7583faafe44549b9a44f47a (patch) | |
tree | 837e0d28f96db235761f0017ae86f77879d888ca /src/core/SkPicture.cpp | |
parent | d643a90ee248d22ec8260512812dee6d463de555 (diff) |
Thread picture version through to SkReadBuffer.
This will let code outside SkPicture* fork its read code based on the picture version.
BUG=skia:
R=reed@google.com, robertphillips@google.com, mtklein@google.com
Author: mtklein@chromium.org
Review URL: https://codereview.chromium.org/214413008
git-svn-id: http://skia.googlecode.com/svn/trunk@13984 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkPicture.cpp')
-rw-r--r-- | src/core/SkPicture.cpp | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp index ae0347cf25..5914ba46cd 100644 --- a/src/core/SkPicture.cpp +++ b/src/core/SkPicture.cpp @@ -138,8 +138,10 @@ SkPicture::SkPicture(const SkPicture& src) if (src.fPlayback) { fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fPlayback)); } else if (src.fRecord) { + SkPictInfo info; + this->createHeader(&info); // here we do a fake src.endRecording() - fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fRecord)); + fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fRecord, info)); } else { fPlayback = NULL; } @@ -173,6 +175,8 @@ SkPicture* SkPicture::clone() const { void SkPicture::clone(SkPicture* pictures, int count) const { SkPictCopyInfo copyInfo; + SkPictInfo info; + this->createHeader(&info); for (int i = 0; i < count; i++) { SkPicture* clone = &pictures[i]; @@ -190,7 +194,7 @@ void SkPicture::clone(SkPicture* pictures, int count) const { clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fPlayback, ©Info)); } else if (fRecord) { // here we do a fake src.endRecording() - clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, true)); + clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info, true)); } else { clone->fPlayback = NULL; } @@ -261,7 +265,9 @@ void SkPicture::endRecording() { if (NULL == fPlayback) { if (NULL != fRecord) { fRecord->endRecording(); - fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); + SkPictInfo info; + this->createHeader(&info); + fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info)); SkSafeSetNull(fRecord); } } @@ -384,7 +390,7 @@ SkPicture* SkPicture::CreateFromBuffer(SkReadBuffer& buffer) { SkPicturePlayback* playback; // Check to see if there is a playback to recreate. if (buffer.readBool()) { - playback = SkPicturePlayback::CreateFromBuffer(buffer); + playback = SkPicturePlayback::CreateFromBuffer(buffer, info); if (NULL == playback) { return NULL; } @@ -417,13 +423,13 @@ void SkPicture::createHeader(SkPictInfo* info) const { void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { SkPicturePlayback* playback = fPlayback; + SkPictInfo info; + this->createHeader(&info); if (NULL == playback && fRecord) { - playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); + playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info)); } - SkPictInfo header; - this->createHeader(&header); - stream->write(&header, sizeof(header)); + stream->write(&info, sizeof(info)); if (playback) { stream->writeBool(true); playback->serialize(stream, encoder); @@ -439,13 +445,13 @@ void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { void SkPicture::flatten(SkWriteBuffer& buffer) const { SkPicturePlayback* playback = fPlayback; + SkPictInfo info; + this->createHeader(&info); if (NULL == playback && fRecord) { - playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); + playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info)); } - SkPictInfo header; - this->createHeader(&header); - buffer.writeByteArray(&header, sizeof(header)); + buffer.writeByteArray(&info, sizeof(info)); if (playback) { buffer.writeBool(true); playback->flatten(buffer); |