Index: include/core/SkColorTable.h |
diff --git a/include/core/SkColorTable.h b/include/core/SkColorTable.h |
index c6e31b94d421e7f7c18ea2f458640b70bc62b719..f8d1ccf07b7a45325c7dcf7e01347316befa8724 100644 |
--- a/include/core/SkColorTable.h |
+++ b/include/core/SkColorTable.h |
@@ -10,7 +10,6 @@ |
#ifndef SkColorTable_DEFINED |
#define SkColorTable_DEFINED |
-#include "SkAlpha.h" |
#include "SkColor.h" |
#include "SkFlattenable.h" |
@@ -26,15 +25,25 @@ public: |
/** Makes a deep copy of colors. |
*/ |
SkColorTable(const SkColorTable& src); |
- SkColorTable(const SkPMColor colors[], int count, |
- SkAlphaType alphaType = kPremul_SkAlphaType); |
+ /** Preallocates the colortable to have 'count' colors, which |
+ * are initially set to 0. |
+ */ |
+ explicit SkColorTable(int count); |
+ SkColorTable(const SkPMColor colors[], int count); |
virtual ~SkColorTable(); |
- SkAlphaType alphaType() const { return (SkAlphaType)fAlphaType; } |
+ enum Flags { |
+ kColorsAreOpaque_Flag = 0x01 //!< if set, all of the colors in the table are opaque (alpha==0xFF) |
+ }; |
+ /** Returns the flag bits for the color table. These can be changed with setFlags(). |
+ */ |
+ unsigned getFlags() const { return fFlags; } |
+ /** Set the flags for the color table. See the Flags enum for possible values. |
+ */ |
+ void setFlags(unsigned flags); |
- bool isOpaque() const { |
- return SkAlphaTypeIsOpaque(this->alphaType()); |
- } |
+ bool isOpaque() const { return (fFlags & kColorsAreOpaque_Flag) != 0; } |
+ void setIsOpaque(bool isOpaque); |
/** Returns the number of colors in the table. |
*/ |
@@ -48,19 +57,25 @@ public: |
return fColors[index]; |
} |
- /** |
- * Return the array of colors for reading. This must be balanced by a call |
- * to unlockColors(). |
- */ |
- const SkPMColor* lockColors() { |
+ /** Specify the number of colors in the color table. This does not initialize the colors |
+ to any value, just allocates memory for them. To initialize the values, either call |
+ setColors(array, count), or follow setCount(count) with a call to |
+ lockColors()/{set the values}/unlockColors(true). |
+ */ |
+// void setColors(int count) { this->setColors(NULL, count); } |
+// void setColors(const SkPMColor[], int count); |
+ |
+ /** Return the array of colors for reading and/or writing. This must be |
+ balanced by a call to unlockColors(changed?), telling the colortable if |
+ the colors were changed during the lock. |
+ */ |
+ SkPMColor* lockColors() { |
SkDEBUGCODE(sk_atomic_inc(&fColorLockCount);) |
return fColors; |
} |
- |
- /** |
- * Balancing call to lockColors(). |
- */ |
- void unlockColors(); |
+ /** Balancing call to lockColors(). If the colors have been changed, pass true. |
+ */ |
+ void unlockColors(bool changed); |
/** Similar to lockColors(), lock16BitCache() returns the array of |
RGB16 colors that mirror the 32bit colors. However, this function |
@@ -85,7 +100,7 @@ private: |
SkPMColor* fColors; |
uint16_t* f16BitCache; |
uint16_t fCount; |
- uint8_t fAlphaType; |
+ uint8_t fFlags; |
SkDEBUGCODE(int fColorLockCount;) |
SkDEBUGCODE(int f16BitCacheLockCount;) |