From a97a1ab5719d5c355f7900b7f17dec1e467cf57e Mon Sep 17 00:00:00 2001 From: vjiaoblack Date: Tue, 23 Aug 2016 07:50:52 -0700 Subject: [PATCH] Moving SkBlurImageFilter into core BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2255803003 Committed: https://skia.googlesource.com/skia/+/dd3259eb95c3b47e11eefa3b176365a112a32b48 Committed: https://skia.googlesource.com/skia/+/e426babe7552b1cb4e27cdf4e90826feabb9e3b0 Committed: https://skia.googlesource.com/skia/+/4d760175686df8f61a11b66946eb307d89dd2c75 Review-Url: https://codereview.chromium.org/2255803003 --- gyp/core.gypi | 3 ++ gyp/effects.gypi | 3 -- include/core/SkImageFilter.h | 5 +++ include/effects/SkBlurImageFilter.h | 32 ++------------ src/{effects => core}/SkBlurImageFilter.cpp | 63 ++++++++++++++++++++++------ src/{effects => core}/SkGpuBlurUtils.cpp | 0 src/{effects => core}/SkGpuBlurUtils.h | 0 src/ports/SkGlobalInitialization_default.cpp | 2 +- 8 files changed, 62 insertions(+), 46 deletions(-) rename src/{effects => core}/SkBlurImageFilter.cpp (81%) rename src/{effects => core}/SkGpuBlurUtils.cpp (100%) rename src/{effects => core}/SkGpuBlurUtils.h (100%) diff --git a/gyp/core.gypi b/gyp/core.gypi index 8d1dc8d..0a30618 100644 --- a/gyp/core.gypi +++ b/gyp/core.gypi @@ -60,6 +60,7 @@ '<(skia_src_path)/core/SkBlitter_PM4f.cpp', '<(skia_src_path)/core/SkBlitter_RGB16.cpp', '<(skia_src_path)/core/SkBlitter_Sprite.cpp', + '<(skia_src_path)/core/SkBlurImageFilter.cpp', '<(skia_src_path)/core/SkBuffer.cpp', '<(skia_src_path)/core/SkCachedData.cpp', '<(skia_src_path)/core/SkCanvas.cpp', @@ -139,6 +140,8 @@ '<(skia_src_path)/core/SkGlyphCache.cpp', '<(skia_src_path)/core/SkGlyphCache.h', '<(skia_src_path)/core/SkGlyphCache_Globals.h', + '<(skia_src_path)/core/SkGpuBlurUtils.h', + '<(skia_src_path)/core/SkGpuBlurUtils.cpp', '<(skia_src_path)/core/SkGraphics.cpp', '<(skia_src_path)/core/SkHalf.cpp', '<(skia_src_path)/core/SkHalf.h', diff --git a/gyp/effects.gypi b/gyp/effects.gypi index 45eced8..62c6bfd 100644 --- a/gyp/effects.gypi +++ b/gyp/effects.gypi @@ -26,7 +26,6 @@ '<(skia_src_path)/effects/SkBlurDrawLooper.cpp', '<(skia_src_path)/effects/SkBlurMask.cpp', '<(skia_src_path)/effects/SkBlurMask.h', - '<(skia_src_path)/effects/SkBlurImageFilter.cpp', '<(skia_src_path)/effects/SkBlurMaskFilter.cpp', '<(skia_src_path)/effects/SkColorCubeFilter.cpp', '<(skia_src_path)/effects/SkColorFilterImageFilter.cpp', @@ -45,8 +44,6 @@ '<(skia_src_path)/effects/SkImageSource.cpp', '<(skia_src_path)/effects/SkGammaColorFilter.cpp', '<(skia_src_path)/effects/SkGaussianEdgeShader.cpp', - '<(skia_src_path)/effects/SkGpuBlurUtils.h', - '<(skia_src_path)/effects/SkGpuBlurUtils.cpp', '<(skia_src_path)/effects/SkLayerDrawLooper.cpp', '<(skia_src_path)/effects/SkLayerRasterizer.cpp', '<(skia_src_path)/effects/SkLightingImageFilter.cpp', diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h index 6210073..97f84dc 100644 --- a/include/core/SkImageFilter.h +++ b/include/core/SkImageFilter.h @@ -152,6 +152,10 @@ public: return this->isColorFilterNode(filterPtr); } + static sk_sp MakeBlur(SkScalar sigmaX, SkScalar sigmaY, + sk_sp input, + const CropRect* cropRect = nullptr); + /** * Returns true (and optionally returns a ref'd filter) if this imagefilter can be completely * replaced by the returned colorfilter. i.e. the two effects will affect drawing in the @@ -229,6 +233,7 @@ public: SK_TO_STRING_PUREVIRT() SK_DEFINE_FLATTENABLE_TYPE(SkImageFilter) + SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() protected: class Common { diff --git a/include/effects/SkBlurImageFilter.h b/include/effects/SkBlurImageFilter.h index 9bfa19b..085a13b 100644 --- a/include/effects/SkBlurImageFilter.h +++ b/include/effects/SkBlurImageFilter.h @@ -9,40 +9,14 @@ #define SkBlurImageFilter_DEFINED #include "SkImageFilter.h" -#include "SkSize.h" -class SK_API SkBlurImageFilter : public SkImageFilter { +class SK_API SkBlurImageFilter { public: static sk_sp Make(SkScalar sigmaX, SkScalar sigmaY, sk_sp input, - const CropRect* cropRect = nullptr); - - SkRect computeFastBounds(const SkRect&) const override; - - SK_TO_STRING_OVERRIDE() - SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilter) - -#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR - static SkImageFilter* Create(SkScalar sigmaX, SkScalar sigmaY, SkImageFilter* input = nullptr, - const CropRect* cropRect = nullptr) { - return Make(sigmaX, sigmaY, sk_ref_sp(input), cropRect).release(); + const SkImageFilter::CropRect* cropRect = nullptr) { + return SkImageFilter::MakeBlur(sigmaX, sigmaY, input, cropRect); } -#endif - -protected: - void flatten(SkWriteBuffer&) const override; - sk_sp onFilterImage(SkSpecialImage* source, const Context&, - SkIPoint* offset) const override; - SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override; - -private: - SkBlurImageFilter(SkScalar sigmaX, - SkScalar sigmaY, - sk_sp input, - const CropRect* cropRect); - - SkSize fSigma; - typedef SkImageFilter INHERITED; }; #endif 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 37584ab..ccb3ed8 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 SkBlurImageFilter::Make(SkScalar sigmaX, SkScalar sigmaY, +class SkBlurImageFilterImpl : public SkImageFilter { +public: + SkBlurImageFilterImpl(SkScalar sigmaX, + SkScalar sigmaY, + sk_sp 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(input), + cropRect).release(); + } +#endif + +protected: + void flatten(SkWriteBuffer&) const override; + sk_sp 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::MakeBlur(SkScalar sigmaX, SkScalar sigmaY, sk_sp input, const CropRect* cropRect) { if (0 == sigmaX && 0 == sigmaY && !cropRect) { return input; } - return sk_sp(new SkBlurImageFilter(sigmaX, sigmaY, input, cropRect)); + return sk_sp(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 input, const CropRect* cropRect) @@ -52,14 +89,14 @@ SkBlurImageFilter::SkBlurImageFilter(SkScalar sigmaX, , fSigma(SkSize::Make(sigmaX, sigmaY)) { } -sk_sp SkBlurImageFilter::CreateProc(SkReadBuffer& buffer) { +sk_sp 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 SkBlurImageFilter::onFilterImage(SkSpecialImage* source, +sk_sp SkBlurImageFilterImpl::onFilterImage(SkSpecialImage* source, const Context& ctx, SkIPoint* offset) const { SkIPoint inputOffset = SkIPoint::Make(0, 0); @@ -231,14 +268,14 @@ sk_sp 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)) { diff --git a/src/effects/SkGpuBlurUtils.cpp b/src/core/SkGpuBlurUtils.cpp similarity index 100% rename from src/effects/SkGpuBlurUtils.cpp rename to src/core/SkGpuBlurUtils.cpp diff --git a/src/effects/SkGpuBlurUtils.h b/src/core/SkGpuBlurUtils.h similarity index 100% rename from src/effects/SkGpuBlurUtils.h rename to src/core/SkGpuBlurUtils.h diff --git a/src/ports/SkGlobalInitialization_default.cpp b/src/ports/SkGlobalInitialization_default.cpp index cc697ce..fdafd96 100644 --- a/src/ports/SkGlobalInitialization_default.cpp +++ b/src/ports/SkGlobalInitialization_default.cpp @@ -102,7 +102,7 @@ void SkFlattenable::PrivateInitializer::InitEffects() { SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSumPathEffect) // ImageFilter - SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkBlurImageFilter) + SkImageFilter::InitializeFlattenables(); SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDilateImageFilter) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDisplacementMapEffect) SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDropShadowImageFilter) -- 2.7.4