| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkFontHost.h" | 10 #include "SkFontHost.h" |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 remove_from_names(family); | 254 remove_from_names(family); |
| 255 detach_and_delete_family(family); | 255 detach_and_delete_family(family); |
| 256 } | 256 } |
| 257 } | 257 } |
| 258 | 258 |
| 259 bool isSysFont() const { return fIsSysFont; } | 259 bool isSysFont() const { return fIsSysFont; } |
| 260 FamilyRec* getFamily() const { return fFamilyRec; } | 260 FamilyRec* getFamily() const { return fFamilyRec; } |
| 261 | 261 |
| 262 virtual const char* getUniqueString() const = 0; | 262 virtual const char* getUniqueString() const = 0; |
| 263 | 263 |
| 264 protected: |
| 265 virtual void onGetFontDescriptor(SkFontDescriptor*, bool*) const SK_OVERRIDE
; |
| 266 |
| 264 private: | 267 private: |
| 265 FamilyRec* fFamilyRec; // we don't own this, just point to it | 268 FamilyRec* fFamilyRec; // we don't own this, just point to it |
| 266 bool fIsSysFont; | 269 bool fIsSysFont; |
| 267 | 270 |
| 268 typedef SkTypeface_FreeType INHERITED; | 271 typedef SkTypeface_FreeType INHERITED; |
| 269 }; | 272 }; |
| 270 | 273 |
| 271 /////////////////////////////////////////////////////////////////////////////// | 274 /////////////////////////////////////////////////////////////////////////////// |
| 272 | 275 |
| 273 /* This subclass is just a place holder for when we have no fonts available. | 276 /* This subclass is just a place holder for when we have no fonts available. |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 450 } | 453 } |
| 451 if (NULL == gDefaultNormal) { | 454 if (NULL == gDefaultNormal) { |
| 452 sk_throw(); | 455 sk_throw(); |
| 453 } | 456 } |
| 454 gFallBackTypeface = gDefaultNormal; | 457 gFallBackTypeface = gDefaultNormal; |
| 455 gDefaultFamily = find_family(gDefaultNormal); | 458 gDefaultFamily = find_family(gDefaultNormal); |
| 456 } | 459 } |
| 457 | 460 |
| 458 /////////////////////////////////////////////////////////////////////////////// | 461 /////////////////////////////////////////////////////////////////////////////// |
| 459 | 462 |
| 460 void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) { | 463 void FamilyTypeface::onGetFontDescriptor(SkFontDescriptor* desc, |
| 461 | 464 bool* isLocalStream) const { |
| 462 SkFontDescriptor descriptor; | 465 desc->setFamilyName(find_family_name(this)); |
| 463 descriptor.setFamilyName(find_family_name(face)); | 466 desc->setFontFileName(this->getUniqueString()); |
| 464 descriptor.setStyle(face->style()); | 467 *isLocalStream = !this->isSysFont(); |
| 465 descriptor.setFontFileName(((FamilyTypeface*)face)->getUniqueString()); | |
| 466 | |
| 467 descriptor.serialize(stream); | |
| 468 | |
| 469 const bool isCustomFont = !((FamilyTypeface*)face)->isSysFont(); | |
| 470 if (isCustomFont) { | |
| 471 // store the entire font in the fontData | |
| 472 SkStream* fontStream = face->openStream(NULL); | |
| 473 const uint32_t length = fontStream->getLength(); | |
| 474 | |
| 475 stream->writePackedUInt(length); | |
| 476 stream->writeStream(fontStream, length); | |
| 477 | |
| 478 fontStream->unref(); | |
| 479 } else { | |
| 480 stream->writePackedUInt(0); | |
| 481 } | |
| 482 } | |
| 483 | |
| 484 SkTypeface* SkFontHost::Deserialize(SkStream* stream) { | |
| 485 load_system_fonts(); | |
| 486 | |
| 487 SkFontDescriptor descriptor(stream); | |
| 488 const char* familyName = descriptor.getFamilyName(); | |
| 489 const SkTypeface::Style style = descriptor.getStyle(); | |
| 490 | |
| 491 const uint32_t customFontDataLength = stream->readPackedUInt(); | |
| 492 if (customFontDataLength > 0) { | |
| 493 | |
| 494 // generate a new stream to store the custom typeface | |
| 495 SkMemoryStream* fontStream = new SkMemoryStream(customFontDataLength - 1
); | |
| 496 stream->read((void*)fontStream->getMemoryBase(), customFontDataLength -
1); | |
| 497 | |
| 498 SkTypeface* face = CreateTypefaceFromStream(fontStream); | |
| 499 | |
| 500 fontStream->unref(); | |
| 501 return face; | |
| 502 } | |
| 503 | |
| 504 return SkFontHost::CreateTypeface(NULL, familyName, style); | |
| 505 } | 468 } |
| 506 | 469 |
| 507 /////////////////////////////////////////////////////////////////////////////// | 470 /////////////////////////////////////////////////////////////////////////////// |
| 508 | 471 |
| 509 SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace, | 472 SkTypeface* SkFontHost::CreateTypeface(const SkTypeface* familyFace, |
| 510 const char familyName[], | 473 const char familyName[], |
| 511 SkTypeface::Style style) { | 474 SkTypeface::Style style) { |
| 512 load_system_fonts(); | 475 load_system_fonts(); |
| 513 | 476 |
| 514 SkAutoMutexAcquire ac(gFamilyMutex); | 477 SkAutoMutexAcquire ac(gFamilyMutex); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 551 return SkNEW_ARGS(StreamTypeface, (style, false, NULL, stream, isFixedWi
dth)); | 514 return SkNEW_ARGS(StreamTypeface, (style, false, NULL, stream, isFixedWi
dth)); |
| 552 } else { | 515 } else { |
| 553 return NULL; | 516 return NULL; |
| 554 } | 517 } |
| 555 } | 518 } |
| 556 | 519 |
| 557 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { | 520 SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { |
| 558 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); | 521 SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); |
| 559 return stream.get() ? CreateTypefaceFromStream(stream) : NULL; | 522 return stream.get() ? CreateTypefaceFromStream(stream) : NULL; |
| 560 } | 523 } |
| OLD | NEW |