aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/core/SkPicture.h3
-rw-r--r--include/effects/SkBlurImageFilter.h3
-rw-r--r--src/core/SkBlurImageFilter.cpp16
-rw-r--r--src/core/SkReadBuffer.h1
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,
};
/**