1/*
2 * Copyright 2006 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 SkMaskFilter_DEFINED
9#define SkMaskFilter_DEFINED
10
11#include "include/core/SkBlurTypes.h"
12#include "include/core/SkCoverageMode.h"
13#include "include/core/SkFlattenable.h"
14#include "include/core/SkScalar.h"
15
16class SkMatrix;
17struct SkRect;
18
19/** \class SkMaskFilter
20
21 SkMaskFilter is the base class for object that perform transformations on
22 the mask before drawing it. An example subclass is Blur.
23*/
24class SK_API SkMaskFilter : public SkFlattenable {
25public:
26 /** Create a blur maskfilter.
27 * @param style The SkBlurStyle to use
28 * @param sigma Standard deviation of the Gaussian blur to apply. Must be > 0.
29 * @param respectCTM if true the blur's sigma is modified by the CTM.
30 * @return The new blur maskfilter
31 */
32 static sk_sp<SkMaskFilter> MakeBlur(SkBlurStyle style, SkScalar sigma,
33 bool respectCTM = true);
34
35 static SkFlattenable::Type GetFlattenableType() {
36 return kSkMaskFilter_Type;
37 }
38
39 SkFlattenable::Type getFlattenableType() const override {
40 return kSkMaskFilter_Type;
41 }
42
43 static sk_sp<SkMaskFilter> Deserialize(const void* data, size_t size,
44 const SkDeserialProcs* procs = nullptr) {
45 return sk_sp<SkMaskFilter>(static_cast<SkMaskFilter*>(
46 SkFlattenable::Deserialize(
47 kSkMaskFilter_Type, data, size, procs).release()));
48 }
49
50private:
51 static void RegisterFlattenables();
52 friend class SkFlattenable;
53};
54
55#endif
56