|
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
|
2 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
3 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
5 |
|
6 #ifndef nsFont_h___ |
|
7 #define nsFont_h___ |
|
8 |
|
9 #include <stdint.h> // for uint8_t, uint16_t |
|
10 #include <sys/types.h> // for int16_t |
|
11 #include "gfxCore.h" // for NS_GFX |
|
12 #include "gfxFontFeatures.h" |
|
13 #include "nsAutoPtr.h" // for nsRefPtr |
|
14 #include "nsCoord.h" // for nscoord |
|
15 #include "nsStringFwd.h" // for nsSubstring |
|
16 #include "nsString.h" // for nsString |
|
17 #include "nsTArray.h" // for nsTArray |
|
18 |
|
19 struct gfxFontStyle; |
|
20 |
|
21 // XXX we need a method to enumerate all of the possible fonts on the |
|
22 // system across family, weight, style, size, etc. But not here! |
|
23 |
|
24 // Enumerator callback function. Return false to stop |
|
25 typedef bool (*nsFontFamilyEnumFunc)(const nsString& aFamily, bool aGeneric, void *aData); |
|
26 |
|
27 // IDs for generic fonts |
|
28 // NOTE: 0, 1 are reserved for the special IDs of the default variable |
|
29 // and fixed fonts in the presentation context, see nsPresContext.h |
|
30 const uint8_t kGenericFont_NONE = 0x00; |
|
31 // Special |
|
32 const uint8_t kGenericFont_moz_variable = 0x00; // for the default variable width font |
|
33 const uint8_t kGenericFont_moz_fixed = 0x01; // our special "use the user's fixed font" |
|
34 // CSS |
|
35 const uint8_t kGenericFont_serif = 0x02; |
|
36 const uint8_t kGenericFont_sans_serif = 0x04; |
|
37 const uint8_t kGenericFont_monospace = 0x08; |
|
38 const uint8_t kGenericFont_cursive = 0x10; |
|
39 const uint8_t kGenericFont_fantasy = 0x20; |
|
40 |
|
41 // Font structure. |
|
42 struct NS_GFX nsFont { |
|
43 // The family name of the font |
|
44 nsString name; |
|
45 |
|
46 // The style of font (normal, italic, oblique; see gfxFontConstants.h) |
|
47 uint8_t style; |
|
48 |
|
49 // Force this font to not be considered a 'generic' font, even if |
|
50 // the name is the same as a CSS generic font family. |
|
51 bool systemFont; |
|
52 |
|
53 // The variant of the font (normal, small-caps) |
|
54 uint8_t variant; |
|
55 |
|
56 // Variant subproperties |
|
57 // (currently -moz- versions, will replace variant above eventually) |
|
58 uint8_t variantCaps; |
|
59 uint8_t variantNumeric; |
|
60 uint8_t variantPosition; |
|
61 |
|
62 uint16_t variantLigatures; |
|
63 uint16_t variantEastAsian; |
|
64 |
|
65 // Some font-variant-alternates property values require |
|
66 // font-specific settings defined via @font-feature-values rules. |
|
67 // These are resolved *after* font matching occurs. |
|
68 |
|
69 // -- bitmask for both enumerated and functional propvals |
|
70 uint16_t variantAlternates; |
|
71 |
|
72 // The decorations on the font (underline, overline, |
|
73 // line-through). The decorations can be binary or'd together. |
|
74 uint8_t decorations; |
|
75 |
|
76 // Smoothing - controls subpixel-antialiasing (currently OSX only) |
|
77 uint8_t smoothing; |
|
78 |
|
79 // The weight of the font; see gfxFontConstants.h. |
|
80 uint16_t weight; |
|
81 |
|
82 // The stretch of the font (the sum of various NS_FONT_STRETCH_* |
|
83 // constants; see gfxFontConstants.h). |
|
84 int16_t stretch; |
|
85 |
|
86 // Kerning |
|
87 uint8_t kerning; |
|
88 |
|
89 // Synthesis setting, controls use of fake bolding/italics |
|
90 uint8_t synthesis; |
|
91 |
|
92 // The logical size of the font, in nscoord units |
|
93 nscoord size; |
|
94 |
|
95 // The aspect-value (ie., the ratio actualsize:actualxheight) that any |
|
96 // actual physical font created from this font structure must have when |
|
97 // rendering or measuring a string. A value of 0 means no adjustment |
|
98 // needs to be done. |
|
99 float sizeAdjust; |
|
100 |
|
101 // -- list of value tags for font-specific alternate features |
|
102 nsTArray<gfxAlternateValue> alternateValues; |
|
103 |
|
104 // -- object used to look these up once the font is matched |
|
105 nsRefPtr<gfxFontFeatureValueSet> featureValueLookup; |
|
106 |
|
107 // Font features from CSS font-feature-settings |
|
108 nsTArray<gfxFontFeature> fontFeatureSettings; |
|
109 |
|
110 // Language system tag, to override document language; |
|
111 // this is an OpenType "language system" tag represented as a 32-bit integer |
|
112 // (see http://www.microsoft.com/typography/otspec/languagetags.htm). |
|
113 nsString languageOverride; |
|
114 |
|
115 // Initialize the font struct with an ASCII name |
|
116 nsFont(const char* aName, uint8_t aStyle, uint8_t aVariant, |
|
117 uint16_t aWeight, int16_t aStretch, uint8_t aDecoration, |
|
118 nscoord aSize); |
|
119 |
|
120 // Initialize the font struct with a (potentially) unicode name |
|
121 nsFont(const nsSubstring& aName, uint8_t aStyle, uint8_t aVariant, |
|
122 uint16_t aWeight, int16_t aStretch, uint8_t aDecoration, |
|
123 nscoord aSize); |
|
124 |
|
125 // Make a copy of the given font |
|
126 nsFont(const nsFont& aFont); |
|
127 |
|
128 nsFont(); |
|
129 ~nsFont(); |
|
130 |
|
131 bool operator==(const nsFont& aOther) const { |
|
132 return Equals(aOther); |
|
133 } |
|
134 |
|
135 bool Equals(const nsFont& aOther) const ; |
|
136 // Compare ignoring differences in 'variant' and 'decoration' |
|
137 bool BaseEquals(const nsFont& aOther) const; |
|
138 |
|
139 nsFont& operator=(const nsFont& aOther); |
|
140 |
|
141 void CopyAlternates(const nsFont& aOther); |
|
142 |
|
143 // Add featureSettings into style |
|
144 void AddFontFeaturesToStyle(gfxFontStyle *aStyle) const; |
|
145 |
|
146 // Utility method to interpret name string |
|
147 // enumerates all families specified by this font only |
|
148 // returns true if completed, false if stopped |
|
149 // enclosing quotes will be removed, and whitespace compressed (as needed) |
|
150 bool EnumerateFamilies(nsFontFamilyEnumFunc aFunc, void* aData) const; |
|
151 void GetFirstFamily(nsString& aFamily) const; |
|
152 |
|
153 // Utility method to return the ID of a generic font |
|
154 static void GetGenericID(const nsString& aGeneric, uint8_t* aID); |
|
155 }; |
|
156 |
|
157 #define NS_FONT_VARIANT_NORMAL 0 |
|
158 #define NS_FONT_VARIANT_SMALL_CAPS 1 |
|
159 |
|
160 #define NS_FONT_DECORATION_NONE 0x0 |
|
161 #define NS_FONT_DECORATION_UNDERLINE 0x1 |
|
162 #define NS_FONT_DECORATION_OVERLINE 0x2 |
|
163 #define NS_FONT_DECORATION_LINE_THROUGH 0x4 |
|
164 |
|
165 #endif /* nsFont_h___ */ |