diff options
-rw-r--r-- | include/core/SkPicture.h | 3 | ||||
-rw-r--r-- | include/effects/SkBlurImageFilter.h | 3 | ||||
-rw-r--r-- | src/core/SkBlurImageFilter.cpp | 16 | ||||
-rw-r--r-- | src/core/SkReadBuffer.h | 1 |
4 files changed, 16 insertions, 7 deletions
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h index e1d8bbab2c..1a46da5831 100644 --- a/include/core/SkPicture.h +++ b/include/core/SkPicture.h @@ -203,10 +203,11 @@ private: // V53: SaveLayerRec clip mask // V54: ComposeShader can use a Mode or a Lerp // V55: Drop blendmode[] from MergeImageFilter + // V56: Add TileMode in SkBlurImageFilter. // Only SKPs within the min/current picture version range (inclusive) can be read. static const uint32_t MIN_PICTURE_VERSION = 51; // Produced by Chrome ~M56. - static const uint32_t CURRENT_PICTURE_VERSION = 55; + static const uint32_t CURRENT_PICTURE_VERSION = 56; static bool IsValidPictInfo(const SkPictInfo& info); static sk_sp<SkPicture> Forwardport(const SkPictInfo&, diff --git a/include/effects/SkBlurImageFilter.h b/include/effects/SkBlurImageFilter.h index bae835ccf5..2a153f0685 100644 --- a/include/effects/SkBlurImageFilter.h +++ b/include/effects/SkBlurImageFilter.h @@ -14,8 +14,7 @@ class SK_API SkBlurImageFilter { public: /*! \enum TileMode */ enum TileMode { - kIgnore_TileMode = 0, /*!< Ignore the image's edge pixels. */ - kClamp_TileMode, /*!< Clamp to the image's edge pixels. */ + kClamp_TileMode = 0, /*!< Clamp to the image's edge pixels. */ /*!< This re-weights the filter so samples outside have no effect */ kRepeat_TileMode, /*!< Wrap around to the image's opposite edge. */ kClampToBlack_TileMode, /*!< Fill with transparent black. */ diff --git a/src/core/SkBlurImageFilter.cpp b/src/core/SkBlurImageFilter.cpp index cfebd32949..928da9841d 100644 --- a/src/core/SkBlurImageFilter.cpp +++ b/src/core/SkBlurImageFilter.cpp @@ -93,20 +93,27 @@ sk_sp<SkFlattenable> SkBlurImageFilterImpl::CreateProc(SkReadBuffer& buffer) { SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); SkScalar sigmaX = buffer.readScalar(); SkScalar sigmaY = buffer.readScalar(); - return SkBlurImageFilter::Make(sigmaX, sigmaY, common.getInput(0), &common.cropRect()); + SkBlurImageFilter::TileMode tileMode; + if (buffer.isVersionLT(SkReadBuffer::kTileModeInBlurImageFilter_Version)) { + tileMode = SkBlurImageFilter::kClampToBlack_TileMode; + } else { + tileMode = static_cast<SkBlurImageFilter::TileMode>(buffer.readInt()); + } + + return SkBlurImageFilter::Make( + sigmaX, sigmaY, common.getInput(0), &common.cropRect(), tileMode); } void SkBlurImageFilterImpl::flatten(SkWriteBuffer& buffer) const { this->INHERITED::flatten(buffer); buffer.writeScalar(fSigma.fWidth); buffer.writeScalar(fSigma.fHeight); + buffer.writeInt(static_cast<int>(fTileMode)); } #if SK_SUPPORT_GPU static GrTextureDomain::Mode to_texture_domain_mode(SkBlurImageFilter::TileMode tileMode) { switch (tileMode) { - case SkBlurImageFilter::TileMode::kIgnore_TileMode: - return GrTextureDomain::kIgnore_Mode; case SkBlurImageFilter::TileMode::kClamp_TileMode: return GrTextureDomain::kClamp_Mode; case SkBlurImageFilter::TileMode::kClampToBlack_TileMode: @@ -325,7 +332,8 @@ SkIRect SkBlurImageFilterImpl::onFilterNodeBounds(const SkIRect& src, const SkMa #ifndef SK_IGNORE_TO_STRING void SkBlurImageFilterImpl::toString(SkString* str) const { str->appendf("SkBlurImageFilterImpl: ("); - str->appendf("sigma: (%f, %f) input (", fSigma.fWidth, fSigma.fHeight); + str->appendf("sigma: (%f, %f) tileMode: %d input (", fSigma.fWidth, fSigma.fHeight, + static_cast<int>(fTileMode)); if (this->getInput(0)) { this->getInput(0)->toString(str); diff --git a/src/core/SkReadBuffer.h b/src/core/SkReadBuffer.h index d14558f7f3..dd0484c450 100644 --- a/src/core/SkReadBuffer.h +++ b/src/core/SkReadBuffer.h @@ -73,6 +73,7 @@ public: kTextBlobImplicitRunCount_Version = 52, kComposeShaderCanLerp_Version = 54, kNoModesInMergeImageFilter_Verison = 55, + kTileModeInBlurImageFilter_Version = 56, }; /** |