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 size_t contextSize() const SK_OVERRIDE; 21 22 class FilterShaderContext : public SkShader::Context { 23 public: 24 // Takes ownership of shaderContext and calls its destructor. 25 FilterShaderContext(const SkFilterShader&, SkShader::Context*, const ContextRec&); 26 virtual ~FilterShaderContext(); 27 28 virtual uint32_t getFlags() const SK_OVERRIDE; 29 30 virtual void shadeSpan(int x, int y, SkPMColor[], int count) SK_OVERRIDE; 31 virtual void shadeSpan16(int x, int y, uint16_t[], int count) SK_OVERRIDE; 32 33 virtual void set3DMask(const SkMask* mask) SK_OVERRIDE { 34 // forward to our proxy 35 fShaderContext->set3DMask(mask); 36 } 37 38 private: 39 SkShader::Context* fShaderContext; 40 41 typedef SkShader::Context INHERITED; 42 }; 43 44 SK_TO_STRING_OVERRIDE() 45 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkFilterShader) 46 47protected: 48 SkFilterShader(SkReadBuffer& ); 49 virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE; 50 virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE; 51 52 53private: 54 SkShader* fShader; 55 SkColorFilter* fFilter; 56 57 typedef SkShader INHERITED; 58}; 59 60#endif 61