• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2023 Google LLC
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 SkBlurMaskFilterImpl_DEFINED
9 #define SkBlurMaskFilterImpl_DEFINED
10 
11 #include "include/core/SkFlattenable.h"
12 #include "include/core/SkRefCnt.h"
13 #include "include/core/SkScalar.h"
14 #include "src/core/SkMask.h"
15 #include "src/core/SkMaskFilterBase.h"
16 
17 class SkImageFilter;
18 class SkMatrix;
19 class SkRRect;
20 class SkReadBuffer;
21 class SkWriteBuffer;
22 enum SkBlurStyle : int;
23 struct SkIPoint;
24 struct SkIRect;
25 struct SkRect;
26 template<typename T> class SkTLazy;
27 
28 class SkBlurMaskFilterImpl : public SkMaskFilterBase {
29 public:
30     SkBlurMaskFilterImpl(SkScalar sigma, SkBlurStyle, bool respectCTM);
31 
32     // From SkMaskFilterBase.h
33     SkMask::Format getFormat() const override;
34     bool filterMask(SkMaskBuilder* dst, const SkMask& src, const SkMatrix&,
35                     SkIPoint* margin) const override;
type()36     SkMaskFilterBase::Type type() const override { return SkMaskFilterBase::Type::kBlur; }
37 
38     void computeFastBounds(const SkRect&, SkRect*) const override;
39     bool asABlur(BlurRec*) const override;
40     sk_sp<SkImageFilter> asImageFilter(const SkMatrix& ctm) const override;
41 
42 
43     SkScalar computeXformedSigma(const SkMatrix& ctm) const;
blurStyle()44     SkBlurStyle blurStyle() const {return fBlurStyle;}
sigma()45     SkScalar sigma() const {return fSigma;}
ignoreXform()46     bool ignoreXform() const { return !fRespectCTM; }
47 
48 #ifdef SKIA_OHOS
49     bool directFilterRRectMaskGPU(GrRecordingContext* context,
50                                   skgpu::ganesh::SurfaceDrawContext* sdc,
51                                   GrPaint&& paint,
52                                   const GrClip* clip,
53                                   const SkMatrix& viewMatrix,
54                                   const GrStyledShape& shape,
55                                   const SkRRect& srcRRect) const override;
56 
57     bool quick_check_gpu_draw(const SkMatrix& viewMatrix,
58                               SkIRect& devSpaceShapeBounds) const override;
59 
60 #endif // SKIA_OHOS
61 
62 private:
63     FilterReturn filterRectsToNine(const SkRect[], int count, const SkMatrix&,
64                                    const SkIRect& clipBounds,
65                                    SkTLazy<NinePatch>*) const override;
66 
67     FilterReturn filterRRectToNine(const SkRRect&, const SkMatrix&,
68                                    const SkIRect& clipBounds,
69                                    SkTLazy<NinePatch>*) const override;
70 
71     bool filterRectMask(SkMaskBuilder* dstM, const SkRect& r, const SkMatrix& matrix,
72                         SkIPoint* margin, SkMaskBuilder::CreateMode createMode) const;
73     bool filterRRectMask(SkMaskBuilder* dstM, const SkRRect& r, const SkMatrix& matrix,
74                         SkIPoint* margin, SkMaskBuilder::CreateMode createMode) const;
75 
76     SK_FLATTENABLE_HOOKS(SkBlurMaskFilterImpl)
77 
78     SkScalar    fSigma;
79     SkBlurStyle fBlurStyle;
80     bool        fRespectCTM;
81 
82     SkBlurMaskFilterImpl(SkReadBuffer&);
83     void flatten(SkWriteBuffer&) const override;
84 
85     friend class SkBlurMaskFilter;
86 
87     friend void sk_register_blur_maskfilter_createproc();
88 };
89 
90 #endif
91