| Index: src/core/SkFontHost.cpp
 | 
| ===================================================================
 | 
| --- src/core/SkFontHost.cpp	(revision 12201)
 | 
| +++ src/core/SkFontHost.cpp	(working copy)
 | 
| @@ -6,6 +6,7 @@
 | 
|   */
 | 
|  
 | 
|  #include "SkFontLCDConfig.h"
 | 
| +#include "SkOnce.h"
 | 
|  
 | 
|  static SkFontLCDConfig::LCDOrientation gLCDOrientation = SkFontLCDConfig::kHorizontal_LCDOrientation;
 | 
|  static SkFontLCDConfig::LCDOrder gLCDOrder = SkFontLCDConfig::kRGB_LCDOrder;
 | 
| @@ -190,22 +191,19 @@
 | 
|      return this->onLegacyCreateTypeface(familyName, styleBits);
 | 
|  }
 | 
|  
 | 
| +void set_up_default(SkFontMgr** singleton) {
 | 
| +  *singleton = SkFontMgr::Factory();
 | 
| +}
 | 
| +
 | 
|  SkFontMgr* SkFontMgr::RefDefault() {
 | 
| -    static SkFontMgr* gFM;
 | 
| -    if (NULL == gFM) {
 | 
| -        gFM = SkFontMgr::Factory();
 | 
| -        // we never want to return NULL
 | 
| -        if (NULL == gFM) {
 | 
| -            gFM = SkNEW(SkEmptyFontMgr);
 | 
| -        }
 | 
| -    }
 | 
| +    static SkFontMgr* gFM = NULL;
 | 
| +    SK_DECLARE_STATIC_ONCE(once);
 | 
| +    SkOnce(&once, set_up_default, &gFM);
 | 
|      return SkRef(gFM);
 | 
|  }
 | 
|  
 | 
|  //////////////////////////////////////////////////////////////////////////
 | 
|  
 | 
| -#ifdef SK_FONTHOST_USES_FONTMGR
 | 
| -
 | 
|  #if 0
 | 
|  static SkFontStyle TypefaceStyleBitsToFontStyle(SkTypeface::Style styleBits) {
 | 
|      SkFontStyle::Weight weight = (styleBits & SkTypeface::kBold) ?
 | 
| @@ -222,10 +220,17 @@
 | 
|  SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace,
 | 
|                                         const char familyName[],
 | 
|                                         SkTypeface::Style style) {
 | 
| +    SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
 | 
|      if (familyFace) {
 | 
| -        return familyFace->refMatchingStyle(style);
 | 
| +        bool bold = style & SkTypeface::kBold;
 | 
| +        bool italic = style & SkTypeface::kItalic;
 | 
| +        SkFontStyle newStyle = SkFontStyle(bold ? SkFontStyle::kBold_Weight
 | 
| +                                                : SkFontStyle::kNormal_Weight,
 | 
| +                                           SkFontStyle::kNormal_Width,
 | 
| +                                           italic ? SkFontStyle::kItalic_Slant
 | 
| +                                                  : SkFontStyle::kUpright_Slant);
 | 
| +        return fm->matchFaceStyle(familyFace, newStyle);
 | 
|      } else {
 | 
| -        SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
 | 
|          return fm->legacyCreateTypeface(familyName, style);
 | 
|      }
 | 
|  }
 | 
| @@ -239,5 +244,3 @@
 | 
|      SkAutoTUnref<SkFontMgr> fm(SkFontMgr::RefDefault());
 | 
|      return fm->createFromStream(stream);
 | 
|  }
 | 
| -
 | 
| -#endif
 | 
| 
 |