1 /* 2 * Copyright 2011 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef SkBlurImageFilter_DEFINED 9 #define SkBlurImageFilter_DEFINED 10 11 #include "SkImageFilter.h" 12 #include "SkSize.h" 13 14 class SK_API SkBlurImageFilter : public SkImageFilter { 15 public: 16 static SkImageFilter* Create(SkScalar sigmaX, SkScalar sigmaY, SkImageFilter* input = NULL, 17 const CropRect* cropRect = NULL) { 18 if (0 == sigmaX && 0 == sigmaY && nullptr == cropRect) { 19 return SkSafeRef(input); 20 } 21 return new SkBlurImageFilter(sigmaX, sigmaY, input, cropRect); 22 } 23 24 void computeFastBounds(const SkRect&, SkRect*) const override; 25 26 SK_TO_STRING_OVERRIDE() 27 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilter) 28 29 protected: 30 void flatten(SkWriteBuffer&) const override; 31 bool onFilterImageDeprecated(Proxy*, const SkBitmap& src, const Context&, SkBitmap* result, 32 SkIPoint* offset) const override; 33 void onFilterNodeBounds(const SkIRect& src, const SkMatrix&, 34 SkIRect* dst, MapDirection) const override; 35 bool canFilterImageGPU() const override { return true; } 36 bool filterImageGPUDeprecated(Proxy* proxy, const SkBitmap& src, const Context& ctx, 37 SkBitmap* result, SkIPoint* offset) const override; 38 39 private: 40 SkBlurImageFilter(SkScalar sigmaX, 41 SkScalar sigmaY, 42 SkImageFilter* input, 43 const CropRect* cropRect); 44 45 SkSize fSigma; 46 typedef SkImageFilter INHERITED; 47 }; 48 49 #endif 50