1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 
7 #ifndef DWRITE_3_H_INCLUDED
8 #define DWRITE_3_H_INCLUDED
9 
10 #include <dwrite_2.h>
11 
12 #define DWRITE_MAKE_FONT_AXIS_TAG(a,b,c,d) \
13     (static_cast<DWRITE_FONT_AXIS_TAG>(DWRITE_MAKE_OPENTYPE_TAG(a,b,c,d)))
14 
15 enum DWRITE_RENDERING_MODE1 {
16     DWRITE_RENDERING_MODE1_DEFAULT = DWRITE_RENDERING_MODE_DEFAULT,
17     DWRITE_RENDERING_MODE1_ALIASED = DWRITE_RENDERING_MODE_ALIASED,
18     DWRITE_RENDERING_MODE1_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC,
19     DWRITE_RENDERING_MODE1_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL,
20     DWRITE_RENDERING_MODE1_NATURAL = DWRITE_RENDERING_MODE_NATURAL,
21     DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
22     DWRITE_RENDERING_MODE1_OUTLINE = DWRITE_RENDERING_MODE_OUTLINE,
23     DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED
24 };
25 
26 enum DWRITE_FONT_AXIS_TAG : UINT32 {
27     DWRITE_FONT_AXIS_TAG_WEIGHT       = DWRITE_MAKE_FONT_AXIS_TAG('w','g','h','t'),
28     DWRITE_FONT_AXIS_TAG_WIDTH        = DWRITE_MAKE_FONT_AXIS_TAG('w','d','t','h'),
29     DWRITE_FONT_AXIS_TAG_SLANT        = DWRITE_MAKE_FONT_AXIS_TAG('s','l','n','t'),
30     DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = DWRITE_MAKE_FONT_AXIS_TAG('o','p','s','z'),
31     DWRITE_FONT_AXIS_TAG_ITALIC       = DWRITE_MAKE_FONT_AXIS_TAG('i','t','a','l')
32 };
33 
34 enum DWRITE_FONT_AXIS_ATTRIBUTES {
35     DWRITE_FONT_AXIS_ATTRIBUTES_NONE     = 0x0000,
36     DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE = 0x0001,
37     DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN   = 0x0002
38 };
39 
40 struct DWRITE_GLYPH_IMAGE_DATA {
41     void const *imageData;
42     UINT32 imageDataSize;
43     UINT32 uniqueDataId;
44     UINT32 pixelsPerEm;
45     D2D1_SIZE_U pixelSize;
46     D2D1_POINT_2L horizontalLeftOrigin;
47     D2D1_POINT_2L horizontalRightOrigin;
48     D2D1_POINT_2L verticalTopOrigin;
49     D2D1_POINT_2L verticalBottomOrigin;
50 };
51 
52 struct DWRITE_FONT_AXIS_VALUE {
53     DWRITE_FONT_AXIS_TAG axisTag;
54     FLOAT value;
55 };
56 
57 struct DWRITE_FONT_AXIS_RANGE {
58     DWRITE_FONT_AXIS_TAG axisTag;
59     FLOAT minValue;
60     FLOAT maxValue;
61 };
62 
63 interface IDWriteFontResource;
64 interface IDWriteFontFaceReference1;
65 interface IDWriteFontFaceReference;
66 
67 #undef  INTERFACE
68 #define INTERFACE IDWriteFontFace3
DECLARE_INTERFACE_(IDWriteFontFace3,IDWriteFontFace2)69 DECLARE_INTERFACE_(IDWriteFontFace3,IDWriteFontFace2)
70 {
71     BEGIN_INTERFACE
72 
73 #ifndef __cplusplus
74     /* IUnknown methods */
75     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
76     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
77     STDMETHOD_(ULONG, Release)(THIS) PURE;
78 
79     /* IDWriteFontFace methods */
80     STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
81 
82     STDMETHOD(GetFiles)(THIS_
83         UINT32 *numberOfFiles,
84         IDWriteFontFile **fontFiles) PURE;
85 
86     STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
87     STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
88     STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
89 
90     STDMETHOD_(void, GetMetrics)(THIS_
91         DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
92 
93     STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
94 
95     STDMETHOD(GetDesignGlyphMetrics)(THIS_
96         UINT16 const *glyphIndices,
97         UINT32 glyphCount,
98         DWRITE_GLYPH_METRICS *glyphMetrics,
99         WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
100 
101     STDMETHOD(GetGlyphIndices)(THIS_
102         UINT32 const *codePoints,
103         UINT32 codePointCount,
104         UINT16 *glyphIndices) PURE;
105 
106     STDMETHOD(TryGetFontTable)(THIS_
107         UINT32 openTypeTableTag,
108         const void **tableData,
109         UINT32 *tableSize,
110         void **tableContext,
111         WINBOOL *exists) PURE;
112 
113     STDMETHOD_(void, ReleaseFontTable)(THIS_
114         void *tableContext) PURE;
115 
116     STDMETHOD(GetGlyphRunOutline)(THIS_
117         FLOAT emSize,
118         UINT16 const *glyphIndices,
119         FLOAT const *glyphAdvances,
120         DWRITE_GLYPH_OFFSET const *glyphOffsets,
121         UINT32 glyphCount,
122         WINBOOL isSideways,
123         WINBOOL isRightToLeft,
124         IDWriteGeometrySink *geometrySink) PURE;
125 
126     STDMETHOD(GetRecommendedRenderingMode)(THIS_
127         FLOAT emSize,
128         FLOAT pixelsPerDip,
129         DWRITE_MEASURING_MODE measuringMode,
130         IDWriteRenderingParams *renderingParams,
131         DWRITE_RENDERING_MODE *renderingMode) PURE;
132 
133     STDMETHOD(GetGdiCompatibleMetrics)(THIS_
134         FLOAT emSize,
135         FLOAT pixelsPerDip,
136         DWRITE_MATRIX const *transform,
137         DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
138 
139     STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
140         FLOAT emSize,
141         FLOAT pixelsPerDip,
142         DWRITE_MATRIX const *transform,
143         WINBOOL useGdiNatural,
144         UINT16 const *glyphIndices,
145         UINT32 glyphCount,
146         DWRITE_GLYPH_METRICS *glyphMetrics,
147         WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
148 
149     /* IDWriteFontFace1 methods */
150     STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
151     STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
152     STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
153     STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
154     STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
155     STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
156     STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
157             UINT16 const*,INT32*) PURE;
158     STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
159     STDMETHOD_(BOOL, HasKerningPairs)(THIS);
160     STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
161             DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
162     STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
163     STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
164 
165     /* IDWriteFontFace2 methods */
166     STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
167     STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
168     STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
169         STDMETHOD(GetPaletteEntries)(THIS_
170         UINT32 colorPaletteIndex,
171         UINT32 firstEntryIndex,
172         UINT32 entryCount,
173         DWRITE_COLOR_F* paletteEntries
174         ) PURE;
175 
176     STDMETHOD(GetRecommendedRenderingMode)(THIS_
177         FLOAT fontEmSize,
178         FLOAT dpiX,
179         FLOAT dpiY,
180         DWRITE_MATRIX const* transform,
181         BOOL isSideways,
182         DWRITE_OUTLINE_THRESHOLD outlineThreshold,
183         DWRITE_MEASURING_MODE measuringMode,
184         IDWriteRenderingParams* renderingParams,
185         DWRITE_RENDERING_MODE* renderingMode,
186         DWRITE_GRID_FIT_MODE* gridFitMode
187         ) PURE;
188 #endif
189 
190     /* IDWriteFontFace3 methods */
191     STDMETHOD(GetFontFaceReference)(THIS_ IDWriteFontFaceReference **fontFaceReference) PURE;
192     STDMETHOD_(void, GetPanose)(THIS_ DWRITE_PANOSE *panose) PURE;
193     STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
194     STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
195     STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
196     STDMETHOD(GetFamilyNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
197     STDMETHOD(GetFaceNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
198     STDMETHOD(GetInformationalStrings)(THIS_ DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
199         IDWriteLocalizedStrings **informationalStrings, BOOL *exists) PURE;
200     STDMETHOD_(BOOL, HasCharacter)(THIS_ UINT32 unicodeValue) PURE;
201     STDMETHOD(GetRecommendedRenderingMode)(THIS_ FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY,
202         DWRITE_MATRIX const *transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold,
203         DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams,
204         DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode) PURE;
205 
206 #ifdef __cplusplus
207     using IDWriteFontFace2::GetRecommendedRenderingMode;
208 #endif
209 
210     STDMETHOD_(BOOL, IsCharacterLocal)(THIS_ UINT32 unicodeValue) PURE;
211     STDMETHOD_(BOOL, IsGlyphLocal)(THIS_ UINT16 glyphId) PURE;
212     STDMETHOD(AreCharactersLocal)(THIS_ WCHAR const *characters, UINT32 characterCount,
213         BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
214     STDMETHOD(AreGlyphsLocal)(THIS_ UINT16 const *glyphIndices, UINT32 glyphCount,
215         BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
216 
217     END_INTERFACE
218 };
219 
220 __CRT_UUID_DECL(IDWriteFontFace3, 0xd37d7598,0x09be,0x4222,0xa2,0x36,0x20,0x81,0x34,0x1c,0xc1,0xf2)
221 
222 #undef  INTERFACE
223 #define INTERFACE IDWriteFontFace4
DECLARE_INTERFACE_(IDWriteFontFace4,IDWriteFontFace3)224 DECLARE_INTERFACE_(IDWriteFontFace4,IDWriteFontFace3)
225 {
226     BEGIN_INTERFACE
227 
228 #ifndef __cplusplus
229     /* IUnknown methods */
230     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
231     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
232     STDMETHOD_(ULONG, Release)(THIS) PURE;
233 
234     /* IDWriteFontFace methods */
235     STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
236 
237     STDMETHOD(GetFiles)(THIS_
238         UINT32 *numberOfFiles,
239         IDWriteFontFile **fontFiles) PURE;
240 
241     STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
242     STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
243     STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
244 
245     STDMETHOD_(void, GetMetrics)(THIS_
246         DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
247 
248     STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
249 
250     STDMETHOD(GetDesignGlyphMetrics)(THIS_
251         UINT16 const *glyphIndices,
252         UINT32 glyphCount,
253         DWRITE_GLYPH_METRICS *glyphMetrics,
254         WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
255 
256     STDMETHOD(GetGlyphIndices)(THIS_
257         UINT32 const *codePoints,
258         UINT32 codePointCount,
259         UINT16 *glyphIndices) PURE;
260 
261     STDMETHOD(TryGetFontTable)(THIS_
262         UINT32 openTypeTableTag,
263         const void **tableData,
264         UINT32 *tableSize,
265         void **tableContext,
266         WINBOOL *exists) PURE;
267 
268     STDMETHOD_(void, ReleaseFontTable)(THIS_
269         void *tableContext) PURE;
270 
271     STDMETHOD(GetGlyphRunOutline)(THIS_
272         FLOAT emSize,
273         UINT16 const *glyphIndices,
274         FLOAT const *glyphAdvances,
275         DWRITE_GLYPH_OFFSET const *glyphOffsets,
276         UINT32 glyphCount,
277         WINBOOL isSideways,
278         WINBOOL isRightToLeft,
279         IDWriteGeometrySink *geometrySink) PURE;
280 
281     STDMETHOD(GetRecommendedRenderingMode)(THIS_
282         FLOAT emSize,
283         FLOAT pixelsPerDip,
284         DWRITE_MEASURING_MODE measuringMode,
285         IDWriteRenderingParams *renderingParams,
286         DWRITE_RENDERING_MODE *renderingMode) PURE;
287 
288     STDMETHOD(GetGdiCompatibleMetrics)(THIS_
289         FLOAT emSize,
290         FLOAT pixelsPerDip,
291         DWRITE_MATRIX const *transform,
292         DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
293 
294     STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
295         FLOAT emSize,
296         FLOAT pixelsPerDip,
297         DWRITE_MATRIX const *transform,
298         WINBOOL useGdiNatural,
299         UINT16 const *glyphIndices,
300         UINT32 glyphCount,
301         DWRITE_GLYPH_METRICS *glyphMetrics,
302         WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
303 
304     /* IDWriteFontFace1 methods */
305     STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
306     STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
307     STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
308     STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
309     STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
310     STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
311     STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
312             UINT16 const*,INT32*) PURE;
313     STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
314     STDMETHOD_(BOOL, HasKerningPairs)(THIS);
315     STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
316             DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
317     STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
318     STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
319 
320     /* IDWriteFontFace2 methods */
321     STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
322     STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
323     STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
324         STDMETHOD(GetPaletteEntries)(THIS_
325         UINT32 colorPaletteIndex,
326         UINT32 firstEntryIndex,
327         UINT32 entryCount,
328         DWRITE_COLOR_F* paletteEntries
329         ) PURE;
330 
331     STDMETHOD(GetRecommendedRenderingMode)(THIS_
332         FLOAT fontEmSize,
333         FLOAT dpiX,
334         FLOAT dpiY,
335         DWRITE_MATRIX const* transform,
336         BOOL isSideways,
337         DWRITE_OUTLINE_THRESHOLD outlineThreshold,
338         DWRITE_MEASURING_MODE measuringMode,
339         IDWriteRenderingParams* renderingParams,
340         DWRITE_RENDERING_MODE* renderingMode,
341         DWRITE_GRID_FIT_MODE* gridFitMode
342         ) PURE;
343 
344     /* IDWriteFontFace3 methods */
345     STDMETHOD(GetFontFaceReference)(THIS_ IDWriteFontFaceReference **fontFaceReference) PURE;
346     STDMETHOD_(void, GetPanose)(THIS_ DWRITE_PANOSE *panose) PURE;
347     STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
348     STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
349     STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
350     STDMETHOD(GetFamilyNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
351     STDMETHOD(GetFaceNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
352     STDMETHOD(GetInformationalStrings)(THIS_ DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
353         IDWriteLocalizedStrings **informationalStrings, BOOL *exists) PURE;
354     STDMETHOD_(BOOL, HasCharacter)(THIS_ UINT32 unicodeValue) PURE;
355     STDMETHOD(GetRecommendedRenderingMode)(THIS_ FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY,
356         DWRITE_MATRIX const *transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold,
357         DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams,
358         DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode) PURE;
359     STDMETHOD_(BOOL, IsCharacterLocal)(THIS_ UINT32 unicodeValue) PURE;
360     STDMETHOD_(BOOL, IsGlyphLocal)(THIS_ UINT16 glyphId) PURE;
361     STDMETHOD(AreCharactersLocal)(THIS_ WCHAR const *characters, UINT32 characterCount,
362         BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
363     STDMETHOD(AreGlyphsLocal)(THIS_ UINT16 const *glyphIndices, UINT32 glyphCount,
364         BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
365 #endif
366 
367     /* IDWriteFontFace4 methods */
368     STDMETHOD_(DWRITE_GLYPH_IMAGE_FORMATS, GetGlyphImageFormats)(THIS) PURE;
369     STDMETHOD(GetGlyphImageFormats)(THIS_ UINT16 glyphId, UINT32 pixelsPerEmFirst,
370         UINT32 pixelsPerEmLast, DWRITE_GLYPH_IMAGE_FORMATS *glyphImageFormats) PURE;
371     STDMETHOD(GetGlyphImageData)(THIS_ UINT16 glyphId, UINT32 pixelsPerEm,
372         DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat, DWRITE_GLYPH_IMAGE_DATA *glyphData,
373         void **glyphDataContext) PURE;
374     STDMETHOD_(void, ReleaseGlyphImageData)(THIS_ void *glyphDataContext) PURE;
375 
376     END_INTERFACE
377 };
378 
379 __CRT_UUID_DECL(IDWriteFontFace4, 0x27f2a904,0x4eb8,0x441d,0x96,0x78,0x05,0x63,0xf5,0x3e,0x3e,0x2f)
380 
381 #undef  INTERFACE
382 #define INTERFACE IDWriteFontFace5
DECLARE_INTERFACE_(IDWriteFontFace5,IDWriteFontFace4)383 DECLARE_INTERFACE_(IDWriteFontFace5,IDWriteFontFace4)
384 {
385     BEGIN_INTERFACE
386 
387 #ifndef __cplusplus
388     /* IUnknown methods */
389     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
390     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
391     STDMETHOD_(ULONG, Release)(THIS) PURE;
392 
393     /* IDWriteFontFace methods */
394     STDMETHOD_(DWRITE_FONT_FACE_TYPE, GetType)(THIS) PURE;
395 
396     STDMETHOD(GetFiles)(THIS_
397         UINT32 *numberOfFiles,
398         IDWriteFontFile **fontFiles) PURE;
399 
400     STDMETHOD_(UINT32, GetIndex)(THIS) PURE;
401     STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)(THIS) PURE;
402     STDMETHOD_(WINBOOL, IsSymbolFont)(THIS) PURE;
403 
404     STDMETHOD_(void, GetMetrics)(THIS_
405         DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
406 
407     STDMETHOD_(UINT16, GetGlyphCount)(THIS) PURE;
408 
409     STDMETHOD(GetDesignGlyphMetrics)(THIS_
410         UINT16 const *glyphIndices,
411         UINT32 glyphCount,
412         DWRITE_GLYPH_METRICS *glyphMetrics,
413         WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
414 
415     STDMETHOD(GetGlyphIndices)(THIS_
416         UINT32 const *codePoints,
417         UINT32 codePointCount,
418         UINT16 *glyphIndices) PURE;
419 
420     STDMETHOD(TryGetFontTable)(THIS_
421         UINT32 openTypeTableTag,
422         const void **tableData,
423         UINT32 *tableSize,
424         void **tableContext,
425         WINBOOL *exists) PURE;
426 
427     STDMETHOD_(void, ReleaseFontTable)(THIS_
428         void *tableContext) PURE;
429 
430     STDMETHOD(GetGlyphRunOutline)(THIS_
431         FLOAT emSize,
432         UINT16 const *glyphIndices,
433         FLOAT const *glyphAdvances,
434         DWRITE_GLYPH_OFFSET const *glyphOffsets,
435         UINT32 glyphCount,
436         WINBOOL isSideways,
437         WINBOOL isRightToLeft,
438         IDWriteGeometrySink *geometrySink) PURE;
439 
440     STDMETHOD(GetRecommendedRenderingMode)(THIS_
441         FLOAT emSize,
442         FLOAT pixelsPerDip,
443         DWRITE_MEASURING_MODE measuringMode,
444         IDWriteRenderingParams *renderingParams,
445         DWRITE_RENDERING_MODE *renderingMode) PURE;
446 
447     STDMETHOD(GetGdiCompatibleMetrics)(THIS_
448         FLOAT emSize,
449         FLOAT pixelsPerDip,
450         DWRITE_MATRIX const *transform,
451         DWRITE_FONT_METRICS *fontFaceMetrics) PURE;
452 
453     STDMETHOD(GetGdiCompatibleGlyphMetrics)(THIS_
454         FLOAT emSize,
455         FLOAT pixelsPerDip,
456         DWRITE_MATRIX const *transform,
457         WINBOOL useGdiNatural,
458         UINT16 const *glyphIndices,
459         UINT32 glyphCount,
460         DWRITE_GLYPH_METRICS *glyphMetrics,
461         WINBOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
462 
463     /* IDWriteFontFace1 methods */
464     STDMETHOD_(void, GetMetrics)(THIS_ DWRITE_FONT_METRICS1*) PURE;
465     STDMETHOD(GetGdiCompatibleMetrics)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,DWRITE_FONT_METRICS1*) PURE;
466     STDMETHOD_(void, GetCaretMetrics)(THIS_ DWRITE_CARET_METRICS*) PURE;
467     STDMETHOD(GetUnicodeRanges)(THIS_ UINT32, DWRITE_UNICODE_RANGE*,UINT32*) PURE;
468     STDMETHOD_(BOOL, IsMonospacedFont)(THIS) PURE;
469     STDMETHOD(GetDesignGlyphAdvances)(THIS_ UINT32,UINT16 const*,INT32*,BOOL isSideways __MINGW_DEF_ARG_VAL(FALSE)) PURE;
470     STDMETHOD(GetGdiCompatibleGlyphAdvances)(THIS_ FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,BOOL,UINT32,
471             UINT16 const*,INT32*) PURE;
472     STDMETHOD(GetKerningPairAdjustments)(THIS_ UINT32,UINT16 const*,INT32*) PURE;
473     STDMETHOD_(BOOL, HasKerningPairs)(THIS);
474     STDMETHOD(GetRecommendedRenderingMode)(FLOAT,FLOAT,FLOAT,DWRITE_MATRIX const*,BOOL,
475             DWRITE_OUTLINE_THRESHOLD,DWRITE_MEASURING_MODE,DWRITE_RENDERING_MODE*) PURE;
476     STDMETHOD(GetVerticalGlyphVariants)(THIS_ UINT32,UINT16 const*,UINT16*);
477     STDMETHOD_(BOOL, HasVerticalGlyphVariants)(THIS);
478 
479     /* IDWriteFontFace2 methods */
480     STDMETHOD_(BOOL, IsColorFont)(THIS) PURE;
481     STDMETHOD_(UINT32, GetColorPaletteCount)(THIS) PURE;
482     STDMETHOD_(UINT32, GetPaletteEntryCount)(THIS) PURE;
483         STDMETHOD(GetPaletteEntries)(THIS_
484         UINT32 colorPaletteIndex,
485         UINT32 firstEntryIndex,
486         UINT32 entryCount,
487         DWRITE_COLOR_F* paletteEntries
488         ) PURE;
489 
490     STDMETHOD(GetRecommendedRenderingMode)(THIS_
491         FLOAT fontEmSize,
492         FLOAT dpiX,
493         FLOAT dpiY,
494         DWRITE_MATRIX const* transform,
495         BOOL isSideways,
496         DWRITE_OUTLINE_THRESHOLD outlineThreshold,
497         DWRITE_MEASURING_MODE measuringMode,
498         IDWriteRenderingParams* renderingParams,
499         DWRITE_RENDERING_MODE* renderingMode,
500         DWRITE_GRID_FIT_MODE* gridFitMode
501         ) PURE;
502 
503     /* IDWriteFontFace3 methods */
504     STDMETHOD(GetFontFaceReference)(THIS_ IDWriteFontFaceReference **fontFaceReference) PURE;
505     STDMETHOD_(void, GetPanose)(THIS_ DWRITE_PANOSE *panose) PURE;
506     STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)(THIS) PURE;
507     STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)(THIS) PURE;
508     STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)(THIS) PURE;
509     STDMETHOD(GetFamilyNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
510     STDMETHOD(GetFaceNames)(THIS_ IDWriteLocalizedStrings **names) PURE;
511     STDMETHOD(GetInformationalStrings)(THIS_ DWRITE_INFORMATIONAL_STRING_ID informationalStringID,
512         IDWriteLocalizedStrings **informationalStrings, BOOL *exists) PURE;
513     STDMETHOD_(BOOL, HasCharacter)(THIS_ UINT32 unicodeValue) PURE;
514     STDMETHOD(GetRecommendedRenderingMode)(THIS_ FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY,
515         DWRITE_MATRIX const *transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold,
516         DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams,
517         DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode) PURE;
518     STDMETHOD_(BOOL, IsCharacterLocal)(THIS_ UINT32 unicodeValue) PURE;
519     STDMETHOD_(BOOL, IsGlyphLocal)(THIS_ UINT16 glyphId) PURE;
520     STDMETHOD(AreCharactersLocal)(THIS_ WCHAR const *characters, UINT32 characterCount,
521         BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
522     STDMETHOD(AreGlyphsLocal)(THIS_ UINT16 const *glyphIndices, UINT32 glyphCount,
523         BOOL enqueueIfNotLocal, BOOL *isLocal) PURE;
524 
525     /* IDWriteFontFace4 methods */
526     STDMETHOD_(DWRITE_GLYPH_IMAGE_FORMATS, GetGlyphImageFormats)(THIS) PURE;
527     STDMETHOD(GetGlyphImageFormats)(THIS_ UINT16 glyphId, UINT32 pixelsPerEmFirst,
528         UINT32 pixelsPerEmLast, DWRITE_GLYPH_IMAGE_FORMATS *glyphImageFormats) PURE;
529     STDMETHOD(GetGlyphImageData)(THIS_ UINT16 glyphId, UINT32 pixelsPerEm,
530         DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat, DWRITE_GLYPH_IMAGE_DATA *glyphData,
531         void **glyphDataContext) PURE;
532     STDMETHOD_(void, ReleaseGlyphImageData)(THIS_ void *glyphDataContext) PURE;
533 #endif
534 
535     /* IDWriteFontFace5 methods */
536     STDMETHOD_(UINT32, GetFontAxisValueCount)(THIS) PURE;
537     STDMETHOD(GetFontAxisValues)(THIS_ DWRITE_FONT_AXIS_VALUE *fontAxisValues,
538         UINT32 fontAxisValueCount) PURE;
539     STDMETHOD_(BOOL, HasVariations)(THIS) PURE;
540     STDMETHOD(GetFontResource)(THIS_ IDWriteFontResource **fontResource) PURE;
541     STDMETHOD_(BOOL, Equals)(THIS_ IDWriteFontFace *fontFace) PURE;
542 
543     END_INTERFACE
544 };
545 
546 __CRT_UUID_DECL(IDWriteFontFace5, 0x98eff3a5,0xb667,0x479a,0xb1,0x45,0xe2,0xfa,0x5b,0x9f,0xdc,0x29)
547 
548 #undef  INTERFACE
549 #define INTERFACE IDWriteFontResource
DECLARE_INTERFACE_(IDWriteFontResource,IUnknown)550 DECLARE_INTERFACE_(IDWriteFontResource,IUnknown)
551 {
552     BEGIN_INTERFACE
553 
554 #ifndef __cplusplus
555     /* IUnknown methods */
556     STDMETHOD(QueryInterface)(THIS_ REFIID riid, void **ppvObject) PURE;
557     STDMETHOD_(ULONG, AddRef)(THIS) PURE;
558     STDMETHOD_(ULONG, Release)(THIS) PURE;
559 #endif
560 
561     STDMETHOD(GetFontFile)(THIS_ IDWriteFontFile **fontFile) PURE;
562     STDMETHOD_(UINT32, GetFontFaceIndex)(THIS) PURE;
563     STDMETHOD_(UINT32, GetFontAxisCount)(THIS) PURE;
564     STDMETHOD(GetDefaultFontAxisValues)(THIS_ DWRITE_FONT_AXIS_VALUE *fontAxisValues,
565         UINT32 fontAxisValueCount) PURE;
566     STDMETHOD(GetFontAxisRanges)(THIS_ DWRITE_FONT_AXIS_RANGE *fontAxisRanges,
567         UINT32 fontAxisRangeCount) PURE;
568     STDMETHOD_(DWRITE_FONT_AXIS_ATTRIBUTES, GetFontAxisAttributes)(THIS_ UINT32 axisIndex) PURE;
569     STDMETHOD(GetAxisNames)(THIS_ UINT32 axisIndex, IDWriteLocalizedStrings **names) PURE;
570     STDMETHOD_(UINT32, GetAxisValueNameCount)(THIS_ UINT32 axisIndex) PURE;
571     STDMETHOD(GetAxisValueNames)(THIS_ UINT32 axisIndex, UINT32 axisValueIndex,
572         DWRITE_FONT_AXIS_RANGE* fontAxisRange, IDWriteLocalizedStrings **names) PURE;
573     STDMETHOD_(BOOL, HasVariations)(THIS) PURE;
574     STDMETHOD(CreateFontFace)(THIS_ DWRITE_FONT_SIMULATIONS fontSimulations,
575         DWRITE_FONT_AXIS_VALUE const *fontAxisValues, UINT32 fontAxisValueCount,
576         IDWriteFontFace5 **fontFace) PURE;
577     STDMETHOD(CreateFontFaceReference)(THIS_ DWRITE_FONT_SIMULATIONS fontSimulations,
578         DWRITE_FONT_AXIS_VALUE const *fontAxisValues, UINT32 fontAxisValueCount,
579         IDWriteFontFaceReference1 **fontFaceReference) PURE;
580 
581     END_INTERFACE
582 };
583 
584 __CRT_UUID_DECL(IDWriteFontResource, 0x1f803a76,0x6871,0x48e8,0x98,0x7f,0xb9,0x75,0x55,0x1c,0x50,0xf2)
585 
586 
587 #endif /* DWRITE_3_H_INCLUDED */
588