| 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 "SkFontConfigTypeface.h" | 9 #include "SkFontConfigTypeface.h" |
| 10 #include "SkFontDescriptor.h" | 10 #include "SkFontDescriptor.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 if (face) { | 113 if (face) { |
| 114 return face; | 114 return face; |
| 115 } | 115 } |
| 116 | 116 |
| 117 face = FontConfigTypeface::Create(outStyle, indentity, outFamilyName); | 117 face = FontConfigTypeface::Create(outStyle, indentity, outFamilyName); |
| 118 SkTypefaceCache::Add(face, style); | 118 SkTypefaceCache::Add(face, style); |
| 119 // SkDebugf("add face <%s> <%s> %p [%d]\n", familyName, outFamilyName.c_str()
, face, face->getRefCnt()); | 119 // SkDebugf("add face <%s> <%s> %p [%d]\n", familyName, outFamilyName.c_str()
, face, face->getRefCnt()); |
| 120 return face; | 120 return face; |
| 121 } | 121 } |
| 122 | 122 |
| 123 #ifdef SK_FONTHOST_DOES_NOT_USE_FONTMGR | |
| 124 | |
| 125 SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace, | |
| 126 const char familyName[], | |
| 127 SkTypeface::Style style) { | |
| 128 return FontConfigTypeface::LegacyCreateTypeface(familyFace, familyName, | |
| 129 style); | |
| 130 } | |
| 131 | |
| 132 SkTypeface* SkFontHost::CreateTypefaceFromStream(SkStream* stream) { | |
| 133 if (!stream) { | |
| 134 return NULL; | |
| 135 } | |
| 136 const size_t length = stream->getLength(); | |
| 137 if (!length) { | |
| 138 return NULL; | |
| 139 } | |
| 140 if (length >= 1024 * 1024 * 1024) { | |
| 141 return NULL; // don't accept too large fonts (>= 1GB) for safety. | |
| 142 } | |
| 143 | |
| 144 // ask freetype for reported style and if it is a fixed width font | |
| 145 SkTypeface::Style style = SkTypeface::kNormal; | |
| 146 bool isFixedWidth = false; | |
| 147 if (!SkTypeface_FreeType::ScanFont(stream, 0, NULL, &style, &isFixedWidth))
{ | |
| 148 return NULL; | |
| 149 } | |
| 150 | |
| 151 SkTypeface* face = SkNEW_ARGS(FontConfigTypeface, (style, isFixedWidth, stre
am)); | |
| 152 return face; | |
| 153 } | |
| 154 | |
| 155 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { | |
| 156 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); | |
| 157 return stream.get() ? CreateTypefaceFromStream(stream) : NULL; | |
| 158 } | |
| 159 | |
| 160 #endif | |
| 161 | |
| 162 /////////////////////////////////////////////////////////////////////////////// | 123 /////////////////////////////////////////////////////////////////////////////// |
| 163 | 124 |
| 164 SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const { | 125 SkStream* FontConfigTypeface::onOpenStream(int* ttcIndex) const { |
| 165 SkStream* stream = this->getLocalStream(); | 126 SkStream* stream = this->getLocalStream(); |
| 166 if (stream) { | 127 if (stream) { |
| 167 // should have been provided by CreateFromStream() | 128 // should have been provided by CreateFromStream() |
| 168 *ttcIndex = 0; | 129 *ttcIndex = 0; |
| 169 | 130 |
| 170 SkAutoTUnref<SkStream> dupStream(stream->duplicate()); | 131 SkAutoTUnref<SkStream> dupStream(stream->duplicate()); |
| 171 if (dupStream) { | 132 if (dupStream) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 199 *ttcIndex = this->getIdentity().fTTCIndex; | 160 *ttcIndex = this->getIdentity().fTTCIndex; |
| 200 } | 161 } |
| 201 return stream; | 162 return stream; |
| 202 } | 163 } |
| 203 | 164 |
| 204 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc, | 165 void FontConfigTypeface::onGetFontDescriptor(SkFontDescriptor* desc, |
| 205 bool* isLocalStream) const { | 166 bool* isLocalStream) const { |
| 206 desc->setFamilyName(this->getFamilyName()); | 167 desc->setFamilyName(this->getFamilyName()); |
| 207 *isLocalStream = SkToBool(this->getLocalStream()); | 168 *isLocalStream = SkToBool(this->getLocalStream()); |
| 208 } | 169 } |
| OLD | NEW |