Index: include/core/SkColor.h |
diff --git a/include/core/SkColor.h b/include/core/SkColor.h |
index 1ba1331c1a7261f3faaba32002dc113ac9ed0397..77946387e56a8053be1d7684e62f9aa8bda7448f 100644 |
--- a/include/core/SkColor.h |
+++ b/include/core/SkColor.h |
@@ -160,4 +160,44 @@ SK_API SkPMColor SkPreMultiplyColor(SkColor c); |
*/ |
typedef SkPMColor (*SkXfermodeProc)(SkPMColor src, SkPMColor dst); |
+/////////////////////////////////////////////////////////////////////////////////////////////////// |
+ |
+/* |
+ * The float values are 0...1 premultiplied |
+ */ |
+struct SK_ATTRIBUTE(aligned(16)) SkPM4f { |
+ float fVec[4]; |
+ |
+ float a() const { return fVec[SK_A32_SHIFT/8]; } |
+}; |
+ |
+/* |
+ * The float values are 0...1 unpremultiplied |
+ */ |
+struct SkColor4f { |
+ float fA; |
+ float fR; |
+ float fG; |
+ float fB; |
+ |
+ bool operator==(const SkColor4f& other) const { |
+ return fA == other.fA && fR == other.fR && fG == other.fG && fB == other.fB; |
+ } |
+ bool operator!=(const SkColor4f& other) const { |
+ return !(*this == other); |
+ } |
+ |
+ const float* vec() const { return &fA; } |
+ float* vec() { return &fA; } |
+ |
+ static SkColor4f Pin(float a, float r, float g, float b); |
+ static SkColor4f FromColor(SkColor); |
+ |
+ SkColor4f pin() const { |
+ return Pin(fA, fR, fG, fB); |
+ } |
+ |
+ SkPM4f premul() const; |
+}; |
+ |
#endif |