Index: include/core/SkXfermode.h |
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h |
index fc9ae21ac45445b9445285ba697c16686661b418..1dd01a2e1d7f0cf526e3c9f078f3ac7aebdd58de 100644 |
--- a/include/core/SkXfermode.h |
+++ b/include/core/SkXfermode.h |
@@ -57,29 +57,6 @@ public: |
kCoeffCount |
}; |
- /** If the xfermode can be expressed as an equation using the coefficients |
- in Coeff, then asCoeff() returns true, and sets (if not null) src and |
- dst accordingly. |
- |
- result = src_coeff * src_color + dst_coeff * dst_color; |
- |
- As examples, here are some of the porterduff coefficients |
- |
- MODE SRC_COEFF DST_COEFF |
- clear zero zero |
- src one zero |
- dst zero one |
- srcover one isa |
- dstover ida one |
- */ |
- virtual bool asCoeff(Coeff* src, Coeff* dst) const; |
- |
- /** |
- * The same as calling xfermode->asCoeff(..), except that this also checks |
- * if the xfermode is NULL, and if so, treats it as kSrcOver_Mode. |
- */ |
- static bool AsCoeff(const SkXfermode*, Coeff* src, Coeff* dst); |
- |
/** List of predefined xfermodes. |
The algebra for the modes uses the following symbols: |
Sa, Sc - source alpha and color |
@@ -190,6 +167,41 @@ public: |
return AsMode(xfer, mode); |
} |
+ /** |
+ * Returns whether or not the xfer mode can support treating coverage as alpha |
+ */ |
+ virtual bool supportsCoverageAsAlpha() const; |
+ |
+ /** |
+ * The same as calling xfermode->supportsCoverageAsAlpha(), except that this also checks if |
+ * the xfermode is NULL, and if so, treats it as kSrcOver_Mode. |
+ */ |
+ static bool SupportsCoverageAsAlpha(const SkXfermode* xfer); |
+ |
+ enum SrcColorOpacity { |
+ // The src color is known to be opaque (alpha == 255) |
+ kOpaque_SrcColorOpacity = 0, |
+ // The src color is known to be fully transparent (color == 0) |
+ kTransparentBlack_SrcColorOpacity = 1, |
+ // The src alpha is known to be fully transparent (alpha == 0) |
+ kTransparentAlpha_SrcColorOpacity = 2, |
+ // The src color opacity is unknown |
+ kUnknown_SrcColorOpacity = 3 |
+ }; |
+ |
+ /** |
+ * Returns whether or not the result of the draw with the xfer mode will be opaque or not. The |
+ * input to this call is an enum describing known information about the opacity of the src color |
+ * that will be given to the xfer mode. |
+ */ |
+ virtual bool isOpaque(SrcColorOpacity opacityType) const; |
+ |
+ /** |
+ * The same as calling xfermode->isOpaque(...), except that this also checks if |
+ * the xfermode is NULL, and if so, treats it as kSrcOver_Mode. |
+ */ |
+ static bool IsOpaque(const SkXfermode* xfer, SrcColorOpacity opacityType); |
+ |
/** Implemented by a subclass to support use as an image filter in the GPU backend. When used as |
an image filter the xfer mode blends the source color against a background texture rather |
than the destination. It is implemented as a fragment processor. This can be called with |