OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2006 The Android Open Source Project | 2 * Copyright 2006 The Android Open Source Project |
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 "SkFontHost.h" | 8 #include "SkFontHost.h" |
9 #include "SkFontHost_FreeType_common.h" | 9 #include "SkFontHost_FreeType_common.h" |
10 #include "SkFontDescriptor.h" | 10 #include "SkFontDescriptor.h" |
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 *ttcIndex = this->getIndex(); | 132 *ttcIndex = this->getIndex(); |
133 if (fStream.get()) { | 133 if (fStream.get()) { |
134 return fStream->duplicate(); | 134 return fStream->duplicate(); |
135 } else { | 135 } else { |
136 return SkStream::NewFromFile(fPath.c_str()); | 136 return SkStream::NewFromFile(fPath.c_str()); |
137 } | 137 } |
138 } | 138 } |
139 | 139 |
140 private: | 140 private: |
141 SkString fPath; | 141 SkString fPath; |
142 const SkAutoTUnref<SkStreamAsset> fStream; | 142 const SkAutoTDelete<SkStreamAsset> fStream; |
143 | 143 |
144 typedef SkTypeface_Custom INHERITED; | 144 typedef SkTypeface_Custom INHERITED; |
145 }; | 145 }; |
146 | 146 |
147 /////////////////////////////////////////////////////////////////////////////// | 147 /////////////////////////////////////////////////////////////////////////////// |
148 | 148 |
149 /** | 149 /** |
150 * SkFontStyleSet_Custom | 150 * SkFontStyleSet_Custom |
151 * | 151 * |
152 * This class is used by SkFontMgr_Custom to hold SkTypeface_Custom families. | 152 * This class is used by SkFontMgr_Custom to hold SkTypeface_Custom families. |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
276 for (int j = 0; j < fFamilies[i]->fStyles.count(); ++j) { | 276 for (int j = 0; j < fFamilies[i]->fStyles.count(); ++j) { |
277 if (fFamilies[i]->fStyles[j] == familyMember) { | 277 if (fFamilies[i]->fStyles[j] == familyMember) { |
278 return fFamilies[i]->matchStyle(fontStyle); | 278 return fFamilies[i]->matchStyle(fontStyle); |
279 } | 279 } |
280 } | 280 } |
281 } | 281 } |
282 return NULL; | 282 return NULL; |
283 } | 283 } |
284 | 284 |
285 SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE { | 285 SkTypeface* onCreateFromData(SkData* data, int ttcIndex) const SK_OVERRIDE { |
286 SkAutoTUnref<SkStream> stream(new SkMemoryStream(data)); | 286 return this->createFromStream(new SkMemoryStream(data), ttcIndex); |
287 return this->createFromStream(stream, ttcIndex); | |
288 } | 287 } |
289 | 288 |
290 SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVER
RIDE { | 289 SkTypeface* onCreateFromStream(SkStream* stream, int ttcIndex) const SK_OVER
RIDE { |
291 if (NULL == stream || stream->getLength() <= 0) { | 290 if (NULL == stream || stream->getLength() <= 0) { |
292 SkDELETE(stream); | 291 SkDELETE(stream); |
293 return NULL; | 292 return NULL; |
294 } | 293 } |
295 | 294 |
296 bool isFixedPitch; | 295 bool isFixedPitch; |
297 SkFontStyle style; | 296 SkFontStyle style; |
298 SkString name; | 297 SkString name; |
299 if (fScanner.scanFont(stream, ttcIndex, &name, &style, &isFixedPitch)) { | 298 if (fScanner.scanFont(stream, ttcIndex, &name, &style, &isFixedPitch)) { |
300 return SkNEW_ARGS(SkTypeface_Stream, (style, isFixedPitch, false, na
me, | 299 return SkNEW_ARGS(SkTypeface_Stream, (style, isFixedPitch, false, na
me, |
301 stream, ttcIndex)); | 300 stream, ttcIndex)); |
302 } else { | 301 } else { |
303 return NULL; | 302 return NULL; |
304 } | 303 } |
305 } | 304 } |
306 | 305 |
307 SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERR
IDE { | 306 SkTypeface* onCreateFromFile(const char path[], int ttcIndex) const SK_OVERR
IDE { |
308 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); | 307 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(path)); |
309 return stream.get() ? this->createFromStream(stream, ttcIndex) : NULL; | 308 return stream.get() ? this->createFromStream(stream.detach(), ttcIndex)
: NULL; |
310 } | 309 } |
311 | 310 |
312 virtual SkTypeface* onLegacyCreateTypeface(const char familyName[], | 311 virtual SkTypeface* onLegacyCreateTypeface(const char familyName[], |
313 unsigned styleBits) const SK_OVER
RIDE | 312 unsigned styleBits) const SK_OVER
RIDE |
314 { | 313 { |
315 SkTypeface::Style oldStyle = (SkTypeface::Style)styleBits; | 314 SkTypeface::Style oldStyle = (SkTypeface::Style)styleBits; |
316 SkFontStyle style = SkFontStyle(oldStyle & SkTypeface::kBold | 315 SkFontStyle style = SkFontStyle(oldStyle & SkTypeface::kBold |
317 ? SkFontStyle::kBold_Weight | 316 ? SkFontStyle::kBold_Weight |
318 : SkFontStyle::kNormal_Weight, | 317 : SkFontStyle::kNormal_Weight, |
319 SkFontStyle::kNormal_Width, | 318 SkFontStyle::kNormal_Width, |
(...skipping 14 matching lines...) Expand all Loading... |
334 } | 333 } |
335 | 334 |
336 private: | 335 private: |
337 | 336 |
338 void load_directory_fonts(const SkString& directory, const char* suffix) { | 337 void load_directory_fonts(const SkString& directory, const char* suffix) { |
339 SkOSFile::Iter iter(directory.c_str(), suffix); | 338 SkOSFile::Iter iter(directory.c_str(), suffix); |
340 SkString name; | 339 SkString name; |
341 | 340 |
342 while (iter.next(&name, false)) { | 341 while (iter.next(&name, false)) { |
343 SkString filename(SkOSPath::Join(directory.c_str(), name.c_str())); | 342 SkString filename(SkOSPath::Join(directory.c_str(), name.c_str())); |
344 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(filename.c_str()
)); | 343 SkAutoTDelete<SkStream> stream(SkStream::NewFromFile(filename.c_str(
))); |
345 if (!stream.get()) { | 344 if (!stream.get()) { |
346 SkDebugf("---- failed to open <%s>\n", filename.c_str()); | 345 SkDebugf("---- failed to open <%s>\n", filename.c_str()); |
347 continue; | 346 continue; |
348 } | 347 } |
349 | 348 |
350 int numFaces; | 349 int numFaces; |
351 if (!fScanner.recognizedFont(stream, &numFaces)) { | 350 if (!fScanner.recognizedFont(stream, &numFaces)) { |
352 SkDebugf("---- failed to open <%s> as a font\n", filename.c_str(
)); | 351 SkDebugf("---- failed to open <%s> as a font\n", filename.c_str(
)); |
353 continue; | 352 continue; |
354 } | 353 } |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 | 430 |
432 SkTArray<SkAutoTUnref<SkFontStyleSet_Custom>, true> fFamilies; | 431 SkTArray<SkAutoTUnref<SkFontStyleSet_Custom>, true> fFamilies; |
433 SkFontStyleSet_Custom* gDefaultFamily; | 432 SkFontStyleSet_Custom* gDefaultFamily; |
434 SkTypeface* gDefaultNormal; | 433 SkTypeface* gDefaultNormal; |
435 SkTypeface_FreeType::Scanner fScanner; | 434 SkTypeface_FreeType::Scanner fScanner; |
436 }; | 435 }; |
437 | 436 |
438 SkFontMgr* SkFontMgr::Factory() { | 437 SkFontMgr* SkFontMgr::Factory() { |
439 return new SkFontMgr_Custom(SK_FONT_FILE_PREFIX); | 438 return new SkFontMgr_Custom(SK_FONT_FILE_PREFIX); |
440 } | 439 } |
OLD | NEW |