blob: 607e76de513e4fb8c92bf04921d5d836b275f6cc [file] [log] [blame]
senorblanco@chromium.org60014ca2011-11-09 16:05:58 +00001/*
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
senorblanco@chromium.org60014ca2011-11-09 16:05:58 +00008#ifndef SkBlurImageFilter_DEFINED
9#define SkBlurImageFilter_DEFINED
10
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000011#include "SkImageFilter.h"
senorblanco@chromium.orgbf2768b2012-08-20 15:43:14 +000012#include "SkSize.h"
senorblanco@chromium.org60014ca2011-11-09 16:05:58 +000013
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000014class SK_API SkBlurImageFilter : public SkImageFilter {
senorblanco@chromium.org60014ca2011-11-09 16:05:58 +000015public:
robertphillips6e7025a2016-04-04 04:31:25 -070016 static sk_sp<SkImageFilter> Make(SkScalar sigmaX, SkScalar sigmaY, sk_sp<SkImageFilter> input,
17 const CropRect* cropRect = nullptr) {
xidachen467ddc02015-12-10 12:08:44 -080018 if (0 == sigmaX && 0 == sigmaY && nullptr == cropRect) {
robertphillips6e7025a2016-04-04 04:31:25 -070019 return input;
xidachen467ddc02015-12-10 12:08:44 -080020 }
robertphillips6e7025a2016-04-04 04:31:25 -070021 return sk_sp<SkImageFilter>(new SkBlurImageFilter(sigmaX, sigmaY, input, cropRect));
commit-bot@chromium.orgcac5fd52014-03-10 10:51:58 +000022 }
23
senorblancoe5e79842016-03-21 14:51:59 -070024 SkRect computeFastBounds(const SkRect&) const override;
reed@google.com76dd2772012-01-05 21:15:07 +000025
robertphillipsf3f5bad2014-12-19 13:49:15 -080026 SK_TO_STRING_OVERRIDE()
djsollen@google.comba28d032012-03-26 17:57:35 +000027 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkBlurImageFilter)
caryclark@google.comd26147a2011-12-15 14:16:43 +000028
robertphillips6e7025a2016-04-04 04:31:25 -070029#ifdef SK_SUPPORT_LEGACY_IMAGEFILTER_PTR
30 static SkImageFilter* Create(SkScalar sigmaX, SkScalar sigmaY, SkImageFilter* input = nullptr,
31 const CropRect* cropRect = nullptr) {
32 return Make(sigmaX, sigmaY, sk_ref_sp<SkImageFilter>(input), cropRect).release();
33 }
34#endif
35
senorblanco@chromium.org54e01b22011-11-16 18:20:47 +000036protected:
reed5ea95df2015-10-06 14:05:32 -070037 void flatten(SkWriteBuffer&) const override;
robertphillips2302de92016-03-24 07:26:32 -070038 sk_sp<SkSpecialImage> onFilterImage(SkSpecialImage* source, const Context&,
39 SkIPoint* offset) const override;
senorblancoe5e79842016-03-21 14:51:59 -070040 SkIRect onFilterNodeBounds(const SkIRect& src, const SkMatrix&, MapDirection) const override;
reed5ea95df2015-10-06 14:05:32 -070041
42private:
commit-bot@chromium.orgbd0be252014-05-15 15:40:41 +000043 SkBlurImageFilter(SkScalar sigmaX,
44 SkScalar sigmaY,
robertphillips6e7025a2016-04-04 04:31:25 -070045 sk_sp<SkImageFilter> input,
senorblanco24e06d52015-03-18 12:11:33 -070046 const CropRect* cropRect);
reed@google.com76dd2772012-01-05 21:15:07 +000047
senorblanco@chromium.org60014ca2011-11-09 16:05:58 +000048 SkSize fSigma;
senorblanco@chromium.org377c14a2013-02-04 22:57:21 +000049 typedef SkImageFilter INHERITED;
senorblanco@chromium.org60014ca2011-11-09 16:05:58 +000050};
51
52#endif