#ifndef SkXfermode_proccoeff_DEFINED #define SkXfermode_proccoeff_DEFINED #include "SkXfermode.h" #include "SkReadBuffer.h" #include "SkWriteBuffer.h" struct ProcCoeff { SkXfermodeProc fProc; SkXfermode::Coeff fSC; SkXfermode::Coeff fDC; }; #define CANNOT_USE_COEFF SkXfermode::Coeff(-1) class SK_API SkProcCoeffXfermode : public SkXfermode { public: SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) { fMode = mode; fProc = rec.fProc; // these may be valid, or may be CANNOT_USE_COEFF fSrcCoeff = rec.fSC; fDstCoeff = rec.fDC; } virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count, const SkAlpha aa[]) const SK_OVERRIDE; virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count, const SkAlpha aa[]) const SK_OVERRIDE; virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count, const SkAlpha aa[]) const SK_OVERRIDE; virtual bool asMode(Mode* mode) const SK_OVERRIDE; virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE; #if SK_SUPPORT_GPU virtual bool asFragmentProcessor(GrFragmentProcessor**, GrTexture* background) const SK_OVERRIDE; #endif SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode) protected: #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING SkProcCoeffXfermode(SkReadBuffer& buffer); #endif virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE; Mode getMode() const { return fMode; } SkXfermodeProc getProc() const { return fProc; } private: SkXfermodeProc fProc; Mode fMode; Coeff fSrcCoeff, fDstCoeff; friend class SkXfermode; typedef SkXfermode INHERITED; }; #endif // #ifndef SkXfermode_proccoeff_DEFINED