aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkReadBuffer.cpp
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2016-09-13 08:09:45 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2016-09-13 08:09:45 -0700
commit54dc4878b02765efea39e68b218df1e4bfff4b88 (patch)
tree296347d73c08b8b1d0a0b244ca062434ac48caa1 /src/core/SkReadBuffer.cpp
parent5f1d0f61ea182829826d9d76cb85346d3e23305d (diff)
add pipecanvas
Diffstat (limited to 'src/core/SkReadBuffer.cpp')
-rw-r--r--src/core/SkReadBuffer.cpp17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/core/SkReadBuffer.cpp b/src/core/SkReadBuffer.cpp
index 43eaf20261..4b9d5987a1 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,6 +304,10 @@ sk_sp<SkImage> SkReadBuffer::readImage() {
}
sk_sp<SkTypeface> SkReadBuffer::readTypeface() {
+ if (fInflator) {
+ return sk_ref_sp(fInflator->getTypeface(this->read32()));
+ }
+
uint32_t index = fReader.readU32();
if (0 == index || index > (unsigned)fTFCount) {
return nullptr;
@@ -314,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