00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef SkColorFilter_DEFINED
00018 #define SkColorFilter_DEFINED
00019
00020 #include "SkColor.h"
00021 #include "SkFlattenable.h"
00022 #include "SkXfermode.h"
00023
00024 class SkColorFilter : public SkFlattenable {
00025 public:
00033 virtual void filterSpan(const SkPMColor src[], int count,
00034 SkPMColor result[]) = 0;
00042 virtual void filterSpan16(const uint16_t shader[], int count,
00043 uint16_t result[]);
00044
00045 enum Flags {
00049 kAlphaUnchanged_Flag = 0x01,
00053 kHasFilter16_Flag = 0x02
00054 };
00055
00059 virtual uint32_t getFlags() { return 0; }
00060
00070 static SkColorFilter* CreateModeFilter(SkColor c, SkXfermode::Mode mode);
00071
00076 static SkColorFilter* CreateProcFilter(SkColor srcColor,
00077 SkXfermodeProc proc,
00078 SkXfermodeProc16 proc16 = NULL);
00079
00085 static SkColorFilter* CreateLightingFilter(SkColor mul, SkColor add);
00086
00087 protected:
00088 SkColorFilter() {}
00089 SkColorFilter(SkFlattenableReadBuffer& rb) : INHERITED(rb) {}
00090
00091 private:
00092 typedef SkFlattenable INHERITED;
00093 };
00094
00095 #include "SkShader.h"
00096
00097 class SkFilterShader : public SkShader {
00098 public:
00099 SkFilterShader(SkShader* shader, SkColorFilter* filter);
00100 virtual ~SkFilterShader();
00101
00102
00103 virtual uint32_t getFlags();
00104 virtual bool setContext(const SkBitmap& device, const SkPaint& paint,
00105 const SkMatrix& matrix);
00106 virtual void shadeSpan(int x, int y, SkPMColor result[], int count);
00107 virtual void shadeSpan16(int x, int y, uint16_t result[], int count);
00108 virtual void beginSession();
00109 virtual void endSession();
00110
00111 protected:
00112 SkFilterShader(SkFlattenableReadBuffer& );
00113 virtual void flatten(SkFlattenableWriteBuffer& );
00114 virtual Factory getFactory() { return CreateProc; }
00115 private:
00116 static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
00117 return SkNEW_ARGS(SkFilterShader, (buffer)); }
00118 SkShader* fShader;
00119 SkColorFilter* fFilter;
00120
00121 typedef SkShader INHERITED;
00122 };
00123
00124 #endif