Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / third_party / skia / src / core / SkXfermode_proccoeff.h
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     static SkProcCoeffXfermode* Create(const ProcCoeff& rec, Mode mode) {
19         return SkNEW_ARGS(SkProcCoeffXfermode, (rec, mode));
20     }
21
22     virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
23                         const SkAlpha aa[]) const SK_OVERRIDE;
24     virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
25                         const SkAlpha aa[]) const SK_OVERRIDE;
26     virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
27                         const SkAlpha aa[]) const SK_OVERRIDE;
28
29     virtual bool asMode(Mode* mode) const SK_OVERRIDE;
30
31     virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE;
32
33 #if SK_SUPPORT_GPU
34     virtual bool asNewEffect(GrEffectRef** effect,
35                              GrTexture* background) const SK_OVERRIDE;
36 #endif
37
38     SK_TO_STRING_OVERRIDE()
39     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
40
41 protected:
42     SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode) {
43         fMode = mode;
44         fProc = rec.fProc;
45         // these may be valid, or may be CANNOT_USE_COEFF
46         fSrcCoeff = rec.fSC;
47         fDstCoeff = rec.fDC;
48     }
49
50     SkProcCoeffXfermode(SkReadBuffer& buffer);
51
52     virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
53
54     Mode getMode() const { return fMode; }
55
56     SkXfermodeProc getProc() const { return fProc; }
57
58 private:
59     SkXfermodeProc  fProc;
60     Mode            fMode;
61     Coeff           fSrcCoeff, fDstCoeff;
62
63     typedef SkXfermode INHERITED;
64 };
65
66 #endif // #ifndef SkXfermode_proccoeff_DEFINED