winapi_ui_automation/um/
dwrite_3.rs

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_3.h
7use ctypes::c_void;
8use shared::basetsd::{UINT16, UINT32, UINT64};
9use shared::minwindef::{BOOL, FILETIME, FLOAT};
10use um::dcommon::{DWRITE_GLYPH_IMAGE_DATA, DWRITE_GLYPH_IMAGE_FORMATS, DWRITE_MEASURING_MODE};
11use um::dwrite::{
12    DWRITE_FONT_SIMULATIONS, DWRITE_FONT_STRETCH, DWRITE_FONT_STYLE, DWRITE_FONT_WEIGHT,
13    DWRITE_GLYPH_RUN, DWRITE_INFORMATIONAL_STRING_ID, DWRITE_LINE_SPACING_METHOD, DWRITE_MATRIX,
14    DWRITE_PIXEL_GEOMETRY, DWRITE_RENDERING_MODE_ALIASED, DWRITE_RENDERING_MODE_DEFAULT,
15    DWRITE_RENDERING_MODE_GDI_CLASSIC, DWRITE_RENDERING_MODE_GDI_NATURAL,
16    DWRITE_RENDERING_MODE_NATURAL, DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
17    DWRITE_RENDERING_MODE_OUTLINE, IDWriteFont, IDWriteFontCollection, IDWriteFontCollectionVtbl,
18    IDWriteFontFace, IDWriteFontFamily, IDWriteFontFamilyVtbl, IDWriteFontFile, IDWriteFontList,
19    IDWriteFontListVtbl, IDWriteGdiInterop, IDWriteGdiInteropVtbl, IDWriteGlyphRunAnalysis,
20    IDWriteLocalizedStrings, IDWriteRenderingParams,
21};
22use um::dwrite_1::{DWRITE_OUTLINE_THRESHOLD, DWRITE_PANOSE, DWRITE_TEXT_ANTIALIAS_MODE};
23use um::dwrite_2::{
24    DWRITE_GRID_FIT_MODE, IDWriteFactory2, IDWriteFactory2Vtbl, IDWriteFont2, IDWriteFont2Vtbl,
25    IDWriteFontFace2, IDWriteFontFace2Vtbl, IDWriteRenderingParams2, IDWriteRenderingParams2Vtbl,
26    IDWriteTextFormat1, IDWriteTextFormat1Vtbl, IDWriteTextLayout2, IDWriteTextLayout2Vtbl,
27};
28use um::unknwnbase::{IUnknown, IUnknownVtbl};
29use um::wingdi::{FONTSIGNATURE, LOGFONTW};
30use um::winnt::{HRESULT, WCHAR};
31pub const DWRITE_E_REMOTEFONT: HRESULT = 0x8898500D;
32pub const DWRITE_E_DOWNLOADCANCELLED: HRESULT = 0x8898500E;
33pub const DWRITE_E_DOWNLOADFAILED: HRESULT = 0x8898500F;
34pub const DWRITE_E_TOOMANYDOWNLOADS: HRESULT = 0x88985010;
35ENUM!{enum DWRITE_FONT_PROPERTY_ID {
36    DWRITE_FONT_PROPERTY_ID_NONE,
37    DWRITE_FONT_PROPERTY_ID_FAMILY_NAME,
38    DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME,
39    DWRITE_FONT_PROPERTY_ID_FACE_NAME,
40    DWRITE_FONT_PROPERTY_ID_FULL_NAME,
41    DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME,
42    DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME,
43    DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG,
44    DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG,
45    DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG,
46    DWRITE_FONT_PROPERTY_ID_WEIGHT ,
47    DWRITE_FONT_PROPERTY_ID_STRETCH,
48    DWRITE_FONT_PROPERTY_ID_STYLE,
49    DWRITE_FONT_PROPERTY_ID_TOTAL,
50}}
51STRUCT!{struct DWRITE_FONT_PROPERTY {
52    propertyId: DWRITE_FONT_PROPERTY_ID,
53    propertyValue: *const WCHAR,
54    localeName: *const WCHAR,
55}}
56ENUM!{enum DWRITE_LOCALITY {
57    DWRITE_LOCALITY_REMOTE,
58    DWRITE_LOCALITY_PARTIAL,
59    DWRITE_LOCALITY_LOCAL,
60}}
61ENUM!{enum DWRITE_RENDERING_MODE1 {
62    DWRITE_RENDERING_MODE1_DEFAULT = DWRITE_RENDERING_MODE_DEFAULT,
63    DWRITE_RENDERING_MODE1_ALIASED = DWRITE_RENDERING_MODE_ALIASED,
64    DWRITE_RENDERING_MODE1_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,
65    DWRITE_RENDERING_MODE1_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
66    DWRITE_RENDERING_MODE1_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
67    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
68    DWRITE_RENDERING_MODE1_OUTLINE = DWRITE_RENDERING_MODE_OUTLINE,
69    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED,
70}}
71RIDL!{#[uuid(0xb7924baa, 0x391b, 0x412a, 0x8c, 0x5c, 0xe4, 0x4c, 0xc2, 0xd8, 0x67, 0xdc)]
72interface IDWriteRenderingParams3(IDWriteRenderingParams3Vtbl):
73    IDWriteRenderingParams2(IDWriteRenderingParams2Vtbl) {
74    fn GetRenderingMode1() -> DWRITE_RENDERING_MODE1,
75}}
76RIDL!{#[uuid(0x9a1b41c3, 0xd3bb, 0x466a, 0x87, 0xfc, 0xfe, 0x67, 0x55, 0x6a, 0x3b, 0x65)]
77interface IDWriteFactory3(IDWriteFactory3Vtbl): IDWriteFactory2(IDWriteFactory2Vtbl) {
78    fn CreateGlyphRunAnalysis(
79        glyphRun: *const DWRITE_GLYPH_RUN,
80        transform: *const DWRITE_MATRIX,
81        renderingMode: DWRITE_RENDERING_MODE1,
82        measuringMode: DWRITE_MEASURING_MODE,
83        gridFitMode: DWRITE_GRID_FIT_MODE,
84        antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
85        baselineOriginX: FLOAT,
86        baselineOriginY: FLOAT,
87        glyphRunAnalysis: *mut *mut IDWriteGlyphRunAnalysis,
88    ) -> HRESULT,
89    fn CreateCustomRenderingParams(
90        gamma: FLOAT,
91        enhancedContrast: FLOAT,
92        grayscaleEnhancedContrast: FLOAT,
93        clearTypeLevel: FLOAT,
94        pixelGeometry: DWRITE_PIXEL_GEOMETRY,
95        renderingMode: DWRITE_RENDERING_MODE1,
96        gridFitMode: DWRITE_GRID_FIT_MODE,
97        renderingParams: *mut *mut IDWriteRenderingParams3,
98    ) -> HRESULT,
99    fn CreateFontFaceReference_2(
100        fontFile: *mut IDWriteFontFile,
101        faceIndex: UINT32,
102        fontSimulations: DWRITE_FONT_SIMULATIONS,
103        fontFaceReference: *mut *mut IDWriteFontFaceReference,
104    ) -> HRESULT,
105    fn CreateFontFaceReference_1(
106        filePath: *const WCHAR,
107        lastWriteTime: *const FILETIME,
108        faceIndex: UINT32,
109        fontSimulations: DWRITE_FONT_SIMULATIONS,
110        fontFaceReference: *mut *mut IDWriteFontFaceReference,
111    ) -> HRESULT,
112    fn GetSystemFontSet(
113        fontSet: *mut *mut IDWriteFontSet,
114    ) -> HRESULT,
115    fn CreateFontSetBuilder(
116        fontSetBuilder: *mut *mut IDWriteFontSetBuilder,
117    ) -> HRESULT,
118    fn CreateFontCollectionFromFontSet(
119        fontSet: *mut IDWriteFontSet,
120        fontCollection: *mut *mut IDWriteFontCollection1,
121    ) -> HRESULT,
122    fn GetSystemFontCollection(
123        includeDownloadableFonts: BOOL,
124        fontCollection: *mut *mut IDWriteFontCollection1,
125        checkForUpdates: BOOL,
126    ) -> HRESULT,
127    fn GetFontDownloadQueue(
128        fontDownloadQueue: *mut *mut IDWriteFontDownloadQueue,
129    ) -> HRESULT,
130}}
131RIDL!{#[uuid(0x53585141, 0xd9f8, 0x4095, 0x83, 0x21, 0xd7, 0x3c, 0xf6, 0xbd, 0x11, 0x6b)]
132interface IDWriteFontSet(IDWriteFontSetVtbl): IUnknown(IUnknownVtbl) {
133    fn GetFontCount() -> UINT32,
134    fn GetFontFaceReference(
135        listIndex: UINT32,
136        fontFaceReference: *mut *mut IDWriteFontFaceReference,
137    ) -> HRESULT,
138    fn FindFontFaceReference(
139        fontFaceReference: *mut IDWriteFontFaceReference,
140        listIndex: *mut UINT32,
141        exists: *mut BOOL,
142    ) -> HRESULT,
143    fn FindFontFace(
144        fontFace: *mut IDWriteFontFace,
145        listIndex: *mut UINT32,
146        exists: *mut BOOL,
147    ) -> HRESULT,
148    fn GetPropertyValues_3(
149        propertyID: DWRITE_FONT_PROPERTY_ID,
150        values: *mut *mut IDWriteStringList,
151    ) -> HRESULT,
152    fn GetPropertyValues_2(
153        propertyID: DWRITE_FONT_PROPERTY_ID,
154        preferredLocaleNames: *const WCHAR,
155        values: *mut *mut IDWriteStringList,
156    ) -> HRESULT,
157    fn GetPropertyValues_1(
158        listIndex: UINT32,
159        propertyId: DWRITE_FONT_PROPERTY_ID,
160        exists: *mut BOOL,
161        values: *mut *mut IDWriteLocalizedStrings,
162    ) -> HRESULT,
163    fn GetPropertyOccurrenceCount(
164        property: *const DWRITE_FONT_PROPERTY,
165        propertyOccurrenceCount: *mut UINT32,
166    ) -> HRESULT,
167    fn GetMatchingFonts_2(
168        familyName: *const WCHAR,
169        fontWeight: DWRITE_FONT_WEIGHT,
170        fontStretch: DWRITE_FONT_STRETCH,
171        fontStyle: DWRITE_FONT_STYLE,
172        filteredSet: *mut *mut IDWriteFontSet,
173    ) -> HRESULT,
174    fn GetMatchingFonts_1(
175        properties: *const DWRITE_FONT_PROPERTY,
176        propertyCount: UINT32,
177        filteredSet: *mut *mut IDWriteFontSet,
178    ) -> HRESULT,
179}}
180RIDL!{#[uuid(0x2f642afe, 0x9c68, 0x4f40, 0xb8, 0xbe, 0x45, 0x74, 0x01, 0xaf, 0xcb, 0x3d)]
181interface IDWriteFontSetBuilder(IDWriteFontSetBuilderVtbl): IUnknown(IUnknownVtbl) {
182    fn AddFontFaceReference_2(
183        fontFaceReference: *mut IDWriteFontFaceReference,
184        properties: *const DWRITE_FONT_PROPERTY,
185        propertyCount: UINT32,
186    ) -> HRESULT,
187    fn AddFontFaceReference_1(
188        fontFaceReference: *mut IDWriteFontFaceReference,
189    ) -> HRESULT,
190    fn AddFontSet(
191        fontSet: *mut IDWriteFontSet,
192    ) -> HRESULT,
193    fn CreateFontSet(
194        fontSet: *mut *mut IDWriteFontSet,
195    ) -> HRESULT,
196}}
197RIDL!{#[uuid(0x53585141, 0xd9f8, 0x4095, 0x83, 0x21, 0xd7, 0x3c, 0xf6, 0xbd, 0x11, 0x6c)]
198interface IDWriteFontCollection1(IDWriteFontCollection1Vtbl):
199    IDWriteFontCollection(IDWriteFontCollectionVtbl) {
200    fn GetFontSet(
201        fontSet: *mut *mut IDWriteFontSet,
202    ) -> HRESULT,
203    fn GetFontFamily(
204        index: UINT32,
205        fontFamily: *mut *mut IDWriteFontFamily1,
206    ) -> HRESULT,
207}}
208RIDL!{#[uuid(0xda20d8ef, 0x812a, 0x4c43, 0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xdf)]
209interface IDWriteFontFamily1(IDWriteFontFamily1Vtbl):
210    IDWriteFontFamily(IDWriteFontFamilyVtbl) {
211    fn GetFontLocality(
212        listIndex: UINT32,
213    ) -> DWRITE_LOCALITY,
214    fn GetFont(
215        listIndex: UINT32,
216        font: *mut *mut IDWriteFont3,
217    ) -> HRESULT,
218    fn GetFontFaceReference(
219        listIndex: UINT32,
220        fontFaceReference: *mut *mut IDWriteFontFaceReference,
221    ) -> HRESULT,
222}}
223RIDL!{#[uuid(0xda20d8ef, 0x812a, 0x4c43, 0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xde)]
224interface IDWriteFontList1(IDWriteFontList1Vtbl): IDWriteFontList(IDWriteFontListVtbl) {
225    fn GetFontLocality(
226        listIndex: UINT32,
227    ) -> DWRITE_LOCALITY,
228    fn GetFont(
229        listIndex: UINT32,
230        font: *mut *mut IDWriteFont3,
231    ) -> HRESULT,
232    fn GetFontFaceReference(
233        listIndex: UINT32,
234        fontFaceReference: *mut *mut IDWriteFontFaceReference,
235    ) -> HRESULT,
236}}
237RIDL!{#[uuid(0x5e7fa7ca, 0xdde3, 0x424c, 0x89, 0xf0, 0x9f, 0xcd, 0x6f, 0xed, 0x58, 0xcd)]
238interface IDWriteFontFaceReference(IDWriteFontFaceReferenceVtbl):
239    IUnknown(IUnknownVtbl) {
240    fn CreateFontFace(
241        fontFace: *mut *mut IDWriteFontFace3,
242    ) -> HRESULT,
243    fn CreateFontFaceWithSimulations(
244        fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
245        fontFace: *mut *mut IDWriteFontFace3,
246    ) -> HRESULT,
247    fn Equals(
248        fontFaceReference: *mut IDWriteFontFaceReference,
249    ) -> BOOL,
250    fn GetFontFaceIndex() -> UINT32,
251    fn GetSimulations() -> DWRITE_FONT_SIMULATIONS,
252    fn GetFontFile(
253        fontFile: *mut *mut IDWriteFontFile,
254    ) -> HRESULT,
255    fn GetLocalFileSize() -> UINT64,
256    fn GetFileSize() -> UINT64,
257    fn GetFileTime(
258        lastWriteTime: *mut FILETIME,
259    ) -> HRESULT,
260    fn GetLocality() -> DWRITE_LOCALITY,
261    fn EnqueueFontDownloadRequest() -> HRESULT,
262    fn EnqueueCharacterDownloadRequest(
263        characters: *const WCHAR,
264        characterCount: UINT32,
265    ) -> HRESULT,
266    fn EnqueueGlyphDownloadRequest(
267        glyphIndices: *const UINT16,
268        glyphCount: UINT32,
269    ) -> HRESULT,
270    fn EnqueueFileFragmentDownloadRequest(
271        fileOffset: UINT64,
272        fragmentSize: UINT64,
273    ) -> HRESULT,
274}}
275RIDL!{#[uuid(0x29748ed6, 0x8c9c, 0x4a6a, 0xbe, 0x0b, 0xd9, 0x12, 0xe8, 0x53, 0x89, 0x44)]
276interface IDWriteFont3(IDWriteFont3Vtbl): IDWriteFont2(IDWriteFont2Vtbl) {
277    fn CreateFontFace(
278        fontFace: *mut *mut IDWriteFontFace3,
279    ) -> HRESULT,
280    fn Equals(
281        font: *mut IDWriteFont,
282    ) -> BOOL,
283    fn GetFontFaceReference(
284        fontFaceReference: *mut *mut IDWriteFontFaceReference,
285    ) -> HRESULT,
286    fn HasCharacter(
287        unicodeValue: UINT32,
288    ) -> BOOL,
289    fn GetLocality() -> DWRITE_LOCALITY,
290}}
291RIDL!{#[uuid(0xd37d7598, 0x09be, 0x4222, 0xa2, 0x36, 0x20, 0x81, 0x34, 0x1c, 0xc1, 0xf2)]
292interface IDWriteFontFace3(IDWriteFontFace3Vtbl):
293    IDWriteFontFace2(IDWriteFontFace2Vtbl) {
294    fn GetFontFaceReference(
295        fontFaceReference: *mut *mut IDWriteFontFaceReference,
296    ) -> HRESULT,
297    fn GetPanose(
298        panose: *mut DWRITE_PANOSE,
299    ) -> (),
300    fn GetWeight() -> DWRITE_FONT_WEIGHT,
301    fn GetStretch() -> DWRITE_FONT_STRETCH,
302    fn GetStyle() -> DWRITE_FONT_STYLE,
303    fn GetFamilyNames(
304        names: *mut *mut IDWriteLocalizedStrings,
305    ) -> HRESULT,
306    fn GetFaceNames(
307        names: *mut *mut IDWriteLocalizedStrings,
308    ) -> HRESULT,
309    fn GetInformationalStrings(
310        informationalStringID: DWRITE_INFORMATIONAL_STRING_ID,
311        informationalStrings: *mut *mut IDWriteLocalizedStrings,
312        exists: *mut BOOL,
313    ) -> HRESULT,
314    fn HasCharacter(
315        unicodeValue: UINT32,
316    ) -> BOOL,
317    fn GetRecommendedRenderingMode(
318        fontEmSize: FLOAT,
319        dpiX: FLOAT,
320        dpiY: FLOAT,
321        transform: *const DWRITE_MATRIX,
322        isSideways: BOOL,
323        outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
324        measuringMode: DWRITE_MEASURING_MODE,
325        renderingParams: *mut IDWriteRenderingParams,
326        renderingMode: *mut DWRITE_RENDERING_MODE1,
327        gridFitMode: *mut DWRITE_GRID_FIT_MODE,
328    ) -> HRESULT,
329    fn IsCharacterLocal(
330        unicodeValue: UINT32,
331    ) -> BOOL,
332    fn IsGlyphLocal(
333        glyphId: UINT16,
334    ) -> BOOL,
335    fn AreCharactersLocal(
336        characters: *const WCHAR,
337        characterCount: UINT32,
338        enqueueIfNotLocal: BOOL,
339        isLocal: *mut BOOL,
340    ) -> HRESULT,
341    fn AreGlyphsLocal(
342        glyphIndices: *const UINT16,
343        glyphCount: UINT32,
344        enqueueIfNotLocal: BOOL,
345        isLocal: *mut BOOL,
346    ) -> HRESULT,
347}}
348RIDL!{#[uuid(0xcfee3140, 0x1157, 0x47ca, 0x8b, 0x85, 0x31, 0xbf, 0xcf, 0x3f, 0x2d, 0x0e)]
349interface IDWriteStringList(IDWriteStringListVtbl): IUnknown(IUnknownVtbl) {
350    fn GetCount() -> UINT32,
351    fn GetLocaleNameLength(
352        listIndex: UINT32,
353        length: *mut UINT32,
354    ) -> HRESULT,
355    fn GetLocaleName(
356        listIndex: UINT32,
357        localeName: *mut WCHAR,
358        size: UINT32,
359    ) -> HRESULT,
360    fn GetStringLength(
361        listIndex: UINT32,
362        length: *mut UINT32,
363    ) -> HRESULT,
364    fn GetString(
365        listIndex: UINT32,
366        stringBuffer: *mut WCHAR,
367        stringBufferSize: UINT32,
368    ) -> HRESULT,
369}}
370RIDL!{#[uuid(0xb06fe5b9, 0x43ec, 0x4393, 0x88, 0x1b, 0xdb, 0xe4, 0xdc, 0x72, 0xfd, 0xa7)]
371interface IDWriteFontDownloadListener(IDWriteFontDownloadListenerVtbl):
372    IUnknown(IUnknownVtbl) {
373    fn DownloadCompleted(
374        downloadQueue: *mut IDWriteFontDownloadQueue,
375        context: *mut IUnknown,
376        downloadResult: HRESULT,
377    ) -> (),
378}}
379RIDL!{#[uuid(0xb71e6052, 0x5aea, 0x4fa3, 0x83, 0x2e, 0xf6, 0x0d, 0x43, 0x1f, 0x7e, 0x91)]
380interface IDWriteFontDownloadQueue(IDWriteFontDownloadQueueVtbl):
381    IUnknown(IUnknownVtbl) {
382    fn AddListener(
383        listener: *mut IDWriteFontDownloadListener,
384        token: *mut UINT32,
385    ) -> HRESULT,
386    fn RemoveListener(
387        token: UINT32,
388    ) -> HRESULT,
389    fn IsEmpty() -> BOOL,
390    fn BeginDownload(
391        context: *mut IUnknown,
392    ) -> HRESULT,
393    fn CancelDownload() -> HRESULT,
394    fn GetGenerationCount() -> UINT64,
395}}
396RIDL!{#[uuid(0x4556be70, 0x3abd, 0x4f70, 0x90, 0xbe, 0x42, 0x17, 0x80, 0xa6, 0xf5, 0x15)]
397interface IDWriteGdiInterop1(IDWriteGdiInterop1Vtbl):
398    IDWriteGdiInterop(IDWriteGdiInteropVtbl) {
399    fn CreateFontFromLOGFONT(
400        logFont: *const LOGFONTW,
401        fontCollection: *mut IDWriteFontCollection,
402        font: *mut *mut IDWriteFont,
403    ) -> HRESULT,
404    fn GetFontSignature_2(
405        fontFace: *mut IDWriteFontFace,
406        fontSignature: *mut FONTSIGNATURE,
407    ) -> HRESULT,
408    fn GetFontSignature_1(
409        font: *mut IDWriteFont,
410        fontSignature: *mut FONTSIGNATURE,
411    ) -> HRESULT,
412    fn GetMatchingFontsByLOGFONT(
413        logFont: *const LOGFONTW,
414        fontSet: *mut IDWriteFontSet,
415        filteredSet: *mut *mut IDWriteFontSet,
416    ) -> HRESULT,
417}}
418STRUCT!{struct DWRITE_LINE_METRICS1 {
419    length: UINT32,
420    trailingWhitespaceLength: UINT32,
421    newlineLength: UINT32,
422    height: FLOAT,
423    baseline: FLOAT,
424    isTrimmed: BOOL,
425    leadingBefore: FLOAT,
426    leadingAfter: FLOAT,
427}}
428ENUM!{enum DWRITE_FONT_LINE_GAP_USAGE {
429    DWRITE_FONT_LINE_GAP_USAGE_DEFAULT,
430    DWRITE_FONT_LINE_GAP_USAGE_DISABLED,
431    DWRITE_FONT_LINE_GAP_USAGE_ENABLED,
432}}
433STRUCT!{struct DWRITE_LINE_SPACING {
434    method: DWRITE_LINE_SPACING_METHOD,
435    height: FLOAT,
436    baseline: FLOAT,
437    leadingBefore: FLOAT,
438    fontLineGapUsage: DWRITE_FONT_LINE_GAP_USAGE,
439}}
440RIDL!{#[uuid(0xf67e0edd, 0x9e3d, 0x4ecc, 0x8c, 0x32, 0x41, 0x83, 0x25, 0x3d, 0xfe, 0x70)]
441interface IDWriteTextFormat2(IDWriteTextFormat2Vtbl):
442    IDWriteTextFormat1(IDWriteTextFormat1Vtbl) {
443    fn SetLineSpacing(
444        lineSpacingOptions: *const DWRITE_LINE_SPACING,
445    ) -> HRESULT,
446    fn GetLineSpacing(
447        lineSpacingOptions: *mut DWRITE_LINE_SPACING,
448    ) -> HRESULT,
449}}
450RIDL!{#[uuid(0x07ddcd52, 0x020e, 0x4de8, 0xac, 0x33, 0x6c, 0x95, 0x3d, 0x83, 0xf9, 0x2d)]
451interface IDWriteTextLayout3(IDWriteTextLayout3Vtbl):
452    IDWriteTextLayout2(IDWriteTextLayout2Vtbl) {
453    fn InvalidateLayout() -> HRESULT,
454    fn SetLineSpacing(
455        lineSpacingOptions: *const DWRITE_LINE_SPACING,
456    ) -> HRESULT,
457    fn GetLineSpacing(
458        lineSpacingOptions: *mut DWRITE_LINE_SPACING,
459    ) -> HRESULT,
460    fn GetLineMetrics(
461        lineMetrics: *mut DWRITE_LINE_METRICS1,
462        maxLineCount: UINT32,
463        actualLineCount: *mut UINT32,
464    ) -> HRESULT,
465}}
466RIDL!{#[uuid(0x27f2a904, 0x4eb8, 0x441d, 0x96, 0x78, 0x05, 0x63, 0xf5, 0x3e, 0x3e, 0x2f)]
467interface IDWriteFontFace4(IDWriteFontFace4Vtbl): IDWriteFontFace3(IDWriteFontFace3Vtbl) {
468    fn GetGlyphImageFormats_2(
469        glyph: UINT16,
470        ppemFirst: UINT32,
471        ppemLast: UINT32,
472        formats: *mut DWRITE_GLYPH_IMAGE_FORMATS,
473    ) -> HRESULT,
474    fn GetGlyphImageFormats_1() -> DWRITE_GLYPH_IMAGE_FORMATS,
475    fn GetGlyphImageData(
476        glyph: UINT16,
477        ppem: UINT32,
478        format: DWRITE_GLYPH_IMAGE_FORMATS,
479        data: *mut DWRITE_GLYPH_IMAGE_DATA,
480        context: *mut *mut c_void,
481    ) -> HRESULT,
482    fn ReleaseGlyphImageData(
483        context: *mut c_void,
484    ) -> (),
485}}
486ENUM!{enum DWRITE_FONT_AXIS_TAG {
487    DWRITE_FONT_AXIS_TAG_WEIGHT = 0x74686777,
488    DWRITE_FONT_AXIS_TAG_WIDTH = 0x68746477,
489    DWRITE_FONT_AXIS_TAG_SLANT = 0x746e6c73,
490    DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = 0x7a73706f,
491    DWRITE_FONT_AXIS_TAG_ITALIC = 0x6c617469,
492}}
493STRUCT!{struct DWRITE_FONT_AXIS_VALUE {
494    axisTag: DWRITE_FONT_AXIS_TAG,
495    value: FLOAT,
496}}
497STRUCT!{struct DWRITE_FONT_AXIS_RANGE {
498    axisTag: DWRITE_FONT_AXIS_TAG,
499    minValue: FLOAT,
500    maxValue: FLOAT,
501}}
502ENUM!{enum DWRITE_FONT_AXIS_ATTRIBUTES {
503    DWRITE_FONT_AXIS_ATTRIBUTES_NONE,
504    DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE,
505    DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN,
506}}
507RIDL!{#[uuid(0x98eff3a5, 0xb667, 0x479a, 0xb1, 0x45, 0xe2, 0xfa, 0x5b, 0x9f, 0xdc, 0x29)]
508interface IDWriteFontFace5(IDWriteFontFace5Vtbl): IDWriteFontFace4(IDWriteFontFace4Vtbl) {
509    fn GetFontAxisValueCount() -> UINT32,
510    fn GetFontAxisValues(
511        values: *mut DWRITE_FONT_AXIS_VALUE,
512        valueCount: UINT32,
513    ) -> HRESULT,
514    fn HasVariations() -> BOOL,
515    fn GetFontResource(
516        resource: *mut *mut IDWriteFontResource,
517    ) -> HRESULT,
518    fn Equals(
519        fontFace: *mut IDWriteFontFace,
520    ) -> BOOL,
521}}
522RIDL!{#[uuid(0xc081fe77, 0x2fd1, 0x41ac, 0xa5, 0xa3, 0x34, 0x98, 0x3c, 0x4b, 0xa6, 0x1a)]
523interface IDWriteFontFaceReference1(IDWriteFontFaceReference1Vtbl):
524    IDWriteFontFaceReference(IDWriteFontFaceReferenceVtbl) {
525    fn CreateFontFace(
526        fontFace: *mut *mut IDWriteFontFace5,
527    ) -> HRESULT,
528    fn GetFontAxisValueCount() -> UINT32,
529    fn GetFontAxisValues(
530        values: *mut DWRITE_FONT_AXIS_VALUE,
531        numValues: UINT32,
532    ) -> HRESULT,
533}}
534RIDL!{#[uuid(0x1f803a76, 0x6871, 0x48e8, 0x98, 0x7f, 0xb9, 0x75, 0x55, 0x1c, 0x50, 0xf2)]
535interface IDWriteFontResource(IDWriteFontResourceVtbl): IUnknown(IUnknownVtbl) {
536    fn GetFontFile(
537        fontFile: *mut *mut IDWriteFontFile,
538    ) -> HRESULT,
539    fn GetFontFaceIndex() -> UINT32,
540    fn GetFontAxisCount() -> UINT32,
541    fn GetDefaultFontAxisValues(
542        values: *const DWRITE_FONT_AXIS_VALUE,
543        numValues: UINT32,
544    ) -> HRESULT,
545    fn GetFontAxisRanges(
546        ranges: *const DWRITE_FONT_AXIS_RANGE,
547        numRanges: UINT32,
548    ) -> HRESULT,
549    fn GetFontAxisAttributes(
550        axis: UINT32,
551    ) -> DWRITE_FONT_AXIS_ATTRIBUTES,
552    fn GetAxisNames(
553        axis: UINT32,
554        names: *mut *mut IDWriteLocalizedStrings,
555    ) -> HRESULT,
556    fn GetAxisValueNameCount(
557        axis: UINT32,
558    ) -> UINT32,
559    fn GetAxisValueNames(
560        axis: UINT32,
561        axisValue: UINT32,
562        axisRange: *mut DWRITE_FONT_AXIS_RANGE,
563        names: *mut *mut IDWriteLocalizedStrings,
564    ) -> HRESULT,
565    fn HasVariations() -> BOOL,
566    fn CreateFontFace(
567        simulations: DWRITE_FONT_SIMULATIONS,
568        axisValues: *const DWRITE_FONT_AXIS_VALUE,
569        numValues: UINT32,
570        fontFace: *mut *mut IDWriteFontFace5,
571    ) -> HRESULT,
572    fn CreateFontFaceReference(
573        simulations: DWRITE_FONT_SIMULATIONS,
574        axisValues: *const DWRITE_FONT_AXIS_VALUE,
575        numValues: UINT32,
576        reference: *mut *mut IDWriteFontFaceReference1,
577    ) -> HRESULT,
578}}