| #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 |