1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- 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 const void* imageData; 68 UINT32 imageDataSize; 69 UINT32 uniqueDataId; 70 UINT32 pixelsPerEm; 71 D2D1_SIZE_U pixelSize; 72 D2D1_POINT_2L horizontalLeftOrigin; 73 D2D1_POINT_2L horizontalRightOrigin; 74 D2D1_POINT_2L verticalTopOrigin; 75 D2D1_POINT_2L verticalBottomOrigin; 76 }; 77 78 interface DWRITE_DECLARE_INTERFACE("27F2A904-4EB8-441D-9678-0563F53E3E2F") 79 IDWriteFontFace4 : public IDWriteFontFace3 { 80 STDMETHOD_(DWRITE_GLYPH_IMAGE_FORMATS, GetGlyphImageFormats)() PURE; 81 STDMETHOD(GetGlyphImageFormats) 82 (UINT16 glyphId, UINT32 pixelsPerEmFirst, UINT32 pixelsPerEmLast, 83 _Out_ DWRITE_GLYPH_IMAGE_FORMATS * glyphImageFormats) PURE; 84 STDMETHOD(GetGlyphImageData) 85 (_In_ UINT16 glyphId, UINT32 pixelsPerEm, 86 DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat, 87 _Out_ DWRITE_GLYPH_IMAGE_DATA * glyphData, 88 _Outptr_result_maybenull_ void** glyphDataContext) PURE; 89 STDMETHOD_(void, ReleaseGlyphImageData)(void* glyphDataContext) PURE; 90 }; 91 92 interface DWRITE_DECLARE_INTERFACE("98EFF3A5-B667-479A-B145-E2FA5B9FDC29") 93 IDWriteFontFace5 : public IDWriteFontFace4 { 94 STDMETHOD_(UINT32, GetFontAxisValueCount)() PURE; 95 STDMETHOD(GetFontAxisValues) 96 (_Out_writes_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE * fontAxisValues, 97 UINT32 fontAxisValueCount) PURE; 98 STDMETHOD_(BOOL, HasVariations)() PURE; 99 STDMETHOD(GetFontResource) 100 (_COM_Outptr_ IDWriteFontResource * *fontResource) PURE; 101 STDMETHOD_(BOOL, Equals)(IDWriteFontFace * fontFace) PURE; 102 }; 103 104 interface DWRITE_DECLARE_INTERFACE("1F803A76-6871-48E8-987F-B975551C50F2") 105 IDWriteFontResource : public IUnknown { 106 STDMETHOD(GetFontFile)(_COM_Outptr_ IDWriteFontFile * *fontFile) PURE; 107 STDMETHOD_(UINT32, GetFontFaceIndex)() PURE; 108 STDMETHOD_(UINT32, GetFontAxisCount)() PURE; 109 STDMETHOD(GetDefaultFontAxisValues) 110 (_Out_writes_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE * fontAxisValues, 111 UINT32 fontAxisValueCount) PURE; 112 STDMETHOD(GetFontAxisRanges) 113 (_Out_writes_(fontAxisRangeCount) DWRITE_FONT_AXIS_RANGE * fontAxisRanges, 114 UINT32 fontAxisRangeCount) PURE; 115 STDMETHOD_(DWRITE_FONT_AXIS_ATTRIBUTES, GetFontAxisAttributes) 116 (UINT32 axisIndex) PURE; 117 STDMETHOD(GetAxisNames) 118 (UINT32 axisIndex, _COM_Outptr_ IDWriteLocalizedStrings * *names) PURE; 119 STDMETHOD_(UINT32, GetAxisValueNameCount)(UINT32 axisIndex) PURE; 120 STDMETHOD(GetAxisValueNames) 121 (UINT32 axisIndex, UINT32 axisValueIndex, 122 _Out_ DWRITE_FONT_AXIS_RANGE * fontAxisRange, 123 _COM_Outptr_ IDWriteLocalizedStrings * *names) PURE; 124 STDMETHOD_(BOOL, HasVariations)() PURE; 125 STDMETHOD(CreateFontFace) 126 (DWRITE_FONT_SIMULATIONS fontSimulations, 127 _In_reads_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE const* fontAxisValues, 128 UINT32 fontAxisValueCount, _COM_Outptr_ IDWriteFontFace5** fontFace) PURE; 129 STDMETHOD(CreateFontFaceReference) 130 (DWRITE_FONT_SIMULATIONS fontSimulations, 131 _In_reads_(fontAxisValueCount) DWRITE_FONT_AXIS_VALUE const* fontAxisValues, 132 UINT32 fontAxisValueCount, 133 _COM_Outptr_ IDWriteFontFaceReference1** fontFaceReference) PURE; 134 }; 135 136 #endif /* DWRITE_EXTRA_H */ 137