diff --git a/.gitignore b/.gitignore index 6c333a57cfd..93d649a248b 100644 --- a/.gitignore +++ b/.gitignore @@ -172,6 +172,7 @@ include/dispex.h include/docobj.h include/docobjectservice.h include/downloadmgr.h +include/dwrite.h include/dxgi.h include/endpointvolume.h include/exdisp.h diff --git a/dlls/dwrite/dwrite.spec b/dlls/dwrite/dwrite.spec index 36ae913f6d1..73d1b22e2c5 100644 --- a/dlls/dwrite/dwrite.spec +++ b/dlls/dwrite/dwrite.spec @@ -1 +1 @@ -@ stub DWriteCreateFactory +@ stdcall DWriteCreateFactory(long ptr ptr) diff --git a/dlls/dwrite/main.c b/dlls/dwrite/main.c index ed4c4ee403a..ed3b8144fac 100644 --- a/dlls/dwrite/main.c +++ b/dlls/dwrite/main.c @@ -23,6 +23,12 @@ #include "windef.h" #include "winbase.h" +#include "dwrite.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(dwrite); + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, LPVOID reserved) { switch (reason) @@ -35,3 +41,9 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD reason, LPVOID reserved) } return TRUE; } + +HRESULT WINAPI DWriteCreateFactory(DWRITE_FACTORY_TYPE type, REFIID riid, IUnknown **factory) +{ + FIXME("(%d, %s, %p): stub\n", type, debugstr_guid(riid), factory); + return E_NOTIMPL; +} diff --git a/include/Makefile.in b/include/Makefile.in index 742cbe1fa9b..5bc1d1cc410 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -32,6 +32,7 @@ PUBLIC_IDL_H_SRCS = \ docobj.idl \ docobjectservice.idl \ downloadmgr.idl \ + dwrite.idl \ dxgi.idl \ endpointvolume.idl \ exdisp.idl \ @@ -208,6 +209,7 @@ SRCDIR_INCLUDES = \ dbt.h \ dciddi.h \ dciman.h \ + dcommon.h \ dde.h \ dde.rh \ ddeml.h \ diff --git a/include/dcommon.h b/include/dcommon.h new file mode 100644 index 00000000000..50daefb39b4 --- /dev/null +++ b/include/dcommon.h @@ -0,0 +1,29 @@ +/* + * Copyright 2012 Nikolay Sivov for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef __WINE_DCOMMON_H +#define __WINE_DCOMMON_H + +typedef enum DWRITE_MEASURING_MODE +{ + DWRITE_MEASURING_MODE_NATURAL, + DWRITE_MEASURING_MODE_GDI_CLASSIC, + DWRITE_MEASURING_MODE_GDI_NATURAL +} DWRITE_MEASURING_MODE; + +#endif /* __WINE_DCOMMON_H */ diff --git a/include/dwrite.idl b/include/dwrite.idl new file mode 100644 index 00000000000..dc0e135255e --- /dev/null +++ b/include/dwrite.idl @@ -0,0 +1,1394 @@ +/* + * Copyright 2012 Nikolay Sivov for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "unknwn.idl"; +import "dcommon.h"; + +interface IDWriteFactory; +interface IDWriteFontCollection; +interface IDWriteFontFamily; +interface IDWriteFontFace; +interface IDWriteInlineObject; + +interface ID2D1SimplifiedGeometrySink; +typedef ID2D1SimplifiedGeometrySink IDWriteGeometrySink; + +cpp_quote("#ifndef _WINDEF_") +/* already defined in windef.h but needed for WIDL */ +typedef void *HMONITOR; +cpp_quote("#endif /* _WINDEF_ */") + +cpp_quote("#ifdef WINE_NO_UNICODE_MACROS") +cpp_quote("#undef GetGlyphIndices") +cpp_quote("#endif") + +typedef enum DWRITE_FACTORY_TYPE +{ + DWRITE_FACTORY_TYPE_SHARED, + DWRITE_FACTORY_TYPE_ISOLATED +} DWRITE_FACTORY_TYPE; + +typedef enum DWRITE_FONT_FILE_TYPE +{ + DWRITE_FONT_FILE_TYPE_UNKNOWN, + DWRITE_FONT_FILE_TYPE_CFF, + DWRITE_FONT_FILE_TYPE_TRUETYPE, + DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION, + DWRITE_FONT_FILE_TYPE_TYPE1_PFM, + DWRITE_FONT_FILE_TYPE_TYPE1_PFB, + DWRITE_FONT_FILE_TYPE_VECTOR, + DWRITE_FONT_FILE_TYPE_BITMAP +} DWRITE_FONT_FILE_TYPE; + +typedef enum DWRITE_FONT_FACE_TYPE +{ + DWRITE_FONT_FACE_TYPE_CFF, + DWRITE_FONT_FACE_TYPE_TRUETYPE, + DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION, + DWRITE_FONT_FACE_TYPE_TYPE1, + DWRITE_FONT_FACE_TYPE_VECTOR, + DWRITE_FONT_FACE_TYPE_BITMAP, + DWRITE_FONT_FACE_TYPE_UNKNOWN +} DWRITE_FONT_FACE_TYPE; + +typedef enum DWRITE_FONT_WEIGHT +{ + DWRITE_FONT_WEIGHT_THIN = 100, + DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200, + DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200, + DWRITE_FONT_WEIGHT_LIGHT = 300, + DWRITE_FONT_WEIGHT_NORMAL = 400, + DWRITE_FONT_WEIGHT_REGULAR = 400, + DWRITE_FONT_WEIGHT_MEDIUM = 500, + DWRITE_FONT_WEIGHT_DEMI_BOLD = 600, + DWRITE_FONT_WEIGHT_SEMI_BOLD = 600, + DWRITE_FONT_WEIGHT_BOLD = 700, + DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800, + DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800, + DWRITE_FONT_WEIGHT_BLACK = 900, + DWRITE_FONT_WEIGHT_HEAVY = 900, + DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950, + DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950 +} DWRITE_FONT_WEIGHT; + +typedef enum DWRITE_FONT_STRETCH +{ + DWRITE_FONT_STRETCH_UNDEFINED = 0, + DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1, + DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2, + DWRITE_FONT_STRETCH_CONDENSED = 3, + DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4, + DWRITE_FONT_STRETCH_NORMAL = 5, + DWRITE_FONT_STRETCH_MEDIUM = 5, + DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6, + DWRITE_FONT_STRETCH_EXPANDED = 7, + DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8, + DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9 +} DWRITE_FONT_STRETCH; + +typedef enum DWRITE_FONT_STYLE +{ + DWRITE_FONT_STYLE_NORMAL, + DWRITE_FONT_STYLE_OBLIQUE, + DWRITE_FONT_STYLE_ITALIC +} DWRITE_FONT_STYLE; + +typedef enum DWRITE_INFORMATIONAL_STRING_ID +{ + DWRITE_INFORMATIONAL_STRING_NONE, + DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE, + DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS, + DWRITE_INFORMATIONAL_STRING_TRADEMARK, + DWRITE_INFORMATIONAL_STRING_MANUFACTURER, + DWRITE_INFORMATIONAL_STRING_DESIGNER, + DWRITE_INFORMATIONAL_STRING_DESIGNER_URL, + DWRITE_INFORMATIONAL_STRING_DESCRIPTION, + DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL, + DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION, + DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL, + DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES, + DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES, + DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES, + DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES, + DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT +} DWRITE_INFORMATIONAL_STRING_ID; + +typedef enum DWRITE_FONT_SIMULATIONS +{ + DWRITE_FONT_SIMULATIONS_NONE = 0x0000, + DWRITE_FONT_SIMULATIONS_BOLD = 0x0001, + DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002 +} DWRITE_FONT_SIMULATIONS; + +typedef enum DWRITE_PIXEL_GEOMETRY +{ + DWRITE_PIXEL_GEOMETRY_FLAT, + DWRITE_PIXEL_GEOMETRY_RGB, + DWRITE_PIXEL_GEOMETRY_BGR +} DWRITE_PIXEL_GEOMETRY; + +typedef enum DWRITE_RENDERING_MODE +{ + DWRITE_RENDERING_MODE_DEFAULT, + DWRITE_RENDERING_MODE_ALIASED, + DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC, + DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL, + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL, + DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC, + DWRITE_RENDERING_MODE_OUTLINE +} DWRITE_RENDERING_MODE; + +typedef enum DWRITE_TEXT_ALIGNMENT +{ + DWRITE_TEXT_ALIGNMENT_LEADING, + DWRITE_TEXT_ALIGNMENT_TRAILING, + DWRITE_TEXT_ALIGNMENT_CENTER +} DWRITE_TEXT_ALIGNMENT; + +typedef enum DWRITE_PARAGRAPH_ALIGNMENT +{ + DWRITE_PARAGRAPH_ALIGNMENT_NEAR, + DWRITE_PARAGRAPH_ALIGNMENT_FAR, + DWRITE_PARAGRAPH_ALIGNMENT_CENTER +} DWRITE_PARAGRAPH_ALIGNMENT; + +typedef enum DWRITE_WORD_WRAPPING +{ + DWRITE_WORD_WRAPPING_WRAP, + DWRITE_WORD_WRAPPING_NO_WRAP +} DWRITE_WORD_WRAPPING; + +typedef enum DWRITE_READING_DIRECTION +{ + DWRITE_READING_DIRECTION_LEFT_TO_RIGHT, + DWRITE_READING_DIRECTION_RIGHT_TO_LEFT +} DWRITE_READING_DIRECTION; + +typedef enum DWRITE_FLOW_DIRECTION +{ + DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM +} DWRITE_FLOW_DIRECTION; + +typedef enum DWRITE_TRIMMING_GRANULARITY +{ + DWRITE_TRIMMING_GRANULARITY_NONE, + DWRITE_TRIMMING_GRANULARITY_CHARACTER, + DWRITE_TRIMMING_GRANULARITY_WORD +} DWRITE_TRIMMING_GRANULARITY; + +typedef enum DWRITE_BREAK_CONDITION +{ + DWRITE_BREAK_CONDITION_NEUTRAL, + DWRITE_BREAK_CONDITION_CAN_BREAK, + DWRITE_BREAK_CONDITION_MAY_NOT_BREAK, + DWRITE_BREAK_CONDITION_MUST_BREAK +} DWRITE_BREAK_CONDITION; + +typedef enum DWRITE_LINE_SPACING_METHOD +{ + DWRITE_LINE_SPACING_METHOD_DEFAULT, + DWRITE_LINE_SPACING_METHOD_UNIFORM +} DWRITE_LINE_SPACING_METHOD; + +typedef enum DWRITE_FONT_FEATURE_TAG +{ + DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661, /* 'afrc' */ + DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263, /* 'c2pc' */ + DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263, /* 'c2sc' */ + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163, /* 'calt' */ + DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163, /* 'case' */ + DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, /* 'ccmp' */ + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63, /* 'clig' */ + DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063, /* 'cpsp' */ + DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363, /* 'cswh' */ + DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563, /* 'curs' */ + DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664, /* 'dflt' */ + DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64, /* 'dlig' */ + DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865, /* 'expt' */ + DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266, /* 'frac' */ + DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766, /* 'fwid' */ + DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168, /* 'half' */ + DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168, /* 'haln' */ + DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168, /* 'halt' */ + DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968, /* 'hist' */ + DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68, /* 'hkna' */ + DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68, /* 'hlig' */ + DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768, /* 'hwid' */ + DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68, /* 'hojo' */ + DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a, /* 'jp04' */ + DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a, /* 'jp78' */ + DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a, /* 'jp83' */ + DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a, /* 'jp90' */ + DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b, /* 'kern' */ + DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c, /* 'liga' */ + DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c, /* 'lnum' */ + DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c, /* 'locl' */ + DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d, /* 'mark' */ + DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d, /* 'mgrk' */ + DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d, /* 'mkmk' */ + DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e, /* 'nalt' */ + DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e, /* 'nlck' */ + DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f, /* 'onum' */ + DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f, /* 'ordn' */ + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170, /* 'palt' */ + DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370, /* 'pcap' */ + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70, /* 'pnum' */ + DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770, /* 'pwid' */ + DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771, /* 'qwid' */ + DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72, /* 'rlig' */ + DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572, /* 'ruby' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173, /* 'salt' */ + DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973, /* 'sinf' */ + DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73, /* 'smcp' */ + DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73, /* 'smpl' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373, /* 'ss01' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373, /* 'ss02' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373, /* 'ss03' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373, /* 'ss04' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373, /* 'ss05' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373, /* 'ss06' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373, /* 'ss07' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373, /* 'ss08' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373, /* 'ss09' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373, /* 'ss10' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373, /* 'ss11' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373, /* 'ss12' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373, /* 'ss13' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373, /* 'ss14' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373, /* 'ss15' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373, /* 'ss16' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373, /* 'ss17' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373, /* 'ss18' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373, /* 'ss19' */ + DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373, /* 'ss20' */ + DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573, /* 'subs' */ + DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573, /* 'sups' */ + DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773, /* 'swsh' */ + DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974, /* 'titl' */ + DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74, /* 'tnam' */ + DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74, /* 'tnum' */ + DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274, /* 'trad' */ + DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774, /* 'twid' */ + DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75, /* 'unic' */ + DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a, /* 'zero' */ +} DWRITE_FONT_FEATURE_TAG; + +typedef enum DWRITE_SCRIPT_SHAPES +{ + DWRITE_SCRIPT_SHAPES_DEFAULT = 0, + DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1 +} DWRITE_SCRIPT_SHAPES; + +typedef enum DWRITE_NUMBER_SUBSTITUTION_METHOD +{ + DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE, + DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL, + DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE, + DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL, + DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL +} DWRITE_NUMBER_SUBSTITUTION_METHOD; + +typedef enum DWRITE_TEXTURE_TYPE +{ + DWRITE_TEXTURE_ALIASED_1x1, + DWRITE_TEXTURE_CLEARTYPE_3x1 +} DWRITE_TEXTURE_TYPE; + +typedef struct DWRITE_FONT_METRICS +{ + UINT16 designUnitsPerEm; + UINT16 ascent; + UINT16 descent; + INT16 lineGap; + UINT16 capHeight; + UINT16 xHeight; + INT16 underlinePosition; + UINT16 underlineThickness; + INT16 strikethroughPosition; + UINT16 strikethroughThickness; +} DWRITE_FONT_METRICS; + +typedef struct DWRITE_GLYPH_METRICS +{ + INT32 leftSideBearing; + UINT32 advanceWidth; + INT32 rightSideBearing; + INT32 topSideBearing; + UINT32 advanceHeight; + INT32 bottomSideBearing; + INT32 verticalOriginY; +} DWRITE_GLYPH_METRICS; + +typedef struct DWRITE_GLYPH_OFFSET +{ + FLOAT advanceOffset; + FLOAT ascenderOffset; +} DWRITE_GLYPH_OFFSET; + +typedef struct DWRITE_MATRIX +{ + FLOAT m11; + FLOAT m12; + FLOAT m21; + FLOAT m22; + FLOAT dx; + FLOAT dy; +} DWRITE_MATRIX; + +typedef struct DWRITE_TRIMMING +{ + DWRITE_TRIMMING_GRANULARITY granularity; + UINT32 delimiter; + UINT32 delimiterCount; +} DWRITE_TRIMMING; + +typedef struct DWRITE_GLYPH_RUN +{ + IDWriteFontFace* fontFace; + FLOAT fontEmSize; + UINT32 glyphCount; + UINT16 const* glyphIndices; + FLOAT const* glyphAdvances; + DWRITE_GLYPH_OFFSET const* glyphOffsets; + BOOL isSideways; + UINT32 bidiLevel; +} DWRITE_GLYPH_RUN; + +typedef struct DWRITE_GLYPH_RUN_DESCRIPTION +{ + WCHAR const* localeName; + WCHAR const* string; + UINT32 stringLength; + UINT16 const* clusterMap; + UINT32 textPosition; +} DWRITE_GLYPH_RUN_DESCRIPTION; + +typedef struct DWRITE_UNDERLINE +{ + FLOAT width; + FLOAT thickness; + FLOAT offset; + FLOAT runHeight; + DWRITE_READING_DIRECTION readingDirection; + DWRITE_FLOW_DIRECTION flowDirection; + WCHAR const* localeName; + DWRITE_MEASURING_MODE measuringMode; +} DWRITE_UNDERLINE; + +typedef struct DWRITE_STRIKETHROUGH +{ + FLOAT width; + FLOAT thickness; + FLOAT offset; + DWRITE_READING_DIRECTION readingDirection; + DWRITE_FLOW_DIRECTION flowDirection; + WCHAR const* localeName; + DWRITE_MEASURING_MODE measuringMode; +} DWRITE_STRIKETHROUGH; + +typedef struct DWRITE_INLINE_OBJECT_METRICS +{ + FLOAT width; + FLOAT height; + FLOAT baseline; + BOOL supportsSideways; +} DWRITE_INLINE_OBJECT_METRICS; + +typedef struct DWRITE_OVERHANG_METRICS +{ + FLOAT left; + FLOAT top; + FLOAT right; + FLOAT bottom; +} DWRITE_OVERHANG_METRICS; + +typedef struct DWRITE_FONT_FEATURE +{ + DWRITE_FONT_FEATURE_TAG nameTag; + UINT32 parameter; +} DWRITE_FONT_FEATURE; + +typedef struct DWRITE_TEXT_RANGE +{ + UINT32 startPosition; + UINT32 length; +} DWRITE_TEXT_RANGE; + +typedef struct DWRITE_LINE_METRICS +{ + UINT32 length; + UINT32 trailingWhitespaceLength; + UINT32 newlineLength; + FLOAT height; + FLOAT baseline; + BOOL isTrimmed; +} DWRITE_LINE_METRICS; + +typedef struct DWRITE_TEXT_METRICS +{ + FLOAT left; + FLOAT top; + FLOAT width; + FLOAT widthIncludingTrailingWhitespace; + FLOAT height; + FLOAT layoutWidth; + FLOAT layoutHeight; + UINT32 maxBidiReorderingDepth; + UINT32 lineCount; +} DWRITE_TEXT_METRICS; + +typedef struct DWRITE_CLUSTER_METRICS +{ + FLOAT width; + UINT16 length; + UINT16 canWrapLineAfter : 1; + UINT16 isWhitespace : 1; + UINT16 isNewline : 1; + UINT16 isSoftHyphen : 1; + UINT16 isRightToLeft : 1; + UINT16 padding : 11; +} DWRITE_CLUSTER_METRICS; + +typedef struct DWRITE_HIT_TEST_METRICS +{ + UINT32 textPosition; + UINT32 length; + FLOAT left; + FLOAT top; + FLOAT width; + FLOAT height; + UINT32 bidiLevel; + BOOL isText; + BOOL isTrimmed; +} DWRITE_HIT_TEST_METRICS; + +typedef struct DWRITE_SCRIPT_ANALYSIS +{ + UINT16 script; + DWRITE_SCRIPT_SHAPES shapes; +} DWRITE_SCRIPT_ANALYSIS; + +typedef struct DWRITE_LINE_BREAKPOINT +{ + UINT8 breakConditionBefore : 2; + UINT8 breakConditionAfter : 2; + UINT8 isWhitespace : 1; + UINT8 isSoftHyphen : 1; + UINT8 padding : 2; +} DWRITE_LINE_BREAKPOINT; + +typedef struct DWRITE_TYPOGRAPHIC_FEATURES +{ + DWRITE_FONT_FEATURE* features; + UINT32 featureCount; +} DWRITE_TYPOGRAPHIC_FEATURES; + +typedef struct DWRITE_SHAPING_TEXT_PROPERTIES +{ + UINT16 isShapedAlone : 1; + UINT16 reserved : 15; +} DWRITE_SHAPING_TEXT_PROPERTIES; + +typedef struct DWRITE_SHAPING_GLYPH_PROPERTIES +{ + UINT16 justification : 4; + UINT16 isClusterStart : 1; + UINT16 isDiacritic : 1; + UINT16 isZeroWidthSpace : 1; + UINT16 reserved : 9; +} DWRITE_SHAPING_GLYPH_PROPERTIES; + +[ +local, +object, +uuid(6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0) +] +interface IDWriteFontFileStream : IUnknown +{ + HRESULT ReadFileFragment( + void const **fragment_start, + UINT64 offset, + UINT64 fragment_size, + void **fragment_context); + + void ReleaseFileFragment(void *fragment_context); + HRESULT GetFileSize(UINT64 *size); + HRESULT GetLastWriteTime(UINT64 *last_writetime); +} + +[ +local, +object, +uuid(727cad4e-d6af-4c9e-8a08-d695b11caa49) +] +interface IDWriteFontFileLoader : IUnknown +{ + HRESULT CreateStreamFromKey( + void const *key, + UINT32 key_size, + IDWriteFontFileStream **stream); +} + +[ +local, +object, +uuid(739d886a-cef5-47dc-8769-1a8b41bebbb0) +] +interface IDWriteFontFile : IUnknown +{ + HRESULT GetReferenceKey( + void const **key, + UINT32 *key_size); + + HRESULT GetLoader(IDWriteFontFileLoader **loader); + + HRESULT Analyze( + BOOL *is_supported_fonttype, + DWRITE_FONT_FILE_TYPE *file_type, + DWRITE_FONT_FACE_TYPE *face_type, + UINT32 *faces_num); +} + +[ +local, +object, +uuid(72755049-5ff7-435d-8348-4be97cfa6c7c) +] +interface IDWriteFontFileEnumerator : IUnknown +{ + HRESULT MoveNext(BOOL *has_current_file); + HRESULT GetCurrentFontFile(IDWriteFontFile **font_file); +}; + +[ +local, +object, +uuid(cca920e4-52f0-492b-bfa8-29c72ee0a468) +] +interface IDWriteFontCollectionLoader : IUnknown +{ + HRESULT CreateEnumeratorFromKey( + IDWriteFactory* factory, + void const* key, + UINT32 key_size, + IDWriteFontFileEnumerator **enumerator); +} + +[ +local, +object, +uuid(08256209-099a-4b34-b86d-c22b110e7771) +] +interface IDWriteLocalizedStrings : IUnknown +{ + UINT32 GetCount(); + + HRESULT FindLocaleName( + WCHAR const *locale_name, + UINT32 *index, + BOOL *exists); + + HRESULT GetLocaleNameLength(UINT32 index, UINT32 *length); + HRESULT GetLocaleName(UINT32 index, WCHAR *locale_name, UINT32 size); + HRESULT GetStringLength(UINT32 index, UINT32 *length); + HRESULT GetString(UINT32 index, WCHAR *buffer, UINT32 size); +} + +[ +local, +object, +uuid(2f0da53a-2add-47cd-82ee-d9ec34688e75) +] +interface IDWriteRenderingParams : IUnknown +{ + FLOAT GetGamma(); + FLOAT GetEnhancedContrast(); + FLOAT GetClearTypeLevel(); + DWRITE_PIXEL_GEOMETRY GetPixelGeometry(); + DWRITE_RENDERING_MODE GetRenderingMode(); +} + +[ +local, +object, +uuid(5f49804d-7024-4d43-bfa9-d25984f53849) +] +interface IDWriteFontFace : IUnknown +{ + DWRITE_FONT_FACE_TYPE GetType(); + HRESULT GetFiles(UINT32 *number_of_files, IDWriteFontFile **fontfiles); + UINT32 GetIndex(); + DWRITE_FONT_SIMULATIONS GetSimulations(); + BOOL IsSymbolFont(); + void GetMetrics(DWRITE_FONT_METRICS *metrics); + UINT16 GetGlyphCount(); + + HRESULT GetDesignGlyphMetrics( + UINT16 const *glyph_indices, + UINT32 glyph_count, + DWRITE_GLYPH_METRICS *metrics, + [defaultvalue(FALSE)] BOOL is_sideways); + + HRESULT GetGlyphIndices( + UINT32 const *codepoints, + UINT32 count, + UINT16 *glyph_indices); + + HRESULT TryGetFontTable( + UINT32 table_tag, + const void **table_data, + UINT32 *table_size, + void **context, + BOOL *exists); + + void ReleaseFontTable(void *table_context); + + HRESULT GettGlyphRunOutline( + FLOAT emSize, + UINT16 const *glyph_indices, + FLOAT const* glyph_advances, + DWRITE_GLYPH_OFFSET const *glyph_offsets, + UINT32 glyph_count, + BOOL is_sideways, + BOOL is_rtl, + IDWriteGeometrySink *geometrysink); + + HRESULT GetRecommendedRenderingMode( + FLOAT emSize, + FLOAT pixels_per_dip, + DWRITE_MEASURING_MODE mode, + IDWriteRenderingParams* params, + DWRITE_RENDERING_MODE* rendering_mode); + + HRESULT GetGdiCompatibleMetrics( + FLOAT emSize, + FLOAT pixels_per_dip, + DWRITE_MATRIX const *transform, + DWRITE_FONT_METRICS *metrics); + + HRESULT GetGdiCompatibleGlyphMetrics( + FLOAT emSize, + FLOAT pixels_per_dip, + DWRITE_MATRIX const *transform, + BOOL use_gdi_natural, + UINT16 const *glyph_indices, + UINT32 glyph_count, + DWRITE_GLYPH_METRICS *metrics, + [defaultvalue(FALSE)] BOOL is_sideways); +} + +[ +local, +object, +uuid(acd16696-8c14-4f5d-877e-fe3fc1d32737) +] +interface IDWriteFont : IUnknown +{ + HRESULT GetFontFamily(IDWriteFontFamily **family); + DWRITE_FONT_WEIGHT GetWeight(); + DWRITE_FONT_STRETCH GetStretch(); + DWRITE_FONT_STYLE GetStyle(); + BOOL IsSymbolFont(); + + HRESULT GetFaceNames(IDWriteLocalizedStrings **names); + HRESULT GetInformationalStrings( + DWRITE_INFORMATIONAL_STRING_ID stringid, + IDWriteLocalizedStrings **strings, + BOOL *exists); + + DWRITE_FONT_SIMULATIONS GetSimulations(); + void GetMetrics(DWRITE_FONT_METRICS *metrics); + HRESULT HasCharacter(UINT32 value, BOOL *exists); + HRESULT CreateFontFace(IDWriteFontFace **face); +} + +[ +local, +object, +uuid(1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb) +] +interface IDWriteFontList : IUnknown +{ + HRESULT GetFontCollection(IDWriteFontCollection **collection); + UINT32 GetFontCount(); + HRESULT GetFont(UINT32 index, IDWriteFont **font); +} + +[ +local, +object, +uuid(da20d8ef-812a-4c43-9802-62ec4abd7add) +] +interface IDWriteFontFamily : IDWriteFontList +{ + HRESULT GetFamilyNames(IDWriteLocalizedStrings **names); + + HRESULT GetFirstMatchingFont( + DWRITE_FONT_WEIGHT weight, + DWRITE_FONT_STRETCH stretch, + DWRITE_FONT_STYLE style, + IDWriteFont **font); + + HRESULT GetMatchingFonts( + DWRITE_FONT_WEIGHT weight, + DWRITE_FONT_STRETCH stretch, + DWRITE_FONT_STYLE style, + IDWriteFontList **fonts); +} + +[ +local, +object, +uuid(a84cee02-3eea-4eee-a827-87c1a02a0fcc) +] +interface IDWriteFontCollection : IUnknown +{ + UINT32 GetFontFamilyCount(); + HRESULT GetFontFamily(UINT32 index, IDWriteFontFamily **family); + HRESULT FindFamilyName(WCHAR const *name, UINT32 *index, BOOL *exists); + HRESULT GetFontFromFontFace(IDWriteFontFace *face, IDWriteFont **font); +} + +[ +local, +object, +uuid(eaf3a2da-ecf4-4d24-b644-b34f6842024b) +] +interface IDWritePixelSnapping : IUnknown +{ + HRESULT IsPixelSnappingDisabled( + void *client_drawingcontext, + BOOL *disabled); + + HRESULT GetCurrentTransform( + void *client_drawingcontext, + DWRITE_MATRIX *transform); + + HRESULT GetPixelsPerDip( + void *client_drawingcontext, + FLOAT *pixels_per_dip); +} + +[ +local, +object, +uuid(ef8a8135-5cc6-45fe-8825-c5a0724eb819) +] +interface IDWriteTextRenderer : IDWritePixelSnapping +{ + HRESULT DrawGlyphRun( + void* client_drawingcontext, + FLOAT baselineOriginX, + FLOAT baselineOriginY, + DWRITE_MEASURING_MODE mode, + DWRITE_GLYPH_RUN const *glyph_run, + DWRITE_GLYPH_RUN_DESCRIPTION const *run_descr, + IUnknown *drawing_effect); + + HRESULT DrawUnderline( + void *client_drawingcontext, + FLOAT baselineOriginX, + FLOAT baselineOriginY, + DWRITE_UNDERLINE const* underline, + IUnknown *drawing_effect); + + HRESULT DrawStrikethrough( + void *client_drawingcontext, + FLOAT baselineOriginX, + FLOAT baselineOriginY, + DWRITE_STRIKETHROUGH const* strikethrough, + IUnknown *drawing_effect); + + HRESULT DrawInlineObject( + void *client_drawingcontext, + FLOAT originX, + FLOAT originY, + IDWriteInlineObject *object, + BOOL is_sideways, + BOOL is_rtl, + IUnknown *drawing_effect); +} + +[ +local, +object, +uuid(8339fde3-106f-47ab-8373-1c6295eb10b3) +] +interface IDWriteInlineObject : IUnknown +{ + HRESULT Draw( + void* client_drawingontext, + IDWriteTextRenderer* renderer, + FLOAT originX, + FLOAT originY, + BOOL is_sideways, + BOOL is_rtl, + IUnknown *drawing_effect); + + HRESULT GetMetrics(DWRITE_INLINE_OBJECT_METRICS *metrics); + HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs); + HRESULT GetBreakConditions( + DWRITE_BREAK_CONDITION* condition_before, + DWRITE_BREAK_CONDITION* condition_after); +} + +[ +local, +object, +uuid(9c906818-31d7-4fd3-a151-7c5e225db55a) +] +interface IDWriteTextFormat : IUnknown +{ + HRESULT SetTextAlignment(DWRITE_TEXT_ALIGNMENT alignment); + HRESULT SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT alignment); + HRESULT SetWordWrapping(DWRITE_WORD_WRAPPING wrapping); + HRESULT SetReadingDirection(DWRITE_READING_DIRECTION direction); + HRESULT SetFlowDirection(DWRITE_FLOW_DIRECTION direction); + HRESULT SetIncrementalTabStop(FLOAT tabstop); + HRESULT SetTrimming(DWRITE_TRIMMING const *trimming, IDWriteInlineObject *trimming_sign); + HRESULT SetLineSpacing(DWRITE_LINE_SPACING_METHOD spacing, FLOAT line_spacing, FLOAT baseline); + DWRITE_TEXT_ALIGNMENT GetTextAlignment(); + DWRITE_PARAGRAPH_ALIGNMENT GetParagraphAlignment(); + DWRITE_WORD_WRAPPING GetWordWrapping(); + DWRITE_READING_DIRECTION GetReadingDirection(); + DWRITE_FLOW_DIRECTION GetFlowDirection(); + FLOAT GetIncrementalTabStop(); + HRESULT GetTrimming(DWRITE_TRIMMING *options, IDWriteInlineObject **trimming_sign); + + HRESULT GetLineSpacing( + DWRITE_LINE_SPACING_METHOD *method, + FLOAT *spacing, + FLOAT *baseline); + + HRESULT GetFontCollection(IDWriteFontCollection **collection); + UINT32 GetFontFamilyNameLength(); + HRESULT GetFontFamilyName(WCHAR *name, UINT32 size); + DWRITE_FONT_WEIGHT GetFontWeight(); + DWRITE_FONT_STYLE GetFontStyle(); + DWRITE_FONT_STRETCH GetFontStretch(); + FLOAT GetFontSize(); + UINT32 GetLocaleNameLength(); + HRESULT GetLocaleName(WCHAR *name, UINT32 size); +} + +[ +local, +object, +uuid(55f1112b-1dc2-4b3c-9541-f46894ed85b6) +] +interface IDWriteTypography : IUnknown +{ + HRESULT AddFontFeature(DWRITE_FONT_FEATURE feature); + UINT32 GetFontFeatureCount(); + HRESULT GetFontFeature(UINT32 index, DWRITE_FONT_FEATURE *feature); +} + +[ +local, +object, +uuid(5e5a32a3-8dff-4773-9ff6-0696eab77267) +] +interface IDWriteBitmapRenderTarget : IUnknown +{ + HRESULT DrawGlyphRun( + FLOAT baselineOriginX, + FLOAT baselineOriginY, + DWRITE_MEASURING_MODE measuring_mode, + DWRITE_GLYPH_RUN const* glyph_run, + IDWriteRenderingParams* params, + COLORREF textColor, + [defaultvalue(NULL)] RECT *blackbox_rect); + + HDC GetMemoryDC(); + FLOAT GetPixelsPerDip(); + HRESULT SetPixelsPerDip(FLOAT pixels_per_dip); + HRESULT GetCurrentTransform(DWRITE_MATRIX *transform); + HRESULT SetCurrentTransform(DWRITE_MATRIX const *transform); + HRESULT GetSize(SIZE *size); + HRESULT Resize(UINT32 width, UINT32 height); +} + +cpp_quote("#ifndef _WINGDI_") +/* already defined in wingdi.h but needed for WIDL */ +#define LF_FACESIZE 32 + + typedef struct tagLOGFONTW + { + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + WCHAR lfFaceName[LF_FACESIZE]; + } LOGFONTW, *PLOGFONTW, *LPLOGFONTW; +cpp_quote("#endif /* _WINGDI_ */") + +[ +local, +object, +uuid(1edd9491-9853-4299-898f-6432983b6f3a) +] +interface IDWriteGdiInterop : IUnknown +{ + HRESULT CreateFontFromLOGFONT(LOGFONTW const *logfont, IDWriteFont **font); + HRESULT ConvertFontToLOGFONT( + IDWriteFont* font, + LOGFONTW* logfont, + BOOL *is_systemfont); + + HRESULT ConvertFontFaceToLOGFONT(IDWriteFontFace* font, LOGFONTW* logfont); + HRESULT CreateFontFaceFromHdc(HDC hdc, IDWriteFontFace **fontface); + HRESULT CreateBitmapRenderTarget(HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target); +} + +[ +local, +object, +uuid(53737037-6d14-410b-9bfe-0b182bb70961) +] +interface IDWriteTextLayout : IDWriteTextFormat +{ + HRESULT SetMaxWidth(FLOAT maxWidth); + HRESULT SetMaxHeight(FLOAT maxHeight); + HRESULT SetFontCollection(IDWriteFontCollection* collection, DWRITE_TEXT_RANGE range); + HRESULT SetFontFamilyName(WCHAR const *name, DWRITE_TEXT_RANGE range); + HRESULT SetFontWeight(DWRITE_FONT_WEIGHT weight, DWRITE_TEXT_RANGE range); + HRESULT SetFontStyle(DWRITE_FONT_STYLE style, DWRITE_TEXT_RANGE range); + HRESULT SetFontStretch(DWRITE_FONT_STRETCH stretch, DWRITE_TEXT_RANGE range); + HRESULT SetFontSize(FLOAT size, DWRITE_TEXT_RANGE range); + HRESULT SetUnderline(BOOL underline, DWRITE_TEXT_RANGE range); + HRESULT SetStrikethrough(BOOL strikethrough, DWRITE_TEXT_RANGE range); + HRESULT SetDrawingEffect(IUnknown* effect, DWRITE_TEXT_RANGE range); + HRESULT SetInlineObject(IDWriteInlineObject *object, DWRITE_TEXT_RANGE range); + HRESULT SetTypography(IDWriteTypography* typography, DWRITE_TEXT_RANGE range); + HRESULT SetLocaleName(WCHAR const* locale, DWRITE_TEXT_RANGE range); + + FLOAT GetMaxWidth(); + FLOAT GetMaxHeight(); + HRESULT GetFontCollection( + UINT32 pos, + IDWriteFontCollection** collection, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetFontFamilyNameLength( + UINT32 pos, + UINT32* len, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetFontFamilyName( + UINT32 position, + WCHAR* name, + UINT32 name_size, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetFontWeight( + UINT32 position, + DWRITE_FONT_WEIGHT *weight, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetFontStyle( + UINT32 currentPosition, + DWRITE_FONT_STYLE *style, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetFontStretch( + UINT32 position, + DWRITE_FONT_STRETCH *stretch, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetFontSize( + UINT32 position, + FLOAT *size, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetUnderline( + UINT32 position, + BOOL *has_underline, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetStrikethrough( + UINT32 position, + BOOL *has_strikethrough, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetDrawingEffect( + UINT32 position, + IUnknown **effect, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetInlineObject( + UINT32 position, + IDWriteInlineObject **object, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetTypography( + UINT32 position, + IDWriteTypography** typography, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetLocaleNameLength( + UINT32 position, + UINT32* length, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT GetLocaleName( + UINT32 position, + WCHAR* name, + UINT32 name_size, + [defaultvalue(NULL)] DWRITE_TEXT_RANGE *range); + + HRESULT Draw( + void *context, + IDWriteTextRenderer* renderer, + FLOAT originX, + FLOAT originY); + + HRESULT GetLineMetrics( + DWRITE_LINE_METRICS *metrics, + UINT32 max_count, + UINT32 *actual_count); + + HRESULT GetMetrics(DWRITE_TEXT_METRICS *metrics); + HRESULT GetOverhangMetrics(DWRITE_OVERHANG_METRICS *overhangs); + HRESULT GetClusterMetrics( + DWRITE_CLUSTER_METRICS *metrics, + UINT32 max_count, + UINT32* act_count); + + HRESULT DetermineMinWidth(FLOAT* min_width); + HRESULT HitTestPoint( + FLOAT pointX, + FLOAT pointY, + BOOL* is_trailinghit, + BOOL* is_inside, + DWRITE_HIT_TEST_METRICS *metrics); + + HRESULT HitTestTextPosition( + UINT32 textPosition, + BOOL is_trailinghit, + FLOAT* pointX, + FLOAT* pointY, + DWRITE_HIT_TEST_METRICS *metrics); + + HRESULT HitTestTextRange( + UINT32 textPosition, + UINT32 textLength, + FLOAT originX, + FLOAT originY, + DWRITE_HIT_TEST_METRICS *metrics, + UINT32 max_metricscount, + UINT32* actual_metricscount); +} + +[ +local, +object, +uuid(14885cc9-bab0-4f90-b6ed-5c366a2cd03d) +] +interface IDWriteNumberSubstitution : IUnknown +{ +} + +[ +local, +object, +uuid(688e1a58-5094-47c8-adc8-fbcea60ae92b) +] +interface IDWriteTextAnalysisSource : IUnknown +{ + HRESULT GetTextAtPosition( + UINT32 position, + WCHAR const** text, + UINT32* text_len); + + HRESULT GetTextBeforePosition( + UINT32 position, + WCHAR const** text, + UINT32* text_len); + + DWRITE_READING_DIRECTION GetParagraphReadingDirection(); + HRESULT GetLocaleName( + UINT32 position, + UINT32* text_len, + WCHAR const** locale); + + HRESULT GetNumberSubstitution( + UINT32 position, + UINT32* text_len, + IDWriteNumberSubstitution **substitution); +} + +[ +local, +object, +uuid(5810cd44-0ca0-4701-b3fa-bec5182ae4f6) +] +interface IDWriteTextAnalysisSink : IUnknown +{ + HRESULT SetScriptAnalysis( + UINT32 position, + UINT32 length, + DWRITE_SCRIPT_ANALYSIS const* scriptanalysis); + + HRESULT SetLineBreakpoints( + UINT32 position, + UINT32 length, + DWRITE_LINE_BREAKPOINT const* breakpoints); + + HRESULT SetBidiLevel( + UINT32 position, + UINT32 length, + UINT8 explicitLevel, + UINT8 resolvedLevel); + + HRESULT SetNumberSubstitution( + UINT32 position, + UINT32 length, + IDWriteNumberSubstitution* substitution); +} + +[ +local, +object, +uuid(b7e6163e-7f46-43b4-84b3-e4e6249c365d) +] +interface IDWriteTextAnalyzer : IUnknown +{ + HRESULT AnalyzeScript( + IDWriteTextAnalysisSource* source, + UINT32 position, + UINT32 length, + IDWriteTextAnalysisSink* sink); + + HRESULT AnalyzeBidi( + IDWriteTextAnalysisSource* source, + UINT32 position, + UINT32 length, + IDWriteTextAnalysisSink* sink); + + HRESULT AnalyzeNumberSubstitution( + IDWriteTextAnalysisSource* source, + UINT32 position, + UINT32 length, + IDWriteTextAnalysisSink* sink); + + HRESULT AnalyzeLineBreakpoints( + IDWriteTextAnalysisSource* source, + UINT32 position, + UINT32 length, + IDWriteTextAnalysisSink* sink); + + HRESULT GetGlyphs( + WCHAR const* text, + UINT32 length, + IDWriteFontFace* font_face, + BOOL is_sideways, + BOOL is_rtl, + DWRITE_SCRIPT_ANALYSIS const* analysis, + WCHAR const* locale, + IDWriteNumberSubstitution* substitution, + DWRITE_TYPOGRAPHIC_FEATURES const** features, + UINT32 const* feature_range_len, + UINT32 feature_ranges, + UINT32 max_glyph_count, + UINT16* clustermap, + DWRITE_SHAPING_TEXT_PROPERTIES* text_props, + UINT16* glyph_indices, + DWRITE_SHAPING_GLYPH_PROPERTIES* glyph_props, + UINT32* actual_glyph_count); + + HRESULT GetGlyphPlacements( + WCHAR const* text, + UINT16 const* clustermap, + DWRITE_SHAPING_TEXT_PROPERTIES* props, + UINT32 text_len, + UINT16 const* glyph_indices, + DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props, + UINT32 glyph_count, + IDWriteFontFace * font_face, + FLOAT fontEmSize, + BOOL is_sideways, + BOOL is_rtl, + DWRITE_SCRIPT_ANALYSIS const* analysis, + WCHAR const* locale, + DWRITE_TYPOGRAPHIC_FEATURES const** features, + UINT32 const* feature_range_len, + UINT32 feature_ranges, + FLOAT* glyph_advances, + DWRITE_GLYPH_OFFSET* glyph_offsets); + + HRESULT GetGdiCompatibleGlyphPlacements( + WCHAR const* text, + UINT16 const* clustermap, + DWRITE_SHAPING_TEXT_PROPERTIES* props, + UINT32 text_len, + UINT16 const* glyph_indices, + DWRITE_SHAPING_GLYPH_PROPERTIES const* glyph_props, + UINT32 glyph_count, + IDWriteFontFace * font_face, + FLOAT fontEmSize, + FLOAT pixels_per_dip, + DWRITE_MATRIX const* transform, + BOOL use_gdi_natural, + BOOL is_sideways, + BOOL is_rtl, + DWRITE_SCRIPT_ANALYSIS const* analysis, + WCHAR const* locale, + DWRITE_TYPOGRAPHIC_FEATURES const** features, + UINT32 const* feature_range_lengths, + UINT32 feature_ranges, + FLOAT* glyph_advances, + DWRITE_GLYPH_OFFSET* glyph_offsets); +} + +[ +local, +object, +uuid(7d97dbf7-e085-42d4-81e3-6a883bded118) +] +interface IDWriteGlyphRunAnalysis : IUnknown +{ + HRESULT GetAlphaTextureBounds(DWRITE_TEXTURE_TYPE type, RECT* bounds); + HRESULT CreateAlphaTexture(DWRITE_TEXTURE_TYPE type, RECT const* bounds, BYTE* alphaValues, UINT32 bufferSize); + HRESULT GetAlphaBlendParams( + IDWriteRenderingParams* renderingParams, + FLOAT* blendGamma, + FLOAT* blendEnhancedContrast, + FLOAT* blendClearTypeLevel); +} + +[ +local, +object, +uuid(b859ee5a-d838-4b5b-a2e8-1adc7d93db48) +] +interface IDWriteFactory : IUnknown +{ + HRESULT GetSystemFontCollection(IDWriteFontCollection **collection, + [defaultvalue(FALSE)] BOOL check_for_updates); + + HRESULT CreateCustomFontCollection( + IDWriteFontCollectionLoader *loader, + void const *key, + UINT32 key_size, + IDWriteFontCollection **collection); + + HRESULT RegisterFontCollectionLoader(IDWriteFontCollectionLoader *loader); + + HRESULT UnregisterFontCollectionLoader(IDWriteFontCollectionLoader *loader); + + HRESULT CreateFontFileReference( + WCHAR const *path, + FILETIME const *writetime, + IDWriteFontFile **font_file); + + HRESULT CreateCustomFontFileReference( + void const *reference_key, + UINT32 key_size, + IDWriteFontFileLoader *loader, + IDWriteFontFile **font_file); + + HRESULT CreateFontFace( + DWRITE_FONT_FACE_TYPE facetype, + UINT32 files_number, + IDWriteFontFile* const* font_files, + UINT32 index, + DWRITE_FONT_SIMULATIONS sim_flags, + IDWriteFontFace **font_face); + + HRESULT CreateRenderingParams(IDWriteRenderingParams **params); + + HRESULT CreateMonitorRenderingParams( + HMONITOR monitor, + IDWriteRenderingParams **params); + + HRESULT CreateCustomRenderingParams( + FLOAT gamma, + FLOAT enhancedContrast, + FLOAT cleartype_level, + DWRITE_PIXEL_GEOMETRY geometry, + DWRITE_RENDERING_MODE mode, + IDWriteRenderingParams **params); + + HRESULT RegisterFontFileLoader(IDWriteFontFileLoader *loader); + + HRESULT UnregisterFontFileLoader(IDWriteFontFileLoader *loader); + + HRESULT CreateTextFormat( + WCHAR const* family_name, + IDWriteFontCollection *collection, + DWRITE_FONT_WEIGHT weight, + DWRITE_FONT_STYLE style, + DWRITE_FONT_STRETCH stretch, + FLOAT size, + WCHAR const *locale, + IDWriteTextFormat **format); + + HRESULT CreateTypography(IDWriteTypography **typography); + + HRESULT GetGdiInterop(IDWriteGdiInterop **gdi_interop); + + HRESULT CreateTextLayout( + WCHAR const* string, + UINT32 len, + IDWriteTextFormat *format, + FLOAT max_width, + FLOAT max_height, + IDWriteTextLayout **layout); + + HRESULT CreateGdiCompatibleTextLayout( + WCHAR const* string, + UINT32 len, + IDWriteTextFormat *format, + FLOAT layout_width, + FLOAT layout_height, + FLOAT pixels_per_dip, + DWRITE_MATRIX const* transform, + BOOL use_gdi_natural, + IDWriteTextLayout **layout); + + HRESULT CreateEllipsisTrimmingSign( + IDWriteTextFormat *format, + IDWriteInlineObject **trimming_sign); + + HRESULT CreateTextAnalyzer(IDWriteTextAnalyzer **analyzer); + + HRESULT CreateNumberSubstitution( + DWRITE_NUMBER_SUBSTITUTION_METHOD method, + WCHAR const* locale, + BOOL ignore_user_override, + IDWriteNumberSubstitution **substitution); + + HRESULT CreateGlyphRunAnalysis( + DWRITE_GLYPH_RUN const *glyph_run, + FLOAT pixels_per_dip, + DWRITE_MATRIX const* transform, + DWRITE_RENDERING_MODE rendering_mode, + DWRITE_MEASURING_MODE measuring_mode, + FLOAT baseline_x, + FLOAT baseline_y, + IDWriteGlyphRunAnalysis **analysis); +}