1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! Mappings for the content of dwrite_1.h
7 use shared::basetsd::{INT16, INT32, UINT16, UINT32, UINT8};
8 use shared::minwindef::{BOOL, FLOAT};
9 use um::dcommon::DWRITE_MEASURING_MODE;
10 use um::dwrite::{
11     DWRITE_GLYPH_OFFSET, DWRITE_MATRIX, DWRITE_PIXEL_GEOMETRY, DWRITE_RENDERING_MODE,
12     DWRITE_SCRIPT_ANALYSIS, DWRITE_SHAPING_GLYPH_PROPERTIES, DWRITE_TEXT_RANGE,
13     IDWriteBitmapRenderTarget, IDWriteBitmapRenderTargetVtbl, IDWriteFactory, IDWriteFactoryVtbl,
14     IDWriteFont, IDWriteFontCollection, IDWriteFontFace, IDWriteFontFaceVtbl, IDWriteFontVtbl,
15     IDWriteRenderingParams, IDWriteRenderingParamsVtbl, IDWriteTextAnalysisSink,
16     IDWriteTextAnalysisSinkVtbl, IDWriteTextAnalysisSource, IDWriteTextAnalysisSourceVtbl,
17     IDWriteTextAnalyzer, IDWriteTextAnalyzerVtbl, IDWriteTextLayout, IDWriteTextLayoutVtbl,
18 };
19 use um::winnt::{HRESULT, WCHAR};
20 ENUM!{enum DWRITE_PANOSE_FAMILY {
21     DWRITE_PANOSE_FAMILY_ANY = 0x0, // 0
22     DWRITE_PANOSE_FAMILY_NO_FIT = 0x1, // 1
23     DWRITE_PANOSE_FAMILY_TEXT_DISPLAY = 0x2, // 2
24     DWRITE_PANOSE_FAMILY_SCRIPT = 0x3, // 3
25     DWRITE_PANOSE_FAMILY_DECORATIVE = 0x4, // 4
26     DWRITE_PANOSE_FAMILY_SYMBOL = 0x5, // 5
27     DWRITE_PANOSE_FAMILY_PICTORIAL = 0x5, // 5
28 }}
29 ENUM!{enum DWRITE_PANOSE_SERIF_STYLE {
30     DWRITE_PANOSE_SERIF_STYLE_ANY = 0x0, // 0
31     DWRITE_PANOSE_SERIF_STYLE_NO_FIT = 0x1, // 1
32     DWRITE_PANOSE_SERIF_STYLE_COVE = 0x2, // 2
33     DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE = 0x3, // 3
34     DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE = 0x4, // 4
35     DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE = 0x5, // 5
36     DWRITE_PANOSE_SERIF_STYLE_SQUARE = 0x6, // 6
37     DWRITE_PANOSE_SERIF_STYLE_THIN = 0x7, // 7
38     DWRITE_PANOSE_SERIF_STYLE_OVAL = 0x8, // 8
39     DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED = 0x9, // 9
40     DWRITE_PANOSE_SERIF_STYLE_TRIANGLE = 0xA, // 10
41     DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS = 0xB, // 11
42     DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS = 0xC, // 12
43     DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS = 0xD, // 13
44     DWRITE_PANOSE_SERIF_STYLE_FLARED = 0xE, // 14
45     DWRITE_PANOSE_SERIF_STYLE_ROUNDED = 0xF, // 15
46     DWRITE_PANOSE_SERIF_STYLE_SCRIPT = 0x10, // 16
47     DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = 0xD, // 13
48     DWRITE_PANOSE_SERIF_STYLE_BONE = 0x8, // 8
49 }}
50 ENUM!{enum DWRITE_PANOSE_WEIGHT {
51     DWRITE_PANOSE_WEIGHT_ANY = 0x0, // 0
52     DWRITE_PANOSE_WEIGHT_NO_FIT = 0x1, // 1
53     DWRITE_PANOSE_WEIGHT_VERY_LIGHT = 0x2, // 2
54     DWRITE_PANOSE_WEIGHT_LIGHT = 0x3, // 3
55     DWRITE_PANOSE_WEIGHT_THIN = 0x4, // 4
56     DWRITE_PANOSE_WEIGHT_BOOK = 0x5, // 5
57     DWRITE_PANOSE_WEIGHT_MEDIUM = 0x6, // 6
58     DWRITE_PANOSE_WEIGHT_DEMI = 0x7, // 7
59     DWRITE_PANOSE_WEIGHT_BOLD = 0x8, // 8
60     DWRITE_PANOSE_WEIGHT_HEAVY = 0x9, // 9
61     DWRITE_PANOSE_WEIGHT_BLACK = 0xA, // 10
62     DWRITE_PANOSE_WEIGHT_EXTRA_BLACK = 0xB, // 11
63     DWRITE_PANOSE_WEIGHT_NORD = 0xB, // 11
64 }}
65 ENUM!{enum DWRITE_PANOSE_PROPORTION {
66     DWRITE_PANOSE_PROPORTION_ANY = 0x0, // 0
67     DWRITE_PANOSE_PROPORTION_NO_FIT = 0x1, // 1
68     DWRITE_PANOSE_PROPORTION_OLD_STYLE = 0x2, // 2
69     DWRITE_PANOSE_PROPORTION_MODERN = 0x3, // 3
70     DWRITE_PANOSE_PROPORTION_EVEN_WIDTH = 0x4, // 4
71     DWRITE_PANOSE_PROPORTION_EXPANDED = 0x5, // 5
72     DWRITE_PANOSE_PROPORTION_CONDENSED = 0x6, // 6
73     DWRITE_PANOSE_PROPORTION_VERY_EXPANDED = 0x7, // 7
74     DWRITE_PANOSE_PROPORTION_VERY_CONDENSED = 0x8, // 8
75     DWRITE_PANOSE_PROPORTION_MONOSPACED = 0x9, // 9
76 }}
77 ENUM!{enum DWRITE_PANOSE_CONTRAST {
78     DWRITE_PANOSE_CONTRAST_ANY = 0x0, // 0
79     DWRITE_PANOSE_CONTRAST_NO_FIT = 0x1, // 1
80     DWRITE_PANOSE_CONTRAST_NONE = 0x2, // 2
81     DWRITE_PANOSE_CONTRAST_VERY_LOW = 0x3, // 3
82     DWRITE_PANOSE_CONTRAST_LOW = 0x4, // 4
83     DWRITE_PANOSE_CONTRAST_MEDIUM_LOW = 0x5, // 5
84     DWRITE_PANOSE_CONTRAST_MEDIUM = 0x6, // 6
85     DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH = 0x7, // 7
86     DWRITE_PANOSE_CONTRAST_HIGH = 0x8, // 8
87     DWRITE_PANOSE_CONTRAST_VERY_HIGH = 0x9, // 9
88     DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW = 0xA, // 10
89     DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM = 0xB, // 11
90     DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH = 0xC, // 12
91     DWRITE_PANOSE_CONTRAST_BROKEN = 0xD, // 13
92 }}
93 ENUM!{enum DWRITE_PANOSE_STROKE_VARIATION {
94     DWRITE_PANOSE_STROKE_VARIATION_ANY = 0x0, // 0
95     DWRITE_PANOSE_STROKE_VARIATION_NO_FIT = 0x1, // 1
96     DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION = 0x2, // 2
97     DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL = 0x3, // 3
98     DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL = 0x4, // 4
99     DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL = 0x5, // 5
100     DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL = 0x6, // 6
101     DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL = 0x7, // 7
102     DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL = 0x8, // 8
103     DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL = 0x9, // 9
104     DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL = 0xA, // 10
105 }}
106 ENUM!{enum DWRITE_PANOSE_ARM_STYLE {
107     DWRITE_PANOSE_ARM_STYLE_ANY = 0x0, // 0
108     DWRITE_PANOSE_ARM_STYLE_NO_FIT = 0x1, // 1
109     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL = 0x2, // 2
110     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE = 0x3, // 3
111     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL = 0x4, // 4
112     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF = 0x5, // 5
113     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF = 0x6, // 6
114     DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL = 0x7, // 7
115     DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE = 0x8, // 8
116     DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL = 0x9, // 9
117     DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF = 0xA, // 10
118     DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF = 0xB, // 11
119     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = 0x2, // 2
120     DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = 0x4, // 4
121     DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = 0x7, // 7
122     DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = 0x8, // 8
123     DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = 0x9, // 9
124     DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = 0xA, // 10
125     DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = 0xB, // 11
126 }}
127 ENUM!{enum DWRITE_PANOSE_LETTERFORM {
128     DWRITE_PANOSE_LETTERFORM_ANY = 0x0, // 0
129     DWRITE_PANOSE_LETTERFORM_NO_FIT = 0x1, // 1
130     DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT = 0x2, // 2
131     DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED = 0x3, // 3
132     DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED = 0x4, // 4
133     DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED = 0x5, // 5
134     DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED = 0x6, // 6
135     DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER = 0x7, // 7
136     DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE = 0x8, // 8
137     DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT = 0x9, // 9
138     DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED = 0xA, // 10
139     DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED = 0xB, // 11
140     DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED = 0xC, // 12
141     DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED = 0xD, // 13
142     DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER = 0xE, // 14
143     DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE = 0xF, // 15
144 }}
145 ENUM!{enum DWRITE_PANOSE_MIDLINE {
146     DWRITE_PANOSE_MIDLINE_ANY = 0x0, // 0
147     DWRITE_PANOSE_MIDLINE_NO_FIT = 0x1, // 1
148     DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED = 0x2, // 2
149     DWRITE_PANOSE_MIDLINE_STANDARD_POINTED = 0x3, // 3
150     DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED = 0x4, // 4
151     DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED = 0x5, // 5
152     DWRITE_PANOSE_MIDLINE_HIGH_POINTED = 0x6, // 6
153     DWRITE_PANOSE_MIDLINE_HIGH_SERIFED = 0x7, // 7
154     DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED = 0x8, // 8
155     DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED = 0x9, // 9
156     DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED = 0xA, // 10
157     DWRITE_PANOSE_MIDLINE_LOW_TRIMMED = 0xB, // 11
158     DWRITE_PANOSE_MIDLINE_LOW_POINTED = 0xC, // 12
159     DWRITE_PANOSE_MIDLINE_LOW_SERIFED = 0xD, // 13
160 }}
161 ENUM!{enum DWRITE_PANOSE_XHEIGHT {
162     DWRITE_PANOSE_XHEIGHT_ANY = 0x0, // 0
163     DWRITE_PANOSE_XHEIGHT_NO_FIT = 0x1, // 1
164     DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL = 0x2, // 2
165     DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD = 0x3, // 3
166     DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE = 0x4, // 4
167     DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL = 0x5, // 5
168     DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD = 0x6, // 6
169     DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE = 0x7, // 7
170     DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = 0x3, // 3
171     DWRITE_PANOSE_XHEIGHT_DUCKING_STD = 0x6, // 6
172 }}
173 ENUM!{enum DWRITE_PANOSE_TOOL_KIND {
174     DWRITE_PANOSE_TOOL_KIND_ANY = 0x0, // 0
175     DWRITE_PANOSE_TOOL_KIND_NO_FIT = 0x1, // 1
176     DWRITE_PANOSE_TOOL_KIND_FLAT_NIB = 0x2, // 2
177     DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT = 0x3, // 3
178     DWRITE_PANOSE_TOOL_KIND_ENGRAVED = 0x4, // 4
179     DWRITE_PANOSE_TOOL_KIND_BALL = 0x5, // 5
180     DWRITE_PANOSE_TOOL_KIND_BRUSH = 0x6, // 6
181     DWRITE_PANOSE_TOOL_KIND_ROUGH = 0x7, // 7
182     DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP = 0x8, // 8
183     DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH = 0x9, // 9
184 }}
185 ENUM!{enum DWRITE_PANOSE_SPACING {
186     DWRITE_PANOSE_SPACING_ANY = 0x0, // 0
187     DWRITE_PANOSE_SPACING_NO_FIT = 0x1, // 1
188     DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED = 0x2, // 2
189     DWRITE_PANOSE_SPACING_MONOSPACED = 0x3, // 3
190 }}
191 ENUM!{enum DWRITE_PANOSE_ASPECT_RATIO {
192     DWRITE_PANOSE_ASPECT_RATIO_ANY = 0x0, // 0
193     DWRITE_PANOSE_ASPECT_RATIO_NO_FIT = 0x1, // 1
194     DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED = 0x2, // 2
195     DWRITE_PANOSE_ASPECT_RATIO_CONDENSED = 0x3, // 3
196     DWRITE_PANOSE_ASPECT_RATIO_NORMAL = 0x4, // 4
197     DWRITE_PANOSE_ASPECT_RATIO_EXPANDED = 0x5, // 5
198     DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED = 0x6, // 6
199 }}
200 ENUM!{enum DWRITE_PANOSE_SCRIPT_TOPOLOGY {
201     DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY = 0x0, // 0
202     DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT = 0x1, // 1
203     DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED = 0x2, // 2
204     DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING = 0x3, // 3
205     DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED = 0x4, // 4
206     DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED = 0x5, // 5
207     DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING = 0x6, // 6
208     DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED = 0x7, // 7
209     DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED = 0x8, // 8
210     DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING = 0x9, // 9
211     DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED = 0xA, // 10
212 }}
213 ENUM!{enum DWRITE_PANOSE_SCRIPT_FORM {
214     DWRITE_PANOSE_SCRIPT_FORM_ANY = 0x0, // 0
215     DWRITE_PANOSE_SCRIPT_FORM_NO_FIT = 0x1, // 1
216     DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING = 0x2, // 2
217     DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING = 0x3, // 3
218     DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING = 0x4, // 4
219     DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING = 0x5, // 5
220     DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING = 0x6, // 6
221     DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING = 0x7, // 7
222     DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING = 0x8, // 8
223     DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING = 0x9, // 9
224     DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING = 0xA, // 10
225     DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING = 0xB, // 11
226     DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING = 0xC, // 12
227     DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING = 0xD, // 13
228 }}
229 ENUM!{enum DWRITE_PANOSE_FINIALS {
230     DWRITE_PANOSE_FINIALS_ANY = 0x0, // 0
231     DWRITE_PANOSE_FINIALS_NO_FIT = 0x1, // 1
232     DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS = 0x2, // 2
233     DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS = 0x3, // 3
234     DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS = 0x4, // 4
235     DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS = 0x5, // 5
236     DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS = 0x6, // 6
237     DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS = 0x7, // 7
238     DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS = 0x8, // 8
239     DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS = 0x9, // 9
240     DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS = 0xA, // 10
241     DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS = 0xB, // 11
242     DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS = 0xC, // 12
243     DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS = 0xD, // 13
244 }}
245 ENUM!{enum DWRITE_PANOSE_XASCENT {
246     DWRITE_PANOSE_XASCENT_ANY = 0x0, // 0
247     DWRITE_PANOSE_XASCENT_NO_FIT = 0x1, // 1
248     DWRITE_PANOSE_XASCENT_VERY_LOW = 0x2, // 2
249     DWRITE_PANOSE_XASCENT_LOW = 0x3, // 3
250     DWRITE_PANOSE_XASCENT_MEDIUM = 0x4, // 4
251     DWRITE_PANOSE_XASCENT_HIGH = 0x5, // 5
252     DWRITE_PANOSE_XASCENT_VERY_HIGH = 0x6, // 6
253 }}
254 ENUM!{enum DWRITE_PANOSE_DECORATIVE_CLASS {
255     DWRITE_PANOSE_DECORATIVE_CLASS_ANY = 0x0, // 0
256     DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT = 0x1, // 1
257     DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE = 0x2, // 2
258     DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY = 0x3, // 3
259     DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS = 0x4, // 4
260     DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT = 0x5, // 5
261     DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS = 0x6, // 6
262     DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON = 0x7, // 7
263     DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS = 0x8, // 8
264     DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED = 0x9, // 9
265     DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND = 0xA, // 10
266     DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE = 0xB, // 11
267     DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE = 0xC, // 12
268 }}
269 ENUM!{enum DWRITE_PANOSE_ASPECT {
270     DWRITE_PANOSE_ASPECT_ANY = 0x0, // 0
271     DWRITE_PANOSE_ASPECT_NO_FIT = 0x1, // 1
272     DWRITE_PANOSE_ASPECT_SUPER_CONDENSED = 0x2, // 2
273     DWRITE_PANOSE_ASPECT_VERY_CONDENSED = 0x3, // 3
274     DWRITE_PANOSE_ASPECT_CONDENSED = 0x4, // 4
275     DWRITE_PANOSE_ASPECT_NORMAL = 0x5, // 5
276     DWRITE_PANOSE_ASPECT_EXTENDED = 0x6, // 6
277     DWRITE_PANOSE_ASPECT_VERY_EXTENDED = 0x7, // 7
278     DWRITE_PANOSE_ASPECT_SUPER_EXTENDED = 0x8, // 8
279     DWRITE_PANOSE_ASPECT_MONOSPACED = 0x9, // 9
280 }}
281 ENUM!{enum DWRITE_PANOSE_FILL {
282     DWRITE_PANOSE_FILL_ANY = 0x0, // 0
283     DWRITE_PANOSE_FILL_NO_FIT = 0x1, // 1
284     DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL = 0x2, // 2
285     DWRITE_PANOSE_FILL_NO_FILL = 0x3, // 3
286     DWRITE_PANOSE_FILL_PATTERNED_FILL = 0x4, // 4
287     DWRITE_PANOSE_FILL_COMPLEX_FILL = 0x5, // 5
288     DWRITE_PANOSE_FILL_SHAPED_FILL = 0x6, // 6
289     DWRITE_PANOSE_FILL_DRAWN_DISTRESSED = 0x7, // 7
290 }}
291 ENUM!{enum DWRITE_PANOSE_LINING {
292     DWRITE_PANOSE_LINING_ANY = 0x0, // 0
293     DWRITE_PANOSE_LINING_NO_FIT = 0x1, // 1
294     DWRITE_PANOSE_LINING_NONE = 0x2, // 2
295     DWRITE_PANOSE_LINING_INLINE = 0x3, // 3
296     DWRITE_PANOSE_LINING_OUTLINE = 0x4, // 4
297     DWRITE_PANOSE_LINING_ENGRAVED = 0x5, // 5
298     DWRITE_PANOSE_LINING_SHADOW = 0x6, // 6
299     DWRITE_PANOSE_LINING_RELIEF = 0x7, // 7
300     DWRITE_PANOSE_LINING_BACKDROP = 0x8, // 8
301 }}
302 ENUM!{enum DWRITE_PANOSE_DECORATIVE_TOPOLOGY {
303     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY = 0x0, // 0
304     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT = 0x1, // 1
305     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD = 0x2, // 2
306     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE = 0x3, // 3
307     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT = 0x4, // 4
308     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO = 0x5, // 5
309     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING = 0x6, // 6
310     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS = 0x7, // 7
311     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS = 0x8, // 8
312     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS = 0x9, // 9
313     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE = 0xA, // 10
314     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY = 0xB, // 11
315     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A = 0xC, // 12
316     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE = 0xD, // 13
317     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER = 0xE, // 14
318     DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE = 0xF, // 15
319 }}
320 ENUM!{enum DWRITE_PANOSE_CHARACTER_RANGES {
321     DWRITE_PANOSE_CHARACTER_RANGES_ANY = 0x0, // 0
322     DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT = 0x1, // 1
323     DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION = 0x2, // 2
324     DWRITE_PANOSE_CHARACTER_RANGES_LITERALS = 0x3, // 3
325     DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE = 0x4, // 4
326     DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS = 0x5, // 5
327 }}
328 ENUM!{enum DWRITE_PANOSE_SYMBOL_KIND {
329     DWRITE_PANOSE_SYMBOL_KIND_ANY = 0x0, // 0
330     DWRITE_PANOSE_SYMBOL_KIND_NO_FIT = 0x1, // 1
331     DWRITE_PANOSE_SYMBOL_KIND_MONTAGES = 0x2, // 2
332     DWRITE_PANOSE_SYMBOL_KIND_PICTURES = 0x3, // 3
333     DWRITE_PANOSE_SYMBOL_KIND_SHAPES = 0x4, // 4
334     DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC = 0x5, // 5
335     DWRITE_PANOSE_SYMBOL_KIND_MUSIC = 0x6, // 6
336     DWRITE_PANOSE_SYMBOL_KIND_EXPERT = 0x7, // 7
337     DWRITE_PANOSE_SYMBOL_KIND_PATTERNS = 0x8, // 8
338     DWRITE_PANOSE_SYMBOL_KIND_BOARDERS = 0x9, // 9
339     DWRITE_PANOSE_SYMBOL_KIND_ICONS = 0xA, // 10
340     DWRITE_PANOSE_SYMBOL_KIND_LOGOS = 0xB, // 11
341     DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC = 0xC, // 12
342 }}
343 ENUM!{enum DWRITE_PANOSE_SYMBOL_ASPECT_RATIO {
344     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY = 0x0, // 0
345     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT = 0x1, // 1
346     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH = 0x2, // 2
347     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE = 0x3, // 3
348     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE = 0x4, // 4
349     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE = 0x5, // 5
350     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE = 0x6, // 6
351     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL = 0x7, // 7
352     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW = 0x8, // 8
353     DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW = 0x9, // 9
354 }}
355 ENUM!{enum DWRITE_OUTLINE_THRESHOLD {
356     DWRITE_OUTLINE_THRESHOLD_ANTIALIASED = 0x0, // 0
357     DWRITE_OUTLINE_THRESHOLD_ALIASED = 0x1, // 1
358 }}
359 ENUM!{enum DWRITE_BASELINE {
360     DWRITE_BASELINE_DEFAULT = 0x0, // 0
361     DWRITE_BASELINE_ROMAN = 0x1, // 1
362     DWRITE_BASELINE_CENTRAL = 0x2, // 2
363     DWRITE_BASELINE_MATH = 0x3, // 3
364     DWRITE_BASELINE_HANGING = 0x4, // 4
365     DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM = 0x5, // 5
366     DWRITE_BASELINE_IDEOGRAPHIC_TOP = 0x6, // 6
367     DWRITE_BASELINE_MINIMUM = 0x7, // 7
368     DWRITE_BASELINE_MAXIMUM = 0x8, // 8
369 }}
370 ENUM!{enum DWRITE_VERTICAL_GLYPH_ORIENTATION {
371     DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT = 0x0, // 0
372     DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED = 0x1, // 1
373 }}
374 ENUM!{enum DWRITE_GLYPH_ORIENTATION_ANGLE {
375     DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES = 0x0, // 0
376     DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES = 0x1, // 1
377     DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES = 0x2, // 2
378     DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES = 0x3, // 3
379 }}
380 STRUCT!{struct DWRITE_FONT_METRICS1 {
381     designUnitsPerEm: UINT16,
382     ascent: UINT16,
383     descent: UINT16,
384     lineGap: INT16,
385     capHeight: UINT16,
386     xHeight: UINT16,
387     underlinePosition: INT16,
388     underlineThickness: UINT16,
389     strikethroughPosition: INT16,
390     strikethroughThickness: UINT16,
391     glyphBoxLeft: INT16,
392     glyphBoxTop: INT16,
393     glyphBoxRight: INT16,
394     glyphBoxBottom: INT16,
395     subscriptPositionX: INT16,
396     subscriptPositionY: INT16,
397     subscriptSizeX: INT16,
398     subscriptSizeY: INT16,
399     superscriptPositionX: INT16,
400     superscriptPositionY: INT16,
401     superscriptSizeX: INT16,
402     superscriptSizeY: INT16,
403     hasTypographicMetrics: BOOL,
404 }}
405 STRUCT!{struct DWRITE_CARET_METRICS {
406     slopeRise: INT16,
407     slopeRun: INT16,
408     offset: INT16,
409 }}
410 STRUCT!{struct DWRITE_PANOSE_text {
411     familyKind: UINT8,
412     serifStyle: UINT8,
413     weight: UINT8,
414     proportion: UINT8,
415     contrast: UINT8,
416     strokeVariation: UINT8,
417     armStyle: UINT8,
418     letterform: UINT8,
419     midline: UINT8,
420     xHeight: UINT8,
421 }}
422 STRUCT!{struct DWRITE_PANOSE_script {
423     familyKind: UINT8,
424     toolKind: UINT8,
425     weight: UINT8,
426     spacing: UINT8,
427     aspectRatio: UINT8,
428     contrast: UINT8,
429     scriptTopology: UINT8,
430     scriptForm: UINT8,
431     finials: UINT8,
432     xAscent: UINT8,
433 }}
434 STRUCT!{struct DWRITE_PANOSE_decorative {
435     familyKind: UINT8,
436     decorativeClass: UINT8,
437     weight: UINT8,
438     aspect: UINT8,
439     contrast: UINT8,
440     serifVariant: UINT8,
441     fill: UINT8,
442     lining: UINT8,
443     decorativeTopology: UINT8,
444     characterRange: UINT8,
445 }}
446 STRUCT!{struct DWRITE_PANOSE_symbol {
447     familyKind: UINT8,
448     symbolKind: UINT8,
449     weight: UINT8,
450     spacing: UINT8,
451     aspectRatioAndContrast: UINT8,
452     aspectRatio94: UINT8,
453     aspectRatio119: UINT8,
454     aspectRatio157: UINT8,
455     aspectRatio163: UINT8,
456     aspectRatio211: UINT8,
457 }}
458 UNION!{union DWRITE_PANOSE {
459     [u8; 10],
460     values values_mut: [UINT8; 10],
461     familyKind familyKind_mut: UINT8,
462     text text_mut: DWRITE_PANOSE_text,
463     script script_mut: DWRITE_PANOSE_script,
464     decorative decorative_mut: DWRITE_PANOSE_decorative,
465     symbol symbol_mut: DWRITE_PANOSE_symbol,
466 }}
467 STRUCT!{struct DWRITE_UNICODE_RANGE {
468     first: UINT32,
469     last: UINT32,
470 }}
471 STRUCT!{struct DWRITE_SCRIPT_PROPERTIES {
472     isoScriptCode: UINT32,
473     isoScriptNumber: UINT32,
474     clusterLookahead: UINT32,
475     justificationCharacter: UINT32,
476     bitfield0: UINT32,
477 }}
478 BITFIELD!{DWRITE_SCRIPT_PROPERTIES bitfield0: UINT32 [
479     restrictCaretToClusters set_restrictCaretToClusters[0..1],
480     usesWordDividers set_usesWordDividers[1..2],
481     isDiscreteWriting set_isDiscreteWriting[2..3],
482     isBlockWriting set_isBlockWriting[3..4],
483     isDistributedWithinCluster set_isDistributedWithinCluster[4..5],
484     isConnectedWriting set_isConnectedWriting[5..6],
485     isCursiveWriting set_isCursiveWriting[6..7],
486     reserved set_reserved[7..32],
487 ]}
488 STRUCT!{struct DWRITE_JUSTIFICATION_OPPORTUNITY {
489     expansionMinimum: FLOAT,
490     expansionMaximum: FLOAT,
491     compressionMaximum: FLOAT,
492     bitfield0: UINT32,
493 }}
494 BITFIELD!{DWRITE_JUSTIFICATION_OPPORTUNITY bitfield0: UINT32 [
495     expansionPriority set_expansionPriority[0..8],
496     compressionPriority set_compressionPriority[8..16],
497     allowResidualExpansion set_allowResidualExpansion[16..17],
498     allowResidualCompression set_allowResidualCompression[17..18],
499     applyToLeadingEdge set_applyToLeadingEdge[18..19],
500     applyToTrailingEdge set_applyToTrailingEdge[19..20],
501     reserved set_reserved[20..32],
502 ]}
503 RIDL!{#[uuid(0x30572f99, 0xdac6, 0x41db, 0xa1, 0x6e, 0x04, 0x86, 0x30, 0x7e, 0x60, 0x6a)]
504 interface IDWriteFactory1(IDWriteFactory1Vtbl): IDWriteFactory(IDWriteFactoryVtbl) {
505     fn GetEudcFontCollection(
506         fontCollection: *mut *mut IDWriteFontCollection,
507         checkForUpdates: BOOL,
508     ) -> HRESULT,
509     fn CreateCustomRenderingParams(
510         gamma: FLOAT,
511         enhancedContrast: FLOAT,
512         enhancedContrastGrayscale: FLOAT,
513         clearTypeLevel: FLOAT,
514         pixelGeometry: DWRITE_PIXEL_GEOMETRY,
515         renderingMode: DWRITE_RENDERING_MODE,
516         renderingParams: *mut *mut IDWriteRenderingParams1,
517     ) -> HRESULT,
518 }}
519 RIDL!{#[uuid(0xa71efdb4, 0x9fdb, 0x4838, 0xad, 0x90, 0xcf, 0xc3, 0xbe, 0x8c, 0x3d, 0xaf)]
520 interface IDWriteFontFace1(IDWriteFontFace1Vtbl): IDWriteFontFace(IDWriteFontFaceVtbl) {
521     fn GetMetrics(
522         fontMetrics: *mut DWRITE_FONT_METRICS1,
523     ) -> (),
524     fn GetGdiCompatibleMetrics(
525         emSize: FLOAT,
526         pixelsPerDip: FLOAT,
527         transform: *const DWRITE_MATRIX,
528         fontMetrics: *mut DWRITE_FONT_METRICS1,
529     ) -> HRESULT,
530     fn GetCaretMetrics(
531         caretMetrics: *mut DWRITE_CARET_METRICS,
532     ) -> (),
533     fn GetUnicodeRanges(
534         maxRangeCount: UINT32,
535         unicodeRanges: *mut DWRITE_UNICODE_RANGE,
536         actualRangeCount: *mut UINT32,
537     ) -> HRESULT,
538     fn IsMonospacedFont() -> BOOL,
539     fn GetDesignGlyphAdvances(
540         glyphCount: UINT32,
541         glyphIndices: *const UINT16,
542         glyphAdvances: *mut INT32,
543         isSideways: BOOL,
544     ) -> HRESULT,
545     fn GetGdiCompatibleGlyphAdvances(
546         emSize: FLOAT,
547         pixelsPerDip: FLOAT,
548         transform: *const DWRITE_MATRIX,
549         useGdiNatural: BOOL,
550         isSideways: BOOL,
551         glyphCount: UINT32,
552         glyphIndices: *const UINT16,
553         glyphAdvances: *mut INT32,
554     ) -> HRESULT,
555     fn GetKerningPairAdjustments(
556         glyphCount: UINT32,
557         glyphIndices: *const UINT16,
558         glyphAdvanceAdjustments: *mut INT32,
559     ) -> HRESULT,
560     fn HasKerningPairs() -> BOOL,
561     fn GetRecommendedRenderingMode(
562         fontEmSize: FLOAT,
563         dpiX: FLOAT,
564         dpiY: FLOAT,
565         transform: *const DWRITE_MATRIX,
566         isSideways: BOOL,
567         outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
568         measuringMode: DWRITE_MEASURING_MODE,
569         renderingMode: *mut DWRITE_RENDERING_MODE,
570     ) -> HRESULT,
571     fn GetVerticalGlyphVariants(
572         glyphCount: UINT32,
573         nominalGlyphIndices: *const UINT16,
574         verticalGlyphIndices: *mut UINT16,
575     ) -> HRESULT,
576     fn HasVerticalGlyphVariants() -> BOOL,
577 }}
578 RIDL!{#[uuid(0xacd16696, 0x8c14, 0x4f5d, 0x87, 0x7e, 0xfe, 0x3f, 0xc1, 0xd3, 0x27, 0x38)]
579 interface IDWriteFont1(IDWriteFont1Vtbl): IDWriteFont(IDWriteFontVtbl) {
580     fn GetMetrics(
581         fontMetrics: *mut DWRITE_FONT_METRICS1,
582     ) -> (),
583     fn GetPanose(
584         panose: *mut DWRITE_PANOSE,
585     ) -> (),
586     fn GetUnicodeRanges(
587         maxRangeCount: UINT32,
588         unicodeRanges: *mut DWRITE_UNICODE_RANGE,
589         actualRangeCount: *mut UINT32,
590     ) -> HRESULT,
591     fn IsMonospacedFont() -> BOOL,
592 }}
593 RIDL!{#[uuid(0x94413cf4, 0xa6fc, 0x4248, 0x8b, 0x50, 0x66, 0x74, 0x34, 0x8f, 0xca, 0xd3)]
594 interface IDWriteRenderingParams1(IDWriteRenderingParams1Vtbl):
595     IDWriteRenderingParams(IDWriteRenderingParamsVtbl) {
596     fn GetGrayscaleEnhancedContrast() -> FLOAT,
597 }}
598 RIDL!{#[uuid(0x80dad800, 0xe21f, 0x4e83, 0x96, 0xce, 0xbf, 0xcc, 0xe5, 0x00, 0xdb, 0x7c)]
599 interface IDWriteTextAnalyzer1(IDWriteTextAnalyzer1Vtbl):
600     IDWriteTextAnalyzer(IDWriteTextAnalyzerVtbl) {
601     fn ApplyCharacterSpacing(
602         leadingSpacing: FLOAT,
603         trailingSpacing: FLOAT,
604         minimumAdvanceWidth: FLOAT,
605         textLength: UINT32,
606         glyphCount: UINT32,
607         clusterMap: *const UINT16,
608         glyphAdvances: *const FLOAT,
609         glyphOffsets: *const DWRITE_GLYPH_OFFSET,
610         glyphProperties: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
611         modifiedGlyphAdvances: *mut FLOAT,
612         modifiedGlyphOffsets: *mut DWRITE_GLYPH_OFFSET,
613     ) -> HRESULT,
614     fn GetBaseline(
615         fontFace: *mut IDWriteFontFace,
616         baseline: DWRITE_BASELINE,
617         isVertical: BOOL,
618         isSimulationAllowed: BOOL,
619         scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
620         localeName: *const WCHAR,
621         baselineCoordinate: *mut INT32,
622         exists: *mut BOOL,
623     ) -> HRESULT,
624     fn AnalyzeVerticalGlyphOrientation(
625         analysisSource: *mut IDWriteTextAnalysisSource1,
626         textPosition: UINT32,
627         textLength: UINT32,
628         analysisSink: *mut IDWriteTextAnalysisSink1,
629     ) -> HRESULT,
630     fn GetGlyphOrientationTransform(
631         glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
632         isSideways: BOOL,
633         transform: *mut DWRITE_MATRIX,
634     ) -> HRESULT,
635     fn GetScriptProperties(
636         scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
637         scriptProperties: *mut DWRITE_SCRIPT_PROPERTIES,
638     ) -> HRESULT,
639     fn GetTextComplexity(
640         textString: *const WCHAR,
641         textLength: UINT32,
642         fontFace: *mut IDWriteFontFace,
643         isTextSimple: *mut BOOL,
644         textLengthRead: *mut UINT32,
645         glyphIndices: *mut UINT16,
646     ) -> HRESULT,
647     fn GetJustificationOpportunities(
648         fontFace: *mut IDWriteFontFace,
649         fontEmSize: FLOAT,
650         scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
651         textLength: UINT32,
652         glyphCount: UINT32,
653         textString: *const WCHAR,
654         clusterMap: *const UINT16,
655         glyphProperties: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
656         justificationOpportunities: *mut DWRITE_JUSTIFICATION_OPPORTUNITY,
657     ) -> HRESULT,
658     fn JustifyGlyphAdvances(
659         lineWidth: FLOAT,
660         glyphCount: UINT32,
661         justificationOpportunities: *const DWRITE_JUSTIFICATION_OPPORTUNITY,
662         glyphAdvances: *const FLOAT,
663         glyphOffsets: *const DWRITE_GLYPH_OFFSET,
664         justifiedGlyphAdvances: *mut FLOAT,
665         justifiedGlyphOffsets: *mut DWRITE_GLYPH_OFFSET,
666     ) -> HRESULT,
667     fn GetJustifiedGlyphs(
668         fontFace: *mut IDWriteFontFace,
669         fontEmSize: FLOAT,
670         scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
671         textLength: UINT32,
672         glyphCount: UINT32,
673         maxGlyphCount: UINT32,
674         clusterMap: *const UINT16,
675         glyphIndices: *const UINT16,
676         glyphAdvances: *const FLOAT,
677         justifiedGlyphAdvances: *const FLOAT,
678         justifiedGlyphOffsets: *const DWRITE_GLYPH_OFFSET,
679         glyphProperties: *const DWRITE_SHAPING_GLYPH_PROPERTIES,
680         actualGlyphCount: *mut UINT32,
681         modifiedClusterMap: *mut UINT16,
682         modifiedGlyphIndices: *mut UINT16,
683         modifiedGlyphAdvances: *mut FLOAT,
684         modifiedGlyphOffsets: *mut DWRITE_GLYPH_OFFSET,
685     ) -> HRESULT,
686 }}
687 RIDL!{#[uuid(0x639cfad8, 0x0fb4, 0x4b21, 0xa5, 0x8a, 0x06, 0x79, 0x20, 0x12, 0x00, 0x09)]
688 interface IDWriteTextAnalysisSource1(IDWriteTextAnalysisSource1Vtbl):
689     IDWriteTextAnalysisSource(IDWriteTextAnalysisSourceVtbl) {
690     fn GetVerticalGlyphOrientation(
691         textPosition: UINT32,
692         textLength: *mut UINT32,
693         glyphOrientation: *mut DWRITE_VERTICAL_GLYPH_ORIENTATION,
694         bidiLevel: *mut UINT8,
695     ) -> HRESULT,
696 }}
697 RIDL!{#[uuid(0xb0d941a0, 0x85e7, 0x4d8b, 0x9f, 0xd3, 0x5c, 0xed, 0x99, 0x34, 0x48, 0x2a)]
698 interface IDWriteTextAnalysisSink1(IDWriteTextAnalysisSink1Vtbl):
699     IDWriteTextAnalysisSink(IDWriteTextAnalysisSinkVtbl) {
700     fn SetGlyphOrientation(
701         textPosition: UINT32,
702         textLength: UINT32,
703         glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
704         adjustedBidiLevel: UINT8,
705         isSideways: BOOL,
706         isRightToLeft: BOOL,
707     ) -> HRESULT,
708 }}
709 RIDL!{#[uuid(0x9064d822, 0x80a7, 0x465c, 0xa9, 0x86, 0xdf, 0x65, 0xf7, 0x8b, 0x8f, 0xeb)]
710 interface IDWriteTextLayout1(IDWriteTextLayout1Vtbl):
711     IDWriteTextLayout(IDWriteTextLayoutVtbl) {
712     fn SetPairKerning(
713         isPairKerningEnabled: BOOL,
714         textRange: DWRITE_TEXT_RANGE,
715     ) -> HRESULT,
716     fn GetPairKerning(
717         currentPosition: UINT32,
718         isPairKerningEnabled: *mut BOOL,
719         textRange: *mut DWRITE_TEXT_RANGE,
720     ) -> HRESULT,
721     fn SetCharacterSpacing(
722         leadingSpacing: FLOAT,
723         trailingSpacing: FLOAT,
724         minimumAdvanceWidth: FLOAT,
725         textRange: DWRITE_TEXT_RANGE,
726     ) -> HRESULT,
727     fn GetCharacterSpacing(
728         currentPosition: UINT32,
729         leadingSpacing: *mut FLOAT,
730         trailingSpacing: *mut FLOAT,
731         minimumAdvanceWidth: *mut FLOAT,
732         textRange: *mut DWRITE_TEXT_RANGE,
733     ) -> HRESULT,
734 }}
735 ENUM!{enum DWRITE_TEXT_ANTIALIAS_MODE {
736     DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE = 0x0, // 0
737     DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE = 0x1, // 1
738 }}
739 RIDL!{#[uuid(0x791e8298, 0x3ef3, 0x4230, 0x98, 0x80, 0xc9, 0xbd, 0xec, 0xc4, 0x20, 0x64)]
740 interface IDWriteBitmapRenderTarget1(IDWriteBitmapRenderTarget1Vtbl):
741     IDWriteBitmapRenderTarget(IDWriteBitmapRenderTargetVtbl) {
742     fn GetTextAntialiasMode() -> DWRITE_TEXT_ANTIALIAS_MODE,
743     fn SetTextAntialiasMode(
744         antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
745     ) -> HRESULT,
746 }}
747