1 2/* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10#ifndef SkPDFFontImpl_DEFINED 11#define SkPDFFontImpl_DEFINED 12 13#include "SkPDFFont.h" 14 15class SkPDFType0Font final : public SkPDFFont { 16public: 17 virtual ~SkPDFType0Font(); 18 bool multiByteGlyphs() const override { return true; } 19 SkPDFFont* getFontSubset(const SkPDFGlyphSet* usage) override; 20#ifdef SK_DEBUG 21 void emitObject(SkWStream*, 22 const SkPDFObjNumMap&, 23 const SkPDFSubstituteMap&) const override; 24#endif 25 26private: 27 friend class SkPDFFont; // to access the constructor 28#ifdef SK_DEBUG 29 bool fPopulated; 30 typedef SkPDFDict INHERITED; 31#endif 32 33 SkPDFType0Font(const SkAdvancedTypefaceMetrics* info, 34 SkTypeface* typeface); 35 36 bool populate(const SkPDFGlyphSet* subset); 37}; 38 39class SkPDFCIDFont final : public SkPDFFont { 40public: 41 virtual ~SkPDFCIDFont(); 42 virtual bool multiByteGlyphs() const { return true; } 43 44private: 45 friend class SkPDFType0Font; // to access the constructor 46 47 SkPDFCIDFont(const SkAdvancedTypefaceMetrics* info, 48 SkTypeface* typeface, 49 const SkPDFGlyphSet* subset); 50 51 bool populate(const SkPDFGlyphSet* subset); 52 bool addFontDescriptor(int16_t defaultWidth, 53 const SkTDArray<uint32_t>* subset); 54}; 55 56class SkPDFType1Font final : public SkPDFFont { 57public: 58 virtual ~SkPDFType1Font(); 59 virtual bool multiByteGlyphs() const { return false; } 60 61private: 62 friend class SkPDFFont; // to access the constructor 63 64 SkPDFType1Font(const SkAdvancedTypefaceMetrics* info, 65 SkTypeface* typeface, 66 uint16_t glyphID, 67 SkPDFDict* relatedFontDescriptor); 68 69 bool populate(int16_t glyphID); 70 bool addFontDescriptor(int16_t defaultWidth); 71 void addWidthInfoFromRange(int16_t defaultWidth, 72 const SkAdvancedTypefaceMetrics::WidthRange* widthRangeEntry); 73}; 74 75class SkPDFType3Font final : public SkPDFFont { 76public: 77 virtual ~SkPDFType3Font(); 78 virtual bool multiByteGlyphs() const { return false; } 79 80private: 81 friend class SkPDFFont; // to access the constructor 82 83 SkPDFType3Font(const SkAdvancedTypefaceMetrics* info, 84 SkTypeface* typeface, 85 uint16_t glyphID); 86 87 bool populate(uint16_t glyphID); 88}; 89 90#endif 91