Index: src/core/SkFlattenable.cpp |
diff --git a/src/core/SkFlattenable.cpp b/src/core/SkFlattenable.cpp |
index b4efe91004845cb3b00ebfc8b6d3d1131374fce7..84d4a2aef14ddb08b06967020e507bc18d3e4498 100644 |
--- a/src/core/SkFlattenable.cpp |
+++ b/src/core/SkFlattenable.cpp |
@@ -63,64 +63,82 @@ void SkRefCntSet::decPtr(void* ptr) { |
/////////////////////////////////////////////////////////////////////////////// |
/////////////////////////////////////////////////////////////////////////////// |
-#define MAX_PAIR_COUNT 1024 |
+#define MAX_ENTRY_COUNT 1024 |
-struct Pair { |
+struct Entry { |
const char* fName; |
SkFlattenable::Factory fFactory; |
+ SkEffectType fType; |
}; |
static int gCount; |
-static Pair gPairs[MAX_PAIR_COUNT]; |
+static Entry gEntries[MAX_ENTRY_COUNT]; |
-void SkFlattenable::Register(const char name[], Factory factory) { |
+void SkFlattenable::Register(const char name[], Factory factory, SkEffectType type) { |
SkASSERT(name); |
SkASSERT(factory); |
- static bool gOnce; |
+ static bool gOnce = false; |
if (!gOnce) { |
gCount = 0; |
gOnce = true; |
} |
- SkASSERT(gCount < MAX_PAIR_COUNT); |
+ SkASSERT(gCount < MAX_ENTRY_COUNT); |
- gPairs[gCount].fName = name; |
- gPairs[gCount].fFactory = factory; |
+ gEntries[gCount].fName = name; |
+ gEntries[gCount].fFactory = factory; |
+ gEntries[gCount].fType = type; |
gCount += 1; |
} |
#ifdef SK_DEBUG |
static void report_no_entries(const char* functionName) { |
if (!gCount) { |
- SkDebugf("%s has no registered name/factory pairs." |
- " Call SkGraphics::Init() at process initialization time.", |
+ SkDebugf("%s has no registered name/factory/type entries." |
+ " Call SkFlattenable::InitializeFlattenablesIfNeeded() before using gEntries", |
functionName); |
} |
} |
#endif |
SkFlattenable::Factory SkFlattenable::NameToFactory(const char name[]) { |
+ InitializeFlattenablesIfNeeded(); |
#ifdef SK_DEBUG |
report_no_entries(__FUNCTION__); |
#endif |
- const Pair* pairs = gPairs; |
+ const Entry* entries = gEntries; |
for (int i = gCount - 1; i >= 0; --i) { |
- if (strcmp(pairs[i].fName, name) == 0) { |
- return pairs[i].fFactory; |
+ if (strcmp(entries[i].fName, name) == 0) { |
+ return entries[i].fFactory; |
} |
} |
return NULL; |
} |
+SkEffectType SkFlattenable::NameToType(const char name[]) { |
+ InitializeFlattenablesIfNeeded(); |
+#ifdef SK_DEBUG |
+ report_no_entries(__FUNCTION__); |
+#endif |
+ const Entry* entries = gEntries; |
+ for (int i = gCount - 1; i >= 0; --i) { |
+ if (strcmp(entries[i].fName, name) == 0) { |
+ return entries[i].fType; |
+ } |
+ } |
+ return kInvalid_SkEffectType; |
sugoi1
2013/10/16 15:05:32
I added the Invalid type to have something to retu
|
+} |
+ |
const char* SkFlattenable::FactoryToName(Factory fact) { |
+ InitializeFlattenablesIfNeeded(); |
#ifdef SK_DEBUG |
report_no_entries(__FUNCTION__); |
#endif |
- const Pair* pairs = gPairs; |
+ const Entry* entries = gEntries; |
for (int i = gCount - 1; i >= 0; --i) { |
- if (pairs[i].fFactory == fact) { |
- return pairs[i].fName; |
+ if (entries[i].fFactory == fact) { |
+ return entries[i].fName; |
} |
} |
return NULL; |