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 SkBlendShader_DEFINED 9 #define SkBlendShader_DEFINED 10 11 #include "include/core/SkFlattenable.h" 12 #include "include/core/SkRefCnt.h" 13 #include "include/core/SkShader.h" 14 #include "src/shaders/SkShaderBase.h" 15 16 #include <utility> 17 18 class SkReadBuffer; 19 class SkWriteBuffer; 20 enum class SkBlendMode; 21 struct SkStageRec; 22 23 class SkBlendShader final : public SkShaderBase { 24 public: SkBlendShader(SkBlendMode mode,sk_sp<SkShader> dst,sk_sp<SkShader> src)25 SkBlendShader(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src) 26 : fDst(std::move(dst)), fSrc(std::move(src)), fMode(mode) {} 27 type()28 ShaderType type() const override { return ShaderType::kBlend; } 29 dst()30 sk_sp<SkShader> dst() const { return fDst; } src()31 sk_sp<SkShader> src() const { return fSrc; } mode()32 SkBlendMode mode() const { return fMode; } 33 34 protected: 35 SkBlendShader(SkReadBuffer&); 36 void flatten(SkWriteBuffer&) const override; 37 bool appendStages(const SkStageRec&, const SkShaders::MatrixRec&) const override; 38 39 private: 40 friend void ::SkRegisterBlendShaderFlattenable(); 41 SK_FLATTENABLE_HOOKS(SkBlendShader) 42 43 sk_sp<SkShader> fDst; 44 sk_sp<SkShader> fSrc; 45 SkBlendMode fMode; 46 }; 47 48 #endif 49