Home | History | Annotate | Download | only in core
      1 #ifndef SkXfermode_proccoeff_DEFINED
      2 #define SkXfermode_proccoeff_DEFINED
      3 
      4 #include "SkXfermode.h"
      5 #include "SkReadBuffer.h"
      6 #include "SkWriteBuffer.h"
      7 
      8 struct ProcCoeff {
      9     SkXfermodeProc      fProc;
     10     SkXfermode::Coeff   fSC;
     11     SkXfermode::Coeff   fDC;
     12 };
     13 
     14 #define CANNOT_USE_COEFF    SkXfermode::Coeff(-1)
     15 
     16 class SK_API SkProcCoeffXfermode : public SkXfermode {
     17 public:
     18     SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) {
     19         fMode = mode;
     20         fProc = rec.fProc;
     21         // these may be valid, or may be CANNOT_USE_COEFF
     22         fSrcCoeff = rec.fSC;
     23         fDstCoeff = rec.fDC;
     24     }
     25 
     26     virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
     27                         const SkAlpha aa[]) const override;
     28     virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
     29                         const SkAlpha aa[]) const override;
     30     virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
     31                         const SkAlpha aa[]) const override;
     32 
     33     bool asMode(Mode* mode) const override;
     34 
     35     bool supportsCoverageAsAlpha() const override;
     36 
     37     bool isOpaque(SkXfermode::SrcColorOpacity opacityType) const override;
     38 
     39 #if SK_SUPPORT_GPU
     40     virtual bool asFragmentProcessor(GrFragmentProcessor**,
     41                                      GrTexture* background) const override;
     42 
     43     virtual bool asXPFactory(GrXPFactory**) const override;
     44 #endif
     45 
     46     SK_TO_STRING_OVERRIDE()
     47     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
     48 
     49 protected:
     50     void flatten(SkWriteBuffer& buffer) const override;
     51 
     52     Mode getMode() const { return fMode; }
     53 
     54     SkXfermodeProc getProc() const { return fProc; }
     55 
     56 private:
     57     SkXfermodeProc  fProc;
     58     Mode            fMode;
     59     Coeff           fSrcCoeff, fDstCoeff;
     60 
     61     friend class SkXfermode;
     62 
     63     typedef SkXfermode INHERITED;
     64 };
     65 
     66 #endif // #ifndef SkXfermode_proccoeff_DEFINED
     67