Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Unified Diff: trunk/src/pdf/SkPDFFont.cpp

Issue 12739006: move most of SkFontHost to private (preceeding making it all private) (Closed) Base URL: http://skia.googlecode.com/svn/
Patch Set: Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « trunk/src/pdf/SkPDFDevice.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trunk/src/pdf/SkPDFFont.cpp
===================================================================
--- trunk/src/pdf/SkPDFFont.cpp (revision 8138)
+++ trunk/src/pdf/SkPDFFont.cpp (working copy)
@@ -31,6 +31,31 @@
#include SK_SFNTLY_SUBSETTER
#endif
+static SkTypeface* refOrDefault(SkTypeface* face) {
+ return face ? SkRef(face) : SkTypeface::RefDefault();
+}
+
+/**
+ * Always resolves to a non-null typeface, either the value passed to its
+ * constructor, or the default typeface if null was passed.
+ */
+class SkAutoResolveDefaultTypeface {
+public:
+ SkAutoResolveDefaultTypeface() : fFace(SkTypeface::RefDefault()) {}
+
+ SkAutoResolveDefaultTypeface(SkTypeface* face)
+ : fFace(refOrDefault(face)) {}
+
+ ~SkAutoResolveDefaultTypeface() { fFace->unref(); }
+
+ SkTypeface* get() const { return fFace; }
+ SkTypeface* operator->() { return fFace; }
bungeman-skia 2013/03/13 21:33:25 Doe we want operator-> and operator SkTypeface* ?
+ operator SkTypeface*() { return fFace; }
+
+private:
+ SkTypeface* fFace;
+};
+
// PDF's notion of symbolic vs non-symbolic is related to the character set, not
// symbols vs. characters. Rarely is a font the right character set to call it
// non-symbolic, so always call it symbolic. (PDF 1.4 spec, section 5.7.1)
@@ -549,8 +574,8 @@
const SkTypeface* typeface,
const SkTDArray<uint32_t>& subset,
SkPDFStream** fontStream) {
- SkAutoTUnref<SkStream> fontData(
- SkFontHost::OpenStream(SkTypeface::UniqueID(typeface)));
+ int ttcIndex;
+ SkAutoTUnref<SkStream> fontData(typeface->openStream(&ttcIndex));
int fontSize = fontData->getLength();
@@ -714,7 +739,7 @@
SkDEBUGCODE(int indexFound;)
SkASSERT(index == -1 ||
- (Find(SkTypeface::UniqueID(fTypeface.get()),
+ (Find(fTypeface->uniqueID(),
fFirstGlyphID,
&indexFound) &&
index == indexFound));
@@ -763,7 +788,11 @@
// static
SkPDFFont* SkPDFFont::GetFontResource(SkTypeface* typeface, uint16_t glyphID) {
SkAutoMutexAcquire lock(CanonicalFontsMutex());
- const uint32_t fontID = SkTypeface::UniqueID(typeface);
+
+ SkAutoResolveDefaultTypeface autoResolve(typeface);
+ typeface = autoResolve.get();
+
+ const uint32_t fontID = typeface->uniqueID();
int relatedFontIndex;
if (Find(fontID, glyphID, &relatedFontIndex)) {
CanonicalFonts()[relatedFontIndex].fFont->ref();
@@ -800,7 +829,7 @@
info, SkAdvancedTypefaceMetrics::kHAdvance_PerGlyphInfo);
#endif
fontMetrics.reset(
- SkFontHost::GetAdvancedTypefaceMetrics(fontID, info, NULL, 0));
+ typeface->getAdvancedTypefaceMetrics(info, NULL, 0));
#if defined (SK_SFNTLY_SUBSETTER)
if (fontMetrics.get() &&
fontMetrics->fType != SkAdvancedTypefaceMetrics::kTrueType_Font) {
@@ -808,7 +837,7 @@
info = SkTBitOr<SkAdvancedTypefaceMetrics::PerGlyphInfo>(
info, SkAdvancedTypefaceMetrics::kHAdvance_PerGlyphInfo);
fontMetrics.reset(
- SkFontHost::GetAdvancedTypefaceMetrics(fontID, info, NULL, 0));
+ typeface->getAdvancedTypefaceMetrics(info, NULL, 0));
}
#endif
}
@@ -855,7 +884,7 @@
SkPDFFont::SkPDFFont(SkAdvancedTypefaceMetrics* info, SkTypeface* typeface,
SkPDFDict* relatedFontDescriptor)
: SkPDFDict("Font"),
- fTypeface(typeface),
+ fTypeface(refOrDefault(typeface)),
fFirstGlyphID(1),
fLastGlyphID(info ? info->fLastGlyphID : 0),
fFontInfo(info),
@@ -1099,8 +1128,8 @@
}
case SkAdvancedTypefaceMetrics::kCFF_Font:
case SkAdvancedTypefaceMetrics::kType1CID_Font: {
- SkAutoTUnref<SkStream> fontData(
- SkFontHost::OpenStream(SkTypeface::UniqueID(typeface())));
+ int ttcIndex;
+ SkAutoTUnref<SkStream> fontData(typeface()->openStream(&ttcIndex));
SkAutoTUnref<SkPDFStream> fontStream(
new SkPDFStream(fontData.get()));
addResource(fontStream.get());
@@ -1139,11 +1168,7 @@
uint32_t* glyphs = (glyphIDs.count() == 1) ? NULL : glyphIDs.begin();
uint32_t glyphsCount = glyphs ? glyphIDs.count() : 0;
SkAutoTUnref<SkAdvancedTypefaceMetrics> fontMetrics(
- SkFontHost::GetAdvancedTypefaceMetrics(
- SkTypeface::UniqueID(typeface()),
- info,
- glyphs,
- glyphsCount));
+ typeface()->getAdvancedTypefaceMetrics(info, glyphs, glyphsCount));
setFontInfo(fontMetrics.get());
addFontDescriptor(0, &glyphIDs);
} else {
@@ -1229,11 +1254,11 @@
SkAutoTUnref<SkPDFDict> descriptor(new SkPDFDict("FontDescriptor"));
setFontDescriptor(descriptor.get());
+ int ttcIndex;
size_t header SK_INIT_TO_AVOID_WARNING;
size_t data SK_INIT_TO_AVOID_WARNING;
size_t trailer SK_INIT_TO_AVOID_WARNING;
- SkAutoTUnref<SkStream> rawFontData(
- SkFontHost::OpenStream(SkTypeface::UniqueID(typeface())));
+ SkAutoTUnref<SkStream> rawFontData(typeface()->openStream(&ttcIndex));
SkStream* fontData = handleType1Stream(rawFontData.get(), &header, &data,
&trailer);
if (fontData == NULL) {
« no previous file with comments | « trunk/src/pdf/SkPDFDevice.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698