1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  * This Source Code Form is subject to the terms of the Mozilla Public
3  * License, v. 2.0. If a copy of the MPL was not distributed with this
4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 
6 /*
7  * New DirectWrite interfaces based on Win10 Fall Creators Update versions
8  * of dwrite_3.h and dcommon.h (from SDK 10.0.17061.0). This particular
9  * subset of declarations is intended to be just sufficient to compile the
10  * Gecko DirectWrite font code; it omits many other new interfaces, etc.
11  */
12 
13 #ifndef DWRITE_EXTRA_H
14 #define DWRITE_EXTRA_H
15 
16 #pragma once
17 
18 interface IDWriteFontResource;
19 interface IDWriteFontFaceReference1;
20 
21 enum DWRITE_GLYPH_IMAGE_FORMATS {
22   DWRITE_GLYPH_IMAGE_FORMATS_NONE = 0x00000000,
23   DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE = 0x00000001,
24   DWRITE_GLYPH_IMAGE_FORMATS_CFF = 0x00000002,
25   DWRITE_GLYPH_IMAGE_FORMATS_COLR = 0x00000004,
26   DWRITE_GLYPH_IMAGE_FORMATS_SVG = 0x00000008,
27   DWRITE_GLYPH_IMAGE_FORMATS_PNG = 0x00000010,
28   DWRITE_GLYPH_IMAGE_FORMATS_JPEG = 0x00000020,
29   DWRITE_GLYPH_IMAGE_FORMATS_TIFF = 0x00000040,
30   DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 0x00000080,
31 };
32 
33 #ifdef DEFINE_ENUM_FLAG_OPERATORS
34 DEFINE_ENUM_FLAG_OPERATORS(DWRITE_GLYPH_IMAGE_FORMATS);
35 #endif
36 
37 #define DWRITE_MAKE_FONT_AXIS_TAG(a, b, c, d) \
38   (static_cast<DWRITE_FONT_AXIS_TAG>(DWRITE_MAKE_OPENTYPE_TAG(a, b, c, d)))
39 
40 enum DWRITE_FONT_AXIS_TAG : UINT32 {
41   DWRITE_FONT_AXIS_TAG_WEIGHT = DWRITE_MAKE_FONT_AXIS_TAG('w', 'g', 'h', 't'),
42   DWRITE_FONT_AXIS_TAG_WIDTH = DWRITE_MAKE_FONT_AXIS_TAG('w', 'd', 't', 'h'),
43   DWRITE_FONT_AXIS_TAG_SLANT = DWRITE_MAKE_FONT_AXIS_TAG('s', 'l', 'n', 't'),
44   DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE =
45       DWRITE_MAKE_FONT_AXIS_TAG('o', 'p', 's', 'z'),
46   DWRITE_FONT_AXIS_TAG_ITALIC = DWRITE_MAKE_FONT_AXIS_TAG('i', 't', 'a', 'l'),
47 };
48 
49 enum DWRITE_FONT_AXIS_ATTRIBUTES {
50   DWRITE_FONT_AXIS_ATTRIBUTES_NONE = 0x0000,
51   DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE = 0x0001,
52   DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN = 0x0002,
53 };
54 
55 struct DWRITE_FONT_AXIS_VALUE {
56   DWRITE_FONT_AXIS_TAG axisTag;
57   FLOAT value;
58 };
59 
60 struct DWRITE_FONT_AXIS_RANGE {
61   DWRITE_FONT_AXIS_TAG axisTag;
62   FLOAT minValue;
63   FLOAT maxValue;
64 };
65 
66 struct DWRITE_GLYPH_IMAGE_DATA;
67 
68 interface DWRITE_DECLARE_INTERFACE("27F2A904-4EB8-441D-9678-0563F53E3E2F")
69     IDWriteFontFace4 : public IDWriteFontFace3 {
70   STDMETHOD_(DWRITE_GLYPH_IMAGE_FORMATS, GetGlyphImageFormats)() PURE;
71   STDMETHOD(GetGlyphImageFormats)
72   (UINT16 glyphId, UINT32 pixelsPerEmFirst, UINT32 pixelsPerEmLast,
73    _Out_ DWRITE_GLYPH_IMAGE_FORMATS * glyphImageFormats) PURE;
74   STDMETHOD(GetGlyphImageData)
75   (_In_ UINT16 glyphId, UINT32 pixelsPerEm,
76    DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat,
77    _Out_ DWRITE_GLYPH_IMAGE_DATA * glyphData,
78    _Outptr_result_maybenull_ void** glyphDataContext) PURE;
79   STDMETHOD_(void, ReleaseGlyphImageData)(void* glyphDataContext) PURE;
80 };
81 
82 interface DWRITE_DECLARE_INTERFACE("98EFF3A5-B667-479A-B145-E2FA5B9FDC29")
83     IDWriteFontFace5 : public IDWriteFontFace4 {
84   STDMETHOD_(UINT32, GetFontAxisValueCount)() PURE;
85   STDMETHOD(GetFontAxisValues)
86   (_Out_writes_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE * fontAxisValues,
87    UINT32 fontAxisValueCount) PURE;
88   STDMETHOD_(BOOL, HasVariations)() PURE;
89   STDMETHOD(GetFontResource)
90   (_COM_Outptr_ IDWriteFontResource * *fontResource) PURE;
91   STDMETHOD_(BOOL, Equals)(IDWriteFontFace * fontFace) PURE;
92 };
93 
94 interface DWRITE_DECLARE_INTERFACE("1F803A76-6871-48E8-987F-B975551C50F2")
95     IDWriteFontResource : public IUnknown {
96   STDMETHOD(GetFontFile)(_COM_Outptr_ IDWriteFontFile * *fontFile) PURE;
97   STDMETHOD_(UINT32, GetFontFaceIndex)() PURE;
98   STDMETHOD_(UINT32, GetFontAxisCount)() PURE;
99   STDMETHOD(GetDefaultFontAxisValues)
100   (_Out_writes_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE * fontAxisValues,
101    UINT32 fontAxisValueCount) PURE;
102   STDMETHOD(GetFontAxisRanges)
103   (_Out_writes_(fontAxisRangeCount) DWRITE_FONT_AXIS_RANGE * fontAxisRanges,
104    UINT32 fontAxisRangeCount) PURE;
105   STDMETHOD_(DWRITE_FONT_AXIS_ATTRIBUTES, GetFontAxisAttributes)
106   (UINT32 axisIndex) PURE;
107   STDMETHOD(GetAxisNames)
108   (UINT32 axisIndex, _COM_Outptr_ IDWriteLocalizedStrings * *names) PURE;
109   STDMETHOD_(UINT32, GetAxisValueNameCount)(UINT32 axisIndex) PURE;
110   STDMETHOD(GetAxisValueNames)
111   (UINT32 axisIndex, UINT32 axisValueIndex,
112    _Out_ DWRITE_FONT_AXIS_RANGE * fontAxisRange,
113    _COM_Outptr_ IDWriteLocalizedStrings * *names) PURE;
114   STDMETHOD_(BOOL, HasVariations)() PURE;
115   STDMETHOD(CreateFontFace)
116   (DWRITE_FONT_SIMULATIONS fontSimulations,
117    _In_reads_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE const* fontAxisValues,
118    UINT32 fontAxisValueCount, _COM_Outptr_ IDWriteFontFace5** fontFace) PURE;
119   STDMETHOD(CreateFontFaceReference)
120   (DWRITE_FONT_SIMULATIONS fontSimulations,
121    _In_reads_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE const* fontAxisValues,
122    UINT32 fontAxisValueCount,
123    _COM_Outptr_ IDWriteFontFaceReference1** fontFaceReference) PURE;
124 };
125 
126 #endif /* DWRITE_EXTRA_H */
127