1 module aurora.directx.dwrite.dwrite_3;
2 
3 public import aurora.directx.com;
4 public import aurora.directx.dwrite.dwrite_2;
5 
6 public:
7 
8 ///
9 /// Constants
10 ///
11 
12 alias DWRITE_MAKE_OPENTYPE_TAG DWRITE_MAKE_FONT_AXIS_TAG;
13 
14 enum DWRITE_E_REMOTEFONT = 0x8898500DL;
15 enum DWRITE_E_DOWNLOADCANCELLED = 0x8898500EL;
16 enum DWRITE_E_DOWNLOADFAILED = 0x8898500FL;
17 enum DWRITE_E_TOOMANYDOWNLOADS = 0x88985010L;
18 
19 ///
20 /// Functions
21 ///
22 
23 ///
24 /// Enumerations
25 ///
26 
27 enum DWRITE_FONT_PROPERTY_ID : int
28 {
29     NONE,
30     WEIGHT_STRETCH_STYLE_FAMILY_NAME,
31     TYPOGRAPHIC_FAMILY_NAME,
32     WEIGHT_STRETCH_STYLE_FACE_NAME,
33     FULL_NAME,
34     WIN32_FAMILY_NAME,
35     POSTSCRIPT_NAME,
36     DESIGN_SCRIPT_LANGUAGE_TAG,
37     SUPPORTED_SCRIPT_LANGUAGE_TAG,
38     SEMANTIC_TAG,
39     WEIGHT,
40     STRETCH,
41     STYLE,
42     TYPOGRAPHIC_FACE_NAME,
43     TOTAL = STYLE + 1,
44     TOTAL_RS3 = TYPOGRAPHIC_FACE_NAME + 1,
45 
46     // Obsolete aliases kept to avoid breaking existing code.
47     PREFERRED_FAMILY_NAME = TYPOGRAPHIC_FAMILY_NAME,
48     FAMILY_NAME = WEIGHT_STRETCH_STYLE_FAMILY_NAME,
49     FACE_NAME = WEIGHT_STRETCH_STYLE_FACE_NAME,
50 }
51 
52 enum DWRITE_LOCALITY : int
53 {
54     REMOTE,
55     PARTIAL,
56     LOCAL,
57 }
58 
59 enum DWRITE_RENDERING_MODE1 : int
60 {
61     DEFAULT = DWRITE_RENDERING_MODE.DEFAULT,
62     ALIASED = DWRITE_RENDERING_MODE.ALIASED,
63     GDI_CLASSIC = DWRITE_RENDERING_MODE.GDI_CLASSIC,
64     GDI_NATURAL = DWRITE_RENDERING_MODE.GDI_NATURAL,
65     NATURAL = DWRITE_RENDERING_MODE.NATURAL,
66     NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE.NATURAL_SYMMETRIC,
67     OUTLINE = DWRITE_RENDERING_MODE.OUTLINE,
68     NATURAL_SYMMETRIC_DOWNSAMPLED,
69 }
70 
71 enum DWRITE_FONT_LINE_GAP_USAGE : int
72 {
73     DEFAULT,
74     DISABLED,
75     ENABLED
76 }
77 
78 enum DWRITE_CONTAINER_TYPE : int
79 {
80     UNKNOWN,
81     WOFF,
82     WOFF2
83 }
84 
85 enum DWRITE_FONT_AXIS_TAG : uint
86 {
87     WEIGHT         = DWRITE_MAKE_FONT_AXIS_TAG('w','g','h','t'),
88     WIDTH          = DWRITE_MAKE_FONT_AXIS_TAG('w','d','t','h'),
89     SLANT          = DWRITE_MAKE_FONT_AXIS_TAG('s','l','n','t'),
90     OPTICAL_SIZE   = DWRITE_MAKE_FONT_AXIS_TAG('o','p','s','z'),
91     ITALIC         = DWRITE_MAKE_FONT_AXIS_TAG('i','t','a','l'),
92 }
93 
94 enum DWRITE_FONT_FAMILY_MODEL : int
95 {
96     TYPOGRAPHIC,
97     WEIGHT_STRETCH_STYLE,
98 }
99 
100 enum DWRITE_AUTOMATIC_FONT_AXES : int
101 {
102     NONE = 0x0000,
103     OPTICAL_SIZE = 0x0001,
104 }
105 
106 enum DWRITE_FONT_AXIS_ATTRIBUTES : int
107 {
108     NONE = 0x0000,
109     VARIABLE = 0x0001,
110     HIDDEN = 0x0002,
111 }
112 
113 enum DWRITE_GLYPH_IMAGE_FORMATS : int
114 { 
115   NONE = 0x00000000,
116   TRUETYPE = 0x00000001,
117   CFF = 0x00000002,
118   COLR = 0x00000004,
119   SVG = 0x00000008,
120   PNG = 0x00000010,
121   JPEG = 0x00000020,
122   TIFF = 0x00000040,
123   PREMULTIPLIED_B8G8R8A8  = 0x00000080
124 }
125 
126 ///
127 /// Structures
128 ///
129 
130 struct DWRITE_FONT_PROPERTY
131 {
132     DWRITE_FONT_PROPERTY_ID propertyId;
133     const wchar* propertyValue;
134 	const wchar* localeName;
135 }
136 
137 struct DWRITE_LINE_SPACING
138 {
139     DWRITE_LINE_SPACING_METHOD method;
140     float height;
141     float baseline;
142     float leadingBefore;
143     DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage;
144 }
145 
146 struct DWRITE_LINE_METRICS1
147 {
148 	uint length;
149 	uint trailingWhitespaceLength;
150 	uint newlineLength;
151 	float height;
152 	float baseline;
153 	bool isTrimmed;
154     float leadingBefore;
155     float leadingAfter;
156 }
157 
158 struct DWRITE_COLOR_GLYPH_RUN1
159 {
160  	DWRITE_GLYPH_RUN glyphRun;
161 	DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;
162 	float baselineOriginX;
163 	float baselineOriginY;
164 	DWRITE_COLOR_F runColor;
165 	uint paletteIndex;
166     DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat;
167     DWRITE_MEASURING_MODE measuringMode;
168 }
169 
170 struct DWRITE_GLYPH_IMAGE_DATA
171 {
172     const void *imageData;
173     uint imageDataSize;
174     uint uniqueDataId;
175     uint pixelsPerEm;
176     D2D1_SIZE_U pixelSize;
177     D2D1_POINT_2L horizontalLeftOrigin;
178     D2D1_POINT_2L horizontalRightOrigin;
179     D2D1_POINT_2L verticalTopOrigin;
180     D2D1_POINT_2L verticalBottomOrigin;
181 }
182 
183 struct DWRITE_FILE_FRAGMENT
184 {
185     ulong fileOffset;
186     ulong fragmentSize;
187 }
188 
189 struct DWRITE_FONT_AXIS_VALUE
190 {
191     DWRITE_FONT_AXIS_TAG axisTag;
192     float value;
193 }
194 
195 struct DWRITE_FONT_AXIS_RANGE
196 {
197     DWRITE_FONT_AXIS_TAG axisTag;
198     float minValue;
199     float maxValue;
200 }
201 
202 ///
203 /// Interfaces
204 ///
205 
206 mixin(uuid!(IDWriteRenderingParams3, "B7924BAA-391B-412A-8C5C-E44CC2D867DC"));
207 public interface IDWriteRenderingParams3 : IDWriteRenderingParams2
208 {
209 extern(Windows):
210 	DWRITE_RENDERING_MODE1 GetRenderingMode1();
211 }
212 
213 mixin(uuid!(IDWriteFactory3, "9A1B41C3-D3BB-466A-87FC-FE67556A3B65"));
214 public interface IDWriteFactory3 : IDWriteFactory2
215 {
216 extern(Windows):
217 	HRESULT CreateCustomRenderingParams(float gamma, float enhancedContrast, float grayscaleEnhancedContrast, float clearTypeLevel, DWRITE_PIXEL_GEOMETRY pixelGeometry, DWRITE_RENDERING_MODE1 renderingMode, DWRITE_GRID_FIT_MODE gridFitMode, IDWriteRenderingParams3 *renderingParams);
218     HRESULT CreateFontCollectionFromFontSet(IDWriteFontSet fontset, IDWriteFontCollection1 *fontCollection);
219     HRESULT CreateFontFaceReference(const wchar* filePath, const FILETIME* lastWriteTime, uint faceIndex, DWRITE_FONT_SIMULATIONS fontSimulations, IDWriteFontFaceReference *fontFaceReference);
220     HRESULT CreateFontFaceReference(IDWriteFontFile fontFile, uint faceIndex, DWRITE_FONT_SIMULATIONS fontSimulations, IDWriteFontFaceReference *fontFaceReference);
221     HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder *fontSetBuilder);
222     HRESULT CreateGlyphRunAnalysis(const DWRITE_GLYPH_RUN *glyphRun, const DWRITE_MATRIX *transform, DWRITE_RENDERING_MODE1 renderingMode, DWRITE_MEASURING_MODE measuringMode, DWRITE_GRID_FIT_MODE gridFitMode, DWRITE_TEXT_ANTIALIAS_MODE antialiasMode, float baselineOriginX, float baselineOriginY, IDWriteGlyphRunAnalysis *glyphRunAnalysis);
223     HRESULT GetSystemFontCollection(bool includeDownloadableFonts, IDWriteFontCollection1 *fontCollection, bool includeDownloadableFonts = false);
224     HRESULT GetFontDownloadQueue(IDWriteFontDownloadQueue *fontDownloadQueue);
225     HRESULT GetSystemFontSet(IDWriteFontSet *fontSet);
226 }
227 
228 mixin(uuid!(IDWriteFontSet, "53585141-D9F8-4095-8321-D73CF6BD116B"));
229 public interface IDWriteFontSet : IUnknown
230 {
231 extern(Windows):
232     uint GetFontCount();
233     HRESULT GetFontFaceReference(uint listIndex, IDWriteFontFaceReference *fontFaceReference);
234 	HRESULT FindFontFace(IDWriteFontFace fontFace, uint *listIndex, bool *exists);
235     HRESULT FindFontFaceReference(IDWriteFontFaceReference fontFaceReference, uint *listIndex, bool *exists);
236     HRESULT GetPropertyValues(uint listIndex, DWRITE_FONT_PROPERTY_ID propertyId, bool *exists, IDWriteLocalizedStrings *values);
237     HRESULT GetPropertyValues(DWRITE_FONT_PROPERTY_ID propertyId, const wchar *preferredLocaleNames, IDWriteStringList *values);
238     HRESULT GetPropertyValues(DWRITE_FONT_PROPERTY_ID propertyId, IDWriteStringList *values);
239     HRESULT GetPropertyOccurrenceCount(const DWRITE_FONT_PROPERTY *property, uint *propertyOccurrenceCount);
240     HRESULT GetMatchingFonts(const wchar *familyName, DWRITE_FONT_WEIGHT fontWeight, DWRITE_FONT_STRETCH fontStretch, DWRITE_FONT_STYLE fontStyle, IDWriteFontSet *filteredSet);
241 }
242 
243 mixin(uuid!(IDWriteFontSetBuilder, "2F642AFE-9C68-4F40-B8BE-457401AFCB3D"));
244 public interface IDWriteFontSetBuilder : IUnknown
245 {
246 extern(Windows):
247     HRESULT AddFontFaceReference(IDWriteFontFaceReference fontFaceReference);
248     HRESULT AddFontFaceReference(IDWriteFontFaceReference fontFaceReference, const DWRITE_FONT_PROPERTY *properties, uint propertyCount);
249     HRESULT AddFontSet(IDWriteFontSet fontSet);
250     HRESULT CreateFontSet(IDWriteFontSet *fontSet);
251 }
252 
253 mixin(uuid!(IDWriteFontCollection1, "53585141-D9F8-4095-8321-D73CF6BD116C"));
254 public interface IDWriteFontCollection1 : IDWriteFontCollection
255 {
256 extern(Windows):
257     HRESULT GetFontSet(IDWriteFontSet *fontSet);
258     HRESULT GetFontFamily(uint index, IDWriteFontFamily1* fontFamily);
259 }
260 
261 mixin(uuid!(IDWriteFontFamily1, "DA20D8EF-812A-4C43-9802-62EC4ABD7ADF"));
262 public interface IDWriteFontFamily1 : IDWriteFontFamily
263 {
264 extern(Windows):
265     HRESULT GetFont(uint listIndex, IDWriteFont3 *font);
266     DWRITE_LOCALITY GetFontLocality(uint listIndex);
267     HRESULT GetFontFaceReference(uint listIndex, IDWriteFontFaceReference *fontFaceReference);
268 }
269 
270 mixin(uuid!(IDWriteFontList1, "DA20D8EF-812A-4C43-9802-62EC4ABD7ADE"));
271 public interface IDWriteFontList1 : IDWriteFontList
272 {
273 extern(Windows):
274     HRESULT GetFont(uint listIndex, IDWriteFont3 *font);
275     DWRITE_LOCALITY GetFontLocality(uint listIndex);
276     HRESULT GetFontFaceReference(uint listIndex, IDWriteFontFaceReference *fontFaceReference);
277 }
278 
279 mixin(uuid!(IDWriteFontFaceReference, "5E7FA7CA-DDE3-424C-89F0-9FCD6FED58CD"));
280 public interface IDWriteFontFaceReference : IUnknown
281 {
282 extern(Windows):
283     HRESULT CreateFontFace(IDWriteFontFace3 *fontFace);
284     HRESULT CreateFontFaceWithSimulations(DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags, IDWriteFontFace3 *fontFace);
285     HRESULT EnqueueCharacterDownloadRequest(const wchar *characters, uint characterCount);
286     HRESULT EnqueueFileFragmentDownloadRequest(ulong fileOffset, ulong fragmentSize);
287     HRESULT EnqueueFontDownloadRequest();
288     HRESULT EnqueueGlyphDownloadRequest(const ushort *glyphIndices, uint glyphCount);
289     ulong GetFileSize();
290     HRESULT GetFileTime(FILETIME *lastWriteTime);
291     uint GetFontFaceIndex();
292     HRESULT GetFontFile(IDWriteFontFile *fontFile);
293     ulong GetLocalFileSize();
294     DWRITE_LOCALITY GetLocality();
295     DWRITE_FONT_SIMULATIONS GetSimulations();
296 }
297 
298 mixin(uuid!(IDWriteFont3, "DA20D8EF-812A-4C43-9802-62EC4ABD7ADE"));
299 public interface IDWriteFont3 : IDWriteFont2
300 {
301 extern(Windows):
302     HRESULT CreateFontFace(IDWriteFontFace3 *fontFace);
303     bool Equals(IDWriteFont font);
304     HRESULT GetFontFaceReference(IDWriteFontFaceReference *fontFaceReference);
305     DWRITE_LOCALITY GetLocality();
306 }
307 
308 mixin(uuid!(IDWriteFontFace3, "D37D7598-09BE-4222-A236-2081341CC1F2"));
309 public interface IDWriteFontFace3 : IDWriteFontFace2
310 {
311 extern(Windows):
312     HRESULT AreCharactersLocal(const wchar* characters, uint characterCount, bool enqueueIfNotLocal, bool *isLocal);
313     HRESULT AreGlyphsLocal(const ushort* glyphIndices, uint glyphCount, bool enqueueIfNotLocal, bool *isLocal);
314     HRESULT GetFontFaceReference(IDWriteFontFaceReference *fontFaceReference);
315     void GetPanose(DWRITE_PANOSE *panose);
316     DWRITE_FONT_WEIGHT GetWeight();
317     DWRITE_FONT_STRETCH GetStretch();
318     DWRITE_FONT_STYLE GetStyle();
319     HRESULT GetFamilyNames(IDWriteLocalizedStrings *names);
320     HRESULT GetFaceNames(IDWriteLocalizedStrings *names);
321     HRESULT GetInformationalStrings(DWRITE_INFORMATIONAL_STRING_ID informationalStringID, IDWriteLocalizedStrings *informationalStrings, bool *exists);
322     bool HasCharacter(uint unicodeValue);
323     HRESULT GetRecommendedRenderingMode(float fontEmSize, float dpiX, float dpiY, const DWRITE_MATRIX *transform, bool isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold, DWRITE_MEASURING_MODE measuringMode, IDWriteRenderingParams *renderingParams, DWRITE_RENDERING_MODE1 *renderingMode, DWRITE_GRID_FIT_MODE *gridFitMode);
324     bool IsCharacterLocal(uint unicodeValue);
325     bool IsGlyphLocal(ushort glyphId);
326 }
327 
328 mixin(uuid!(IDWriteStringList, "CFEE3140-1157-47CA-8B85-31BFCF3F2D0E"));
329 public interface IDWriteStringList : IUnknown
330 {
331 extern(Windows):
332     uint GetCount();
333     HRESULT GetLocaleName(uint listIndex, wchar *localeName, uint size);
334     HRESULT GetLocaleNameLength(uint listIndex, uint *length);
335     HRESULT GetString(uint listIndex, wchar *stringBuffer, uint stringBufferSize);
336     HRESULT GetStringLength(uint listIndex, uint *length);
337 }
338 
339 mixin(uuid!(IDWriteFontDownloadListener, "B06FE5B9-43EC-4393-881B-DBE4DC72FDA7"));
340 public interface IDWriteFontDownloadListener : IUnknown
341 {
342 extern(Windows):
343     void DownloadCompleted(IDWriteFontDownloadQueue downloadQueue, IUnknown context, HRESULT downloadResult);
344 }
345 
346 mixin(uuid!(IDWriteFontDownloadQueue, "B71E6052-5AEA-4FA3-832E-F60D431F7E91"));
347 public interface IDWriteFontDownloadQueue : IUnknown
348 {
349 extern(Windows):
350     HRESULT AddListener(IDWriteFontDownloadListener listener, uint *token);
351     HRESULT BeginDownload(IUnknown context = null);
352     HRESULT CancelDownload();
353     ulong GetGenerationCount();
354     bool IsEmpty();
355     HRESULT RemoveListener(uint token);
356 }
357 
358 mixin(uuid!(IDWriteGdiInterop1, "4556BE70-3ABD-4F70-90BE-421780A6F515"));
359 public interface IDWriteGdiInterop1 : IDWriteGdiInterop
360 {
361 extern(Windows):
362     HRESULT CreateFontFromLOGFONT(LOGFONTW logFont, IDWriteFontCollection fontCollection, IDWriteFont *font);
363     HRESULT GetMatchingFontsByLOGFONT(LOGFONT logFont, IDWriteFontSet fontSet, IDWriteFontSet *filteredSet);
364     HRESULT GetFontSignature(IDWriteFont font, FONTSIGNATURE *fontSignature);
365     HRESULT GetFontSignature(IDWriteFontFace fontFace, FONTSIGNATURE *fontSignature);
366 }
367 
368 mixin(uuid!(IDWriteTextFormat2, "F67E0EDD-9E3D-4ECC-8C32-4183253DFE70"));
369 public interface IDWriteTextFormat2 : IDWriteTextFormat1
370 {
371 extern(Windows):
372     HRESULT GetLineSpacing(DWRITE_LINE_SPACING *lineSpacingMethod);
373     HRESULT SetLineSpacing(const DWRITE_LINE_SPACING *lineSpacingOptions);
374 }
375 
376 mixin(uuid!(IDWriteTextLayout3, "07DDCD52-020E-4DE8-AC33-6C953D83F92D"));
377 public interface IDWriteTextLayout3 : IDWriteTextLayout2
378 {
379 extern(Windows):
380     HRESULT GetLineMetrics(DWRITE_LINE_METRICS1 *lineMetrics, uint maxLineCount, uint *actualLineCount);
381     HRESULT GetLineSpacing(DWRITE_LINE_SPACING *lineSpacingOptions);
382     HRESULT InvalidateLayout();
383     HRESULT SetLineSpacing(const DWRITE_LINE_SPACING *lineSpacingOptions);
384 }
385 
386 mixin(uuid!(IDWriteColorGlyphRunEnumerator1, "7C5F86DA-C7A1-4F05-B8E1-55A179FE5A35"));
387 public interface IDWriteColorGlyphRunEnumerator1 : IDWriteColorGlyphRunEnumerator
388 {
389 extern(Windows):
390     HRESULT GetCurrentRun(DWRITE_COLOR_GLYPH_RUN1 colorGlyphRun);
391 }
392 
393 mixin(uuid!(IDWriteFontFace4, "27F2A904-4EB8-441D-9678-0563F53E3E2F"));
394 public interface IDWriteFontFace4 : IDWriteFontFace3
395 {
396 extern(Windows):
397     HRESULT GetGlyphImageData(ushort glyphId, uint pixelsPerEm, DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat, DWRITE_GLYPH_IMAGE_DATA *glyphData, void **glyphDataContext);
398     DWRITE_GLYPH_IMAGE_FORMATS GetGlyphImageFormats();
399     HRESULT GetGlyphImageFormats(ushort glyphId, uint pixelsPerEmFirst, uint pixelsPerEmLast, DWRITE_GLYPH_IMAGE_FORMATS *glyphImageFormats);
400     void ReleaseGlyphImageData(void *glyphDataContext);
401 }
402 
403 mixin(uuid!(IDWriteFactory4, "4B0B5BD3-0797-4549-8AC5-FE915CC53856"));
404 public interface IDWriteFactory4 : IDWriteFactory3
405 {
406 extern(Windows):
407     HRESULT ComputeGlyphOrigins(DWRITE_GLYPH_RUN glyphRun, DWRITE_MEASURING_MODE measuringMode, D2D1_POINT_2F baselineOrigin, DWRITE_MATRIX worldAndDpiTransform, D2D1_POINT_2F *glyphOrigins);
408     HRESULT ComputeGlyphOrigins(DWRITE_GLYPH_RUN glyphRun, D2D1_POINT_2F baselineOrigin, D2D1_POINT_2F *glyphOrigins);
409     HRESULT TranslateColorGlyphRun(D2D1_POINT_2F baselineOrigin, DWRITE_GLYPH_RUN glyphRun, DWRITE_GLYPH_RUN_DESCRIPTION glyphRunDescription, DWRITE_GLYPH_IMAGE_FORMATS desiredGlyphImageFormats, DWRITE_MEASURING_MODE measuringMode, DWRITE_MATRIX worldAndDpiTransform, uint colorPaletteIndex, IDWriteColorGlyphRunEnumerator1 *colorLayers);
410 }
411 
412 mixin(uuid!(IDWriteFontSetBuilder1, "3FF7715F-3CDC-4DC6-9B72-EC5621DCCAFD"));
413 public interface IDWriteFontSetBuilder1 : IDWriteFontSetBuilder
414 {
415 extern(Windows):
416     HRESULT AddFontFile(IDWriteFontFile fontFile);
417 }
418 
419 mixin(uuid!(IDWriteAsyncResult, "CE25F8FD-863B-4D13-9651-C1F88DC73FE2"));
420 public interface IDWriteAsyncResult : IUnknown
421 {
422 extern(Windows):
423     HRESULT GetResult();
424     HANDLE GetWaitHandle();
425 }
426 
427 mixin(uuid!(IDWriteRemoteFontFileStream, "4DB3757A-2C72-4ED9-B2B6-1ABABE1AFF9C"));
428 public interface IDWriteRemoteFontFileStream : IDWriteFontFileStream
429 {
430 extern(Windows):
431     HRESULT BeginDownload(UUID downloadOperationID, DWRITE_FILE_FRAGMENT fileFragments, uint fragmentCount, IDWriteAsyncResult* asyncResult);
432     HRESULT GetFileFragmentLocality(ulong fileOffset, ulong fragmentSize, bool *isLocal, ulong *partialSize);
433     HRESULT GetLocalFileSize(ulong *localFileSize);
434     DWRITE_LOCALITY GetLocality();
435 }
436 
437 mixin(uuid!(IDWriteRemoteFontFileLoader, "68648C83-6EDE-46C0-AB46-20083A887FDE"));
438 public interface IDWriteRemoteFontFileLoader : IDWriteFontFileLoader
439 {
440 extern(Windows):
441     HRESULT CreateFontFileReferenceFromUrl(IDWriteFactory factory, const wchar* baseUrl, const wchar* fontFileUrl, IDWriteFontFile *fontFile);
442     HRESULT CreateRemoteStreamFromKey(const void *fontFileReferenceKey, uint fontFileReferenceKeySize, IDWriteRemoteFontFileStream *fontFileStream);
443     HRESULT GetLocalityFromKey(const void *fontFileReferenceKey, uint fontFileReferenceKeySize, DWRITE_LOCALITY *locality);
444 }
445 
446 mixin(uuid!(IDWriteInMemoryFontFileLoader, "DC102F47-A12D-4B1C-822D-9E117E33043F"));
447 public interface IDWriteInMemoryFontFileLoader : IDWriteFontFileLoader
448 {
449 extern(Windows):
450     HRESULT CreateInMemoryFontFileReference(IDWriteFactory factory, const void *fontData, uint fontDataSize, IUnknown ownerObject, IDWriteFontFile *fontFile);
451     uint GetFileCount();
452 }
453 
454 mixin(uuid!(IDWriteFactory5, "958DB99A-BE2A-4F09-AF7D-65189803D1D3"));
455 public interface IDWriteFactory5 : IDWriteFactory4
456 {
457 extern(Windows):
458     DWRITE_CONTAINER_TYPE AnalyzeContainerType(void *fileData, uint fileDataSize);
459     HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder1 *fontSetBuilder);
460     HRESULT CreateHttpFontFileLoader(const wchar *referrerUrl, const wchar *extraHeaders, IDWriteRemoteFontFileLoader *newLoader);
461     HRESULT CreateInMemoryFontFileLoader(IDWriteInMemoryFontFileLoader *newLoader);
462     HRESULT UnpackFontFile(DWRITE_CONTAINER_TYPE containerType, void *fileData, uint fileDataSize, IDWriteFontFileStream *unpackedFontStream);
463 }
464 
465 mixin(uuid!(IDWriteFactory6, "F3744D80-21F7-42EB-B35D-995BC72FC223"));
466 interface IDWriteFactory6 : IDWriteFactory5
467 {
468 extern(Windows):
469     HRESULT CreateFontFaceReference(IDWriteFontFile fontFile, uint faceIndex, DWRITE_FONT_SIMULATIONS fontSimulations, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, IDWriteFontFaceReference1* fontFaceReference);
470     HRESULT CreateFontResource(IDWriteFontFile fontFile, uint faceIndex, IDWriteFontResource* fontResource);
471     HRESULT GetSystemFontSet(bool includeDownloadableFonts, IDWriteFontSet1* fontSet);
472     HRESULT GetSystemFontCollection( bool includeDownloadableFonts, DWRITE_FONT_FAMILY_MODEL fontFamilyModel, IDWriteFontCollection2* fontCollection);
473     HRESULT CreateFontCollectionFromFontSet(IDWriteFontSet* fontSet, DWRITE_FONT_FAMILY_MODEL fontFamilyModel, IDWriteFontCollection2* fontCollection);
474     HRESULT CreateFontSetBuilder(IDWriteFontSetBuilder2* fontSetBuilder);
475     HRESULT CreateTextFormat(const wchar* fontFamilyName, IDWriteFontCollection fontCollection, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, float fontSize, const wchar* localeName, IDWriteTextFormat3* textFormat);
476 }
477 
478 mixin(uuid!(IDWriteFontFace5, "98EFF3A5-B667-479A-B145-E2FA5B9FDC29"));
479 interface IDWriteFontFace5 : IDWriteFontFace4
480 {
481 extern(Windows):
482     uint GetFontAxisValueCount();
483     HRESULT GetFontAxisValues(DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount);
484     bool HasVariations();
485     HRESULT GetFontResource(IDWriteFontResource* fontResource);
486     bool Equals(IDWriteFontFace* fontFace);
487 }
488 
489 mixin(uuid!(IDWriteFontResource, "1F803A76-6871-48E8-987F-B975551C50F2"));
490 interface IDWriteFontResource : IUnknown
491 {
492 extern(Windows):
493     HRESULT GetFontFile(IDWriteFontFile* fontFile);
494     uint GetFontFaceIndex();
495     uint GetFontAxisCount();
496     HRESULT GetDefaultFontAxisValues(DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount);
497     HRESULT GetFontAxisRanges(DWRITE_FONT_AXIS_RANGE* fontAxisRanges, uint fontAxisRangeCount);
498     DWRITE_FONT_AXIS_ATTRIBUTES GetFontAxisAttributes(uint axisIndex);
499     HRESULT GetAxisNames(uint axisIndex, IDWriteLocalizedStrings* names);
500     uint GetAxisValueNameCount(uint axisIndex);
501     HRESULT GetAxisValueNames(uint axisIndex, uint axisValueIndex, DWRITE_FONT_AXIS_RANGE* fontAxisRange, IDWriteLocalizedStrings* names);
502     bool HasVariations();
503     HRESULT CreateFontFace( DWRITE_FONT_SIMULATIONS fontSimulations, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, IDWriteFontFace5* fontFace);
504     HRESULT CreateFontFaceReference(DWRITE_FONT_SIMULATIONS fontSimulations, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, IDWriteFontFaceReference1* fontFaceReference );
505 }
506 
507 mixin(uuid!(IDWriteFontFaceReference1, "C081FE77-2FD1-41AC-A5A3-34983C4BA61A"));
508 interface IDWriteFontFaceReference1 : IDWriteFontFaceReference
509 {
510 extern(Windows):
511     HRESULT CreateFontFace(IDWriteFontFace5* fontFace);
512     uint GetFontAxisValueCount();
513     HRESULT GetFontAxisValues(DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount);
514 }
515 
516 mixin(uuid!(IDWriteFontSetBuilder2, "EE5BA612-B131-463C-8F4F-3189B9401E45"));
517 interface IDWriteFontSetBuilder2 : IDWriteFontSetBuilder1
518 {
519 extern(Windows):
520     HRESULT AddFont(IDWriteFontFile fontFile, uint fontFaceIndex, DWRITE_FONT_SIMULATIONS fontSimulations, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, const DWRITE_FONT_AXIS_RANGE* fontAxisRanges, uint fontAxisRangeCount, const DWRITE_FONT_PROPERTY* properties, uint propertyCount);
521     HRESULT AddFontFile(const wchar* filePath);
522 }
523 
524 
525 mixin(uuid!(IDWriteFontSet1, "7E9FDA85-6C92-4053-BC47-7AE3530DB4D3"));
526 interface IDWriteFontSet1 : IDWriteFontSet
527 {
528 extern(Windows):
529     HRESULT GetMatchingFonts(const DWRITE_FONT_PROPERTY* fontProperty, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, IDWriteFontSet1* matchingFonts);
530     HRESULT GetFirstFontResources(IDWriteFontSet1* filteredFontSet);
531     HRESULT GetFilteredFonts(const DWRITE_FONT_PROPERTY* properties, uint propertyCount, bool selectAnyProperty, IDWriteFontSet1* filteredFontSet);
532     HRESULT GetFilteredFonts(const DWRITE_FONT_AXIS_RANGE* fontAxisRanges, uint fontAxisRangeCount, bool selectAnyRange, IDWriteFontSet1* filteredFontSet);
533     HRESULT GetFilteredFonts(const uint* indices, uint indexCount, IDWriteFontSet1* filteredFontSet);
534     HRESULT GetFilteredFontIndices(const DWRITE_FONT_PROPERTY* properties, uint propertyCount, bool selectAnyProperty, uint* indices, uint maxIndexCount, uint* actualIndexCount);
535     HRESULT GetFilteredFontIndices(const DWRITE_FONT_AXIS_RANGE* fontAxisRanges, uint fontAxisRangeCount, bool selectAnyRange, uint* indices, uint maxIndexCount, uint* actualIndexCount);
536     HRESULT GetFontAxisRanges(DWRITE_FONT_AXIS_RANGE* fontAxisRanges, uint maxFontAxisRangeCount, uint* actualFontAxisRangeCount);
537     HRESULT GetFontAxisRanges(uint listIndex, DWRITE_FONT_AXIS_RANGE* fontAxisRanges, uint maxFontAxisRangeCount, uint* actualFontAxisRangeCount);
538     HRESULT GetFontFaceReference(uint listIndex, IDWriteFontFaceReference1* fontFaceReference);
539     HRESULT CreateFontResource(uint listIndex, IDWriteFontResource* fontResource );
540     HRESULT CreateFontFace(uint listIndex, IDWriteFontFace5* fontFace);
541     DWRITE_LOCALITY GetFontLocality(uint listIndex);
542 }
543 
544 mixin(uuid!(IDWriteFontList2, "C0763A34-77AF-445A-B735-08C37B0A5BF5"));
545 interface IDWriteFontList2 : IDWriteFontList1
546 {
547 extern(Windows):
548     HRESULT GetFontSet(IDWriteFontSet1* fontSet);
549 }
550 
551 mixin(uuid!(IDWriteFontFamily2, "3ED49E77-A398-4261-B9CF-C126C2131EF3"));
552 interface IDWriteFontFamily2 : IDWriteFontFamily1
553 {
554 extern(Windows):
555     HRESULT GetMatchingFonts(const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, IDWriteFontList2* matchingFonts);
556     HRESULT GetFontSet(IDWriteFontSet1* fontSet);
557 }
558 
559 mixin(uuid!(IDWriteFontCollection2, "514039C6-4617-4064-BF8B-92EA83E506E0"));
560 interface IDWriteFontCollection2 : IDWriteFontCollection1
561 {
562 extern(Windows):
563     HRESULT GetFontFamily(uint index, IDWriteFontFamily2* fontFamily);
564     HRESULT GetMatchingFonts(const wchar* familyName, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, IDWriteFontList2* fontList);
565     DWRITE_FONT_FAMILY_MODEL GetFontFamilyModel();
566     HRESULT GetFontSet(IDWriteFontSet1* fontSet);
567 }
568 
569 mixin(uuid!(IDWriteTextLayout4, "05A9BF42-223F-4441-B5FB-8263685F55E9"));
570 interface IDWriteTextLayout4 : IDWriteTextLayout3
571 {
572 extern(Windows):
573     HRESULT SetFontAxisValues(const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, DWRITE_TEXT_RANGE textRange);
574     uint GetFontAxisValueCount(uint currentPosition);
575     HRESULT GetFontAxisValues(uint currentPosition, DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, DWRITE_TEXT_RANGE* textRange = null);
576     HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES automaticFontAxes);
577 }
578 
579 mixin(uuid!(IDWriteTextFormat3, "6D3B5641-E550-430D-A85B-B7BF48A93427"));
580 interface IDWriteTextFormat3 : IDWriteTextFormat2
581 {
582 extern(Windows):
583     HRESULT SetFontAxisValues(const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount);
584     uint GetFontAxisValueCount();
585     HRESULT GetFontAxisValues(DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount);
586     DWRITE_AUTOMATIC_FONT_AXES GetAutomaticFontAxes();
587     HRESULT SetAutomaticFontAxes(DWRITE_AUTOMATIC_FONT_AXES automaticFontAxes);
588 }
589 
590 mixin(uuid!(IDWriteFontFallback1, "2397599D-DD0D-4681-BD6A-F4F31EAADE77"));
591 interface IDWriteFontFallback1 : IDWriteFontFallback
592 {
593 extern(Windows):
594     HRESULT MapCharacters(IDWriteTextAnalysisSource analysisSource, uint textPosition, uint textLength, IDWriteFontCollection baseFontCollection, const wchar* baseFamilyName, const DWRITE_FONT_AXIS_VALUE* fontAxisValues, uint fontAxisValueCount, uint* mappedLength, float* scale, IDWriteFontFace5* mappedFontFace);
595 }
596 
597 //Windows 1803
598 
599 mixin(uuid!(IDWriteFontSet2, "DC7EAD19-E54C-43AF-B2DA-4E2B79BA3F7F"));
600 interface IDWriteFontSet2 : IDWriteFontSet1
601 {
602 extern(Windows):
603     HANDLE GetExpirationEvent();
604 }
605 
606 mixin(uuid!(IDWriteFontCollection3, "A4D055A6-F9E3-4E25-93B7-9E309F3AF8E9"));
607 interface IDWriteFontCollection3 : IDWriteFontCollection2
608 {
609 extern(Windows):
610     HANDLE GetExpirationEvent();
611 }
612 
613 mixin(uuid!(IDWriteFactory7, "35D0E0B3-9076-4D2E-A016-A91B568A06B4"));
614 interface IDWriteFactory7 : IDWriteFactory6
615 {
616 extern(Windows):
617     HRESULT GetSystemFontSet(bool includeDownloadableFonts, IDWriteFontSet2* fontSet);
618     HRESULT GetSystemFontCollection(bool includeDownloadableFonts, DWRITE_FONT_FAMILY_MODEL fontFamilyModel, IDWriteFontCollection3* fontCollection);
619 }
620 
621 //Windows 1809
622 
623 enum DWRITE_FONT_SOURCE_TYPE
624 {
625     DWRITE_FONT_SOURCE_TYPE_UNKNOWN,
626     DWRITE_FONT_SOURCE_TYPE_PER_MACHINE,
627     DWRITE_FONT_SOURCE_TYPE_PER_USER,
628     DWRITE_FONT_SOURCE_TYPE_APPX_PACKAGE,
629     DWRITE_FONT_SOURCE_TYPE_REMOTE_FONT_PROVIDER
630 };
631 
632 mixin(uuid!(IDWriteFontSet3, "7C073EF2-A7F4-4045-8C32-8AB8AE640F90"));
633 interface IDWriteFontSet3 : IDWriteFontSet2
634 {
635 extern(Windows):
636     DWRITE_FONT_SOURCE_TYPE GetFontSourceType(uint fontIndex);
637     uint GetFontSourceNameLength(uint listIndex);
638     HRESULT GetFontSourceName(uint listIndex, wchar* stringBuffer, uint stringBufferSize);
639 }