diff options
Diffstat (limited to 'src/core/SkGraphics.cpp')
-rw-r--r-- | src/core/SkGraphics.cpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/core/SkGraphics.cpp b/src/core/SkGraphics.cpp index a69ac370fd..8ae49446c6 100644 --- a/src/core/SkGraphics.cpp +++ b/src/core/SkGraphics.cpp @@ -157,3 +157,50 @@ void SkGraphics::PurgeFontCache() { SkGlyphCache::SetCacheUsed(0); } +/////////////////////////////////////////////////////////////////////////////// + +static const char kFontCacheLimitStr[] = "font-cache-limit"; +static const size_t kFontCacheLimitLen = sizeof(kFontCacheLimitStr) - 1; + +static const struct { + const char* fStr; + size_t fLen; + size_t (*fFunc)(size_t); +} gFlags[] = { + {kFontCacheLimitStr, kFontCacheLimitLen, SkGraphics::SetFontCacheLimit} +}; + +/* flags are of the form param; or param=value; */ +void SkGraphics::SetFlags(const char* flags) { + if (!flags) { + return; + } + const char* nextSemi; + do { + size_t len = strlen(flags); + const char* paramEnd = flags + len; + const char* nextEqual = strchr(flags, '='); + if (nextEqual && paramEnd > nextEqual) { + paramEnd = nextEqual; + } + nextSemi = strchr(flags, ';'); + if (nextSemi && paramEnd > nextSemi) { + paramEnd = nextSemi; + } + size_t paramLen = paramEnd - flags; + for (int i = 0; i < (int)SK_ARRAY_COUNT(gFlags); ++i) { + if (paramLen != gFlags[i].fLen) { + continue; + } + if (strncmp(flags, gFlags[i].fStr, paramLen) == 0) { + size_t val = 0; + if (nextEqual) { + val = (size_t) atoi(nextEqual + 1); + } + (gFlags[i].fFunc)(val); + break; + } + } + flags = nextSemi + 1; + } while (nextSemi); +} |