michael@0: #ifndef SkXfermode_proccoeff_DEFINED michael@0: #define SkXfermode_proccoeff_DEFINED michael@0: michael@0: #include "SkXfermode.h" michael@0: #include "SkReadBuffer.h" michael@0: #include "SkWriteBuffer.h" michael@0: michael@0: struct ProcCoeff { michael@0: SkXfermodeProc fProc; michael@0: SkXfermode::Coeff fSC; michael@0: SkXfermode::Coeff fDC; michael@0: }; michael@0: michael@0: #define CANNOT_USE_COEFF SkXfermode::Coeff(-1) michael@0: michael@0: class SkProcCoeffXfermode : public SkProcXfermode { michael@0: public: michael@0: static SkProcCoeffXfermode* Create(const ProcCoeff& rec, Mode mode) { michael@0: return SkNEW_ARGS(SkProcCoeffXfermode, (rec, mode)); michael@0: } michael@0: michael@0: virtual bool asMode(Mode* mode) const SK_OVERRIDE; michael@0: michael@0: virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE; michael@0: michael@0: #if SK_SUPPORT_GPU michael@0: virtual bool asNewEffect(GrEffectRef** effect, michael@0: GrTexture* background) const SK_OVERRIDE; michael@0: #endif michael@0: michael@0: SK_TO_STRING_OVERRIDE() michael@0: SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) michael@0: michael@0: protected: michael@0: SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) michael@0: : INHERITED(rec.fProc) { michael@0: fMode = mode; michael@0: // these may be valid, or may be CANNOT_USE_COEFF michael@0: fSrcCoeff = rec.fSC; michael@0: fDstCoeff = rec.fDC; michael@0: } michael@0: michael@0: SkProcCoeffXfermode(SkReadBuffer& buffer); michael@0: michael@0: virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; michael@0: michael@0: Mode getMode() const { michael@0: return fMode; michael@0: } michael@0: michael@0: private: michael@0: Mode fMode; michael@0: Coeff fSrcCoeff, fDstCoeff; michael@0: michael@0: typedef SkProcXfermode INHERITED; michael@0: }; michael@0: michael@0: #endif // #ifndef SkXfermode_proccoeff_DEFINED