Upstream version 5.34.104.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 SkProcCoeffXfermode : public SkProcXfermode {
17 public:
18     SkProcCoeffXfermode(const ProcCoeff& rec, Mode mode)
19             : INHERITED(rec.fProc) {
20         fMode = mode;
21         // these may be valid, or may be CANNOT_USE_COEFF
22         fSrcCoeff = rec.fSC;
23         fDstCoeff = rec.fDC;
24     }
25
26     virtual bool asMode(Mode* mode) const SK_OVERRIDE;
27
28     virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE;
29
30 #if SK_SUPPORT_GPU
31     virtual bool asNewEffect(GrEffectRef** effect,
32                              GrTexture* background) const SK_OVERRIDE;
33 #endif
34
35     SK_DEVELOPER_TO_STRING()
36     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
37
38 protected:
39     SkProcCoeffXfermode(SkReadBuffer& buffer);
40
41     virtual void flatten(SkWriteBuffer& buffer) const SK_OVERRIDE;
42
43     Mode getMode() const {
44         return fMode;
45     }
46
47 private:
48     Mode    fMode;
49     Coeff   fSrcCoeff, fDstCoeff;
50
51     typedef SkProcXfermode INHERITED;
52 };
53
54 #endif // #ifndef SkXfermode_proccoeff_DEFINED