override asComponentTable()
git-svn-id: http://skia.googlecode.com/svn/trunk@2984 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 6bde3b2..800d4a9 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -6,7 +6,9 @@
public:
SkTable_ColorFilter(const uint8_t tableA[], const uint8_t tableR[],
const uint8_t tableG[], const uint8_t tableB[]) {
+ fBitmap = NULL;
fFlags = 0;
+
uint8_t* dst = fStorage;
if (tableA) {
memcpy(dst, tableA, 256);
@@ -29,6 +31,8 @@
}
}
+ virtual bool asComponentTable(SkBitmap* table) SK_OVERRIDE;
+
virtual void filterSpan(const SkPMColor src[], int count,
SkPMColor dst[]) SK_OVERRIDE;
virtual void flatten(SkFlattenableWriteBuffer&) SK_OVERRIDE;
@@ -37,11 +41,13 @@
static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
return SkNEW_ARGS(SkTable_ColorFilter, (buffer));
}
-
+
protected:
SkTable_ColorFilter(SkFlattenableReadBuffer& buffer);
private:
+ SkBitmap* fBitmap;
+
enum {
kA_Flag = 1 << 0,
kR_Flag = 1 << 1,
@@ -162,6 +168,8 @@
}
SkTable_ColorFilter::SkTable_ColorFilter(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {
+ fBitmap = NULL;
+
uint8_t storage[5*256];
fFlags = buffer.readInt();
@@ -175,6 +183,19 @@
SkASSERT(raw == count * 256);
}
+bool SkTable_ColorFilter::asComponentTable(SkBitmap* table) {
+ if (table) {
+ if (NULL == fBitmap) {
+ fBitmap = new SkBitmap;
+ fBitmap->setConfig(SkBitmap::kA8_Config, 256, 4, 256);
+ fBitmap->allocPixels();
+ memcpy(fBitmap->getAddr8(0, 0), fStorage, 256 * 4);
+ }
+ *table = *fBitmap;
+ }
+ return true;
+}
+
///////////////////////////////////////////////////////////////////////////////
#ifdef SK_CPU_BENDIAN