| Index: src/pdf/SkPDFFont.h
|
| diff --git a/src/pdf/SkPDFFont.h b/src/pdf/SkPDFFont.h
|
| index abf164c0137b503fd09827fecce39eb16cab69f8..9f33819ed84fc501014e0cb0b15ae6e39ffd4faa 100644
|
| --- a/src/pdf/SkPDFFont.h
|
| +++ b/src/pdf/SkPDFFont.h
|
| @@ -55,23 +55,37 @@ public:
|
| 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
|
| - * than 255 glyphs) this method only converts up to the first out of range
|
| - * glyph ID.
|
| - * @param glyphIDs The input text as glyph IDs.
|
| - * @param numGlyphs The number of input glyphs.
|
| - * @return Returns the number of glyphs consumed.
|
| - */
|
| - int glyphsToPDFFontEncoding(SkGlyphID* glyphIDs, int numGlyphs) const;
|
| - /**
|
| - * Like above, but does not modify glyphIDs array.
|
| - */
|
| - int glyphsToPDFFontEncodingCount(const SkGlyphID* glyphIDs,
|
| - int numGlyphs) const;
|
| + /** Convert the input glyph ID into the font encoding. */
|
| + SkGlyphID glyphToPDFFontEncoding(SkGlyphID gid) const {
|
| + if (this->multiByteGlyphs() || gid == 0) {
|
| + return gid;
|
| + }
|
| + SkASSERT(gid >= fFirstGlyphID && gid <= fLastGlyphID);
|
| + SkASSERT(fFirstGlyphID > 0);
|
| + return gid - fFirstGlyphID + 1;
|
| + }
|
|
|
| - void noteGlyphUsage(const SkGlyphID* glyphs, int count) {
|
| - fGlyphUsage.setAll(glyphs, count);
|
| + /** Count the number of glyphIDs that can be encoded with this font.
|
| + * glyphIDs > maxGlyphID are considered okay. */
|
| + int countStretch(const SkGlyphID* glyphIDs,
|
| + int numGlyphs,
|
| + SkGlyphID maxGlyphID) const {
|
| + if (this->multiByteGlyphs()) {
|
| + return numGlyphs;
|
| + }
|
| + for (int i = 0; i < numGlyphs; i++) {
|
| + SkGlyphID gid = glyphIDs[i];
|
| + if (gid != 0 && gid <= maxGlyphID &&
|
| + (gid < fFirstGlyphID || gid > fLastGlyphID)) {
|
| + return i;
|
| + }
|
| + }
|
| + return numGlyphs;
|
| + }
|
| +
|
| + void noteGlyphUsage(SkGlyphID glyph) {
|
| + SkASSERT(this->hasGlyph(glyph));
|
| + fGlyphUsage.set(glyph);
|
| }
|
|
|
| /** Get the font resource for the passed typeface and glyphID. The
|
| @@ -79,14 +93,18 @@ public:
|
| * responsibility to unreference it when done. This is needed to
|
| * accommodate the weak reference pattern used when the returned object
|
| * is new and has no other references.
|
| - * @param typeface The typeface to find.
|
| + * @param typeface The typeface to find, not nullptr.
|
| * @param glyphID Specify which section of a large font is of interest.
|
| */
|
| static SkPDFFont* GetFontResource(SkPDFCanon* canon,
|
| SkTypeface* typeface,
|
| SkGlyphID glyphID);
|
|
|
| - // Uses (kGlyphNames_PerGlyphInfo | kToUnicode_PerGlyphInfo).
|
| + /** Uses (kGlyphNames_PerGlyphInfo | kToUnicode_PerGlyphInfo) to get
|
| + * SkAdvancedTypefaceMetrics, and caches the result.
|
| + * @param typeface can not be nullptr.
|
| + * @return nullptr only when typeface is bad.
|
| + */
|
| static const SkAdvancedTypefaceMetrics* GetMetrics(SkTypeface* typeface,
|
| SkPDFCanon* canon);
|
|
|
| @@ -97,7 +115,7 @@ public:
|
|
|
| /**
|
| * Return false iff the typeface has its NotEmbeddable flag set.
|
| - * If typeface is NULL, the default typeface is checked.
|
| + * typeface is not nullptr
|
| */
|
| static bool CanEmbedTypeface(SkTypeface*, SkPDFCanon*);
|
|
|
| @@ -124,9 +142,9 @@ private:
|
|
|
| // 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;
|
| + const SkGlyphID fFirstGlyphID;
|
| + const SkGlyphID fLastGlyphID;
|
| + const SkAdvancedTypefaceMetrics::FontType fFontType;
|
|
|
| typedef SkPDFDict INHERITED;
|
| };
|
|
|