Home | History | Annotate | Download | only in core
      1 
      2 /*
      3  * Copyright 2011 The Android Open Source Project
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 
     10 #include "SkAdvancedTypefaceMetrics.h"
     11 #include "SkTypeface.h"
     12 #include "SkFontHost.h"
     13 
     14 //#define TRACE_LIFECYCLE
     15 
     16 #ifdef TRACE_LIFECYCLE
     17     static int32_t gTypefaceCounter;
     18 #endif
     19 
     20 SkTypeface::SkTypeface(Style style, SkFontID fontID, bool isFixedWidth)
     21     : fUniqueID(fontID), fStyle(style), fIsFixedWidth(isFixedWidth) {
     22 #ifdef TRACE_LIFECYCLE
     23     SkDebugf("SkTypeface: create  %p fontID %d total %d\n",
     24              this, fontID, ++gTypefaceCounter);
     25 #endif
     26 }
     27 
     28 SkTypeface::~SkTypeface() {
     29 #ifdef TRACE_LIFECYCLE
     30     SkDebugf("SkTypeface: destroy %p fontID %d total %d\n",
     31              this, fUniqueID, --gTypefaceCounter);
     32 #endif
     33 }
     34 
     35 ///////////////////////////////////////////////////////////////////////////////
     36 
     37 static SkTypeface* get_default_typeface() {
     38     // we keep a reference to this guy for all time, since if we return its
     39     // fontID, the font cache may later on ask to resolve that back into a
     40     // typeface object.
     41     static SkTypeface* gDefaultTypeface;
     42 
     43     if (NULL == gDefaultTypeface) {
     44         gDefaultTypeface =
     45         SkFontHost::CreateTypeface(NULL, NULL, NULL, 0,
     46                                    SkTypeface::kNormal);
     47     }
     48     return gDefaultTypeface;
     49 }
     50 
     51 uint32_t SkTypeface::UniqueID(const SkTypeface* face) {
     52     if (NULL == face) {
     53         face = get_default_typeface();
     54     }
     55     return face->uniqueID();
     56 }
     57 
     58 bool SkTypeface::Equal(const SkTypeface* facea, const SkTypeface* faceb) {
     59     return SkTypeface::UniqueID(facea) == SkTypeface::UniqueID(faceb);
     60 }
     61 
     62 ///////////////////////////////////////////////////////////////////////////////
     63 
     64 SkTypeface* SkTypeface::CreateFromName(const char name[], Style style) {
     65     return SkFontHost::CreateTypeface(NULL, name, NULL, 0, style);
     66 }
     67 
     68 SkTypeface* SkTypeface::CreateForChars(const void* data, size_t bytelength,
     69                                        Style s) {
     70     return SkFontHost::CreateTypeface(NULL, NULL, data, bytelength, s);
     71 }
     72 
     73 SkTypeface* SkTypeface::CreateFromTypeface(const SkTypeface* family, Style s) {
     74     return SkFontHost::CreateTypeface(family, NULL, NULL, 0, s);
     75 }
     76 
     77 SkTypeface* SkTypeface::CreateFromStream(SkStream* stream) {
     78     return SkFontHost::CreateTypefaceFromStream(stream);
     79 }
     80 
     81 SkTypeface* SkTypeface::CreateFromFile(const char path[]) {
     82     return SkFontHost::CreateTypefaceFromFile(path);
     83 }
     84 
     85 ///////////////////////////////////////////////////////////////////////////////
     86 
     87 void SkTypeface::serialize(SkWStream* stream) const {
     88     SkFontHost::Serialize(this, stream);
     89 }
     90 
     91 SkTypeface* SkTypeface::Deserialize(SkStream* stream) {
     92     return SkFontHost::Deserialize(stream);
     93 }
     94 
     95 SkAdvancedTypefaceMetrics* SkTypeface::getAdvancedTypefaceMetrics(
     96         SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo,
     97         const uint32_t* glyphIDs,
     98         uint32_t glyphIDsCount) const {
     99     return SkFontHost::GetAdvancedTypefaceMetrics(fUniqueID,
    100                                                   perGlyphInfo,
    101                                                   glyphIDs,
    102                                                   glyphIDsCount);
    103 }
    104