11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/*
31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc.
41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *
51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be
61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file.
71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */
81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifndef SkPDFFontImpl_DEFINED
111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define SkPDFFontImpl_DEFINED
121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "SkPDFFont.h"
141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkPDFType0Font : public SkPDFFont {
161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic:
171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual ~SkPDFType0Font();
181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual bool multiByteGlyphs() const { return true; }
191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SK_API virtual SkPDFFont* getFontSubset(const SkPDFGlyphSet* usage);
201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifdef SK_DEBUG
211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual void emitObject(SkWStream* stream, SkPDFCatalog* catalog,
221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                            bool indirect);
231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate:
261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    friend class SkPDFFont;  // to access the constructor
271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#ifdef SK_DEBUG
281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool fPopulated;
291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    typedef SkPDFDict INHERITED;
301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkPDFType0Font(SkAdvancedTypefaceMetrics* info, SkTypeface* typeface);
331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool populate(const SkPDFGlyphSet* subset);
351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger};
361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkPDFCIDFont : public SkPDFFont {
381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic:
391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual ~SkPDFCIDFont();
401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual bool multiByteGlyphs() const { return true; }
411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate:
431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    friend class SkPDFType0Font;  // to access the constructor
441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkPDFCIDFont(SkAdvancedTypefaceMetrics* info, SkTypeface* typeface,
461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                 const SkPDFGlyphSet* subset);
471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool populate(const SkPDFGlyphSet* subset);
491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool addFontDescriptor(int16_t defaultWidth,
501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                           const SkTDArray<uint32_t>* subset);
511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger};
521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkPDFType1Font : public SkPDFFont {
541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic:
551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual ~SkPDFType1Font();
561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual bool multiByteGlyphs() const { return false; }
571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate:
591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    friend class SkPDFFont;  // to access the constructor
601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkPDFType1Font(SkAdvancedTypefaceMetrics* info, SkTypeface* typeface,
621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                   uint16_t glyphID, SkPDFDict* relatedFontDescriptor);
631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool populate(int16_t glyphID);
651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool addFontDescriptor(int16_t defaultWidth);
661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    void addWidthInfoFromRange(int16_t defaultWidth,
671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger        const SkAdvancedTypefaceMetrics::WidthRange* widthRangeEntry);
681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger};
691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerclass SkPDFType3Font : public SkPDFFont {
711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerpublic:
721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual ~SkPDFType3Font();
731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    virtual bool multiByteGlyphs() const { return false; }
741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerprivate:
761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    friend class SkPDFFont;  // to access the constructor
771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    SkPDFType3Font(SkAdvancedTypefaceMetrics* info, SkTypeface* typeface,
791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger                   uint16_t glyphID, SkPDFDict* relatedFontDescriptor);
801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger    bool populate(int16_t glyphID);
821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger};
831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger
841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif
85