| /* |
| * Copyright 2011 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #ifndef SkAdvancedTypefaceMetrics_DEFINED |
| #define SkAdvancedTypefaceMetrics_DEFINED |
| |
| #include "SkBitmaskEnum.h" |
| #include "SkRect.h" |
| #include "SkRefCnt.h" |
| #include "SkString.h" |
| #include "SkTDArray.h" |
| |
| /** \class SkAdvancedTypefaceMetrics |
| |
| The SkAdvancedTypefaceMetrics class is used by the PDF backend to correctly |
| embed typefaces. This class is created and filled in with information by |
| SkTypeface::getAdvancedMetrics. |
| */ |
| struct SkAdvancedTypefaceMetrics { |
| SkAdvancedTypefaceMetrics() {} |
| SkAdvancedTypefaceMetrics(const SkAdvancedTypefaceMetrics&) = delete; |
| SkAdvancedTypefaceMetrics& operator=(const SkAdvancedTypefaceMetrics&) = delete; |
| ~SkAdvancedTypefaceMetrics() {} |
| |
| SkString fFontName; |
| |
| // These enum values match the values used in the PDF file format. |
| enum StyleFlags : uint32_t { |
| kFixedPitch_Style = 0x00000001, |
| kSerif_Style = 0x00000002, |
| kScript_Style = 0x00000008, |
| kItalic_Style = 0x00000040, |
| kAllCaps_Style = 0x00010000, |
| kSmallCaps_Style = 0x00020000, |
| kForceBold_Style = 0x00040000 |
| }; |
| StyleFlags fStyle = (StyleFlags)0; // Font style characteristics. |
| |
| enum FontType : uint8_t { |
| kType1_Font, |
| kType1CID_Font, |
| kCFF_Font, |
| kTrueType_Font, |
| kOther_Font, |
| }; |
| // The type of the underlying font program. This field determines which |
| // of the following fields are valid. If it is kOther_Font the per glyph |
| // information will never be populated. |
| FontType fType = kOther_Font; |
| |
| enum FontFlags : uint8_t { |
| kMultiMaster_FontFlag = 0x01, //!<May be true for Type1, CFF, or TrueType fonts. |
| kNotEmbeddable_FontFlag = 0x02, //!<May not be embedded. |
| kNotSubsettable_FontFlag = 0x04, //!<May not be subset. |
| }; |
| FontFlags fFlags = (FontFlags)0; // Global font flags. |
| |
| int16_t fItalicAngle = 0; // Counterclockwise degrees from vertical of the |
| // dominant vertical stroke for an Italic face. |
| // The following fields are all in font units. |
| int16_t fAscent = 0; // Max height above baseline, not including accents. |
| int16_t fDescent = 0; // Max depth below baseline (negative). |
| int16_t fStemV = 0; // Thickness of dominant vertical stem. |
| int16_t fCapHeight = 0; // Height (from baseline) of top of flat capitals. |
| |
| SkIRect fBBox = {0, 0, 0, 0}; // The bounding box of all glyphs (in font units). |
| |
| // The names of each glyph, only populated for postscript fonts. |
| SkTArray<SkString> fGlyphNames; |
| |
| // The mapping from glyph to Unicode; array indices are glyph ids. |
| SkTDArray<SkUnichar> fGlyphToUnicode; |
| }; |
| |
| namespace skstd { |
| template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::FontFlags> : std::true_type {}; |
| template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::StyleFlags> : std::true_type {}; |
| } |
| |
| #endif |