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 SkShaderMaskFilterImpl_DEFINED 9 #define SkShaderMaskFilterImpl_DEFINED 10 11 #include "include/core/SkFlattenable.h" 12 #include "include/core/SkRect.h" 13 #include "include/core/SkRefCnt.h" 14 #include "include/core/SkShader.h" 15 #include "src/core/SkMask.h" 16 #include "src/core/SkMaskFilterBase.h" 17 18 #include <utility> 19 20 class SkMatrix; 21 class SkReadBuffer; 22 class SkWriteBuffer; 23 struct SkIPoint; 24 25 class SkShaderMaskFilterImpl : public SkMaskFilterBase { 26 public: SkShaderMaskFilterImpl(sk_sp<SkShader> shader)27 SkShaderMaskFilterImpl(sk_sp<SkShader> shader) : fShader(std::move(shader)) {} 28 getFormat()29 SkMask::Format getFormat() const override { return SkMask::kA8_Format; } type()30 SkMaskFilterBase::Type type() const override { return SkMaskFilterBase::Type::kShader; } 31 32 bool filterMask(SkMaskBuilder* dst, const SkMask& src, const SkMatrix&, 33 SkIPoint* margin) const override; 34 computeFastBounds(const SkRect & src,SkRect * dst)35 void computeFastBounds(const SkRect& src, SkRect* dst) const override { 36 *dst = src; 37 } 38 asABlur(BlurRec *)39 bool asABlur(BlurRec*) const override { return false; } shader()40 sk_sp<SkShader> shader() const { return fShader; } 41 42 private: 43 SK_FLATTENABLE_HOOKS(SkShaderMaskFilterImpl) 44 45 sk_sp<SkShader> fShader; 46 47 SkShaderMaskFilterImpl(SkReadBuffer&); 48 void flatten(SkWriteBuffer&) const override; 49 50 friend class SkShaderMaskFilter; 51 }; 52 53 #endif 54