SkTypeface* SkFontHost::Deserialize(SkStream* stream) { { SkAutoMutexAcquire ac(gFamilyMutex); load_system_fonts(); } SkFontDescriptor descriptor(stream); const char* familyName = descriptor.getFamilyName(); const char* typefaceName = descriptor.getFontFileName(); const SkTypeface::Style style = descriptor.getStyle(); const uint32_t customFontDataLength = stream->readPackedUInt(); if (customFontDataLength > 0) { // generate a new stream to store the custom typeface SkMemoryStream* fontStream = new SkMemoryStream(customFontDataLength - 1); stream->read((void*)fontStream->getMemoryBase(), customFontDataLength - 1); SkTypeface* face = CreateTypefaceFromStream(fontStream); fontStream->unref(); return face; } return SkFontHost::CreateTypeface(NULL, familyName, style); }
SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { SkTypeface* face = NULL; SkFILEStream* stream = SkNEW_ARGS(SkFILEStream, (path)); if (stream->isValid()) { face = CreateTypefaceFromStream(stream); } stream->unref(); return face; }
SkTypeface* SkFontHost::Deserialize(SkStream* stream) { load_system_fonts(); // read the length of the custom font from the stream uint32_t len = stream->readU32(); // generate a new stream to store the custom typeface SkMemoryStream* fontStream = new SkMemoryStream(len); stream->read((void*)fontStream->getMemoryBase(), len); SkTypeface* face = CreateTypefaceFromStream(fontStream); fontStream->unref(); return face; // sk_throw(); // return NULL; }
SkTypeface* SkFontHost::Deserialize(SkStream* stream) { { SkAutoMutexAcquire ac(gFamilyHeadAndNameListMutex); load_system_fonts(); } SkFontDescriptor descriptor(stream); const char* familyName = descriptor.getFamilyName(); const char* fontFileName = descriptor.getFontFileName(); const SkTypeface::Style style = descriptor.getStyle(); const uint32_t customFontDataLength = stream->readPackedUInt(); if (customFontDataLength > 0) { // generate a new stream to store the custom typeface SkMemoryStream* fontStream = new SkMemoryStream(customFontDataLength - 1); stream->read((void*)fontStream->getMemoryBase(), customFontDataLength - 1); SkTypeface* face = CreateTypefaceFromStream(fontStream); fontStream->unref(); return face; } if (NULL != fontFileName && 0 != *fontFileName) { const FontInitRec* rec = gSystemFonts; for (size_t i = 0; i < gNumSystemFonts; i++) { if (strcmp(rec[i].fFileName, fontFileName) == 0) { // backup until we hit the fNames for (int j = i; j >= 0; --j) { if (rec[j].fNames != NULL) { return SkFontHost::CreateTypeface(NULL, rec[j].fNames[0], style); } } } } } return SkFontHost::CreateTypeface(NULL, familyName, style); }
SkTypeface* SkFontHost::CreateTypefaceFromFile(const char path[]) { SkAutoTUnref<SkStream> stream(SkStream::NewFromFile(path)); return stream.get() ? CreateTypefaceFromStream(stream) : NULL; }