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