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