• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #include "SkAdvancedTypefaceMetrics.h"
18 #include "SkTypeface.h"
19 #include "SkFontHost.h"
20 
21 //#define TRACE_LIFECYCLE
22 
23 #ifdef TRACE_LIFECYCLE
24     static int32_t gTypefaceCounter;
25 #endif
26 
SkTypeface(Style style,SkFontID fontID,bool isFixedWidth)27 SkTypeface::SkTypeface(Style style, SkFontID fontID, bool isFixedWidth)
28     : fUniqueID(fontID), fStyle(style), fIsFixedWidth(isFixedWidth) {
29 #ifdef TRACE_LIFECYCLE
30     SkDebugf("SkTypeface: create  %p fontID %d total %d\n",
31              this, fontID, ++gTypefaceCounter);
32 #endif
33 }
34 
~SkTypeface()35 SkTypeface::~SkTypeface() {
36 #ifdef TRACE_LIFECYCLE
37     SkDebugf("SkTypeface: destroy %p fontID %d total %d\n",
38              this, fUniqueID, --gTypefaceCounter);
39 #endif
40 }
41 
42 ///////////////////////////////////////////////////////////////////////////////
43 
UniqueID(const SkTypeface * face)44 uint32_t SkTypeface::UniqueID(const SkTypeface* face) {
45     if (face) {
46         return face->uniqueID();
47     }
48 
49     // We cache the default fontID, assuming it will not change during a boot
50     // The initial value of 0 is fine, since a typeface's uniqueID should not
51     // be zero.
52     static uint32_t gDefaultFontID;
53 
54     if (0 == gDefaultFontID) {
55         SkTypeface* defaultFace =
56                 SkFontHost::CreateTypeface(NULL, NULL, NULL, 0,
57                                            SkTypeface::kNormal);
58         SkASSERT(defaultFace);
59         gDefaultFontID = defaultFace->uniqueID();
60         defaultFace->unref();
61     }
62     return gDefaultFontID;
63 }
64 
Equal(const SkTypeface * facea,const SkTypeface * faceb)65 bool SkTypeface::Equal(const SkTypeface* facea, const SkTypeface* faceb) {
66     return SkTypeface::UniqueID(facea) == SkTypeface::UniqueID(faceb);
67 }
68 
69 ///////////////////////////////////////////////////////////////////////////////
70 
CreateFromName(const char name[],Style style)71 SkTypeface* SkTypeface::CreateFromName(const char name[], Style style) {
72     return SkFontHost::CreateTypeface(NULL, name, NULL, 0, style);
73 }
74 
CreateForChars(const void * data,size_t bytelength,Style s)75 SkTypeface* SkTypeface::CreateForChars(const void* data, size_t bytelength,
76                                        Style s) {
77     return SkFontHost::CreateTypeface(NULL, NULL, data, bytelength, s);
78 }
79 
CreateFromTypeface(const SkTypeface * family,Style s)80 SkTypeface* SkTypeface::CreateFromTypeface(const SkTypeface* family, Style s) {
81     return SkFontHost::CreateTypeface(family, NULL, NULL, 0, s);
82 }
83 
CreateFromStream(SkStream * stream)84 SkTypeface* SkTypeface::CreateFromStream(SkStream* stream) {
85     return SkFontHost::CreateTypefaceFromStream(stream);
86 }
87 
CreateFromFile(const char path[])88 SkTypeface* SkTypeface::CreateFromFile(const char path[]) {
89     return SkFontHost::CreateTypefaceFromFile(path);
90 }
91 
92 ///////////////////////////////////////////////////////////////////////////////
93 
serialize(SkWStream * stream) const94 void SkTypeface::serialize(SkWStream* stream) const {
95     SkFontHost::Serialize(this, stream);
96 }
97 
Deserialize(SkStream * stream)98 SkTypeface* SkTypeface::Deserialize(SkStream* stream) {
99     return SkFontHost::Deserialize(stream);
100 }
101 
getAdvancedTypefaceMetrics(SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo) const102 SkAdvancedTypefaceMetrics* SkTypeface::getAdvancedTypefaceMetrics(
103         SkAdvancedTypefaceMetrics::PerGlyphInfo perGlyphInfo) const {
104     return SkFontHost::GetAdvancedTypefaceMetrics(fUniqueID, perGlyphInfo);
105 }
106