Upstream version 10.39.225.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     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 SK_OVERRIDE;
28     virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
29                         const SkAlpha aa[]) const SK_OVERRIDE;
30     virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
31                         const SkAlpha aa[]) const SK_OVERRIDE;
32
33     virtual bool asMode(Mode* mode) const SK_OVERRIDE;
34
35     virtual bool asCoeff(Coeff* sc, Coeff* dc) const SK_OVERRIDE;
36
37 #if SK_SUPPORT_GPU
38     virtual bool asFragmentProcessor(GrFragmentProcessor**,
39                                      GrTexture* background) const SK_OVERRIDE;
40 #endif
41
42     SK_TO_STRING_OVERRIDE()
43     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkProcCoeffXfermode)
44
45 protected:
46 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
47     SkProcCoeffXfermode(SkReadBuffer& buffer);
48 #endif
49
50     virtual void flatten(SkWriteBuffer& buffer) const SK_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