/* * Copyright 2006 The Android Open Source Project * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkComposeShader_DEFINED #define SkComposeShader_DEFINED #include "include/core/SkBlendMode.h" #include "src/shaders/SkShaderBase.h" class SkShader_Blend final : public SkShaderBase { public: SkShader_Blend(SkBlendMode mode, sk_sp dst, sk_sp src, const SkMatrix* lm) : INHERITED(lm) , fDst(std::move(dst)) , fSrc(std::move(src)) , fMode(mode) {} #if SK_SUPPORT_GPU std::unique_ptr asFragmentProcessor(const GrFPArgs&) const override; #endif protected: SkShader_Blend(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; private: SK_FLATTENABLE_HOOKS(SkShader_Blend) sk_sp fDst; sk_sp fSrc; const SkBlendMode fMode; typedef SkShaderBase INHERITED; }; class SkShader_Lerp final : public SkShaderBase { public: SkShader_Lerp(float weight, sk_sp dst, sk_sp src, const SkMatrix* lm) : INHERITED(lm) , fDst(std::move(dst)) , fSrc(std::move(src)) , fWeight(weight) { SkASSERT(weight >= 0 && weight <= 1); } #if SK_SUPPORT_GPU std::unique_ptr asFragmentProcessor(const GrFPArgs&) const override; #endif protected: SkShader_Lerp(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; private: SK_FLATTENABLE_HOOKS(SkShader_Lerp) sk_sp fDst; sk_sp fSrc; const float fWeight; typedef SkShaderBase INHERITED; }; class SkShader_LerpRed final : public SkShaderBase { public: SkShader_LerpRed(sk_sp red, sk_sp dst, sk_sp src, const SkMatrix* lm) : INHERITED(lm) , fDst(std::move(dst)) , fSrc(std::move(src)) , fRed(std::move(red)) {} #if SK_SUPPORT_GPU std::unique_ptr asFragmentProcessor(const GrFPArgs&) const override; #endif protected: SkShader_LerpRed(SkReadBuffer&); void flatten(SkWriteBuffer&) const override; bool onAppendStages(const SkStageRec&) const override; private: SK_FLATTENABLE_HOOKS(SkShader_LerpRed) sk_sp fDst; sk_sp fSrc; sk_sp fRed; typedef SkShaderBase INHERITED; }; #endif