Home | History | Annotate | Download | only in core
      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 
     13 class SkColorFilter;
     14 
     15 class SkFilterShader : public SkShader {
     16 public:
     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 
     47 protected:
     48     SkFilterShader(SkReadBuffer& );
     49     virtual void flatten(SkWriteBuffer&) const SK_OVERRIDE;
     50     virtual Context* onCreateContext(const ContextRec&, void* storage) const SK_OVERRIDE;
     51 
     52 
     53 private:
     54     SkShader*       fShader;
     55     SkColorFilter*  fFilter;
     56 
     57     typedef SkShader INHERITED;
     58 };
     59 
     60 #endif
     61