Index: src/core/SkBlurImageFilter.cpp |
diff --git a/src/effects/SkBlurImageFilter.cpp b/src/core/SkBlurImageFilter.cpp |
similarity index 81% |
rename from src/effects/SkBlurImageFilter.cpp |
rename to src/core/SkBlurImageFilter.cpp |
index 37584ab3add0eb1ecbb731234e61a2a8d65846e9..ccb3ed8fddc14496981b9beea4535ea9850c6819 100644 |
--- a/src/effects/SkBlurImageFilter.cpp |
+++ b/src/core/SkBlurImageFilter.cpp |
@@ -5,8 +5,6 @@ |
* found in the LICENSE file. |
*/ |
-#include "SkBlurImageFilter.h" |
- |
#include "SkAutoPixmapStorage.h" |
#include "SkColorPriv.h" |
#include "SkGpuBlurUtils.h" |
@@ -20,13 +18,52 @@ |
#include "SkGr.h" |
#endif |
-sk_sp<SkImageFilter> SkBlurImageFilter::Make(SkScalar sigmaX, SkScalar sigmaY, |
+class SkBlurImageFilterImpl : public SkImageFilter { |
+public: |
+ SkBlurImageFilterImpl(SkScalar sigmaX, |
+ SkScalar sigmaY, |
+ sk_sp<SkImageFilter> input, |
+ const CropRect* cropRect); |
+ |
+ SkRect computeFastBounds(const SkRect&) const override; |
+ |
+ SK_TO_STRING_OVERRIDE() |
+ SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilterImpl) |
+ |
+#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR |
+ static SkImageFilter* Create(SkScalar sigmaX, SkScalar sigmaY, SkImageFilter* input = nullptr, |
+ const CropRect* cropRect = nullptr) { |
+ return SkImageFilter::MakeBlur(sigmaX, sigmaY, sk_ref_sp<SkImageFilter>(input), |
+ cropRect).release(); |
+ } |
+#endif |
+ |
+protected: |
+ void flatten(SkWriteBuffer&) const override; |
+ sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&, |
+ SkIPoint* offset) const override; |
+ SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override; |
+ |
+private: |
+ SkSize fSigma; |
+ typedef SkImageFilter INHERITED; |
+ |
+ friend class SkImageFilter; |
+}; |
+ |
+SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkImageFilter) |
+ SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurImageFilterImpl) |
+SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
+ |
+/////////////////////////////////////////////////////////////////////////////// |
+ |
+sk_sp<SkImageFilter> SkImageFilter::MakeBlur(SkScalar sigmaX, SkScalar sigmaY, |
sk_sp<SkImageFilter> input, |
const CropRect* cropRect) { |
if (0 == sigmaX && 0 == sigmaY && !cropRect) { |
return input; |
} |
- return sk_sp<SkImageFilter>(new SkBlurImageFilter(sigmaX, sigmaY, input, cropRect)); |
+ return sk_sp<SkImageFilter>(new SkBlurImageFilterImpl(sigmaX, sigmaY, input, cropRect)); |
} |
// This rather arbitrary-looking value results in a maximum box blur kernel size |
@@ -44,7 +81,7 @@ static SkVector map_sigma(const SkSize& localSigma, const SkMatrix& ctm) { |
return sigma; |
} |
-SkBlurImageFilter::SkBlurImageFilter(SkScalar sigmaX, |
+SkBlurImageFilterImpl::SkBlurImageFilterImpl(SkScalar sigmaX, |
SkScalar sigmaY, |
sk_sp<SkImageFilter> input, |
const CropRect* cropRect) |
@@ -52,14 +89,14 @@ SkBlurImageFilter::SkBlurImageFilter(SkScalar sigmaX, |
, fSigma(SkSize::Make(sigmaX, sigmaY)) { |
} |
-sk_sp<SkFlattenable> SkBlurImageFilter::CreateProc(SkReadBuffer& buffer) { |
+sk_sp<SkFlattenable> SkBlurImageFilterImpl::CreateProc(SkReadBuffer& buffer) { |
SK_IMAGEFILTER_UNFLATTEN_COMMON(common, 1); |
SkScalar sigmaX = buffer.readScalar(); |
SkScalar sigmaY = buffer.readScalar(); |
- return Make(sigmaX, sigmaY, common.getInput(0), &common.cropRect()); |
+ return SkImageFilter::MakeBlur(sigmaX, sigmaY, common.getInput(0), &common.cropRect()); |
} |
-void SkBlurImageFilter::flatten(SkWriteBuffer& buffer) const { |
+void SkBlurImageFilterImpl::flatten(SkWriteBuffer& buffer) const { |
this->INHERITED::flatten(buffer); |
buffer.writeScalar(fSigma.fWidth); |
buffer.writeScalar(fSigma.fHeight); |
@@ -80,7 +117,7 @@ static void get_box3_params(SkScalar s, int *kernelSize, int* kernelSize3, int * |
} |
} |
-sk_sp<SkSpecialImage> SkBlurImageFilter::onFilterImage(SkSpecialImage* source, |
+sk_sp<SkSpecialImage> SkBlurImageFilterImpl::onFilterImage(SkSpecialImage* source, |
const Context& ctx, |
SkIPoint* offset) const { |
SkIPoint inputOffset = SkIPoint::Make(0, 0); |
@@ -231,14 +268,14 @@ sk_sp<SkSpecialImage> SkBlurImageFilter::onFilterImage(SkSpecialImage* source, |
} |
-SkRect SkBlurImageFilter::computeFastBounds(const SkRect& src) const { |
+SkRect SkBlurImageFilterImpl::computeFastBounds(const SkRect& src) const { |
SkRect bounds = this->getInput(0) ? this->getInput(0)->computeFastBounds(src) : src; |
bounds.outset(SkScalarMul(fSigma.width(), SkIntToScalar(3)), |
SkScalarMul(fSigma.height(), SkIntToScalar(3))); |
return bounds; |
} |
-SkIRect SkBlurImageFilter::onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm, |
+SkIRect SkBlurImageFilterImpl::onFilterNodeBounds(const SkIRect& src, const SkMatrix& ctm, |
MapDirection) const { |
SkVector sigma = map_sigma(fSigma, ctm); |
return src.makeOutset(SkScalarCeilToInt(SkScalarMul(sigma.x(), SkIntToScalar(3))), |
@@ -246,8 +283,8 @@ SkIRect SkBlurImageFilter::onFilterNodeBounds(const SkIRect& src, const SkMatrix |
} |
#ifndef SK_IGNORE_TO_STRING |
-void SkBlurImageFilter::toString(SkString* str) const { |
- str->appendf("SkBlurImageFilter: ("); |
+void SkBlurImageFilterImpl::toString(SkString* str) const { |
+ str->appendf("SkBlurImageFilterImpl: ("); |
str->appendf("sigma: (%f, %f) input (", fSigma.fWidth, fSigma.fHeight); |
if (this->getInput(0)) { |