void SkFontHost::Serialize(const SkTypeface* face, SkWStream* stream) { SkFontDescriptor descriptor; { SkAutoMutexAcquire ac(gFamilyHeadAndNameListMutex); descriptor.setFamilyName(find_family_name(face)); descriptor.setStyle(face->style()); descriptor.setFontFileName(((FamilyTypeface*)face)->getUniqueString()); } descriptor.serialize(stream); const bool isCustomFont = !((FamilyTypeface*)face)->isSysFont(); if (isCustomFont) { // store the entire font in the fontData SkStream* fontStream = ((FamilyTypeface*)face)->openStream(); const uint32_t length = fontStream->getLength(); stream->writePackedUInt(length); stream->writeStream(fontStream, length); fontStream->unref(); } else { stream->writePackedUInt(0); } }
void SkTypeface::serialize(SkWStream* wstream) const { if (gSerializeTypefaceDelegate) { (*gSerializeTypefaceDelegate)(this, wstream); return; } bool isLocal = false; SkFontDescriptor desc; this->onGetFontDescriptor(&desc, &isLocal); // Embed font data if it's a local font. if (isLocal && !desc.hasFontData()) { desc.setFontData(this->onMakeFontData()); } desc.serialize(wstream); }