Home | History | Annotate | Download | only in core
      1 /*
      2  * Copyright 2011 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #ifndef SkAdvancedTypefaceMetrics_DEFINED
      9 #define SkAdvancedTypefaceMetrics_DEFINED
     10 
     11 #include "SkBitmaskEnum.h"
     12 #include "SkRect.h"
     13 #include "SkRefCnt.h"
     14 #include "SkString.h"
     15 #include "SkTDArray.h"
     16 
     17 /** \class SkAdvancedTypefaceMetrics
     18 
     19     The SkAdvancedTypefaceMetrics class is used by the PDF backend to correctly
     20     embed typefaces. This class is created and filled in with information by
     21     SkTypeface::getAdvancedTypefaceMetrics.
     22 */
     23 class SkAdvancedTypefaceMetrics : public SkRefCnt {
     24 public:
     25 
     26     SkAdvancedTypefaceMetrics()
     27         : fType(SkAdvancedTypefaceMetrics::kOther_Font)
     28         , fFlags((FontFlags)0)
     29         , fStyle((StyleFlags)0)
     30         , fItalicAngle(0)
     31         , fAscent(0)
     32         , fDescent(0)
     33         , fStemV(0)
     34         , fCapHeight(0)
     35         , fBBox(SkIRect::MakeEmpty()) {}
     36 
     37     ~SkAdvancedTypefaceMetrics() {}
     38 
     39     SkString fFontName;
     40 
     41     enum FontType : uint8_t {
     42         kType1_Font,
     43         kType1CID_Font,
     44         kCFF_Font,
     45         kTrueType_Font,
     46         kOther_Font,
     47     };
     48     // The type of the underlying font program.  This field determines which
     49     // of the following fields are valid.  If it is kOther_Font the per glyph
     50     // information will never be populated.
     51     FontType fType;
     52 
     53     enum FontFlags : uint8_t {
     54         kMultiMaster_FontFlag    = 0x01,  //!<May be true for Type1, CFF, or TrueType fonts.
     55         kNotEmbeddable_FontFlag  = 0x02,  //!<May not be embedded.
     56         kNotSubsettable_FontFlag = 0x04,  //!<May not be subset.
     57     };
     58     FontFlags fFlags;  // Global font flags.
     59 
     60     // These enum values match the values used in the PDF file format.
     61     enum StyleFlags : uint32_t {
     62         kFixedPitch_Style  = 0x00000001,
     63         kSerif_Style       = 0x00000002,
     64         kScript_Style      = 0x00000008,
     65         kItalic_Style      = 0x00000040,
     66         kAllCaps_Style     = 0x00010000,
     67         kSmallCaps_Style   = 0x00020000,
     68         kForceBold_Style   = 0x00040000
     69     };
     70     StyleFlags fStyle;        // Font style characteristics.
     71 
     72     int16_t fItalicAngle;   // Counterclockwise degrees from vertical of the
     73                             // dominant vertical stroke for an Italic face.
     74     // The following fields are all in font units.
     75     int16_t fAscent;       // Max height above baseline, not including accents.
     76     int16_t fDescent;      // Max depth below baseline (negative).
     77     int16_t fStemV;        // Thickness of dominant vertical stem.
     78     int16_t fCapHeight;    // Height (from baseline) of top of flat capitals.
     79 
     80     SkIRect fBBox;  // The bounding box of all glyphs (in font units).
     81 
     82     // The names of each glyph, only populated for postscript fonts.
     83     SkTArray<SkString> fGlyphNames;
     84 
     85     // The mapping from glyph to Unicode, only populated if
     86     // kToUnicode_PerGlyphInfo is passed to GetAdvancedTypefaceMetrics.
     87     SkTDArray<SkUnichar> fGlyphToUnicode;
     88 
     89 private:
     90     typedef SkRefCnt INHERITED;
     91 };
     92 
     93 namespace skstd {
     94 template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::FontFlags> : std::true_type {};
     95 template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::StyleFlags> : std::true_type {};
     96 }
     97 
     98 #endif
     99