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
14class SK_API SkBlurImageFilter : public SkImageFilter {
15public:
16    static SkBlurImageFilter* Create(SkScalar sigmaX,
17                                     SkScalar sigmaY,
18                                     SkImageFilter* input = NULL,
19                                     const CropRect* cropRect = NULL) {
20        return SkNEW_ARGS(SkBlurImageFilter, (sigmaX, sigmaY, input, cropRect));
21    }
22
23    virtual void computeFastBounds(const SkRect&, SkRect*) const SK_OVERRIDE;
24
25    SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilter)
26
27protected:
28    SkBlurImageFilter(SkScalar sigmaX,
29                      SkScalar sigmaY,
30                      SkImageFilter* input,
31                      const CropRect* cropRect);
32    explicit SkBlurImageFilter(SkReadBuffer& buffer);
33    virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
34
35    virtual bool onFilterImage(Proxy*, const SkBitmap& src, const Context&,
36                               SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
37    virtual bool onFilterBounds(const SkIRect& src, const SkMatrix&,
38                                SkIRect* dst) const SK_OVERRIDE;
39
40    bool canFilterImageGPU() const SK_OVERRIDE { return true; }
41    virtual bool filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx,
42                                SkBitmap* result, SkIPoint* offset) const SK_OVERRIDE;
43
44private:
45    SkSize   fSigma;
46    typedef SkImageFilter INHERITED;
47};
48
49#endif
50