static void perform_font_subsetting( const SkTDArray<const SkPDFDevice*>& pageDevices, SkPDFSubstituteMap* substituteMap) { SkASSERT(substituteMap); SkPDFGlyphSetMap usage; for (int i = 0; i < pageDevices.count(); ++i) { usage.merge(pageDevices[i]->getFontGlyphUsage()); } SkPDFGlyphSetMap::F2BIter iterator(usage); const SkPDFGlyphSetMap::FontGlyphSetPair* entry = iterator.next(); while (entry) { SkAutoTUnref<SkPDFFont> subsetFont( entry->fFont->getFontSubset(entry->fGlyphSet)); if (subsetFont) { substituteMap->setSubstitute(entry->fFont, subsetFont.get()); } entry = iterator.next(); } }
static void perform_font_subsetting(SkPDFCatalog* catalog, const SkTDArray<SkPDFPage*>& pages, SkTDArray<SkPDFObject*>* substitutes) { SkASSERT(catalog); SkASSERT(substitutes); SkPDFGlyphSetMap usage; for (int i = 0; i < pages.count(); ++i) { usage.merge(pages[i]->getFontGlyphUsage()); } SkPDFGlyphSetMap::F2BIter iterator(usage); const SkPDFGlyphSetMap::FontGlyphSetPair* entry = iterator.next(); while (entry) { SkPDFFont* subsetFont = entry->fFont->getFontSubset(entry->fGlyphSet); if (subsetFont) { catalog->setSubstitute(entry->fFont, subsetFont); substitutes->push(subsetFont); // Transfer ownership to substitutes } entry = iterator.next(); } }