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

Unified Diff: src/pdf/SkPDFFont.h

Issue 2253993002: SkPDF: cache metrics once. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-08-18 (Thursday) 11:37:09 EDT Created 4 years, 4 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 | « src/pdf/SkPDFDocument.cpp ('k') | src/pdf/SkPDFFont.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/pdf/SkPDFFont.h
diff --git a/src/pdf/SkPDFFont.h b/src/pdf/SkPDFFont.h
index 36b93ecc352ad6e0668a3568fb0a029b19cb3f27..f2f1df4c244c2102adebfcb20aeccbb90754d888 100644
--- a/src/pdf/SkPDFFont.h
+++ b/src/pdf/SkPDFFont.h
@@ -60,7 +60,6 @@ private:
SkTArray<FontGlyphSetPair> fMap;
};
-
/** \class SkPDFFont
A PDF Object class representing a font. The font may have resources
attached to it in order to embed the font. SkPDFFonts are canonicalized
@@ -76,28 +75,27 @@ public:
/** Returns the typeface represented by this class. Returns nullptr for the
* default typeface.
*/
- SkTypeface* typeface() { return fTypeface.get(); }
+ SkTypeface* typeface() const { return fTypeface.get(); }
/** Returns the font type represented in this font. For Type0 fonts,
* returns the type of the decendant font.
*/
- SkAdvancedTypefaceMetrics::FontType getType() { return fFontType; }
-
- /** Returns true if this font encoding supports glyph IDs above 255.
- */
- bool multiByteGlyphs() const { return fMultiByteGlyphs; }
+ SkAdvancedTypefaceMetrics::FontType getType() const { return fFontType; }
- /** Returns true if the machine readable licensing bits allow embedding.
- */
- bool canEmbed() const;
+ static bool IsMultiByte(SkAdvancedTypefaceMetrics::FontType type) {
+ return type == SkAdvancedTypefaceMetrics::kType1CID_Font ||
+ type == SkAdvancedTypefaceMetrics::kTrueType_Font;
+ }
- /** Returns true if the machine readable licensing bits allow subsetting.
+ /** Returns true if this font encoding supports glyph IDs above 255.
*/
- bool canSubset() const;
+ bool multiByteGlyphs() const { return SkPDFFont::IsMultiByte(this->getType()); }
/** Return true if this font has an encoding for the passed glyph id.
*/
- bool hasGlyph(uint16_t glyphID);
+ bool hasGlyph(SkGlyphID gid) {
+ return (gid >= fFirstGlyphID && gid <= fLastGlyphID) || gid == 0;
+ }
/** Convert (in place) the input glyph IDs into the font encoding. If the
* font has more glyphs than can be encoded (like a type 1 font with more
@@ -124,10 +122,11 @@ public:
*/
static SkPDFFont* GetFontResource(SkPDFCanon* canon,
SkTypeface* typeface,
- uint16_t glyphID);
+ SkGlyphID glyphID);
- static sk_sp<const SkAdvancedTypefaceMetrics> GetFontMetricsWithToUnicode(
- SkTypeface*, uint32_t* glyphs, uint32_t glyphsCount);
+ // Uses (kGlyphNames_PerGlyphInfo | kToUnicode_PerGlyphInfo).
+ static const SkAdvancedTypefaceMetrics* GetMetrics(SkTypeface* typeface,
+ SkPDFCanon* canon);
/** Subset the font based on usage set. Returns a SkPDFFont instance with
* subset.
@@ -135,18 +134,8 @@ public:
* @return nullptr if font does not support subsetting, a new instance
* of SkPDFFont otherwise.
*/
- virtual sk_sp<SkPDFObject> getFontSubset(const SkPDFGlyphSet* usage);
-
- enum Match {
- kExact_Match,
- kRelated_Match,
- kNot_Match,
- };
- static Match IsMatch(SkPDFFont* existingFont,
- uint32_t existingFontID,
- uint16_t existingGlyphID,
- uint32_t searchFontID,
- uint16_t searchGlyphID);
+ virtual sk_sp<SkPDFObject> getFontSubset(SkPDFCanon* canon,
+ const SkPDFGlyphSet* usage);
/**
* Return false iff the typeface has its NotEmbeddable flag set.
@@ -156,52 +145,29 @@ public:
protected:
// Common constructor to handle common members.
- SkPDFFont(sk_sp<const SkAdvancedTypefaceMetrics> fontInfo,
- sk_sp<SkTypeface> typeface,
- sk_sp<SkPDFDict> relatedFontDescriptor,
- SkAdvancedTypefaceMetrics::FontType fontType,
- bool multiByteGlyphs);
-
- // Accessors for subclass.
- const SkAdvancedTypefaceMetrics* getFontInfo() const { return fFontInfo.get(); }
- sk_sp<const SkAdvancedTypefaceMetrics> refFontInfo() const { return fFontInfo; }
+ SkPDFFont(sk_sp<SkTypeface> typeface,
+ SkAdvancedTypefaceMetrics::FontType fontType);
- void setFontInfo(sk_sp<const SkAdvancedTypefaceMetrics> info);
SkGlyphID firstGlyphID() const { return fFirstGlyphID; }
SkGlyphID lastGlyphID() const { return fLastGlyphID; }
- void setLastGlyphID(uint16_t glyphID);
-
- // Accessors for FontDescriptor associated with this object.
- SkPDFDict* getFontDescriptor() const { return fDescriptor.get(); }
- sk_sp<SkPDFDict> refFontDescriptor() const { return fDescriptor; }
- void setFontDescriptor(sk_sp<SkPDFDict> descriptor);
sk_sp<SkTypeface> refTypeface() const { return fTypeface; }
/** Set fFirstGlyphID and fLastGlyphID to span at most 255 glyphs,
* including the passed glyphID.
*/
- void adjustGlyphRangeForSingleByteEncoding(uint16_t glyphID);
-
- // Generate ToUnicode table according to glyph usage subset.
- // If subset is nullptr, all available glyph ids will be used.
- void populateToUnicodeTable(const SkPDFGlyphSet* subset);
-
- static bool Find(uint32_t fontID, uint16_t glyphID, int* index);
+ void adjustGlyphRangeForSingleByteEncoding(SkGlyphID glyphID);
void drop() override;
private:
sk_sp<SkTypeface> fTypeface;
- sk_sp<const SkAdvancedTypefaceMetrics> fFontInfo;
- sk_sp<SkPDFDict> fDescriptor;
// The glyph IDs accessible with this font. For Type1 (non CID) fonts,
// this will be a subset if the font has more than 255 glyphs.
SkGlyphID fFirstGlyphID;
SkGlyphID fLastGlyphID;
SkAdvancedTypefaceMetrics::FontType fFontType;
- bool fMultiByteGlyphs;
typedef SkPDFDict INHERITED;
};
« no previous file with comments | « src/pdf/SkPDFDocument.cpp ('k') | src/pdf/SkPDFFont.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698