Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(136)

Side by Side Diff: include/core/SkAdvancedTypefaceMetrics.h

Issue 1129283003: Make SkAdvancedTypefaceMetrics private. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gyp/core.gypi ('k') | include/core/SkTypeface.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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 SkAdvancedTypefaceMetrics_DEFINED
11 #define SkAdvancedTypefaceMetrics_DEFINED
12
13 #include "SkRect.h"
14 #include "SkRefCnt.h"
15 #include "SkString.h"
16 #include "SkTDArray.h"
17 #include "SkTemplates.h"
18
19 /** \class SkAdvancedTypefaceMetrics
20
21 The SkAdvancedTypefaceMetrics class is used by the PDF backend to correctly
22 embed typefaces. This class is created and filled in with information by
23 SkTypeface::getAdvancedTypefaceMetrics.
24 */
25
26 class SkAdvancedTypefaceMetrics : public SkRefCnt {
27 public:
28 SK_DECLARE_INST_COUNT(SkAdvancedTypefaceMetrics)
29
30 SkString fFontName;
31
32 enum FontType {
33 kType1_Font,
34 kType1CID_Font,
35 kCFF_Font,
36 kTrueType_Font,
37 kOther_Font,
38 };
39 // The type of the underlying font program. This field determines which
40 // of the following fields are valid. If it is kOther_Font the per glyph
41 // information will never be populated.
42 FontType fType;
43
44 enum FontFlags {
45 kEmpty_FontFlag = 0x0, //!<No flags set
46 kMultiMaster_FontFlag = 0x1, //!<May be true for Type1 or CFF fonts.
47 kNotEmbeddable_FontFlag = 0x2, //!<May not be embedded.
48 kNotSubsettable_FontFlag = 0x4, //!<May not be subset.
49 };
50 // Global font flags.
51 FontFlags fFlags;
52
53 uint16_t fLastGlyphID; // The last valid glyph ID in the font.
54 uint16_t fEmSize; // The size of the em box (defines font units).
55
56 // These enum values match the values used in the PDF file format.
57 enum StyleFlags {
58 kFixedPitch_Style = 0x00001,
59 kSerif_Style = 0x00002,
60 kScript_Style = 0x00008,
61 kItalic_Style = 0x00040,
62 kAllCaps_Style = 0x10000,
63 kSmallCaps_Style = 0x20000,
64 kForceBold_Style = 0x40000
65 };
66 uint16_t fStyle; // Font style characteristics.
67 int16_t fItalicAngle; // Counterclockwise degrees from vertical of the
68 // dominant vertical stroke for an Italic face.
69 // The following fields are all in font units.
70 int16_t fAscent; // Max height above baseline, not including accents.
71 int16_t fDescent; // Max depth below baseline (negative).
72 int16_t fStemV; // Thickness of dominant vertical stem.
73 int16_t fCapHeight; // Height (from baseline) of top of flat capitals.
74
75 SkIRect fBBox; // The bounding box of all glyphs (in font units).
76
77 // The type of advance data wanted.
78 enum PerGlyphInfo {
79 kNo_PerGlyphInfo = 0x0, // Don't populate any per glyph info.
80 kHAdvance_PerGlyphInfo = 0x1, // Populate horizontal advance data.
81 kVAdvance_PerGlyphInfo = 0x2, // Populate vertical advance data.
82 kGlyphNames_PerGlyphInfo = 0x4, // Populate glyph names (Type 1 only).
83 kToUnicode_PerGlyphInfo = 0x8 // Populate ToUnicode table, ignored
84 // for Type 1 fonts
85 };
86
87 template <typename Data>
88 struct AdvanceMetric {
89 enum MetricType {
90 kDefault, // Default advance: fAdvance.count = 1
91 kRange, // Advances for a range: fAdvance.count = fEndID-fStartID
92 kRun // fStartID-fEndID have same advance: fAdvance.count = 1
93 };
94 MetricType fType;
95 uint16_t fStartId;
96 uint16_t fEndId;
97 SkTDArray<Data> fAdvance;
98 SkAutoTDelete<AdvanceMetric<Data> > fNext;
99 };
100
101 struct VerticalMetric {
102 int16_t fVerticalAdvance;
103 int16_t fOriginXDisp; // Horiz. displacement of the secondary origin.
104 int16_t fOriginYDisp; // Vert. displacement of the secondary origin.
105 };
106 typedef AdvanceMetric<int16_t> WidthRange;
107 typedef AdvanceMetric<VerticalMetric> VerticalAdvanceRange;
108
109 // This is indexed by glyph id.
110 SkAutoTDelete<WidthRange> fGlyphWidths;
111 // Only used for Vertical CID fonts.
112 SkAutoTDelete<VerticalAdvanceRange> fVerticalMetrics;
113
114 // The names of each glyph, only populated for postscript fonts.
115 SkAutoTDelete<SkAutoTArray<SkString> > fGlyphNames;
116
117 // The mapping from glyph to Unicode, only populated if
118 // kToUnicode_PerGlyphInfo is passed to GetAdvancedTypefaceMetrics.
119 SkTDArray<SkUnichar> fGlyphToUnicode;
120
121 private:
122 typedef SkRefCnt INHERITED;
123 };
124
125 namespace skia_advanced_typeface_metrics_utils {
126
127 template <typename Data>
128 void resetRange(SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* range,
129 int startId);
130
131 template <typename Data>
132 SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* appendRange(
133 SkAutoTDelete<SkAdvancedTypefaceMetrics::AdvanceMetric<Data> >* nextSlot ,
134 int startId);
135
136 template <typename Data>
137 void finishRange(
138 SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* range,
139 int endId,
140 typename SkAdvancedTypefaceMetrics::AdvanceMetric<Data>::MetricType
141 type);
142
143 /** Retrieve advance data for glyphs. Used by the PDF backend. It calls
144 underlying platform dependent API getAdvance to acquire the data.
145 @param num_glyphs Total number of glyphs in the given font.
146 @param glyphIDs For per-glyph info, specify subset of the font by
147 giving glyph ids. Each integer represents a glyph
148 id. Passing NULL means all glyphs in the font.
149 @param glyphIDsCount Number of elements in subsetGlyphIds. Ignored if
150 glyphIDs is NULL.
151 */
152 template <typename Data, typename FontHandle>
153 SkAdvancedTypefaceMetrics::AdvanceMetric<Data>* getAdvanceData(
154 FontHandle fontHandle,
155 int num_glyphs,
156 const uint32_t* glyphIDs,
157 uint32_t glyphIDsCount,
158 bool (*getAdvance)(FontHandle fontHandle, int gId, Data* data));
159
160 } // namespace skia_advanced_typeface_metrics_utils
161
162 #endif
OLDNEW
« no previous file with comments | « gyp/core.gypi ('k') | include/core/SkTypeface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698