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 "include/core/SkSpan.h" 15 #include "src/core/SkMask.h" 16 #include "src/core/SkMaskFilterBase.h" 17 18 #include <optional> 19 20 class SkImageFilter; 21 class SkMatrix; 22 class SkRRect; 23 class SkReadBuffer; 24 class SkWriteBuffer; 25 enum SkBlurStyle : int; 26 struct SkIPoint; 27 struct SkIRect; 28 struct SkRect; 29 30 class SkBlurMaskFilterImpl : public SkMaskFilterBase { 31 public: 32 SkBlurMaskFilterImpl(SkScalar sigma, SkBlurStyle, bool respectCTM); 33 34 // From SkMaskFilterBase.h 35 SkMask::Format getFormat() const override; 36 bool filterMask(SkMaskBuilder* dst, const SkMask& src, const SkMatrix&, 37 SkIPoint* margin) const override; type()38 SkMaskFilterBase::Type type() const override { return SkMaskFilterBase::Type::kBlur; } 39 40 void computeFastBounds(const SkRect&, SkRect*) const override; 41 bool asABlur(BlurRec*) const override; 42 sk_sp<SkImageFilter> asImageFilter(const SkMatrix& ctm) const override; 43 44 45 SkScalar computeXformedSigma(const SkMatrix& ctm) const; blurStyle()46 SkBlurStyle blurStyle() const {return fBlurStyle;} sigma()47 SkScalar sigma() const {return fSigma;} ignoreXform()48 bool ignoreXform() const { return !fRespectCTM; } 49 50 private: 51 FilterReturn filterRectsToNine(SkSpan<const SkRect>, 52 const SkMatrix&, 53 const SkIRect& clipBounds, 54 std::optional<NinePatch>*) const override; 55 56 std::optional<NinePatch> filterRRectToNine(const SkRRect&, 57 const SkMatrix&, 58 const SkIRect& clipBounds) const override; 59 60 bool filterRectMask(SkMaskBuilder* dstM, 61 const SkRect& r, 62 const SkMatrix& matrix, 63 SkIPoint* margin, 64 SkMaskBuilder::CreateMode createMode) const; 65 66 SK_FLATTENABLE_HOOKS(SkBlurMaskFilterImpl) 67 68 SkScalar fSigma; 69 SkBlurStyle fBlurStyle; 70 bool fRespectCTM; 71 72 SkBlurMaskFilterImpl(SkReadBuffer&); 73 void flatten(SkWriteBuffer&) const override; 74 75 friend class SkBlurMaskFilter; 76 77 friend void sk_register_blur_maskfilter_createproc(); 78 }; 79 80 #endif 81