OLD | NEW |
---|---|
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #ifndef SkXfermode_DEFINED | 10 #ifndef SkXfermode_DEFINED |
11 #define SkXfermode_DEFINED | 11 #define SkXfermode_DEFINED |
12 | 12 |
13 #include "SkFlattenable.h" | 13 #include "SkFlattenable.h" |
14 #include "SkColor.h" | 14 #include "SkColor.h" |
15 | 15 |
16 class GrContext; | |
17 class GrEffectRef; | |
16 class SkString; | 18 class SkString; |
17 | 19 |
18 /** \class SkXfermode | 20 /** \class SkXfermode |
19 | 21 |
20 SkXfermode is the base class for objects that are called to implement custom | 22 SkXfermode is the base class for objects that are called to implement custom |
21 "transfer-modes" in the drawing pipeline. The static function Create(Modes) | 23 "transfer-modes" in the drawing pipeline. The static function Create(Modes) |
22 can be called to return an instance of any of the predefined subclasses as | 24 can be called to return an instance of any of the predefined subclasses as |
23 specified in the Modes enum. When an SkXfermode is assigned to an SkPaint, | 25 specified in the Modes enum. When an SkXfermode is assigned to an SkPaint, |
24 then objects drawn with that paint have the xfermode applied. | 26 then objects drawn with that paint have the xfermode applied. |
25 */ | 27 */ |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
67 clear zero zero | 69 clear zero zero |
68 src one zero | 70 src one zero |
69 dst zero one | 71 dst zero one |
70 srcover one isa | 72 srcover one isa |
71 dstover ida one | 73 dstover ida one |
72 */ | 74 */ |
73 virtual bool asCoeff(Coeff* src, Coeff* dst) const; | 75 virtual bool asCoeff(Coeff* src, Coeff* dst) const; |
74 | 76 |
75 /** | 77 /** |
76 * The same as calling xfermode->asCoeff(..), except that this also checks | 78 * The same as calling xfermode->asCoeff(..), except that this also checks |
77 * if the xfermode is NULL, and if so, treats its as kSrcOver_Mode. | 79 * if the xfermode is NULL, and if so, treats it as kSrcOver_Mode. |
78 */ | 80 */ |
79 static bool AsCoeff(const SkXfermode*, Coeff* src, Coeff* dst); | 81 static bool AsCoeff(const SkXfermode*, Coeff* src, Coeff* dst); |
80 | 82 |
81 /** List of predefined xfermodes. | 83 /** List of predefined xfermodes. |
82 The algebra for the modes uses the following symbols: | 84 The algebra for the modes uses the following symbols: |
83 Sa, Sc - source alpha and color | 85 Sa, Sc - source alpha and color |
84 Da, Dc - destination alpha and color (before compositing) | 86 Da, Dc - destination alpha and color (before compositing) |
85 [a, c] - Resulting (alpha, color) values | 87 [a, c] - Resulting (alpha, color) values |
86 For these equations, the colors are in premultiplied state. | 88 For these equations, the colors are in premultiplied state. |
87 If no xfermode is specified, kSrcOver is assumed. | 89 If no xfermode is specified, kSrcOver is assumed. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
129 | 131 |
130 /** | 132 /** |
131 * If the xfermode is one of the modes in the Mode enum, then asMode() | 133 * If the xfermode is one of the modes in the Mode enum, then asMode() |
132 * returns true and sets (if not null) mode accordingly. Otherwise it | 134 * returns true and sets (if not null) mode accordingly. Otherwise it |
133 * returns false and ignores the mode parameter. | 135 * returns false and ignores the mode parameter. |
134 */ | 136 */ |
135 virtual bool asMode(Mode* mode) const; | 137 virtual bool asMode(Mode* mode) const; |
136 | 138 |
137 /** | 139 /** |
138 * The same as calling xfermode->asMode(mode), except that this also checks | 140 * The same as calling xfermode->asMode(mode), except that this also checks |
139 * if the xfermode is NULL, and if so, treats its as kSrcOver_Mode. | 141 * if the xfermode is NULL, and if so, treats it as kSrcOver_Mode. |
140 */ | 142 */ |
141 static bool AsMode(const SkXfermode*, Mode* mode); | 143 static bool AsMode(const SkXfermode*, Mode* mode); |
142 | 144 |
143 /** | 145 /** |
144 * Returns true if the xfermode claims to be the specified Mode. This works | 146 * Returns true if the xfermode claims to be the specified Mode. This works |
145 * correctly even if the xfermode is NULL (which equates to kSrcOver.) Thus | 147 * correctly even if the xfermode is NULL (which equates to kSrcOver.) Thus |
146 * you can say this without checking for a null... | 148 * you can say this without checking for a null... |
147 * | 149 * |
148 * If (SkXfermode::IsMode(paint.getXfermode(), | 150 * If (SkXfermode::IsMode(paint.getXfermode(), |
149 * SkXfermode::kDstOver_Mode)) { | 151 * SkXfermode::kDstOver_Mode)) { |
(...skipping 24 matching lines...) Expand all Loading... | |
174 * not representable as a pair of Coeffs, return false and ignore the | 176 * not representable as a pair of Coeffs, return false and ignore the |
175 * src and dst parameters. | 177 * src and dst parameters. |
176 */ | 178 */ |
177 static bool ModeAsCoeff(Mode mode, Coeff* src, Coeff* dst); | 179 static bool ModeAsCoeff(Mode mode, Coeff* src, Coeff* dst); |
178 | 180 |
179 // DEPRECATED: call AsMode(...) | 181 // DEPRECATED: call AsMode(...) |
180 static bool IsMode(const SkXfermode* xfer, Mode* mode) { | 182 static bool IsMode(const SkXfermode* xfer, Mode* mode) { |
181 return AsMode(xfer, mode); | 183 return AsMode(xfer, mode); |
182 } | 184 } |
183 | 185 |
186 /** A subclass may implement this factory function to work with the GPU back end. It is legal | |
robertphillips
2013/03/27 18:12:09
will -> with
bsalomon
2013/03/27 18:39:42
Done.
| |
187 to call this will all but the context param NULL to simply test the retu rn value. effect, | |
188 src, and dst must all be NULL or all non-NULL. If effect is non-NULL bef ore this function | |
189 is called then the xfermode may optionally allocate an effect to return and the caller will | |
190 install it and own a ref to it. If the function returns true then the sr c and dst coeffs | |
191 will be applied to the draw. | |
192 */ | |
193 virtual bool asNewEffect(GrContext*, GrEffectRef** effect, Coeff* src, Coeff * dst) const; | |
194 | |
195 /** | |
196 * The same as calling xfermode->asNewEffect(...), except that this also ch ecks if the xfermode | |
197 * is NULL, and if so, treats it as kSrcOver_Mode. | |
198 */ | |
199 static bool AsNewEffect(SkXfermode*, GrContext*, GrEffectRef** effect, Coeff * src, Coeff* dst); | |
200 | |
184 SkDEVCODE(virtual void toString(SkString* str) const = 0;) | 201 SkDEVCODE(virtual void toString(SkString* str) const = 0;) |
185 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() | 202 SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() |
186 protected: | 203 protected: |
187 SkXfermode(SkFlattenableReadBuffer& rb) : SkFlattenable(rb) {} | 204 SkXfermode(SkFlattenableReadBuffer& rb) : SkFlattenable(rb) {} |
188 | 205 |
189 /** The default implementation of xfer32/xfer16/xferA8 in turn call this | 206 /** The default implementation of xfer32/xfer16/xferA8 in turn call this |
190 method, 1 color at a time (upscaled to a SkPMColor). The default | 207 method, 1 color at a time (upscaled to a SkPMColor). The default |
191 implmentation of this method just returns dst. If performance is | 208 implmentation of this method just returns dst. If performance is |
192 important, your subclass should override xfer32/xfer16/xferA8 directly. | 209 important, your subclass should override xfer32/xfer16/xferA8 directly. |
193 | 210 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
236 fProc = proc; | 253 fProc = proc; |
237 } | 254 } |
238 | 255 |
239 private: | 256 private: |
240 SkXfermodeProc fProc; | 257 SkXfermodeProc fProc; |
241 | 258 |
242 typedef SkXfermode INHERITED; | 259 typedef SkXfermode INHERITED; |
243 }; | 260 }; |
244 | 261 |
245 #endif | 262 #endif |
OLD | NEW |