| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 | 8 |
| 9 #ifndef SkPDFFont_DEFINED | 9 #ifndef SkPDFFont_DEFINED |
| 10 #define SkPDFFont_DEFINED | 10 #define SkPDFFont_DEFINED |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 /** Returns the typeface represented by this class. Returns nullptr for the | 33 /** Returns the typeface represented by this class. Returns nullptr for the |
| 34 * default typeface. | 34 * default typeface. |
| 35 */ | 35 */ |
| 36 SkTypeface* typeface() const { return fTypeface.get(); } | 36 SkTypeface* typeface() const { return fTypeface.get(); } |
| 37 | 37 |
| 38 /** Returns the font type represented in this font. For Type0 fonts, | 38 /** Returns the font type represented in this font. For Type0 fonts, |
| 39 * returns the type of the decendant font. | 39 * returns the type of the decendant font. |
| 40 */ | 40 */ |
| 41 SkAdvancedTypefaceMetrics::FontType getType() const { return fFontType; } | 41 SkAdvancedTypefaceMetrics::FontType getType() const { return fFontType; } |
| 42 | 42 |
| 43 static SkAdvancedTypefaceMetrics::FontType FontType(const SkAdvancedTypeface
Metrics&); |
| 44 |
| 43 static bool IsMultiByte(SkAdvancedTypefaceMetrics::FontType type) { | 45 static bool IsMultiByte(SkAdvancedTypefaceMetrics::FontType type) { |
| 44 return type == SkAdvancedTypefaceMetrics::kType1CID_Font || | 46 return type == SkAdvancedTypefaceMetrics::kType1CID_Font || |
| 45 type == SkAdvancedTypefaceMetrics::kTrueType_Font; | 47 type == SkAdvancedTypefaceMetrics::kTrueType_Font; |
| 46 } | 48 } |
| 47 | 49 |
| 48 /** Returns true if this font encoding supports glyph IDs above 255. | 50 /** Returns true if this font encoding supports glyph IDs above 255. |
| 49 */ | 51 */ |
| 50 bool multiByteGlyphs() const { return SkPDFFont::IsMultiByte(this->getType()
); } | 52 bool multiByteGlyphs() const { return SkPDFFont::IsMultiByte(this->getType()
); } |
| 51 | 53 |
| 52 /** Return true if this font has an encoding for the passed glyph id. | 54 /** Return true if this font has an encoding for the passed glyph id. |
| 53 */ | 55 */ |
| 54 bool hasGlyph(SkGlyphID gid) { | 56 bool hasGlyph(SkGlyphID gid) { |
| 55 return (gid >= fFirstGlyphID && gid <= fLastGlyphID) || gid == 0; | 57 return (gid >= fFirstGlyphID && gid <= fLastGlyphID) || gid == 0; |
| 56 } | 58 } |
| 57 | 59 |
| 58 /** Convert the input glyph ID into the font encoding. */ | 60 /** Convert the input glyph ID into the font encoding. */ |
| 59 SkGlyphID glyphToPDFFontEncoding(SkGlyphID gid) const { | 61 SkGlyphID glyphToPDFFontEncoding(SkGlyphID gid) const { |
| 60 if (this->multiByteGlyphs() || gid == 0) { | 62 if (this->multiByteGlyphs() || gid == 0) { |
| 61 return gid; | 63 return gid; |
| 62 } | 64 } |
| 63 SkASSERT(gid >= fFirstGlyphID && gid <= fLastGlyphID); | 65 SkASSERT(gid >= fFirstGlyphID && gid <= fLastGlyphID); |
| 64 SkASSERT(fFirstGlyphID > 0); | 66 SkASSERT(fFirstGlyphID > 0); |
| 65 return gid - fFirstGlyphID + 1; | 67 return gid - fFirstGlyphID + 1; |
| 66 } | 68 } |
| 67 | 69 |
| 68 /** Count the number of glyphIDs that can be encoded with this font. | |
| 69 * glyphIDs > maxGlyphID are considered okay. */ | |
| 70 int countStretch(const SkGlyphID* glyphIDs, | |
| 71 int numGlyphs, | |
| 72 SkGlyphID maxGlyphID) const { | |
| 73 if (this->multiByteGlyphs()) { | |
| 74 return numGlyphs; | |
| 75 } | |
| 76 for (int i = 0; i < numGlyphs; i++) { | |
| 77 SkGlyphID gid = glyphIDs[i]; | |
| 78 if (gid != 0 && gid <= maxGlyphID && | |
| 79 (gid < fFirstGlyphID || gid > fLastGlyphID)) { | |
| 80 return i; | |
| 81 } | |
| 82 } | |
| 83 return numGlyphs; | |
| 84 } | |
| 85 | |
| 86 void noteGlyphUsage(SkGlyphID glyph) { | 70 void noteGlyphUsage(SkGlyphID glyph) { |
| 87 SkASSERT(this->hasGlyph(glyph)); | 71 SkASSERT(this->hasGlyph(glyph)); |
| 88 fGlyphUsage.set(glyph); | 72 fGlyphUsage.set(glyph); |
| 89 } | 73 } |
| 90 | 74 |
| 91 /** Get the font resource for the passed typeface and glyphID. The | 75 /** Get the font resource for the passed typeface and glyphID. The |
| 92 * reference count of the object is incremented and it is the caller's | 76 * reference count of the object is incremented and it is the caller's |
| 93 * responsibility to unreference it when done. This is needed to | 77 * responsibility to unreference it when done. This is needed to |
| 94 * accommodate the weak reference pattern used when the returned object | 78 * accommodate the weak reference pattern used when the returned object |
| 95 * is new and has no other references. | 79 * is new and has no other references. |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 // The glyph IDs accessible with this font. For Type1 (non CID) fonts, | 127 // The glyph IDs accessible with this font. For Type1 (non CID) fonts, |
| 144 // this will be a subset if the font has more than 255 glyphs. | 128 // this will be a subset if the font has more than 255 glyphs. |
| 145 const SkGlyphID fFirstGlyphID; | 129 const SkGlyphID fFirstGlyphID; |
| 146 const SkGlyphID fLastGlyphID; | 130 const SkGlyphID fLastGlyphID; |
| 147 const SkAdvancedTypefaceMetrics::FontType fFontType; | 131 const SkAdvancedTypefaceMetrics::FontType fFontType; |
| 148 | 132 |
| 149 typedef SkPDFDict INHERITED; | 133 typedef SkPDFDict INHERITED; |
| 150 }; | 134 }; |
| 151 | 135 |
| 152 #endif | 136 #endif |
| OLD | NEW |