OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2008 Google Inc. | 2 * Copyright 2008 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkFontConfigInterface.h" | 8 #include "SkFontConfigInterface.h" |
9 #include "SkFontDescriptor.h" | 9 #include "SkFontDescriptor.h" |
10 #include "SkFontHost.h" | 10 #include "SkFontHost.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 // convenience function to create the direct interface if none is installed. | 35 // convenience function to create the direct interface if none is installed. |
36 extern SkFontConfigInterface* SkCreateDirectFontConfigInterface(); | 36 extern SkFontConfigInterface* SkCreateDirectFontConfigInterface(); |
37 | 37 |
38 static SkFontConfigInterface* RefFCI() { | 38 static SkFontConfigInterface* RefFCI() { |
39 for (;;) { | 39 for (;;) { |
40 SkFontConfigInterface* fci = SkFontConfigInterface::RefGlobal(); | 40 SkFontConfigInterface* fci = SkFontConfigInterface::RefGlobal(); |
41 if (fci) { | 41 if (fci) { |
42 return fci; | 42 return fci; |
43 } | 43 } |
44 fci = SkFontConfigInterface::GetSingletonDirectInterface(); | 44 fci = SkFontConfigInterface::GetSingletonDirectInterface(); |
45 SkFontConfigInterface::SetGlobal(fci); | 45 SkFontConfigInterface::SetGlobal(fci)->unref(); |
46 } | 46 } |
47 } | 47 } |
48 | 48 |
49 class FontConfigTypeface : public SkTypeface { | 49 class FontConfigTypeface : public SkTypeface { |
50 SkFontConfigInterface::FontIdentity fIdentity; | 50 SkFontConfigInterface::FontIdentity fIdentity; |
51 SkString fFamilyName; | 51 SkString fFamilyName; |
52 SkStream* fLocalStream; | 52 SkStream* fLocalStream; |
53 | 53 |
54 public: | 54 public: |
55 FontConfigTypeface(Style style, | 55 FontConfigTypeface(Style style, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
121 } | 121 } |
122 | 122 |
123 if (familyFace) { | 123 if (familyFace) { |
124 FontConfigTypeface* fct = (FontConfigTypeface*)familyFace; | 124 FontConfigTypeface* fct = (FontConfigTypeface*)familyFace; |
125 familyName = fct->getFamilyName(); | 125 familyName = fct->getFamilyName(); |
126 } | 126 } |
127 | 127 |
128 FindRec rec(familyName, style); | 128 FindRec rec(familyName, style); |
129 SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_proc, &rec); | 129 SkTypeface* face = SkTypefaceCache::FindByProcAndRef(find_proc, &rec); |
130 if (face) { | 130 if (face) { |
| 131 SkDebugf("found cached face <%s> <%s> %p [%d]\n", familyName, ((FontConf
igTypeface*)face)->getFamilyName(), face, face->getRefCnt()); |
131 return face; | 132 return face; |
132 } | 133 } |
133 | 134 |
134 SkFontConfigInterface::FontIdentity indentity; | 135 SkFontConfigInterface::FontIdentity indentity; |
135 SkString outFamilyName; | 136 SkString outFamilyName; |
136 SkTypeface::Style outStyle; | 137 SkTypeface::Style outStyle; |
137 | 138 |
138 if (!fci->matchFamilyName(familyName, style, | 139 if (!fci->matchFamilyName(familyName, style, |
139 &indentity, &outFamilyName, &outStyle)) { | 140 &indentity, &outFamilyName, &outStyle)) { |
140 return NULL; | 141 return NULL; |
141 } | 142 } |
142 | 143 |
143 face = SkNEW_ARGS(FontConfigTypeface, (outStyle, indentity, outFamilyName)); | 144 face = SkNEW_ARGS(FontConfigTypeface, (outStyle, indentity, outFamilyName)); |
144 SkTypefaceCache::Add(face, style); | 145 SkTypefaceCache::Add(face, style); |
| 146 SkDebugf("add face <%s> <%s> %p [%d]\n", familyName, outFamilyName.c_str(),
face, face->getRefCnt()); |
145 return face; | 147 return face; |
146 } | 148 } |
147 | 149 |
148 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) { | 150 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) { |
149 if (!stream) { | 151 if (!stream) { |
150 return NULL; | 152 return NULL; |
151 } | 153 } |
152 const size_t length = stream->getLength(); | 154 const size_t length = stream->getLength(); |
153 if (!length) { | 155 if (!length) { |
154 return NULL; | 156 return NULL; |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 return stream.get() | 314 return stream.get() |
313 ? SkFontStream::GetTableData(stream, ttcIndex, | 315 ? SkFontStream::GetTableData(stream, ttcIndex, |
314 tag, offset, length, data) | 316 tag, offset, length, data) |
315 : 0; | 317 : 0; |
316 } | 318 } |
317 | 319 |
318 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc) const { | 320 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc) const { |
319 desc->setStyle(this->style()); | 321 desc->setStyle(this->style()); |
320 desc->setFamilyName(this->getFamilyName()); | 322 desc->setFamilyName(this->getFamilyName()); |
321 } | 323 } |
OLD | NEW |