diff options
author | 2014-12-09 07:44:36 -0800 | |
---|---|---|
committer | 2014-12-09 07:44:36 -0800 | |
commit | 02b217f80b01a7dda8493422e5257c36a9ce8464 (patch) | |
tree | 74b921c7e25d0098ae67a0b90b3e3a7a83e64dbe /src/core/SkPicture.cpp | |
parent | e4c53202e995714fee0251d1bcb6cdbc41526eac (diff) |
Replace EncodeBitmap with an interface.
Gives more flexibility to the caller to decide whether to use the
encoded data returned by refEncodedData().
Provides an implementation that supports the old version of
SkPicture::serialize().
TODO: Update Chrome, so we can remove SK_LEGACY_ENCODE_BITMAP entirely
BUG=skia:3190
Committed: https://skia.googlesource.com/skia/+/0c4aba6edb9900c597359dfa49d3ce4a41bc5dd1
Review URL: https://codereview.chromium.org/784643002
Diffstat (limited to 'src/core/SkPicture.cpp')
-rw-r--r-- | src/core/SkPicture.cpp | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/src/core/SkPicture.cpp b/src/core/SkPicture.cpp index 0d7773b520..3296264be8 100644 --- a/src/core/SkPicture.cpp +++ b/src/core/SkPicture.cpp @@ -1,4 +1,3 @@ - /* * Copyright 2007 The Android Open Source Project * @@ -454,7 +453,41 @@ SkPictureData* SkPicture::Backport(const SkRecord& src, const SkPictInfo& info, return SkNEW_ARGS(SkPictureData, (rec, info, false/*deep copy ops?*/)); } -void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { +#ifdef SK_LEGACY_ENCODE_BITMAP +// Helper to support the EncodeBitmap version of serialize. +// Mimics the old behavior of always accepting the encoded data, and encoding +// using EncodeBitmap if there was no encoded data. +class EncodeBitmapSerializer : public SkPixelSerializer { +public: + explicit EncodeBitmapSerializer(SkPicture::EncodeBitmap encoder) + : fEncoder(encoder) + { + SkASSERT(fEncoder); + } + + virtual bool onUseEncodedData(const void*, size_t) SK_OVERRIDE { return true; } + + virtual SkData* onEncodePixels(const SkImageInfo& info, void* pixels, + size_t rowBytes) SK_OVERRIDE { + // Required by signature of EncodeBitmap. + size_t unused; + SkBitmap bm; + bm.installPixels(info, pixels, rowBytes); + return fEncoder(&unused, bm); + } + +private: + SkPicture::EncodeBitmap fEncoder; +}; + +void SkPicture::serialize(SkWStream* wStream, SkPicture::EncodeBitmap encoder) const { + EncodeBitmapSerializer serializer(encoder); + this->serialize(wStream, &serializer); +} + +#endif + +void SkPicture::serialize(SkWStream* stream, SkPixelSerializer* pixelSerializer) const { SkPictInfo info; this->createHeader(&info); SkAutoTDelete<SkPictureData> data(Backport(*fRecord, info, this->drawablePicts(), @@ -463,7 +496,7 @@ void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { stream->write(&info, sizeof(info)); if (data) { stream->writeBool(true); - data->serialize(stream, encoder); + data->serialize(stream, pixelSerializer); } else { stream->writeBool(false); } |