SkFilterShader.h revision e901b6de3ef8dea842008a08fc81e92fb1478d61
1/* 2 * Copyright 2012 Google Inc. 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 SkFilterShader_DEFINED 9#define SkFilterShader_DEFINED 10 11#include "SkShader.h" 12 13class SkColorFilter; 14 15class SkFilterShader : public SkShader { 16public: 17 SkFilterShader(SkShader* shader, SkColorFilter* filter); 18 virtual ~SkFilterShader(); 19 20 virtual bool validContext(const ContextRec&, SkMatrix* totalInverse) const SK_OVERRIDE; 21 virtual SkShader::Context* createContext(const ContextRec&, void* storage) const SK_OVERRIDE; 22 virtual size_t contextSize() const SK_OVERRIDE; 23 24 class FilterShaderContext : public SkShader::Context { 25 public: 26 // Takes ownership of shaderContext and calls its destructor. 27 FilterShaderContext(const SkFilterShader&, SkShader::Context*, const ContextRec&); 28 virtual ~FilterShaderContext(); 29 30 virtual uint32_t getFlags() const SK_OVERRIDE; 31 32 virtual void shadeSpan(int x, int y, SkPMColor[], int count) SK_OVERRIDE; 33 virtual void shadeSpan16(int x, int y, uint16_t[], int count) SK_OVERRIDE; 34 35 private: 36 SkShader::Context* fShaderContext; 37 38 typedef SkShader::Context INHERITED; 39 }; 40 41 SK_TO_STRING_OVERRIDE() 42 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkFilterShader) 43 44protected: 45 SkFilterShader(SkReadBuffer& ); 46 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 47 48private: 49 SkShader* fShader; 50 SkColorFilter* fFilter; 51 52 typedef SkShader INHERITED; 53}; 54 55#endif 56