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 #ifndef SkEmptyShader_DEFINED 8 #define SkEmptyShader_DEFINED 9 10 #include "src/shaders/SkShaderBase.h" 11 12 #include "include/core/SkFlattenable.h" 13 14 class SkReadBuffer; 15 class SkWriteBuffer; 16 struct SkStageRec; 17 18 /** 19 * \class SkEmptyShader 20 * A Shader that always draws nothing. Its createContext always returns nullptr. 21 */ 22 class SkEmptyShader : public SkShaderBase { 23 public: SkEmptyShader()24 SkEmptyShader() {} 25 26 protected: flatten(SkWriteBuffer & buffer)27 void flatten(SkWriteBuffer& buffer) const override { 28 // Do nothing. 29 // We just don't want to fall through to SkShader::flatten(), 30 // which will write data we don't care to serialize or decode. 31 } 32 appendStages(const SkStageRec &,const SkShaders::MatrixRec &)33 bool appendStages(const SkStageRec&, const SkShaders::MatrixRec&) const override { 34 return false; 35 } 36 type()37 ShaderType type() const override { return ShaderType::kEmpty; } 38 39 private: 40 friend void ::SkRegisterEmptyShaderFlattenable(); 41 SK_FLATTENABLE_HOOKS(SkEmptyShader) 42 }; 43 44 #endif // SkEmptyShader_DEFINED 45