formalize named picture versions
authorcommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 20 May 2014 17:31:08 +0000 (17:31 +0000)
committercommit-bot@chromium.org <commit-bot@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 20 May 2014 17:31:08 +0000 (17:31 +0000)
BUG=skia:
R=mtklein@google.com, robertphillips@google.com

Author: reed@google.com

Review URL: https://codereview.chromium.org/291913004

git-svn-id: http://skia.googlecode.com/svn/trunk@14807 2bbb7eff-a529-9590-31e7-b0007b416f81

include/core/SkReadBuffer.h
src/core/SkPaint.cpp
src/core/SkPicturePlayback.cpp
src/core/SkReadBuffer.cpp
src/core/SkShader.cpp
src/effects/SkDashPathEffect.cpp
src/effects/gradients/SkTwoPointConicalGradient.cpp

index dfd92eedc0c26d986585d85019af1b27191e2568..4da27d4fe0c6902de0a908a3637ebcfe120d2d48 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2011 Google Inc.
  *
@@ -41,13 +40,25 @@ public:
     SkReadBuffer(SkStream* stream);
     virtual ~SkReadBuffer();
 
-    /** Return the version of the serialized picture this buffer holds, or 0 if unset. */
-    int pictureVersion() const { return fPictureVersion; }
+    enum Version {
+        kFilterLevelIsEnum_Version         = 23,
+        kGradientFlippedFlag_Version       = 24,
+        kDashWritesPhaseIntervals_Version  = 25,
+        kColorShaderNoBool_Version         = 26,
+    };
+
+    /**
+     *  Returns true IFF the version is older than the specified version.
+     */
+    bool isVersionLT(Version targetVersion) const {
+        SkASSERT(targetVersion > 0);
+        return fVersion > 0 && fVersion < targetVersion;
+    }
 
     /** This may be called at most once; most clients of SkReadBuffer should not mess with it. */
