diff options
author | 2013-06-05 14:20:25 +0000 | |
---|---|---|
committer | 2013-06-05 14:20:25 +0000 | |
commit | 4fa748d5801df66e46e6f4e98e07523d44d261a2 (patch) | |
tree | a4de9f397c7526b6e964de5ee195c24f23d47552 /src/core/SkTypeface.cpp | |
parent | 8f6ef4010f6835c5ce9ede180e50a6a58512a81e (diff) |
Fix issues related to resolving fonts based on name.
1) non-system font files are not added to the cache.
2) We cache the default fonts for quick lookup.
Review URL: https://codereview.chromium.org/16439004
git-svn-id: http://skia.googlecode.com/svn/trunk@9441 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/core/SkTypeface.cpp')
-rw-r--r-- | src/core/SkTypeface.cpp | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/core/SkTypeface.cpp b/src/core/SkTypeface.cpp index cc60ca1809..ba58c4c424 100644 --- a/src/core/SkTypeface.cpp +++ b/src/core/SkTypeface.cpp @@ -37,21 +37,26 @@ SkTypeface::~SkTypeface() { /////////////////////////////////////////////////////////////////////////////// -SkTypeface* SkTypeface::GetDefaultTypeface() { +SkTypeface* SkTypeface::GetDefaultTypeface(Style style) { // we keep a reference to this guy for all time, since if we return its // fontID, the font cache may later on ask to resolve that back into a // typeface object. - static SkTypeface* gDefaultTypeface; + static const uint32_t FONT_STYLE_COUNT = 4; + static SkTypeface* gDefaultTypefaces[FONT_STYLE_COUNT]; + SkASSERT((unsigned)style < FONT_STYLE_COUNT); - if (NULL == gDefaultTypeface) { - gDefaultTypeface = - SkFontHost::CreateTypeface(NULL, NULL, SkTypeface::kNormal); + // mask off any other bits to avoid a crash in SK_RELEASE + style = (Style)(style & 0x03); + + if (NULL == gDefaultTypefaces[style]) { + gDefaultTypefaces[style] = + SkFontHost::CreateTypeface(NULL, NULL, style); } - return gDefaultTypeface; + return gDefaultTypefaces[style]; } -SkTypeface* SkTypeface::RefDefault() { - return SkRef(GetDefaultTypeface()); +SkTypeface* SkTypeface::RefDefault(Style style) { + return SkRef(GetDefaultTypeface(style)); } uint32_t SkTypeface::UniqueID(const SkTypeface* face) { @@ -68,6 +73,9 @@ bool SkTypeface::Equal(const SkTypeface* facea, const SkTypeface* faceb) { /////////////////////////////////////////////////////////////////////////////// SkTypeface* SkTypeface::CreateFromName(const char name[], Style style) { + if (NULL == name) { + return RefDefault(style); + } return SkFontHost::CreateTypeface(NULL, name, style); } |