| Index: src/core/SkReadBuffer.cpp
|
| diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
|
| index 5356d4a6b1f47ab27db1ba9d7eb9743403e77da4..2a7096d32c3f0b4a05ca8c83a0ac0552f80eec52 100644
|
| --- a/src/core/SkReadBuffer.cpp
|
| +++ b/src/core/SkReadBuffer.cpp
|
| @@ -6,6 +6,7 @@
|
| */
|
|
|
| #include "SkBitmap.h"
|
| +#include "SkDeduper.h"
|
| #include "SkErrorInternals.h"
|
| #include "SkImage.h"
|
| #include "SkImageDeserializer.h"
|
| @@ -258,6 +259,11 @@ sk_sp<SkImage> SkReadBuffer::readBitmapAsImage() {
|
| }
|
|
|
| sk_sp<SkImage> SkReadBuffer::readImage() {
|
| + if (fInflator) {
|
| + SkImage* img = fInflator->getImage(this->read32());
|
| + return img ? sk_ref_sp(img) : nullptr;
|
| + }
|
| +
|
| int width = this->read32();
|
| int height = this->read32();
|
| if (width <= 0 || height <= 0) { // SkImage never has a zero dimension
|
| @@ -298,7 +304,10 @@ sk_sp<SkImage> SkReadBuffer::readImage() {
|
| }
|
|
|
| SkTypeface* SkReadBuffer::readTypeface() {
|
| -
|
| + if (fInflator) {
|
| + return SkSafeRef(fInflator->getTypeface(this->read32()));
|
| + }
|
| +
|
| uint32_t index = fReader.readU32();
|
| if (0 == index || index > (unsigned)fTFCount) {
|
| return nullptr;
|
| @@ -315,7 +324,12 @@ SkFlattenable* SkReadBuffer::readFlattenable(SkFlattenable::Type ft) {
|
|
|
| SkFlattenable::Factory factory = nullptr;
|
|
|
| - if (fFactoryCount > 0) {
|
| + if (fInflator) {
|
| + factory = fInflator->getFactory(this->read32());
|
| + if (!factory) {
|
| + return nullptr;
|
| + }
|
| + } else if (fFactoryCount > 0) {
|
| int32_t index = fReader.readU32();
|
| if (0 == index) {
|
| return nullptr; // writer failed to give us the flattenable
|
|
|