-    void setPictureVersion(int version) {
-        SkASSERT(0 == fPictureVersion || version == fPictureVersion);
-        fPictureVersion = version;
+    void setVersion(int version) {
+        SkASSERT(0 == fVersion || version == fVersion);
+        fVersion = version;
     }
 
     enum Flags {
@@ -188,7 +199,7 @@ private:
     bool readArray(void* value, size_t size, size_t elementSize);
 
     uint32_t fFlags;
-    int fPictureVersion;
+    int fVersion;
 
     void* fMemoryPtr;
 
index 7ac2f076b1fafb7f62f2e4c43537e6a9b2de3f60..f3bf01bfafc5ca30e0507190a8ffee37f8a5efaa 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2006 The Android Open Source Project
  *
@@ -2182,9 +2181,8 @@ void SkPaint::unflatten(SkReadBuffer& buffer) {
     this->setStrokeMiter(read_scalar(pod));
     this->setColor(*pod++);
 
-    const int picVer = buffer.pictureVersion();
     unsigned flatFlags = 0;
-    if (picVer > 0 && picVer <= 22) {
+    if (buffer.isVersionLT(SkReadBuffer::kFilterLevelIsEnum_Version)) {
         flatFlags = unpack_paint_flags_v22(this, *pod++);
     } else {
         flatFlags = unpack_paint_flags(this, *pod++);
index 87cd9416ae76ceaba1aedeefc46c1472b2287172..8c77eeb6ac94d574a75642fa40b7c041a137d2bb 100644 (file)
@@ -534,7 +534,7 @@ bool SkPicturePlayback::parseStreamTag(SkPicture* picture,
 
             SkReadBuffer buffer(storage.get(), size);
             buffer.setFlags(pictInfoFlagsToReadBufferFlags(fInfo.fFlags));
-            buffer.setPictureVersion(fInfo.fVersion);
+            buffer.setVersion(fInfo.fVersion);
 
             fFactoryPlayback->setupBuffer(buffer);
             fTFPlayback.setupBuffer(buffer);
@@ -634,7 +634,7 @@ SkPicturePlayback* SkPicturePlayback::CreateFromBuffer(SkPicture* picture,
                                                        SkReadBuffer& buffer,
                                                        const SkPictInfo& info) {
     SkAutoTDelete<SkPicturePlayback> playback(SkNEW_ARGS(SkPicturePlayback, (picture, info)));
-    buffer.setPictureVersion(info.fVersion);
+    buffer.setVersion(info.fVersion);
 
     if (!playback->parseBuffer(picture, buffer)) {
         return NULL;
index b4bc87529ab5a5b1e1e620d2775f7e7a5f1dedf1..d016d9c980b5ecbc77fc938a059c0cea11add3dc 100644 (file)
@@ -25,7 +25,7 @@ static uint32_t default_flags() {
 
 SkReadBuffer::SkReadBuffer() {
     fFlags = default_flags();
-    fPictureVersion = 0;
+    fVersion = 0;
     fMemoryPtr = NULL;
 
     fBitmapStorage = NULL;
@@ -43,7 +43,7 @@ SkReadBuffer::SkReadBuffer() {
 
 SkReadBuffer::SkReadBuffer(const void* data, size_t size) {
     fFlags = default_flags();
-    fPictureVersion = 0;
+    fVersion = 0;
     fReader.setMemory(data, size);
     fMemoryPtr = NULL;
 
@@ -62,7 +62,7 @@ SkReadBuffer::SkReadBuffer(const void* data, size_t size) {
 
 SkReadBuffer::SkReadBuffer(SkStream* stream) {
     fFlags = default_flags();
-    fPictureVersion = 0;
+    fVersion = 0;
     const size_t length = stream->getLength();
     fMemoryPtr = sk_malloc_throw(length);
     stream->read(fMemoryPtr, length);
index 6a418b6b4578eb6c2be004f5d809dcb984ff9b4b..9484db59c18837ac6feaa767cbff03a05cc78613 100644 (file)
@@ -255,7 +255,7 @@ bool SkColorShader::isOpaque() const {
 SkColorShader::SkColorShader(SkReadBuffer& b) : INHERITED(b) {
     // V25_COMPATIBILITY_CODE We had a boolean to make the color shader inherit the paint's
     // color. We don't support that any more.
-    if (b.pictureVersion() < 26 && 0 != b.pictureVersion()) {
+    if (b.isVersionLT(SkReadBuffer::kColorShaderNoBool_Version)) {
         if (b.readBool()) {
             SkDEBUGFAIL("We shouldn't have pictures that recorded the inherited case.");
             fColor = SK_ColorWHITE;
index f6c7caecd94ee458eb2a0ff76bbc86bd304c0b68..4fd4185e06285efb5845423a288f0c449d084d2b 100644 (file)
@@ -1,4 +1,3 @@
-
 /*
  * Copyright 2006 The Android Open Source Project
  *
@@ -6,7 +5,6 @@
  * found in the LICENSE file.
  */
 
-
 #include "SkDashPathEffect.h"
 #include "SkReadBuffer.h"
 #include "SkWriteBuffer.h"
@@ -544,7 +542,7 @@ SkFlattenable* SkDashPathEffect::CreateProc(SkReadBuffer& buffer) {
 }
 
 SkDashPathEffect::SkDashPathEffect(SkReadBuffer& buffer) : INHERITED(buffer) {
-    bool useOldPic = buffer.pictureVersion() < 25 && 0 != buffer.pictureVersion();
+    bool useOldPic = buffer.isVersionLT(SkReadBuffer::kDashWritesPhaseIntervals_Version);
     if (useOldPic) {
         fInitialDashIndex = buffer.readInt();
         fInitialDashLength = buffer.readScalar();
index f25ad50fcfa294f88e72a052adc8ebe25f0ac015..e26e36bc3d70b98a3ce000275025da8059b1abf2 100644 (file)
@@ -351,9 +351,7 @@ SkTwoPointConicalGradient::SkTwoPointConicalGradient(
     fCenter2(buffer.readPoint()),
     fRadius1(buffer.readScalar()),
     fRadius2(buffer.readScalar()) {
-    if (buffer.pictureVersion() >= 24 || 0 == buffer.pictureVersion()) {
-        fFlippedGrad = buffer.readBool();
-    } else {
+    if (buffer.isVersionLT(SkReadBuffer::kGradientFlippedFlag_Version)) {
         // V23_COMPATIBILITY_CODE
         // Sort gradient by radius size for old pictures
         if (fRadius2 < fRadius1) {
@@ -364,6 +362,8 @@ SkTwoPointConicalGradient::SkTwoPointConicalGradient(
         } else {
             fFlippedGrad = false;
         }
+    } else {
+        fFlippedGrad = buffer.readBool();
     }
     this->init();
 };