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 "include/core/SkRect.h"
12 #include "include/core/SkString.h"
13 #include "include/private/SkBitmaskEnum.h"
14 
15 /** \class SkAdvancedTypefaceMetrics
16 
17     The SkAdvancedTypefaceMetrics class is used by the PDF backend to correctly
18     embed typefaces. This class is created and filled in with information by
19     SkTypeface::getAdvancedMetrics.
20 */
21 struct SkAdvancedTypefaceMetrics {
22     // The PostScript name of the font. See `FontName` and `BaseFont` in PDF standard.
23     SkString fPostScriptName;
24     SkString fFontName;
25 
26     // These enum values match the values used in the PDF file format.
27     enum StyleFlags : uint32_t {
28         kFixedPitch_Style  = 0x00000001,
29         kSerif_Style       = 0x00000002,
30         kScript_Style      = 0x00000008,
31         kItalic_Style      = 0x00000040,
32         kAllCaps_Style     = 0x00010000,
33         kSmallCaps_Style   = 0x00020000,
34         kForceBold_Style   = 0x00040000
35     };
36     StyleFlags fStyle = (StyleFlags)0;        // Font style characteristics.
37 
38     enum FontType : uint8_t {
39         kType1_Font,
40         kType1CID_Font,
41         kCFF_Font,
42         kTrueType_Font,
43         kOther_Font,
44     };
45     // The type of the underlying font program.  This field determines which
46     // of the following fields are valid.  If it is kOther_Font the per glyph
47     // information will never be populated.
48     FontType fType = kOther_Font;
49 
50     enum FontFlags : uint8_t {
51         kMultiMaster_FontFlag    = 0x01,  //!<May be true for Type1, CFF, or TrueType fonts.
52         kNotEmbeddable_FontFlag  = 0x02,  //!<May not be embedded.
53         kNotSubsettable_FontFlag = 0x04,  //!<May not be subset.
54     };
55     FontFlags fFlags = (FontFlags)0;  // Global font flags.
56 
57     int16_t fItalicAngle = 0;  // Counterclockwise degrees from vertical of the
58                                // dominant vertical stroke for an Italic face.
59     // The following fields are all in font units.
60     int16_t fAscent = 0;       // Max height above baseline, not including accents.
61     int16_t fDescent = 0;      // Max depth below baseline (negative).
62     int16_t fStemV = 0;        // Thickness of dominant vertical stem.
63     int16_t fCapHeight = 0;    // Height (from baseline) of top of flat capitals.
64 
65     SkIRect fBBox = {0, 0, 0, 0};  // The bounding box of all glyphs (in font units).
66 };
67 
68 namespace skstd {
69 template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::FontFlags> : std::true_type {};
70 template <> struct is_bitmask_enum<SkAdvancedTypefaceMetrics::StyleFlags> : std::true_type {};
71 }
72 
73 #endif
74