/*** Autogenerated by WIDL 2.3 from ../../wine-staging/include/dwrite_3.idl - Do not edit ***/

#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif

#include <rpc.h>
#include <rpcndr.h>

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __dwrite_3_h__
#define __dwrite_3_h__

/* Forward declarations */

#ifndef __IDWriteFontDownloadListener_FWD_DEFINED__
#define __IDWriteFontDownloadListener_FWD_DEFINED__
typedef interface IDWriteFontDownloadListener IDWriteFontDownloadListener;
#ifdef __cplusplus
interface IDWriteFontDownloadListener;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontDownloadQueue_FWD_DEFINED__
#define __IDWriteFontDownloadQueue_FWD_DEFINED__
typedef interface IDWriteFontDownloadQueue IDWriteFontDownloadQueue;
#ifdef __cplusplus
interface IDWriteFontDownloadQueue;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteRenderingParams3_FWD_DEFINED__
#define __IDWriteRenderingParams3_FWD_DEFINED__
typedef interface IDWriteRenderingParams3 IDWriteRenderingParams3;
#ifdef __cplusplus
interface IDWriteRenderingParams3;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteStringList_FWD_DEFINED__
#define __IDWriteStringList_FWD_DEFINED__
typedef interface IDWriteStringList IDWriteStringList;
#ifdef __cplusplus
interface IDWriteStringList;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontSet_FWD_DEFINED__
#define __IDWriteFontSet_FWD_DEFINED__
typedef interface IDWriteFontSet IDWriteFontSet;
#ifdef __cplusplus
interface IDWriteFontSet;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFont3_FWD_DEFINED__
#define __IDWriteFont3_FWD_DEFINED__
typedef interface IDWriteFont3 IDWriteFont3;
#ifdef __cplusplus
interface IDWriteFont3;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontFamily1_FWD_DEFINED__
#define __IDWriteFontFamily1_FWD_DEFINED__
typedef interface IDWriteFontFamily1 IDWriteFontFamily1;
#ifdef __cplusplus
interface IDWriteFontFamily1;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontCollection1_FWD_DEFINED__
#define __IDWriteFontCollection1_FWD_DEFINED__
typedef interface IDWriteFontCollection1 IDWriteFontCollection1;
#ifdef __cplusplus
interface IDWriteFontCollection1;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontFaceReference_FWD_DEFINED__
#define __IDWriteFontFaceReference_FWD_DEFINED__
typedef interface IDWriteFontFaceReference IDWriteFontFaceReference;
#ifdef __cplusplus
interface IDWriteFontFaceReference;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontList1_FWD_DEFINED__
#define __IDWriteFontList1_FWD_DEFINED__
typedef interface IDWriteFontList1 IDWriteFontList1;
#ifdef __cplusplus
interface IDWriteFontList1;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontFace3_FWD_DEFINED__
#define __IDWriteFontFace3_FWD_DEFINED__
typedef interface IDWriteFontFace3 IDWriteFontFace3;
#ifdef __cplusplus
interface IDWriteFontFace3;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteTextFormat2_FWD_DEFINED__
#define __IDWriteTextFormat2_FWD_DEFINED__
typedef interface IDWriteTextFormat2 IDWriteTextFormat2;
#ifdef __cplusplus
interface IDWriteTextFormat2;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteTextLayout3_FWD_DEFINED__
#define __IDWriteTextLayout3_FWD_DEFINED__
typedef interface IDWriteTextLayout3 IDWriteTextLayout3;
#ifdef __cplusplus
interface IDWriteTextLayout3;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteGdiInterop1_FWD_DEFINED__
#define __IDWriteGdiInterop1_FWD_DEFINED__
typedef interface IDWriteGdiInterop1 IDWriteGdiInterop1;
#ifdef __cplusplus
interface IDWriteGdiInterop1;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontSetBuilder_FWD_DEFINED__
#define __IDWriteFontSetBuilder_FWD_DEFINED__
typedef interface IDWriteFontSetBuilder IDWriteFontSetBuilder;
#ifdef __cplusplus
interface IDWriteFontSetBuilder;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFactory3_FWD_DEFINED__
#define __IDWriteFactory3_FWD_DEFINED__
typedef interface IDWriteFactory3 IDWriteFactory3;
#ifdef __cplusplus
interface IDWriteFactory3;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontFace4_FWD_DEFINED__
#define __IDWriteFontFace4_FWD_DEFINED__
typedef interface IDWriteFontFace4 IDWriteFontFace4;
#ifdef __cplusplus
interface IDWriteFontFace4;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteColorGlyphRunEnumerator1_FWD_DEFINED__
#define __IDWriteColorGlyphRunEnumerator1_FWD_DEFINED__
typedef interface IDWriteColorGlyphRunEnumerator1 IDWriteColorGlyphRunEnumerator1;
#ifdef __cplusplus
interface IDWriteColorGlyphRunEnumerator1;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFactory4_FWD_DEFINED__
#define __IDWriteFactory4_FWD_DEFINED__
typedef interface IDWriteFactory4 IDWriteFactory4;
#ifdef __cplusplus
interface IDWriteFactory4;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <dwrite_2.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __IDWriteFontFaceReference_FWD_DEFINED__
#define __IDWriteFontFaceReference_FWD_DEFINED__
typedef interface IDWriteFontFaceReference IDWriteFontFaceReference;
#ifdef __cplusplus
interface IDWriteFontFaceReference;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontFace3_FWD_DEFINED__
#define __IDWriteFontFace3_FWD_DEFINED__
typedef interface IDWriteFontFace3 IDWriteFontFace3;
#ifdef __cplusplus
interface IDWriteFontFace3;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontSet_FWD_DEFINED__
#define __IDWriteFontSet_FWD_DEFINED__
typedef interface IDWriteFontSet IDWriteFontSet;
#ifdef __cplusplus
interface IDWriteFontSet;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteFontDownloadQueue_FWD_DEFINED__
#define __IDWriteFontDownloadQueue_FWD_DEFINED__
typedef interface IDWriteFontDownloadQueue IDWriteFontDownloadQueue;
#ifdef __cplusplus
interface IDWriteFontDownloadQueue;
#endif /* __cplusplus */
#endif

#ifndef _WINGDI_
typedef struct FONTSIGNATURE FONTSIGNATURE;
#endif /* _WINGDI_ */
typedef enum DWRITE_LOCALITY {
    DWRITE_LOCALITY_REMOTE = 0,
    DWRITE_LOCALITY_PARTIAL = 1,
    DWRITE_LOCALITY_LOCAL = 2
} DWRITE_LOCALITY;
typedef enum DWRITE_RENDERING_MODE1 {
    DWRITE_RENDERING_MODE1_DEFAULT = 0,
    DWRITE_RENDERING_MODE1_ALIASED = 1,
    DWRITE_RENDERING_MODE1_GDI_CLASSIC = 2,
    DWRITE_RENDERING_MODE1_GDI_NATURAL = 3,
    DWRITE_RENDERING_MODE1_NATURAL = 4,
    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = 5,
    DWRITE_RENDERING_MODE1_OUTLINE = 6,
    DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED = 7
} DWRITE_RENDERING_MODE1;
typedef enum DWRITE_FONT_PROPERTY_ID {
    DWRITE_FONT_PROPERTY_ID_NONE = 0,
    DWRITE_FONT_PROPERTY_ID_FAMILY_NAME = 1,
    DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME = 2,
    DWRITE_FONT_PROPERTY_ID_FACE_NAME = 3,
    DWRITE_FONT_PROPERTY_ID_FULL_NAME = 4,
    DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME = 5,
    DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME = 6,
    DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG = 7,
    DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG = 8,
    DWRITE_FONT_PROPERTY_ID_WEIGHT = 9,
    DWRITE_FONT_PROPERTY_ID_STRETCH = 10,
    DWRITE_FONT_PROPERTY_ID_STYLE = 11,
    DWRITE_FONT_PROPERTY_ID_TOTAL = 12
} DWRITE_FONT_PROPERTY_ID;
typedef struct DWRITE_FONT_PROPERTY {
    DWRITE_FONT_PROPERTY_ID propertyId;
    const WCHAR *propertyValue;
    const WCHAR *localeName;
} DWRITE_FONT_PROPERTY;
/*****************************************************************************
 * IDWriteFontDownloadListener interface
 */
#ifndef __IDWriteFontDownloadListener_INTERFACE_DEFINED__
#define __IDWriteFontDownloadListener_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontDownloadListener, 0xb06fe5b9, 0x43ec, 0x4393, 0x88,0x1b, 0xdb,0xe4,0xdc,0x72,0xfd,0xa7);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b06fe5b9-43ec-4393-881b-dbe4dc72fda7")
IDWriteFontDownloadListener : public IUnknown
{
    virtual void STDMETHODCALLTYPE DownloadCompleted(
        IDWriteFontDownloadQueue *queue,
        IUnknown *context,
        HRESULT result) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontDownloadListener, 0xb06fe5b9, 0x43ec, 0x4393, 0x88,0x1b, 0xdb,0xe4,0xdc,0x72,0xfd,0xa7)
#endif
#else
typedef struct IDWriteFontDownloadListenerVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontDownloadListener *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontDownloadListener *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontDownloadListener *This);

    /*** IDWriteFontDownloadListener methods ***/
    void (STDMETHODCALLTYPE *DownloadCompleted)(
        IDWriteFontDownloadListener *This,
        IDWriteFontDownloadQueue *queue,
        IUnknown *context,
        HRESULT result);

    END_INTERFACE
} IDWriteFontDownloadListenerVtbl;

interface IDWriteFontDownloadListener {
    CONST_VTBL IDWriteFontDownloadListenerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontDownloadListener_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontDownloadListener_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontDownloadListener_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontDownloadListener methods ***/
#define IDWriteFontDownloadListener_DownloadCompleted(This,queue,context,result) (This)->lpVtbl->DownloadCompleted(This,queue,context,result)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontDownloadListener_QueryInterface(IDWriteFontDownloadListener* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontDownloadListener_AddRef(IDWriteFontDownloadListener* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontDownloadListener_Release(IDWriteFontDownloadListener* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontDownloadListener methods ***/
static FORCEINLINE void IDWriteFontDownloadListener_DownloadCompleted(IDWriteFontDownloadListener* This,IDWriteFontDownloadQueue *queue,IUnknown *context,HRESULT result) {
    This->lpVtbl->DownloadCompleted(This,queue,context,result);
}
#endif
#endif

#endif

void STDMETHODCALLTYPE IDWriteFontDownloadListener_DownloadCompleted_Proxy(
    IDWriteFontDownloadListener* This,
    IDWriteFontDownloadQueue *queue,
    IUnknown *context,
    HRESULT result);
void __RPC_STUB IDWriteFontDownloadListener_DownloadCompleted_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontDownloadListener_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontDownloadQueue interface
 */
#ifndef __IDWriteFontDownloadQueue_INTERFACE_DEFINED__
#define __IDWriteFontDownloadQueue_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontDownloadQueue, 0xb71e6052, 0x5aea, 0x4fa3, 0x83,0x2e, 0xf6,0x0d,0x43,0x1f,0x7e,0x91);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b71e6052-5aea-4fa3-832e-f60d431f7e91")
IDWriteFontDownloadQueue : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AddListener(
        IDWriteFontDownloadListener *listener,
        UINT32 *token) = 0;

    virtual HRESULT STDMETHODCALLTYPE RemoveListener(
        UINT32 token) = 0;

    virtual BOOL STDMETHODCALLTYPE IsEmpty(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginDownload(
        IUnknown *context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelDownload(
        ) = 0;

    virtual UINT64 STDMETHODCALLTYPE GetGenerationCount(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontDownloadQueue, 0xb71e6052, 0x5aea, 0x4fa3, 0x83,0x2e, 0xf6,0x0d,0x43,0x1f,0x7e,0x91)
#endif
#else
typedef struct IDWriteFontDownloadQueueVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontDownloadQueue *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontDownloadQueue *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontDownloadQueue *This);

    /*** IDWriteFontDownloadQueue methods ***/
    HRESULT (STDMETHODCALLTYPE *AddListener)(
        IDWriteFontDownloadQueue *This,
        IDWriteFontDownloadListener *listener,
        UINT32 *token);

    HRESULT (STDMETHODCALLTYPE *RemoveListener)(
        IDWriteFontDownloadQueue *This,
        UINT32 token);

    BOOL (STDMETHODCALLTYPE *IsEmpty)(
        IDWriteFontDownloadQueue *This);

    HRESULT (STDMETHODCALLTYPE *BeginDownload)(
        IDWriteFontDownloadQueue *This,
        IUnknown *context);

    HRESULT (STDMETHODCALLTYPE *CancelDownload)(
        IDWriteFontDownloadQueue *This);

    UINT64 (STDMETHODCALLTYPE *GetGenerationCount)(
        IDWriteFontDownloadQueue *This);

    END_INTERFACE
} IDWriteFontDownloadQueueVtbl;

interface IDWriteFontDownloadQueue {
    CONST_VTBL IDWriteFontDownloadQueueVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontDownloadQueue_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontDownloadQueue_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontDownloadQueue_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontDownloadQueue methods ***/
#define IDWriteFontDownloadQueue_AddListener(This,listener,token) (This)->lpVtbl->AddListener(This,listener,token)
#define IDWriteFontDownloadQueue_RemoveListener(This,token) (This)->lpVtbl->RemoveListener(This,token)
#define IDWriteFontDownloadQueue_IsEmpty(This) (This)->lpVtbl->IsEmpty(This)
#define IDWriteFontDownloadQueue_BeginDownload(This,context) (This)->lpVtbl->BeginDownload(This,context)
#define IDWriteFontDownloadQueue_CancelDownload(This) (This)->lpVtbl->CancelDownload(This)
#define IDWriteFontDownloadQueue_GetGenerationCount(This) (This)->lpVtbl->GetGenerationCount(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontDownloadQueue_QueryInterface(IDWriteFontDownloadQueue* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontDownloadQueue_AddRef(IDWriteFontDownloadQueue* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontDownloadQueue_Release(IDWriteFontDownloadQueue* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontDownloadQueue methods ***/
static FORCEINLINE HRESULT IDWriteFontDownloadQueue_AddListener(IDWriteFontDownloadQueue* This,IDWriteFontDownloadListener *listener,UINT32 *token) {
    return This->lpVtbl->AddListener(This,listener,token);
}
static FORCEINLINE HRESULT IDWriteFontDownloadQueue_RemoveListener(IDWriteFontDownloadQueue* This,UINT32 token) {
    return This->lpVtbl->RemoveListener(This,token);
}
static FORCEINLINE BOOL IDWriteFontDownloadQueue_IsEmpty(IDWriteFontDownloadQueue* This) {
    return This->lpVtbl->IsEmpty(This);
}
static FORCEINLINE HRESULT IDWriteFontDownloadQueue_BeginDownload(IDWriteFontDownloadQueue* This,IUnknown *context) {
    return This->lpVtbl->BeginDownload(This,context);
}
static FORCEINLINE HRESULT IDWriteFontDownloadQueue_CancelDownload(IDWriteFontDownloadQueue* This) {
    return This->lpVtbl->CancelDownload(This);
}
static FORCEINLINE UINT64 IDWriteFontDownloadQueue_GetGenerationCount(IDWriteFontDownloadQueue* This) {
    return This->lpVtbl->GetGenerationCount(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFontDownloadQueue_AddListener_Proxy(
    IDWriteFontDownloadQueue* This,
    IDWriteFontDownloadListener *listener,
    UINT32 *token);
void __RPC_STUB IDWriteFontDownloadQueue_AddListener_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontDownloadQueue_RemoveListener_Proxy(
    IDWriteFontDownloadQueue* This,
    UINT32 token);
void __RPC_STUB IDWriteFontDownloadQueue_RemoveListener_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFontDownloadQueue_IsEmpty_Proxy(
    IDWriteFontDownloadQueue* This);
void __RPC_STUB IDWriteFontDownloadQueue_IsEmpty_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontDownloadQueue_BeginDownload_Proxy(
    IDWriteFontDownloadQueue* This,
    IUnknown *context);
void __RPC_STUB IDWriteFontDownloadQueue_BeginDownload_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontDownloadQueue_CancelDownload_Proxy(
    IDWriteFontDownloadQueue* This);
void __RPC_STUB IDWriteFontDownloadQueue_CancelDownload_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
UINT64 STDMETHODCALLTYPE IDWriteFontDownloadQueue_GetGenerationCount_Proxy(
    IDWriteFontDownloadQueue* This);
void __RPC_STUB IDWriteFontDownloadQueue_GetGenerationCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontDownloadQueue_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteRenderingParams3 interface
 */
#ifndef __IDWriteRenderingParams3_INTERFACE_DEFINED__
#define __IDWriteRenderingParams3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteRenderingParams3, 0xb7924baa, 0x391b, 0x412a, 0x8c,0x5c, 0xe4,0x4c,0xc2,0xd8,0x67,0xdc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b7924baa-391b-412a-8c5c-e44cc2d867dc")
IDWriteRenderingParams3 : public IDWriteRenderingParams2
{
    virtual DWRITE_RENDERING_MODE1 STDMETHODCALLTYPE GetRenderingMode1(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteRenderingParams3, 0xb7924baa, 0x391b, 0x412a, 0x8c,0x5c, 0xe4,0x4c,0xc2,0xd8,0x67,0xdc)
#endif
#else
typedef struct IDWriteRenderingParams3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteRenderingParams3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteRenderingParams3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteRenderingParams3 *This);

    /*** IDWriteRenderingParams methods ***/
    FLOAT (STDMETHODCALLTYPE *GetGamma)(
        IDWriteRenderingParams3 *This);

    FLOAT (STDMETHODCALLTYPE *GetEnhancedContrast)(
        IDWriteRenderingParams3 *This);

    FLOAT (STDMETHODCALLTYPE *GetClearTypeLevel)(
        IDWriteRenderingParams3 *This);

    DWRITE_PIXEL_GEOMETRY (STDMETHODCALLTYPE *GetPixelGeometry)(
        IDWriteRenderingParams3 *This);

    DWRITE_RENDERING_MODE (STDMETHODCALLTYPE *GetRenderingMode)(
        IDWriteRenderingParams3 *This);

    /*** IDWriteRenderingParams1 methods ***/
    FLOAT (STDMETHODCALLTYPE *GetGrayscaleEnhancedContrast)(
        IDWriteRenderingParams3 *This);

    /*** IDWriteRenderingParams2 methods ***/
    DWRITE_GRID_FIT_MODE (STDMETHODCALLTYPE *GetGridFitMode)(
        IDWriteRenderingParams3 *This);

    /*** IDWriteRenderingParams3 methods ***/
    DWRITE_RENDERING_MODE1 (STDMETHODCALLTYPE *GetRenderingMode1)(
        IDWriteRenderingParams3 *This);

    END_INTERFACE
} IDWriteRenderingParams3Vtbl;

interface IDWriteRenderingParams3 {
    CONST_VTBL IDWriteRenderingParams3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteRenderingParams3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteRenderingParams3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteRenderingParams3_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteRenderingParams methods ***/
#define IDWriteRenderingParams3_GetGamma(This) (This)->lpVtbl->GetGamma(This)
#define IDWriteRenderingParams3_GetEnhancedContrast(This) (This)->lpVtbl->GetEnhancedContrast(This)
#define IDWriteRenderingParams3_GetClearTypeLevel(This) (This)->lpVtbl->GetClearTypeLevel(This)
#define IDWriteRenderingParams3_GetPixelGeometry(This) (This)->lpVtbl->GetPixelGeometry(This)
#define IDWriteRenderingParams3_GetRenderingMode(This) (This)->lpVtbl->GetRenderingMode(This)
/*** IDWriteRenderingParams1 methods ***/
#define IDWriteRenderingParams3_GetGrayscaleEnhancedContrast(This) (This)->lpVtbl->GetGrayscaleEnhancedContrast(This)
/*** IDWriteRenderingParams2 methods ***/
#define IDWriteRenderingParams3_GetGridFitMode(This) (This)->lpVtbl->GetGridFitMode(This)
/*** IDWriteRenderingParams3 methods ***/
#define IDWriteRenderingParams3_GetRenderingMode1(This) (This)->lpVtbl->GetRenderingMode1(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteRenderingParams3_QueryInterface(IDWriteRenderingParams3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteRenderingParams3_AddRef(IDWriteRenderingParams3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteRenderingParams3_Release(IDWriteRenderingParams3* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteRenderingParams methods ***/
static FORCEINLINE FLOAT IDWriteRenderingParams3_GetGamma(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetGamma(This);
}
static FORCEINLINE FLOAT IDWriteRenderingParams3_GetEnhancedContrast(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetEnhancedContrast(This);
}
static FORCEINLINE FLOAT IDWriteRenderingParams3_GetClearTypeLevel(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetClearTypeLevel(This);
}
static FORCEINLINE DWRITE_PIXEL_GEOMETRY IDWriteRenderingParams3_GetPixelGeometry(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetPixelGeometry(This);
}
static FORCEINLINE DWRITE_RENDERING_MODE IDWriteRenderingParams3_GetRenderingMode(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetRenderingMode(This);
}
/*** IDWriteRenderingParams1 methods ***/
static FORCEINLINE FLOAT IDWriteRenderingParams3_GetGrayscaleEnhancedContrast(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetGrayscaleEnhancedContrast(This);
}
/*** IDWriteRenderingParams2 methods ***/
static FORCEINLINE DWRITE_GRID_FIT_MODE IDWriteRenderingParams3_GetGridFitMode(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetGridFitMode(This);
}
/*** IDWriteRenderingParams3 methods ***/
static FORCEINLINE DWRITE_RENDERING_MODE1 IDWriteRenderingParams3_GetRenderingMode1(IDWriteRenderingParams3* This) {
    return This->lpVtbl->GetRenderingMode1(This);
}
#endif
#endif

#endif

DWRITE_RENDERING_MODE1 STDMETHODCALLTYPE IDWriteRenderingParams3_GetRenderingMode1_Proxy(
    IDWriteRenderingParams3* This);
void __RPC_STUB IDWriteRenderingParams3_GetRenderingMode1_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteRenderingParams3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteStringList interface
 */
#ifndef __IDWriteStringList_INTERFACE_DEFINED__
#define __IDWriteStringList_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteStringList, 0xcfee3140, 0x1257, 0x47ca, 0x8b,0x85, 0x31,0xbf,0xcf,0x3f,0x2d,0x0e);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("cfee3140-1257-47ca-8b85-31bfcf3f2d0e")
IDWriteStringList : public IUnknown
{
    virtual UINT32 STDMETHODCALLTYPE GetCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLocaleNameLength(
        UINT32 index,
        UINT32 *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLocaleName(
        UINT32 index,
        WCHAR *name,
        UINT32 size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetStringLength(
        UINT32 index,
        UINT32 *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetString(
        UINT32 index,
        WCHAR *string,
        UINT32 size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteStringList, 0xcfee3140, 0x1257, 0x47ca, 0x8b,0x85, 0x31,0xbf,0xcf,0x3f,0x2d,0x0e)
#endif
#else
typedef struct IDWriteStringListVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteStringList *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteStringList *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteStringList *This);

    /*** IDWriteStringList methods ***/
    UINT32 (STDMETHODCALLTYPE *GetCount)(
        IDWriteStringList *This);

    HRESULT (STDMETHODCALLTYPE *GetLocaleNameLength)(
        IDWriteStringList *This,
        UINT32 index,
        UINT32 *length);

    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
        IDWriteStringList *This,
        UINT32 index,
        WCHAR *name,
        UINT32 size);

    HRESULT (STDMETHODCALLTYPE *GetStringLength)(
        IDWriteStringList *This,
        UINT32 index,
        UINT32 *length);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        IDWriteStringList *This,
        UINT32 index,
        WCHAR *string,
        UINT32 size);

    END_INTERFACE
} IDWriteStringListVtbl;

interface IDWriteStringList {
    CONST_VTBL IDWriteStringListVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteStringList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteStringList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteStringList_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteStringList methods ***/
#define IDWriteStringList_GetCount(This) (This)->lpVtbl->GetCount(This)
#define IDWriteStringList_GetLocaleNameLength(This,index,length) (This)->lpVtbl->GetLocaleNameLength(This,index,length)
#define IDWriteStringList_GetLocaleName(This,index,name,size) (This)->lpVtbl->GetLocaleName(This,index,name,size)
#define IDWriteStringList_GetStringLength(This,index,length) (This)->lpVtbl->GetStringLength(This,index,length)
#define IDWriteStringList_GetString(This,index,string,size) (This)->lpVtbl->GetString(This,index,string,size)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteStringList_QueryInterface(IDWriteStringList* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteStringList_AddRef(IDWriteStringList* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteStringList_Release(IDWriteStringList* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteStringList methods ***/
static FORCEINLINE UINT32 IDWriteStringList_GetCount(IDWriteStringList* This) {
    return This->lpVtbl->GetCount(This);
}
static FORCEINLINE HRESULT IDWriteStringList_GetLocaleNameLength(IDWriteStringList* This,UINT32 index,UINT32 *length) {
    return This->lpVtbl->GetLocaleNameLength(This,index,length);
}
static FORCEINLINE HRESULT IDWriteStringList_GetLocaleName(IDWriteStringList* This,UINT32 index,WCHAR *name,UINT32 size) {
    return This->lpVtbl->GetLocaleName(This,index,name,size);
}
static FORCEINLINE HRESULT IDWriteStringList_GetStringLength(IDWriteStringList* This,UINT32 index,UINT32 *length) {
    return This->lpVtbl->GetStringLength(This,index,length);
}
static FORCEINLINE HRESULT IDWriteStringList_GetString(IDWriteStringList* This,UINT32 index,WCHAR *string,UINT32 size) {
    return This->lpVtbl->GetString(This,index,string,size);
}
#endif
#endif

#endif

UINT32 STDMETHODCALLTYPE IDWriteStringList_GetCount_Proxy(
    IDWriteStringList* This);
void __RPC_STUB IDWriteStringList_GetCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteStringList_GetLocaleNameLength_Proxy(
    IDWriteStringList* This,
    UINT32 index,
    UINT32 *length);
void __RPC_STUB IDWriteStringList_GetLocaleNameLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteStringList_GetLocaleName_Proxy(
    IDWriteStringList* This,
    UINT32 index,
    WCHAR *name,
    UINT32 size);
void __RPC_STUB IDWriteStringList_GetLocaleName_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteStringList_GetStringLength_Proxy(
    IDWriteStringList* This,
    UINT32 index,
    UINT32 *length);
void __RPC_STUB IDWriteStringList_GetStringLength_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteStringList_GetString_Proxy(
    IDWriteStringList* This,
    UINT32 index,
    WCHAR *string,
    UINT32 size);
void __RPC_STUB IDWriteStringList_GetString_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteStringList_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontSet interface
 */
#ifndef __IDWriteFontSet_INTERFACE_DEFINED__
#define __IDWriteFontSet_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontSet, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("53585141-d9f8-4095-8321-d73cf6bd116b")
IDWriteFontSet : public IUnknown
{
    virtual UINT32 STDMETHODCALLTYPE GetFontCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
        UINT32 index,
        IDWriteFontFaceReference **reference) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindFontFaceReference(
        IDWriteFontFaceReference *reference,
        UINT32 *index,
        BOOL *exists) = 0;

    virtual HRESULT STDMETHODCALLTYPE FindFontFace(
        IDWriteFontFace *fontface,
        UINT32 *index,
        BOOL *exists) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyValues__(
        DWRITE_FONT_PROPERTY_ID id,
        IDWriteStringList **values) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyValues_(
        DWRITE_FONT_PROPERTY_ID id,
        const WCHAR *preferred_locales,
        IDWriteStringList **values) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyValues(
        UINT32 index,
        DWRITE_FONT_PROPERTY_ID id,
        BOOL *exists,
        IDWriteLocalizedStrings **values) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyOccurrenceCount(
        const DWRITE_FONT_PROPERTY *property,
        UINT32 *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts_(
        const WCHAR *family,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_FONT_STRETCH stretch,
        DWRITE_FONT_STYLE style,
        IDWriteFontSet **fontset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMatchingFonts(
        const DWRITE_FONT_PROPERTY *props,
        UINT32 count,
        IDWriteFontSet **fontset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontSet, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6b)
#endif
#else
typedef struct IDWriteFontSetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontSet *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontSet *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontSet *This);

    /*** IDWriteFontSet methods ***/
    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
        IDWriteFontSet *This);

    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
        IDWriteFontSet *This,
        UINT32 index,
        IDWriteFontFaceReference **reference);

    HRESULT (STDMETHODCALLTYPE *FindFontFaceReference)(
        IDWriteFontSet *This,
        IDWriteFontFaceReference *reference,
        UINT32 *index,
        BOOL *exists);

    HRESULT (STDMETHODCALLTYPE *FindFontFace)(
        IDWriteFontSet *This,
        IDWriteFontFace *fontface,
        UINT32 *index,
        BOOL *exists);

    HRESULT (STDMETHODCALLTYPE *GetPropertyValues__)(
        IDWriteFontSet *This,
        DWRITE_FONT_PROPERTY_ID id,
        IDWriteStringList **values);

    HRESULT (STDMETHODCALLTYPE *GetPropertyValues_)(
        IDWriteFontSet *This,
        DWRITE_FONT_PROPERTY_ID id,
        const WCHAR *preferred_locales,
        IDWriteStringList **values);

    HRESULT (STDMETHODCALLTYPE *GetPropertyValues)(
        IDWriteFontSet *This,
        UINT32 index,
        DWRITE_FONT_PROPERTY_ID id,
        BOOL *exists,
        IDWriteLocalizedStrings **values);

    HRESULT (STDMETHODCALLTYPE *GetPropertyOccurrenceCount)(
        IDWriteFontSet *This,
        const DWRITE_FONT_PROPERTY *property,
        UINT32 *count);

    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts_)(
        IDWriteFontSet *This,
        const WCHAR *family,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_FONT_STRETCH stretch,
        DWRITE_FONT_STYLE style,
        IDWriteFontSet **fontset);

    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
        IDWriteFontSet *This,
        const DWRITE_FONT_PROPERTY *props,
        UINT32 count,
        IDWriteFontSet **fontset);

    END_INTERFACE
} IDWriteFontSetVtbl;

interface IDWriteFontSet {
    CONST_VTBL IDWriteFontSetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontSet_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontSet_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontSet_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontSet methods ***/
#define IDWriteFontSet_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
#define IDWriteFontSet_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
#define IDWriteFontSet_FindFontFaceReference(This,reference,index,exists) (This)->lpVtbl->FindFontFaceReference(This,reference,index,exists)
#define IDWriteFontSet_FindFontFace(This,fontface,index,exists) (This)->lpVtbl->FindFontFace(This,fontface,index,exists)
#define IDWriteFontSet_GetPropertyValues__(This,id,values) (This)->lpVtbl->GetPropertyValues__(This,id,values)
#define IDWriteFontSet_GetPropertyValues_(This,id,preferred_locales,values) (This)->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values)
#define IDWriteFontSet_GetPropertyValues(This,index,id,exists,values) (This)->lpVtbl->GetPropertyValues(This,index,id,exists,values)
#define IDWriteFontSet_GetPropertyOccurrenceCount(This,property,count) (This)->lpVtbl->GetPropertyOccurrenceCount(This,property,count)
#define IDWriteFontSet_GetMatchingFonts_(This,family,weight,stretch,style,fontset) (This)->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset)
#define IDWriteFontSet_GetMatchingFonts(This,props,count,fontset) (This)->lpVtbl->GetMatchingFonts(This,props,count,fontset)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontSet_QueryInterface(IDWriteFontSet* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontSet_AddRef(IDWriteFontSet* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontSet_Release(IDWriteFontSet* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontSet methods ***/
static FORCEINLINE UINT32 IDWriteFontSet_GetFontCount(IDWriteFontSet* This) {
    return This->lpVtbl->GetFontCount(This);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetFontFaceReference(IDWriteFontSet* This,UINT32 index,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->GetFontFaceReference(This,index,reference);
}
static FORCEINLINE HRESULT IDWriteFontSet_FindFontFaceReference(IDWriteFontSet* This,IDWriteFontFaceReference *reference,UINT32 *index,BOOL *exists) {
    return This->lpVtbl->FindFontFaceReference(This,reference,index,exists);
}
static FORCEINLINE HRESULT IDWriteFontSet_FindFontFace(IDWriteFontSet* This,IDWriteFontFace *fontface,UINT32 *index,BOOL *exists) {
    return This->lpVtbl->FindFontFace(This,fontface,index,exists);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyValues__(IDWriteFontSet* This,DWRITE_FONT_PROPERTY_ID id,IDWriteStringList **values) {
    return This->lpVtbl->GetPropertyValues__(This,id,values);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyValues_(IDWriteFontSet* This,DWRITE_FONT_PROPERTY_ID id,const WCHAR *preferred_locales,IDWriteStringList **values) {
    return This->lpVtbl->GetPropertyValues_(This,id,preferred_locales,values);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyValues(IDWriteFontSet* This,UINT32 index,DWRITE_FONT_PROPERTY_ID id,BOOL *exists,IDWriteLocalizedStrings **values) {
    return This->lpVtbl->GetPropertyValues(This,index,id,exists,values);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetPropertyOccurrenceCount(IDWriteFontSet* This,const DWRITE_FONT_PROPERTY *property,UINT32 *count) {
    return This->lpVtbl->GetPropertyOccurrenceCount(This,property,count);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetMatchingFonts_(IDWriteFontSet* This,const WCHAR *family,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontSet **fontset) {
    return This->lpVtbl->GetMatchingFonts_(This,family,weight,stretch,style,fontset);
}
static FORCEINLINE HRESULT IDWriteFontSet_GetMatchingFonts(IDWriteFontSet* This,const DWRITE_FONT_PROPERTY *props,UINT32 count,IDWriteFontSet **fontset) {
    return This->lpVtbl->GetMatchingFonts(This,props,count,fontset);
}
#endif
#endif

#endif

UINT32 STDMETHODCALLTYPE IDWriteFontSet_GetFontCount_Proxy(
    IDWriteFontSet* This);
void __RPC_STUB IDWriteFontSet_GetFontCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetFontFaceReference_Proxy(
    IDWriteFontSet* This,
    UINT32 index,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFontSet_GetFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_FindFontFaceReference_Proxy(
    IDWriteFontSet* This,
    IDWriteFontFaceReference *reference,
    UINT32 *index,
    BOOL *exists);
void __RPC_STUB IDWriteFontSet_FindFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_FindFontFace_Proxy(
    IDWriteFontSet* This,
    IDWriteFontFace *fontface,
    UINT32 *index,
    BOOL *exists);
void __RPC_STUB IDWriteFontSet_FindFontFace_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetPropertyValues___Proxy(
    IDWriteFontSet* This,
    DWRITE_FONT_PROPERTY_ID id,
    IDWriteStringList **values);
void __RPC_STUB IDWriteFontSet_GetPropertyValues___Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetPropertyValues__Proxy(
    IDWriteFontSet* This,
    DWRITE_FONT_PROPERTY_ID id,
    const WCHAR *preferred_locales,
    IDWriteStringList **values);
void __RPC_STUB IDWriteFontSet_GetPropertyValues__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetPropertyValues_Proxy(
    IDWriteFontSet* This,
    UINT32 index,
    DWRITE_FONT_PROPERTY_ID id,
    BOOL *exists,
    IDWriteLocalizedStrings **values);
void __RPC_STUB IDWriteFontSet_GetPropertyValues_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetPropertyOccurrenceCount_Proxy(
    IDWriteFontSet* This,
    const DWRITE_FONT_PROPERTY *property,
    UINT32 *count);
void __RPC_STUB IDWriteFontSet_GetPropertyOccurrenceCount_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetMatchingFonts__Proxy(
    IDWriteFontSet* This,
    const WCHAR *family,
    DWRITE_FONT_WEIGHT weight,
    DWRITE_FONT_STRETCH stretch,
    DWRITE_FONT_STYLE style,
    IDWriteFontSet **fontset);
void __RPC_STUB IDWriteFontSet_GetMatchingFonts__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSet_GetMatchingFonts_Proxy(
    IDWriteFontSet* This,
    const DWRITE_FONT_PROPERTY *props,
    UINT32 count,
    IDWriteFontSet **fontset);
void __RPC_STUB IDWriteFontSet_GetMatchingFonts_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontSet_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFont3 interface
 */
#ifndef __IDWriteFont3_INTERFACE_DEFINED__
#define __IDWriteFont3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFont3, 0x29748ed6, 0x8c9c, 0x4a6a, 0xbe,0x0b, 0xd9,0x12,0xe8,0x53,0x89,0x44);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("29748ed6-8c9c-4a6a-be0b-d912e8538944")
IDWriteFont3 : public IDWriteFont2
{
    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
        IDWriteFontFace3 **fontface) = 0;

    virtual BOOL STDMETHODCALLTYPE Equals(
        IDWriteFont *font) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
        IDWriteFontFaceReference **reference) = 0;

    virtual BOOL STDMETHODCALLTYPE HasCharacter(
        UINT32 character) = 0;

    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetLocality(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFont3, 0x29748ed6, 0x8c9c, 0x4a6a, 0xbe,0x0b, 0xd9,0x12,0xe8,0x53,0x89,0x44)
#endif
#else
typedef struct IDWriteFont3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFont3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFont3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFont3 *This);

    /*** IDWriteFont methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
        IDWriteFont3 *This,
        IDWriteFontFamily **family);

    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
        IDWriteFont3 *This);

    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
        IDWriteFont3 *This);

    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
        IDWriteFont3 *This);

    BOOL (STDMETHODCALLTYPE *IsSymbolFont)(
        IDWriteFont3 *This);

    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
        IDWriteFont3 *This,
        IDWriteLocalizedStrings **names);

    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
        IDWriteFont3 *This,
        DWRITE_INFORMATIONAL_STRING_ID stringid,
        IDWriteLocalizedStrings **strings,
        BOOL *exists);

    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
        IDWriteFont3 *This);

    void (STDMETHODCALLTYPE *GetMetrics)(
        IDWriteFont3 *This,
        DWRITE_FONT_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *HasCharacter)(
        IDWriteFont3 *This,
        UINT32 value,
        BOOL *exists);

    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
        IDWriteFont3 *This,
        IDWriteFontFace **face);

    /*** IDWriteFont1 methods ***/
    void (STDMETHODCALLTYPE *IDWriteFont1_GetMetrics)(
        IDWriteFont3 *This,
        DWRITE_FONT_METRICS1 *metrics);

    void (STDMETHODCALLTYPE *GetPanose)(
        IDWriteFont3 *This,
        DWRITE_PANOSE *panose);

    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
        IDWriteFont3 *This,
        UINT32 max_count,
        DWRITE_UNICODE_RANGE *ranges,
        UINT32 *count);

    BOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
        IDWriteFont3 *This);

    /*** IDWriteFont2 methods ***/
    BOOL (STDMETHODCALLTYPE *IsColorFont)(
        IDWriteFont3 *This);

    /*** IDWriteFont3 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteFont3_CreateFontFace)(
        IDWriteFont3 *This,
        IDWriteFontFace3 **fontface);

    BOOL (STDMETHODCALLTYPE *Equals)(
        IDWriteFont3 *This,
        IDWriteFont *font);

    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
        IDWriteFont3 *This,
        IDWriteFontFaceReference **reference);

    BOOL (STDMETHODCALLTYPE *IDWriteFont3_HasCharacter)(
        IDWriteFont3 *This,
        UINT32 character);

    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetLocality)(
        IDWriteFont3 *This);

    END_INTERFACE
} IDWriteFont3Vtbl;

interface IDWriteFont3 {
    CONST_VTBL IDWriteFont3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFont3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFont3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFont3_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFont methods ***/
#define IDWriteFont3_GetFontFamily(This,family) (This)->lpVtbl->GetFontFamily(This,family)
#define IDWriteFont3_GetWeight(This) (This)->lpVtbl->GetWeight(This)
#define IDWriteFont3_GetStretch(This) (This)->lpVtbl->GetStretch(This)
#define IDWriteFont3_GetStyle(This) (This)->lpVtbl->GetStyle(This)
#define IDWriteFont3_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
#define IDWriteFont3_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
#define IDWriteFont3_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
#define IDWriteFont3_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
/*** IDWriteFont1 methods ***/
#define IDWriteFont3_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFont1_GetMetrics(This,metrics)
#define IDWriteFont3_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
#define IDWriteFont3_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
#define IDWriteFont3_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
/*** IDWriteFont2 methods ***/
#define IDWriteFont3_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
/*** IDWriteFont3 methods ***/
#define IDWriteFont3_CreateFontFace(This,fontface) (This)->lpVtbl->IDWriteFont3_CreateFontFace(This,fontface)
#define IDWriteFont3_Equals(This,font) (This)->lpVtbl->Equals(This,font)
#define IDWriteFont3_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
#define IDWriteFont3_HasCharacter(This,character) (This)->lpVtbl->IDWriteFont3_HasCharacter(This,character)
#define IDWriteFont3_GetLocality(This) (This)->lpVtbl->GetLocality(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFont3_QueryInterface(IDWriteFont3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFont3_AddRef(IDWriteFont3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFont3_Release(IDWriteFont3* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFont methods ***/
static FORCEINLINE HRESULT IDWriteFont3_GetFontFamily(IDWriteFont3* This,IDWriteFontFamily **family) {
    return This->lpVtbl->GetFontFamily(This,family);
}
static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFont3_GetWeight(IDWriteFont3* This) {
    return This->lpVtbl->GetWeight(This);
}
static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFont3_GetStretch(IDWriteFont3* This) {
    return This->lpVtbl->GetStretch(This);
}
static FORCEINLINE DWRITE_FONT_STYLE IDWriteFont3_GetStyle(IDWriteFont3* This) {
    return This->lpVtbl->GetStyle(This);
}
static FORCEINLINE BOOL IDWriteFont3_IsSymbolFont(IDWriteFont3* This) {
    return This->lpVtbl->IsSymbolFont(This);
}
static FORCEINLINE HRESULT IDWriteFont3_GetFaceNames(IDWriteFont3* This,IDWriteLocalizedStrings **names) {
    return This->lpVtbl->GetFaceNames(This,names);
}
static FORCEINLINE HRESULT IDWriteFont3_GetInformationalStrings(IDWriteFont3* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,BOOL *exists) {
    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
}
static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFont3_GetSimulations(IDWriteFont3* This) {
    return This->lpVtbl->GetSimulations(This);
}
/*** IDWriteFont1 methods ***/
static FORCEINLINE void IDWriteFont3_GetMetrics(IDWriteFont3* This,DWRITE_FONT_METRICS1 *metrics) {
    This->lpVtbl->IDWriteFont1_GetMetrics(This,metrics);
}
static FORCEINLINE void IDWriteFont3_GetPanose(IDWriteFont3* This,DWRITE_PANOSE *panose) {
    This->lpVtbl->GetPanose(This,panose);
}
static FORCEINLINE HRESULT IDWriteFont3_GetUnicodeRanges(IDWriteFont3* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
}
static FORCEINLINE BOOL IDWriteFont3_IsMonospacedFont(IDWriteFont3* This) {
    return This->lpVtbl->IsMonospacedFont(This);
}
/*** IDWriteFont2 methods ***/
static FORCEINLINE BOOL IDWriteFont3_IsColorFont(IDWriteFont3* This) {
    return This->lpVtbl->IsColorFont(This);
}
/*** IDWriteFont3 methods ***/
static FORCEINLINE HRESULT IDWriteFont3_CreateFontFace(IDWriteFont3* This,IDWriteFontFace3 **fontface) {
    return This->lpVtbl->IDWriteFont3_CreateFontFace(This,fontface);
}
static FORCEINLINE BOOL IDWriteFont3_Equals(IDWriteFont3* This,IDWriteFont *font) {
    return This->lpVtbl->Equals(This,font);
}
static FORCEINLINE HRESULT IDWriteFont3_GetFontFaceReference(IDWriteFont3* This,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->GetFontFaceReference(This,reference);
}
static FORCEINLINE BOOL IDWriteFont3_HasCharacter(IDWriteFont3* This,UINT32 character) {
    return This->lpVtbl->IDWriteFont3_HasCharacter(This,character);
}
static FORCEINLINE DWRITE_LOCALITY IDWriteFont3_GetLocality(IDWriteFont3* This) {
    return This->lpVtbl->GetLocality(This);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFont3_CreateFontFace_Proxy(
    IDWriteFont3* This,
    IDWriteFontFace3 **fontface);
void __RPC_STUB IDWriteFont3_CreateFontFace_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFont3_Equals_Proxy(
    IDWriteFont3* This,
    IDWriteFont *font);
void __RPC_STUB IDWriteFont3_Equals_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFont3_GetFontFaceReference_Proxy(
    IDWriteFont3* This,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFont3_GetFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFont3_HasCharacter_Proxy(
    IDWriteFont3* This,
    UINT32 character);
void __RPC_STUB IDWriteFont3_HasCharacter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_LOCALITY STDMETHODCALLTYPE IDWriteFont3_GetLocality_Proxy(
    IDWriteFont3* This);
void __RPC_STUB IDWriteFont3_GetLocality_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFont3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontFamily1 interface
 */
#ifndef __IDWriteFontFamily1_INTERFACE_DEFINED__
#define __IDWriteFontFamily1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontFamily1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xdf);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("da20d8ef-812a-4c43-9802-62ec4abd7adf")
IDWriteFontFamily1 : public IDWriteFontFamily
{
    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetFontLocality(
        UINT32 index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFont(
        UINT32 index,
        IDWriteFont3 **font) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
        UINT32 index,
        IDWriteFontFaceReference **reference) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontFamily1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xdf)
#endif
#else
typedef struct IDWriteFontFamily1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontFamily1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontFamily1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontFamily1 *This);

    /*** IDWriteFontList methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
        IDWriteFontFamily1 *This,
        IDWriteFontCollection **collection);

    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
        IDWriteFontFamily1 *This);

    HRESULT (STDMETHODCALLTYPE *GetFont)(
        IDWriteFontFamily1 *This,
        UINT32 index,
        IDWriteFont **font);

    /*** IDWriteFontFamily methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
        IDWriteFontFamily1 *This,
        IDWriteLocalizedStrings **names);

    HRESULT (STDMETHODCALLTYPE *GetFirstMatchingFont)(
        IDWriteFontFamily1 *This,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_FONT_STRETCH stretch,
        DWRITE_FONT_STYLE style,
        IDWriteFont **font);

    HRESULT (STDMETHODCALLTYPE *GetMatchingFonts)(
        IDWriteFontFamily1 *This,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_FONT_STRETCH stretch,
        DWRITE_FONT_STYLE style,
        IDWriteFontList **fonts);

    /*** IDWriteFontFamily1 methods ***/
    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
        IDWriteFontFamily1 *This,
        UINT32 index);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFamily1_GetFont)(
        IDWriteFontFamily1 *This,
        UINT32 index,
        IDWriteFont3 **font);

    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
        IDWriteFontFamily1 *This,
        UINT32 index,
        IDWriteFontFaceReference **reference);

    END_INTERFACE
} IDWriteFontFamily1Vtbl;

interface IDWriteFontFamily1 {
    CONST_VTBL IDWriteFontFamily1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontFamily1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontFamily1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontFamily1_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontList methods ***/
#define IDWriteFontFamily1_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
#define IDWriteFontFamily1_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
/*** IDWriteFontFamily methods ***/
#define IDWriteFontFamily1_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
#define IDWriteFontFamily1_GetFirstMatchingFont(This,weight,stretch,style,font) (This)->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font)
#define IDWriteFontFamily1_GetMatchingFonts(This,weight,stretch,style,fonts) (This)->lpVtbl->GetMatchingFonts(This,weight,stretch,style,fonts)
/*** IDWriteFontFamily1 methods ***/
#define IDWriteFontFamily1_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
#define IDWriteFontFamily1_GetFont(This,index,font) (This)->lpVtbl->IDWriteFontFamily1_GetFont(This,index,font)
#define IDWriteFontFamily1_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontFamily1_QueryInterface(IDWriteFontFamily1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontFamily1_AddRef(IDWriteFontFamily1* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontFamily1_Release(IDWriteFontFamily1* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontList methods ***/
static FORCEINLINE HRESULT IDWriteFontFamily1_GetFontCollection(IDWriteFontFamily1* This,IDWriteFontCollection **collection) {
    return This->lpVtbl->GetFontCollection(This,collection);
}
static FORCEINLINE UINT32 IDWriteFontFamily1_GetFontCount(IDWriteFontFamily1* This) {
    return This->lpVtbl->GetFontCount(This);
}
/*** IDWriteFontFamily methods ***/
static FORCEINLINE HRESULT IDWriteFontFamily1_GetFamilyNames(IDWriteFontFamily1* This,IDWriteLocalizedStrings **names) {
    return This->lpVtbl->GetFamilyNames(This,names);
}
static FORCEINLINE HRESULT IDWriteFontFamily1_GetFirstMatchingFont(IDWriteFontFamily1* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFont **font) {
    return This->lpVtbl->GetFirstMatchingFont(This,weight,stretch,style,font);
}
static FORCEINLINE HRESULT IDWriteFontFamily1_GetMatchingFonts(IDWriteFontFamily1* This,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STRETCH stretch,DWRITE_FONT_STYLE style,IDWriteFontList **fonts) {
    return This->lpVtbl->GetMatchingFonts(This,weight,stretch,style,fonts);
}
/*** IDWriteFontFamily1 methods ***/
static FORCEINLINE DWRITE_LOCALITY IDWriteFontFamily1_GetFontLocality(IDWriteFontFamily1* This,UINT32 index) {
    return This->lpVtbl->GetFontLocality(This,index);
}
static FORCEINLINE HRESULT IDWriteFontFamily1_GetFont(IDWriteFontFamily1* This,UINT32 index,IDWriteFont3 **font) {
    return This->lpVtbl->IDWriteFontFamily1_GetFont(This,index,font);
}
static FORCEINLINE HRESULT IDWriteFontFamily1_GetFontFaceReference(IDWriteFontFamily1* This,UINT32 index,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->GetFontFaceReference(This,index,reference);
}
#endif
#endif

#endif

DWRITE_LOCALITY STDMETHODCALLTYPE IDWriteFontFamily1_GetFontLocality_Proxy(
    IDWriteFontFamily1* This,
    UINT32 index);
void __RPC_STUB IDWriteFontFamily1_GetFontLocality_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFamily1_GetFont_Proxy(
    IDWriteFontFamily1* This,
    UINT32 index,
    IDWriteFont3 **font);
void __RPC_STUB IDWriteFontFamily1_GetFont_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFamily1_GetFontFaceReference_Proxy(
    IDWriteFontFamily1* This,
    UINT32 index,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFontFamily1_GetFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontFamily1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontCollection1 interface
 */
#ifndef __IDWriteFontCollection1_INTERFACE_DEFINED__
#define __IDWriteFontCollection1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontCollection1, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("53585141-d9f8-4095-8321-d73cf6bd116c")
IDWriteFontCollection1 : public IDWriteFontCollection
{
    virtual HRESULT STDMETHODCALLTYPE GetFontSet(
        IDWriteFontSet **fontset) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontFamily(
        UINT32 index,
        IDWriteFontFamily1 **family) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontCollection1, 0x53585141, 0xd9f8, 0x4095, 0x83,0x21, 0xd7,0x3c,0xf6,0xbd,0x11,0x6c)
#endif
#else
typedef struct IDWriteFontCollection1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontCollection1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontCollection1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontCollection1 *This);

    /*** IDWriteFontCollection methods ***/
    UINT32 (STDMETHODCALLTYPE *GetFontFamilyCount)(
        IDWriteFontCollection1 *This);

    HRESULT (STDMETHODCALLTYPE *GetFontFamily)(
        IDWriteFontCollection1 *This,
        UINT32 index,
        IDWriteFontFamily **family);

    HRESULT (STDMETHODCALLTYPE *FindFamilyName)(
        IDWriteFontCollection1 *This,
        const WCHAR *name,
        UINT32 *index,
        BOOL *exists);

    HRESULT (STDMETHODCALLTYPE *GetFontFromFontFace)(
        IDWriteFontCollection1 *This,
        IDWriteFontFace *face,
        IDWriteFont **font);

    /*** IDWriteFontCollection1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontSet)(
        IDWriteFontCollection1 *This,
        IDWriteFontSet **fontset);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontCollection1_GetFontFamily)(
        IDWriteFontCollection1 *This,
        UINT32 index,
        IDWriteFontFamily1 **family);

    END_INTERFACE
} IDWriteFontCollection1Vtbl;

interface IDWriteFontCollection1 {
    CONST_VTBL IDWriteFontCollection1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontCollection1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontCollection1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontCollection1_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontCollection methods ***/
#define IDWriteFontCollection1_GetFontFamilyCount(This) (This)->lpVtbl->GetFontFamilyCount(This)
#define IDWriteFontCollection1_FindFamilyName(This,name,index,exists) (This)->lpVtbl->FindFamilyName(This,name,index,exists)
#define IDWriteFontCollection1_GetFontFromFontFace(This,face,font) (This)->lpVtbl->GetFontFromFontFace(This,face,font)
/*** IDWriteFontCollection1 methods ***/
#define IDWriteFontCollection1_GetFontSet(This,fontset) (This)->lpVtbl->GetFontSet(This,fontset)
#define IDWriteFontCollection1_GetFontFamily(This,index,family) (This)->lpVtbl->IDWriteFontCollection1_GetFontFamily(This,index,family)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontCollection1_QueryInterface(IDWriteFontCollection1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontCollection1_AddRef(IDWriteFontCollection1* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontCollection1_Release(IDWriteFontCollection1* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontCollection methods ***/
static FORCEINLINE UINT32 IDWriteFontCollection1_GetFontFamilyCount(IDWriteFontCollection1* This) {
    return This->lpVtbl->GetFontFamilyCount(This);
}
static FORCEINLINE HRESULT IDWriteFontCollection1_FindFamilyName(IDWriteFontCollection1* This,const WCHAR *name,UINT32 *index,BOOL *exists) {
    return This->lpVtbl->FindFamilyName(This,name,index,exists);
}
static FORCEINLINE HRESULT IDWriteFontCollection1_GetFontFromFontFace(IDWriteFontCollection1* This,IDWriteFontFace *face,IDWriteFont **font) {
    return This->lpVtbl->GetFontFromFontFace(This,face,font);
}
/*** IDWriteFontCollection1 methods ***/
static FORCEINLINE HRESULT IDWriteFontCollection1_GetFontSet(IDWriteFontCollection1* This,IDWriteFontSet **fontset) {
    return This->lpVtbl->GetFontSet(This,fontset);
}
static FORCEINLINE HRESULT IDWriteFontCollection1_GetFontFamily(IDWriteFontCollection1* This,UINT32 index,IDWriteFontFamily1 **family) {
    return This->lpVtbl->IDWriteFontCollection1_GetFontFamily(This,index,family);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFontCollection1_GetFontSet_Proxy(
    IDWriteFontCollection1* This,
    IDWriteFontSet **fontset);
void __RPC_STUB IDWriteFontCollection1_GetFontSet_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontCollection1_GetFontFamily_Proxy(
    IDWriteFontCollection1* This,
    UINT32 index,
    IDWriteFontFamily1 **family);
void __RPC_STUB IDWriteFontCollection1_GetFontFamily_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontCollection1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontFaceReference interface
 */
#ifndef __IDWriteFontFaceReference_INTERFACE_DEFINED__
#define __IDWriteFontFaceReference_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontFaceReference, 0x5e7fa7ca, 0xdde3, 0x424c, 0x89,0xf0, 0x9f,0xcd,0x6f,0xed,0x58,0xcd);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("5e7fa7ca-dde3-424c-89f0-9fcd6fed58cd")
IDWriteFontFaceReference : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE CreateFontFace(
        IDWriteFontFace3 **fontface) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceWithSimulations(
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFace3 **fontface) = 0;

    virtual BOOL STDMETHODCALLTYPE Equals(
        IDWriteFontFaceReference *reference) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetFontFaceIndex(
        ) = 0;

    virtual DWRITE_FONT_SIMULATIONS STDMETHODCALLTYPE GetSimulations(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontFile(
        IDWriteFontFile **fontfile) = 0;

    virtual UINT64 STDMETHODCALLTYPE GetLocalFileSize(
        ) = 0;

    virtual UINT64 STDMETHODCALLTYPE GetFileSize(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFileTime(
        FILETIME *writetime) = 0;

    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetLocality(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnqueueFontDownloadRequest(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnqueueCharacterDownloadRequest(
        const WCHAR *chars,
        UINT32 count) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnqueueGlyphDownloadRequest(
        const UINT16 *glyphs,
        UINT32 count) = 0;

    virtual HRESULT STDMETHODCALLTYPE EnqueueFileFragmentDownloadRequest(
        UINT64 offset,
        UINT64 size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontFaceReference, 0x5e7fa7ca, 0xdde3, 0x424c, 0x89,0xf0, 0x9f,0xcd,0x6f,0xed,0x58,0xcd)
#endif
#else
typedef struct IDWriteFontFaceReferenceVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontFaceReference *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontFaceReference *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontFaceReference *This);

    /*** IDWriteFontFaceReference methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
        IDWriteFontFaceReference *This,
        IDWriteFontFace3 **fontface);

    HRESULT (STDMETHODCALLTYPE *CreateFontFaceWithSimulations)(
        IDWriteFontFaceReference *This,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFace3 **fontface);

    BOOL (STDMETHODCALLTYPE *Equals)(
        IDWriteFontFaceReference *This,
        IDWriteFontFaceReference *reference);

    UINT32 (STDMETHODCALLTYPE *GetFontFaceIndex)(
        IDWriteFontFaceReference *This);

    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
        IDWriteFontFaceReference *This);

    HRESULT (STDMETHODCALLTYPE *GetFontFile)(
        IDWriteFontFaceReference *This,
        IDWriteFontFile **fontfile);

    UINT64 (STDMETHODCALLTYPE *GetLocalFileSize)(
        IDWriteFontFaceReference *This);

    UINT64 (STDMETHODCALLTYPE *GetFileSize)(
        IDWriteFontFaceReference *This);

    HRESULT (STDMETHODCALLTYPE *GetFileTime)(
        IDWriteFontFaceReference *This,
        FILETIME *writetime);

    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetLocality)(
        IDWriteFontFaceReference *This);

    HRESULT (STDMETHODCALLTYPE *EnqueueFontDownloadRequest)(
        IDWriteFontFaceReference *This);

    HRESULT (STDMETHODCALLTYPE *EnqueueCharacterDownloadRequest)(
        IDWriteFontFaceReference *This,
        const WCHAR *chars,
        UINT32 count);

    HRESULT (STDMETHODCALLTYPE *EnqueueGlyphDownloadRequest)(
        IDWriteFontFaceReference *This,
        const UINT16 *glyphs,
        UINT32 count);

    HRESULT (STDMETHODCALLTYPE *EnqueueFileFragmentDownloadRequest)(
        IDWriteFontFaceReference *This,
        UINT64 offset,
        UINT64 size);

    END_INTERFACE
} IDWriteFontFaceReferenceVtbl;

interface IDWriteFontFaceReference {
    CONST_VTBL IDWriteFontFaceReferenceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontFaceReference_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontFaceReference_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontFaceReference_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontFaceReference methods ***/
#define IDWriteFontFaceReference_CreateFontFace(This,fontface) (This)->lpVtbl->CreateFontFace(This,fontface)
#define IDWriteFontFaceReference_CreateFontFaceWithSimulations(This,simulations,fontface) (This)->lpVtbl->CreateFontFaceWithSimulations(This,simulations,fontface)
#define IDWriteFontFaceReference_Equals(This,reference) (This)->lpVtbl->Equals(This,reference)
#define IDWriteFontFaceReference_GetFontFaceIndex(This) (This)->lpVtbl->GetFontFaceIndex(This)
#define IDWriteFontFaceReference_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
#define IDWriteFontFaceReference_GetFontFile(This,fontfile) (This)->lpVtbl->GetFontFile(This,fontfile)
#define IDWriteFontFaceReference_GetLocalFileSize(This) (This)->lpVtbl->GetLocalFileSize(This)
#define IDWriteFontFaceReference_GetFileSize(This) (This)->lpVtbl->GetFileSize(This)
#define IDWriteFontFaceReference_GetFileTime(This,writetime) (This)->lpVtbl->GetFileTime(This,writetime)
#define IDWriteFontFaceReference_GetLocality(This) (This)->lpVtbl->GetLocality(This)
#define IDWriteFontFaceReference_EnqueueFontDownloadRequest(This) (This)->lpVtbl->EnqueueFontDownloadRequest(This)
#define IDWriteFontFaceReference_EnqueueCharacterDownloadRequest(This,chars,count) (This)->lpVtbl->EnqueueCharacterDownloadRequest(This,chars,count)
#define IDWriteFontFaceReference_EnqueueGlyphDownloadRequest(This,glyphs,count) (This)->lpVtbl->EnqueueGlyphDownloadRequest(This,glyphs,count)
#define IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest(This,offset,size) (This)->lpVtbl->EnqueueFileFragmentDownloadRequest(This,offset,size)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontFaceReference_QueryInterface(IDWriteFontFaceReference* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontFaceReference_AddRef(IDWriteFontFaceReference* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontFaceReference_Release(IDWriteFontFaceReference* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontFaceReference methods ***/
static FORCEINLINE HRESULT IDWriteFontFaceReference_CreateFontFace(IDWriteFontFaceReference* This,IDWriteFontFace3 **fontface) {
    return This->lpVtbl->CreateFontFace(This,fontface);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_CreateFontFaceWithSimulations(IDWriteFontFaceReference* This,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFace3 **fontface) {
    return This->lpVtbl->CreateFontFaceWithSimulations(This,simulations,fontface);
}
static FORCEINLINE BOOL IDWriteFontFaceReference_Equals(IDWriteFontFaceReference* This,IDWriteFontFaceReference *reference) {
    return This->lpVtbl->Equals(This,reference);
}
static FORCEINLINE UINT32 IDWriteFontFaceReference_GetFontFaceIndex(IDWriteFontFaceReference* This) {
    return This->lpVtbl->GetFontFaceIndex(This);
}
static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFaceReference_GetSimulations(IDWriteFontFaceReference* This) {
    return This->lpVtbl->GetSimulations(This);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_GetFontFile(IDWriteFontFaceReference* This,IDWriteFontFile **fontfile) {
    return This->lpVtbl->GetFontFile(This,fontfile);
}
static FORCEINLINE UINT64 IDWriteFontFaceReference_GetLocalFileSize(IDWriteFontFaceReference* This) {
    return This->lpVtbl->GetLocalFileSize(This);
}
static FORCEINLINE UINT64 IDWriteFontFaceReference_GetFileSize(IDWriteFontFaceReference* This) {
    return This->lpVtbl->GetFileSize(This);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_GetFileTime(IDWriteFontFaceReference* This,FILETIME *writetime) {
    return This->lpVtbl->GetFileTime(This,writetime);
}
static FORCEINLINE DWRITE_LOCALITY IDWriteFontFaceReference_GetLocality(IDWriteFontFaceReference* This) {
    return This->lpVtbl->GetLocality(This);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueFontDownloadRequest(IDWriteFontFaceReference* This) {
    return This->lpVtbl->EnqueueFontDownloadRequest(This);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueCharacterDownloadRequest(IDWriteFontFaceReference* This,const WCHAR *chars,UINT32 count) {
    return This->lpVtbl->EnqueueCharacterDownloadRequest(This,chars,count);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueGlyphDownloadRequest(IDWriteFontFaceReference* This,const UINT16 *glyphs,UINT32 count) {
    return This->lpVtbl->EnqueueGlyphDownloadRequest(This,glyphs,count);
}
static FORCEINLINE HRESULT IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest(IDWriteFontFaceReference* This,UINT64 offset,UINT64 size) {
    return This->lpVtbl->EnqueueFileFragmentDownloadRequest(This,offset,size);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_CreateFontFace_Proxy(
    IDWriteFontFaceReference* This,
    IDWriteFontFace3 **fontface);
void __RPC_STUB IDWriteFontFaceReference_CreateFontFace_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_CreateFontFaceWithSimulations_Proxy(
    IDWriteFontFaceReference* This,
    DWRITE_FONT_SIMULATIONS simulations,
    IDWriteFontFace3 **fontface);
void __RPC_STUB IDWriteFontFaceReference_CreateFontFaceWithSimulations_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFontFaceReference_Equals_Proxy(
    IDWriteFontFaceReference* This,
    IDWriteFontFaceReference *reference);
void __RPC_STUB IDWriteFontFaceReference_Equals_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
UINT32 STDMETHODCALLTYPE IDWriteFontFaceReference_GetFontFaceIndex_Proxy(
    IDWriteFontFaceReference* This);
void __RPC_STUB IDWriteFontFaceReference_GetFontFaceIndex_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_FONT_SIMULATIONS STDMETHODCALLTYPE IDWriteFontFaceReference_GetSimulations_Proxy(
    IDWriteFontFaceReference* This);
void __RPC_STUB IDWriteFontFaceReference_GetSimulations_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_GetFontFile_Proxy(
    IDWriteFontFaceReference* This,
    IDWriteFontFile **fontfile);
void __RPC_STUB IDWriteFontFaceReference_GetFontFile_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
UINT64 STDMETHODCALLTYPE IDWriteFontFaceReference_GetLocalFileSize_Proxy(
    IDWriteFontFaceReference* This);
void __RPC_STUB IDWriteFontFaceReference_GetLocalFileSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
UINT64 STDMETHODCALLTYPE IDWriteFontFaceReference_GetFileSize_Proxy(
    IDWriteFontFaceReference* This);
void __RPC_STUB IDWriteFontFaceReference_GetFileSize_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_GetFileTime_Proxy(
    IDWriteFontFaceReference* This,
    FILETIME *writetime);
void __RPC_STUB IDWriteFontFaceReference_GetFileTime_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_LOCALITY STDMETHODCALLTYPE IDWriteFontFaceReference_GetLocality_Proxy(
    IDWriteFontFaceReference* This);
void __RPC_STUB IDWriteFontFaceReference_GetLocality_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_EnqueueFontDownloadRequest_Proxy(
    IDWriteFontFaceReference* This);
void __RPC_STUB IDWriteFontFaceReference_EnqueueFontDownloadRequest_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_EnqueueCharacterDownloadRequest_Proxy(
    IDWriteFontFaceReference* This,
    const WCHAR *chars,
    UINT32 count);
void __RPC_STUB IDWriteFontFaceReference_EnqueueCharacterDownloadRequest_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_EnqueueGlyphDownloadRequest_Proxy(
    IDWriteFontFaceReference* This,
    const UINT16 *glyphs,
    UINT32 count);
void __RPC_STUB IDWriteFontFaceReference_EnqueueGlyphDownloadRequest_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest_Proxy(
    IDWriteFontFaceReference* This,
    UINT64 offset,
    UINT64 size);
void __RPC_STUB IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontFaceReference_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontList1 interface
 */
#ifndef __IDWriteFontList1_INTERFACE_DEFINED__
#define __IDWriteFontList1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontList1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xde);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("da20d8ef-812a-4c43-9802-62ec4abd7ade")
IDWriteFontList1 : public IDWriteFontList
{
    virtual DWRITE_LOCALITY STDMETHODCALLTYPE GetFontLocality(
        UINT32 index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFont(
        UINT32 index,
        IDWriteFont3 **font) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
        UINT32 index,
        IDWriteFontFaceReference **reference) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontList1, 0xda20d8ef, 0x812a, 0x4c43, 0x98,0x02, 0x62,0xec,0x4a,0xbd,0x7a,0xde)
#endif
#else
typedef struct IDWriteFontList1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontList1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontList1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontList1 *This);

    /*** IDWriteFontList methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
        IDWriteFontList1 *This,
        IDWriteFontCollection **collection);

    UINT32 (STDMETHODCALLTYPE *GetFontCount)(
        IDWriteFontList1 *This);

    HRESULT (STDMETHODCALLTYPE *GetFont)(
        IDWriteFontList1 *This,
        UINT32 index,
        IDWriteFont **font);

    /*** IDWriteFontList1 methods ***/
    DWRITE_LOCALITY (STDMETHODCALLTYPE *GetFontLocality)(
        IDWriteFontList1 *This,
        UINT32 index);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontList1_GetFont)(
        IDWriteFontList1 *This,
        UINT32 index,
        IDWriteFont3 **font);

    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
        IDWriteFontList1 *This,
        UINT32 index,
        IDWriteFontFaceReference **reference);

    END_INTERFACE
} IDWriteFontList1Vtbl;

interface IDWriteFontList1 {
    CONST_VTBL IDWriteFontList1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontList1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontList1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontList1_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontList methods ***/
#define IDWriteFontList1_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
#define IDWriteFontList1_GetFontCount(This) (This)->lpVtbl->GetFontCount(This)
/*** IDWriteFontList1 methods ***/
#define IDWriteFontList1_GetFontLocality(This,index) (This)->lpVtbl->GetFontLocality(This,index)
#define IDWriteFontList1_GetFont(This,index,font) (This)->lpVtbl->IDWriteFontList1_GetFont(This,index,font)
#define IDWriteFontList1_GetFontFaceReference(This,index,reference) (This)->lpVtbl->GetFontFaceReference(This,index,reference)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontList1_QueryInterface(IDWriteFontList1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontList1_AddRef(IDWriteFontList1* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontList1_Release(IDWriteFontList1* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontList methods ***/
static FORCEINLINE HRESULT IDWriteFontList1_GetFontCollection(IDWriteFontList1* This,IDWriteFontCollection **collection) {
    return This->lpVtbl->GetFontCollection(This,collection);
}
static FORCEINLINE UINT32 IDWriteFontList1_GetFontCount(IDWriteFontList1* This) {
    return This->lpVtbl->GetFontCount(This);
}
/*** IDWriteFontList1 methods ***/
static FORCEINLINE DWRITE_LOCALITY IDWriteFontList1_GetFontLocality(IDWriteFontList1* This,UINT32 index) {
    return This->lpVtbl->GetFontLocality(This,index);
}
static FORCEINLINE HRESULT IDWriteFontList1_GetFont(IDWriteFontList1* This,UINT32 index,IDWriteFont3 **font) {
    return This->lpVtbl->IDWriteFontList1_GetFont(This,index,font);
}
static FORCEINLINE HRESULT IDWriteFontList1_GetFontFaceReference(IDWriteFontList1* This,UINT32 index,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->GetFontFaceReference(This,index,reference);
}
#endif
#endif

#endif

DWRITE_LOCALITY STDMETHODCALLTYPE IDWriteFontList1_GetFontLocality_Proxy(
    IDWriteFontList1* This,
    UINT32 index);
void __RPC_STUB IDWriteFontList1_GetFontLocality_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontList1_GetFont_Proxy(
    IDWriteFontList1* This,
    UINT32 index,
    IDWriteFont3 **font);
void __RPC_STUB IDWriteFontList1_GetFont_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontList1_GetFontFaceReference_Proxy(
    IDWriteFontList1* This,
    UINT32 index,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFontList1_GetFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontList1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontFace3 interface
 */
#ifndef __IDWriteFontFace3_INTERFACE_DEFINED__
#define __IDWriteFontFace3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontFace3, 0xd37d7598, 0x09be, 0x4222, 0xa2,0x36, 0x20,0x81,0x34,0x1c,0xc1,0xf2);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d37d7598-09be-4222-a236-2081341cc1f2")
IDWriteFontFace3 : public IDWriteFontFace2
{
    virtual HRESULT STDMETHODCALLTYPE GetFontFaceReference(
        IDWriteFontFaceReference **reference) = 0;

    virtual void STDMETHODCALLTYPE GetPanose(
        DWRITE_PANOSE *panose) = 0;

    virtual DWRITE_FONT_WEIGHT STDMETHODCALLTYPE GetWeight(
        ) = 0;

    virtual DWRITE_FONT_STRETCH STDMETHODCALLTYPE GetStretch(
        ) = 0;

    virtual DWRITE_FONT_STYLE STDMETHODCALLTYPE GetStyle(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFamilyNames(
        IDWriteLocalizedStrings **names) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFaceNames(
        IDWriteLocalizedStrings **names) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetInformationalStrings(
        DWRITE_INFORMATIONAL_STRING_ID stringid,
        IDWriteLocalizedStrings **strings,
        BOOL *exists) = 0;

    virtual BOOL STDMETHODCALLTYPE HasCharacter(
        UINT32 character) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRecommendedRenderingMode(
        FLOAT emsize,
        FLOAT dpi_x,
        FLOAT dpi_y,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuring_mode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE1 *rendering_mode,
        DWRITE_GRID_FIT_MODE *gridfit_mode) = 0;

    virtual BOOL STDMETHODCALLTYPE IsCharacterLocal(
        UINT32 character) = 0;

    virtual BOOL STDMETHODCALLTYPE IsGlyphLocal(
        UINT16 glyph) = 0;

    virtual HRESULT STDMETHODCALLTYPE AreCharactersLocal(
        const WCHAR *characters,
        UINT32 count,
        BOOL enqueue_if_not,
        BOOL *are_local) = 0;

    virtual HRESULT STDMETHODCALLTYPE AreGlyphsLocal(
        const UINT16 *glyphs,
        UINT32 count,
        BOOL enqueue_if_not,
        BOOL *are_local) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontFace3, 0xd37d7598, 0x09be, 0x4222, 0xa2,0x36, 0x20,0x81,0x34,0x1c,0xc1,0xf2)
#endif
#else
typedef struct IDWriteFontFace3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontFace3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontFace3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontFace3 *This);

    /*** IDWriteFontFace methods ***/
    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
        IDWriteFontFace3 *This);

    HRESULT (STDMETHODCALLTYPE *GetFiles)(
        IDWriteFontFace3 *This,
        UINT32 *number_of_files,
        IDWriteFontFile **fontfiles);

    UINT32 (STDMETHODCALLTYPE *GetIndex)(
        IDWriteFontFace3 *This);

    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
        IDWriteFontFace3 *This);

    BOOL (STDMETHODCALLTYPE *IsSymbolFont)(
        IDWriteFontFace3 *This);

    void (STDMETHODCALLTYPE *GetMetrics)(
        IDWriteFontFace3 *This,
        DWRITE_FONT_METRICS *metrics);

    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
        IDWriteFontFace3 *This);

    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
        IDWriteFontFace3 *This,
        const UINT16 *glyph_indices,
        UINT32 glyph_count,
        DWRITE_GLYPH_METRICS *metrics,
        BOOL is_sideways);

    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
        IDWriteFontFace3 *This,
        const UINT32 *codepoints,
        UINT32 count,
        UINT16 *glyph_indices);

    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
        IDWriteFontFace3 *This,
        UINT32 table_tag,
        const void **table_data,
        UINT32 *table_size,
        void **context,
        BOOL *exists);

    void (STDMETHODCALLTYPE *ReleaseFontTable)(
        IDWriteFontFace3 *This,
        void *table_context);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
        IDWriteFontFace3 *This,
        FLOAT emSize,
        const UINT16 *glyph_indices,
        const FLOAT *glyph_advances,
        const DWRITE_GLYPH_OFFSET *glyph_offsets,
        UINT32 glyph_count,
        BOOL is_sideways,
        BOOL is_rtl,
        IDWriteGeometrySink *geometrysink);

    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
        IDWriteFontFace3 *This,
        FLOAT emSize,
        FLOAT pixels_per_dip,
        DWRITE_MEASURING_MODE mode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE *rendering_mode);

    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
        IDWriteFontFace3 *This,
        FLOAT emSize,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        DWRITE_FONT_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
        IDWriteFontFace3 *This,
        FLOAT emSize,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        BOOL use_gdi_natural,
        const UINT16 *glyph_indices,
        UINT32 glyph_count,
        DWRITE_GLYPH_METRICS *metrics,
        BOOL is_sideways);

    /*** IDWriteFontFace1 methods ***/
    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
        IDWriteFontFace3 *This,
        DWRITE_FONT_METRICS1 *metrics);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
        IDWriteFontFace3 *This,
        FLOAT em_size,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        DWRITE_FONT_METRICS1 *metrics);

    void (STDMETHODCALLTYPE *GetCaretMetrics)(
        IDWriteFontFace3 *This,
        DWRITE_CARET_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
        IDWriteFontFace3 *This,
        UINT32 max_count,
        DWRITE_UNICODE_RANGE *ranges,
        UINT32 *count);

    BOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
        IDWriteFontFace3 *This);

    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
        IDWriteFontFace3 *This,
        UINT32 glyph_count,
        const UINT16 *indices,
        INT32 *advances,
        BOOL is_sideways);

    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
        IDWriteFontFace3 *This,
        FLOAT em_size,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        BOOL use_gdi_natural,
        BOOL is_sideways,
        UINT32 glyph_count,
        const UINT16 *indices,
        INT32 *advances);

    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
        IDWriteFontFace3 *This,
        UINT32 glyph_count,
        const UINT16 *indices,
        INT32 *adjustments);

    BOOL (STDMETHODCALLTYPE *HasKerningPairs)(
        IDWriteFontFace3 *This);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
        IDWriteFontFace3 *This,
        FLOAT font_emsize,
        FLOAT dpiX,
        FLOAT dpiY,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuring_mode,
        DWRITE_RENDERING_MODE *rendering_mode);

    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
        IDWriteFontFace3 *This,
        UINT32 glyph_count,
        const UINT16 *nominal_indices,
        UINT16 *vertical_indices);

    BOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
        IDWriteFontFace3 *This);

    /*** IDWriteFontFace2 methods ***/
    BOOL (STDMETHODCALLTYPE *IsColorFont)(
        IDWriteFontFace3 *This);

    UINT32 (STDMETHODCALLTYPE *GetColorPaletteCount)(
        IDWriteFontFace3 *This);

    UINT32 (STDMETHODCALLTYPE *GetPaletteEntryCount)(
        IDWriteFontFace3 *This);

    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
        IDWriteFontFace3 *This,
        UINT32 palette_index,
        UINT32 first_entry_index,
        UINT32 entry_count,
        DWRITE_COLOR_F *entries);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace2_GetRecommendedRenderingMode)(
        IDWriteFontFace3 *This,
        FLOAT fontEmSize,
        FLOAT dpiX,
        FLOAT dpiY,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuringmode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE *renderingmode,
        DWRITE_GRID_FIT_MODE *gridfitmode);

    /*** IDWriteFontFace3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
        IDWriteFontFace3 *This,
        IDWriteFontFaceReference **reference);

    void (STDMETHODCALLTYPE *GetPanose)(
        IDWriteFontFace3 *This,
        DWRITE_PANOSE *panose);

    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
        IDWriteFontFace3 *This);

    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
        IDWriteFontFace3 *This);

    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
        IDWriteFontFace3 *This);

    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
        IDWriteFontFace3 *This,
        IDWriteLocalizedStrings **names);

    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
        IDWriteFontFace3 *This,
        IDWriteLocalizedStrings **names);

    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
        IDWriteFontFace3 *This,
        DWRITE_INFORMATIONAL_STRING_ID stringid,
        IDWriteLocalizedStrings **strings,
        BOOL *exists);

    BOOL (STDMETHODCALLTYPE *HasCharacter)(
        IDWriteFontFace3 *This,
        UINT32 character);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace3_GetRecommendedRenderingMode)(
        IDWriteFontFace3 *This,
        FLOAT emsize,
        FLOAT dpi_x,
        FLOAT dpi_y,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuring_mode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE1 *rendering_mode,
        DWRITE_GRID_FIT_MODE *gridfit_mode);

    BOOL (STDMETHODCALLTYPE *IsCharacterLocal)(
        IDWriteFontFace3 *This,
        UINT32 character);

    BOOL (STDMETHODCALLTYPE *IsGlyphLocal)(
        IDWriteFontFace3 *This,
        UINT16 glyph);

    HRESULT (STDMETHODCALLTYPE *AreCharactersLocal)(
        IDWriteFontFace3 *This,
        const WCHAR *characters,
        UINT32 count,
        BOOL enqueue_if_not,
        BOOL *are_local);

    HRESULT (STDMETHODCALLTYPE *AreGlyphsLocal)(
        IDWriteFontFace3 *This,
        const UINT16 *glyphs,
        UINT32 count,
        BOOL enqueue_if_not,
        BOOL *are_local);

    END_INTERFACE
} IDWriteFontFace3Vtbl;

interface IDWriteFontFace3 {
    CONST_VTBL IDWriteFontFace3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontFace3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontFace3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontFace3_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontFace methods ***/
#define IDWriteFontFace3_GetType(This) (This)->lpVtbl->GetType(This)
#define IDWriteFontFace3_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
#define IDWriteFontFace3_GetIndex(This) (This)->lpVtbl->GetIndex(This)
#define IDWriteFontFace3_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
#define IDWriteFontFace3_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
#define IDWriteFontFace3_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
#define IDWriteFontFace3_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
#define IDWriteFontFace3_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
#define IDWriteFontFace3_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
#define IDWriteFontFace3_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
#define IDWriteFontFace3_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
#define IDWriteFontFace3_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
/*** IDWriteFontFace1 methods ***/
#define IDWriteFontFace3_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
#define IDWriteFontFace3_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
#define IDWriteFontFace3_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
#define IDWriteFontFace3_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
#define IDWriteFontFace3_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
#define IDWriteFontFace3_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
#define IDWriteFontFace3_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
#define IDWriteFontFace3_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
#define IDWriteFontFace3_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
#define IDWriteFontFace3_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
#define IDWriteFontFace3_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
/*** IDWriteFontFace2 methods ***/
#define IDWriteFontFace3_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
#define IDWriteFontFace3_GetColorPaletteCount(This) (This)->lpVtbl->GetColorPaletteCount(This)
#define IDWriteFontFace3_GetPaletteEntryCount(This) (This)->lpVtbl->GetPaletteEntryCount(This)
#define IDWriteFontFace3_GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries)
/*** IDWriteFontFace3 methods ***/
#define IDWriteFontFace3_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
#define IDWriteFontFace3_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
#define IDWriteFontFace3_GetWeight(This) (This)->lpVtbl->GetWeight(This)
#define IDWriteFontFace3_GetStretch(This) (This)->lpVtbl->GetStretch(This)
#define IDWriteFontFace3_GetStyle(This) (This)->lpVtbl->GetStyle(This)
#define IDWriteFontFace3_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
#define IDWriteFontFace3_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
#define IDWriteFontFace3_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
#define IDWriteFontFace3_HasCharacter(This,character) (This)->lpVtbl->HasCharacter(This,character)
#define IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode) (This)->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode)
#define IDWriteFontFace3_IsCharacterLocal(This,character) (This)->lpVtbl->IsCharacterLocal(This,character)
#define IDWriteFontFace3_IsGlyphLocal(This,glyph) (This)->lpVtbl->IsGlyphLocal(This,glyph)
#define IDWriteFontFace3_AreCharactersLocal(This,characters,count,enqueue_if_not,are_local) (This)->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local)
#define IDWriteFontFace3_AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local) (This)->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontFace3_QueryInterface(IDWriteFontFace3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontFace3_AddRef(IDWriteFontFace3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontFace3_Release(IDWriteFontFace3* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontFace methods ***/
static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace3_GetType(IDWriteFontFace3* This) {
    return This->lpVtbl->GetType(This);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetFiles(IDWriteFontFace3* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
}
static FORCEINLINE UINT32 IDWriteFontFace3_GetIndex(IDWriteFontFace3* This) {
    return This->lpVtbl->GetIndex(This);
}
static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace3_GetSimulations(IDWriteFontFace3* This) {
    return This->lpVtbl->GetSimulations(This);
}
static FORCEINLINE BOOL IDWriteFontFace3_IsSymbolFont(IDWriteFontFace3* This) {
    return This->lpVtbl->IsSymbolFont(This);
}
static FORCEINLINE UINT16 IDWriteFontFace3_GetGlyphCount(IDWriteFontFace3* This) {
    return This->lpVtbl->GetGlyphCount(This);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetDesignGlyphMetrics(IDWriteFontFace3* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,BOOL is_sideways) {
    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetGlyphIndices(IDWriteFontFace3* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
}
static FORCEINLINE HRESULT IDWriteFontFace3_TryGetFontTable(IDWriteFontFace3* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,BOOL *exists) {
    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
}
static FORCEINLINE void IDWriteFontFace3_ReleaseFontTable(IDWriteFontFace3* This,void *table_context) {
    This->lpVtbl->ReleaseFontTable(This,table_context);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetGlyphRunOutline(IDWriteFontFace3* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,BOOL is_sideways,BOOL is_rtl,IDWriteGeometrySink *geometrysink) {
    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetGdiCompatibleGlyphMetrics(IDWriteFontFace3* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,BOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,BOOL is_sideways) {
    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
}
/*** IDWriteFontFace1 methods ***/
static FORCEINLINE void IDWriteFontFace3_GetMetrics(IDWriteFontFace3* This,DWRITE_FONT_METRICS1 *metrics) {
    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetGdiCompatibleMetrics(IDWriteFontFace3* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
}
static FORCEINLINE void IDWriteFontFace3_GetCaretMetrics(IDWriteFontFace3* This,DWRITE_CARET_METRICS *metrics) {
    This->lpVtbl->GetCaretMetrics(This,metrics);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetUnicodeRanges(IDWriteFontFace3* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
}
static FORCEINLINE BOOL IDWriteFontFace3_IsMonospacedFont(IDWriteFontFace3* This) {
    return This->lpVtbl->IsMonospacedFont(This);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetDesignGlyphAdvances(IDWriteFontFace3* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,BOOL is_sideways) {
    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetGdiCompatibleGlyphAdvances(IDWriteFontFace3* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,BOOL use_gdi_natural,BOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetKerningPairAdjustments(IDWriteFontFace3* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
}
static FORCEINLINE BOOL IDWriteFontFace3_HasKerningPairs(IDWriteFontFace3* This) {
    return This->lpVtbl->HasKerningPairs(This);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetVerticalGlyphVariants(IDWriteFontFace3* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
}
static FORCEINLINE BOOL IDWriteFontFace3_HasVerticalGlyphVariants(IDWriteFontFace3* This) {
    return This->lpVtbl->HasVerticalGlyphVariants(This);
}
/*** IDWriteFontFace2 methods ***/
static FORCEINLINE BOOL IDWriteFontFace3_IsColorFont(IDWriteFontFace3* This) {
    return This->lpVtbl->IsColorFont(This);
}
static FORCEINLINE UINT32 IDWriteFontFace3_GetColorPaletteCount(IDWriteFontFace3* This) {
    return This->lpVtbl->GetColorPaletteCount(This);
}
static FORCEINLINE UINT32 IDWriteFontFace3_GetPaletteEntryCount(IDWriteFontFace3* This) {
    return This->lpVtbl->GetPaletteEntryCount(This);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetPaletteEntries(IDWriteFontFace3* This,UINT32 palette_index,UINT32 first_entry_index,UINT32 entry_count,DWRITE_COLOR_F *entries) {
    return This->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries);
}
/*** IDWriteFontFace3 methods ***/
static FORCEINLINE HRESULT IDWriteFontFace3_GetFontFaceReference(IDWriteFontFace3* This,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->GetFontFaceReference(This,reference);
}
static FORCEINLINE void IDWriteFontFace3_GetPanose(IDWriteFontFace3* This,DWRITE_PANOSE *panose) {
    This->lpVtbl->GetPanose(This,panose);
}
static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFontFace3_GetWeight(IDWriteFontFace3* This) {
    return This->lpVtbl->GetWeight(This);
}
static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFontFace3_GetStretch(IDWriteFontFace3* This) {
    return This->lpVtbl->GetStretch(This);
}
static FORCEINLINE DWRITE_FONT_STYLE IDWriteFontFace3_GetStyle(IDWriteFontFace3* This) {
    return This->lpVtbl->GetStyle(This);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetFamilyNames(IDWriteFontFace3* This,IDWriteLocalizedStrings **names) {
    return This->lpVtbl->GetFamilyNames(This,names);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetFaceNames(IDWriteFontFace3* This,IDWriteLocalizedStrings **names) {
    return This->lpVtbl->GetFaceNames(This,names);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetInformationalStrings(IDWriteFontFace3* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,BOOL *exists) {
    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
}
static FORCEINLINE BOOL IDWriteFontFace3_HasCharacter(IDWriteFontFace3* This,UINT32 character) {
    return This->lpVtbl->HasCharacter(This,character);
}
static FORCEINLINE HRESULT IDWriteFontFace3_GetRecommendedRenderingMode(IDWriteFontFace3* This,FLOAT emsize,FLOAT dpi_x,FLOAT dpi_y,const DWRITE_MATRIX *transform,BOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuring_mode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE1 *rendering_mode,DWRITE_GRID_FIT_MODE *gridfit_mode) {
    return This->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode);
}
static FORCEINLINE BOOL IDWriteFontFace3_IsCharacterLocal(IDWriteFontFace3* This,UINT32 character) {
    return This->lpVtbl->IsCharacterLocal(This,character);
}
static FORCEINLINE BOOL IDWriteFontFace3_IsGlyphLocal(IDWriteFontFace3* This,UINT16 glyph) {
    return This->lpVtbl->IsGlyphLocal(This,glyph);
}
static FORCEINLINE HRESULT IDWriteFontFace3_AreCharactersLocal(IDWriteFontFace3* This,const WCHAR *characters,UINT32 count,BOOL enqueue_if_not,BOOL *are_local) {
    return This->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local);
}
static FORCEINLINE HRESULT IDWriteFontFace3_AreGlyphsLocal(IDWriteFontFace3* This,const UINT16 *glyphs,UINT32 count,BOOL enqueue_if_not,BOOL *are_local) {
    return This->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFontFace3_GetFontFaceReference_Proxy(
    IDWriteFontFace3* This,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFontFace3_GetFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
void STDMETHODCALLTYPE IDWriteFontFace3_GetPanose_Proxy(
    IDWriteFontFace3* This,
    DWRITE_PANOSE *panose);
void __RPC_STUB IDWriteFontFace3_GetPanose_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_FONT_WEIGHT STDMETHODCALLTYPE IDWriteFontFace3_GetWeight_Proxy(
    IDWriteFontFace3* This);
void __RPC_STUB IDWriteFontFace3_GetWeight_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_FONT_STRETCH STDMETHODCALLTYPE IDWriteFontFace3_GetStretch_Proxy(
    IDWriteFontFace3* This);
void __RPC_STUB IDWriteFontFace3_GetStretch_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_FONT_STYLE STDMETHODCALLTYPE IDWriteFontFace3_GetStyle_Proxy(
    IDWriteFontFace3* This);
void __RPC_STUB IDWriteFontFace3_GetStyle_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace3_GetFamilyNames_Proxy(
    IDWriteFontFace3* This,
    IDWriteLocalizedStrings **names);
void __RPC_STUB IDWriteFontFace3_GetFamilyNames_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace3_GetFaceNames_Proxy(
    IDWriteFontFace3* This,
    IDWriteLocalizedStrings **names);
void __RPC_STUB IDWriteFontFace3_GetFaceNames_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace3_GetInformationalStrings_Proxy(
    IDWriteFontFace3* This,
    DWRITE_INFORMATIONAL_STRING_ID stringid,
    IDWriteLocalizedStrings **strings,
    BOOL *exists);
void __RPC_STUB IDWriteFontFace3_GetInformationalStrings_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFontFace3_HasCharacter_Proxy(
    IDWriteFontFace3* This,
    UINT32 character);
void __RPC_STUB IDWriteFontFace3_HasCharacter_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace3_GetRecommendedRenderingMode_Proxy(
    IDWriteFontFace3* This,
    FLOAT emsize,
    FLOAT dpi_x,
    FLOAT dpi_y,
    const DWRITE_MATRIX *transform,
    BOOL is_sideways,
    DWRITE_OUTLINE_THRESHOLD threshold,
    DWRITE_MEASURING_MODE measuring_mode,
    IDWriteRenderingParams *params,
    DWRITE_RENDERING_MODE1 *rendering_mode,
    DWRITE_GRID_FIT_MODE *gridfit_mode);
void __RPC_STUB IDWriteFontFace3_GetRecommendedRenderingMode_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFontFace3_IsCharacterLocal_Proxy(
    IDWriteFontFace3* This,
    UINT32 character);
void __RPC_STUB IDWriteFontFace3_IsCharacterLocal_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
BOOL STDMETHODCALLTYPE IDWriteFontFace3_IsGlyphLocal_Proxy(
    IDWriteFontFace3* This,
    UINT16 glyph);
void __RPC_STUB IDWriteFontFace3_IsGlyphLocal_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace3_AreCharactersLocal_Proxy(
    IDWriteFontFace3* This,
    const WCHAR *characters,
    UINT32 count,
    BOOL enqueue_if_not,
    BOOL *are_local);
void __RPC_STUB IDWriteFontFace3_AreCharactersLocal_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace3_AreGlyphsLocal_Proxy(
    IDWriteFontFace3* This,
    const UINT16 *glyphs,
    UINT32 count,
    BOOL enqueue_if_not,
    BOOL *are_local);
void __RPC_STUB IDWriteFontFace3_AreGlyphsLocal_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontFace3_INTERFACE_DEFINED__ */

typedef struct DWRITE_LINE_METRICS1 {
    UINT32 length;
    UINT32 trailingWhitespaceLength;
    UINT32 newlineLength;
    FLOAT height;
    FLOAT baseline;
    BOOL isTrimmed;
    FLOAT leadingBefore;
    FLOAT leadingAfter;
} DWRITE_LINE_METRICS1;
typedef enum DWRITE_FONT_LINE_GAP_USAGE {
    DWRITE_FONT_LINE_GAP_USAGE_DEFAULT = 0,
    DWRITE_FONT_LINE_GAP_USAGE_DISABLED = 1,
    DWRITE_FONT_LINE_GAP_USAGE_ENABLED = 2
} DWRITE_FONT_LINE_GAP_USAGE;
typedef struct DWRITE_LINE_SPACING {
    DWRITE_LINE_SPACING_METHOD method;
    FLOAT height;
    FLOAT baseline;
    FLOAT leadingBefore;
    DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage;
} DWRITE_LINE_SPACING;
/*****************************************************************************
 * IDWriteTextFormat2 interface
 */
#ifndef __IDWriteTextFormat2_INTERFACE_DEFINED__
#define __IDWriteTextFormat2_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteTextFormat2, 0xf67e0edd, 0x9e3d, 0x4ecc, 0x8c,0x32, 0x41,0x83,0x25,0x3d,0xfe,0x70);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("f67e0edd-9e3d-4ecc-8c32-4183253dfe70")
IDWriteTextFormat2 : public IDWriteTextFormat1
{
    virtual HRESULT STDMETHODCALLTYPE SetLineSpacing(
        const DWRITE_LINE_SPACING *spacing) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLineSpacing(
        DWRITE_LINE_SPACING *spacing) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteTextFormat2, 0xf67e0edd, 0x9e3d, 0x4ecc, 0x8c,0x32, 0x41,0x83,0x25,0x3d,0xfe,0x70)
#endif
#else
typedef struct IDWriteTextFormat2Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteTextFormat2 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteTextFormat2 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteTextFormat2 *This);

    /*** IDWriteTextFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
        IDWriteTextFormat2 *This,
        DWRITE_TEXT_ALIGNMENT alignment);

    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
        IDWriteTextFormat2 *This,
        DWRITE_PARAGRAPH_ALIGNMENT alignment);

    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
        IDWriteTextFormat2 *This,
        DWRITE_WORD_WRAPPING wrapping);

    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
        IDWriteTextFormat2 *This,
        DWRITE_READING_DIRECTION direction);

    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
        IDWriteTextFormat2 *This,
        DWRITE_FLOW_DIRECTION direction);

    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
        IDWriteTextFormat2 *This,
        FLOAT tabstop);

    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
        IDWriteTextFormat2 *This,
        const DWRITE_TRIMMING *trimming,
        IDWriteInlineObject *trimming_sign);

    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
        IDWriteTextFormat2 *This,
        DWRITE_LINE_SPACING_METHOD spacing,
        FLOAT line_spacing,
        FLOAT baseline);

    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
        IDWriteTextFormat2 *This);

    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
        IDWriteTextFormat2 *This);

    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
        IDWriteTextFormat2 *This);

    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
        IDWriteTextFormat2 *This);

    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
        IDWriteTextFormat2 *This);

    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
        IDWriteTextFormat2 *This);

    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
        IDWriteTextFormat2 *This,
        DWRITE_TRIMMING *options,
        IDWriteInlineObject **trimming_sign);

    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
        IDWriteTextFormat2 *This,
        DWRITE_LINE_SPACING_METHOD *method,
        FLOAT *spacing,
        FLOAT *baseline);

    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
        IDWriteTextFormat2 *This,
        IDWriteFontCollection **collection);

    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
        IDWriteTextFormat2 *This);

    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
        IDWriteTextFormat2 *This,
        WCHAR *name,
        UINT32 size);

    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
        IDWriteTextFormat2 *This);

    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
        IDWriteTextFormat2 *This);

    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
        IDWriteTextFormat2 *This);

    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
        IDWriteTextFormat2 *This);

    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
        IDWriteTextFormat2 *This);

    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
        IDWriteTextFormat2 *This,
        WCHAR *name,
        UINT32 size);

    /*** IDWriteTextFormat1 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
        IDWriteTextFormat2 *This,
        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);

    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
        IDWriteTextFormat2 *This);

    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
        IDWriteTextFormat2 *This,
        BOOL lastline_wrapping_enabled);

    BOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
        IDWriteTextFormat2 *This);

    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
        IDWriteTextFormat2 *This,
        DWRITE_OPTICAL_ALIGNMENT alignment);

    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
        IDWriteTextFormat2 *This);

    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
        IDWriteTextFormat2 *This,
        IDWriteFontFallback *fallback);

    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
        IDWriteTextFormat2 *This,
        IDWriteFontFallback **fallback);

    /*** IDWriteTextFormat2 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteTextFormat2_SetLineSpacing)(
        IDWriteTextFormat2 *This,
        const DWRITE_LINE_SPACING *spacing);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextFormat2_GetLineSpacing)(
        IDWriteTextFormat2 *This,
        DWRITE_LINE_SPACING *spacing);

    END_INTERFACE
} IDWriteTextFormat2Vtbl;

interface IDWriteTextFormat2 {
    CONST_VTBL IDWriteTextFormat2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteTextFormat2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteTextFormat2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteTextFormat2_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteTextFormat methods ***/
#define IDWriteTextFormat2_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
#define IDWriteTextFormat2_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
#define IDWriteTextFormat2_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
#define IDWriteTextFormat2_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
#define IDWriteTextFormat2_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
#define IDWriteTextFormat2_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
#define IDWriteTextFormat2_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
#define IDWriteTextFormat2_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
#define IDWriteTextFormat2_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
#define IDWriteTextFormat2_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
#define IDWriteTextFormat2_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
#define IDWriteTextFormat2_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
#define IDWriteTextFormat2_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
#define IDWriteTextFormat2_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
#define IDWriteTextFormat2_GetFontCollection(This,collection) (This)->lpVtbl->GetFontCollection(This,collection)
#define IDWriteTextFormat2_GetFontFamilyNameLength(This) (This)->lpVtbl->GetFontFamilyNameLength(This)
#define IDWriteTextFormat2_GetFontFamilyName(This,name,size) (This)->lpVtbl->GetFontFamilyName(This,name,size)
#define IDWriteTextFormat2_GetFontWeight(This) (This)->lpVtbl->GetFontWeight(This)
#define IDWriteTextFormat2_GetFontStyle(This) (This)->lpVtbl->GetFontStyle(This)
#define IDWriteTextFormat2_GetFontStretch(This) (This)->lpVtbl->GetFontStretch(This)
#define IDWriteTextFormat2_GetFontSize(This) (This)->lpVtbl->GetFontSize(This)
#define IDWriteTextFormat2_GetLocaleNameLength(This) (This)->lpVtbl->GetLocaleNameLength(This)
#define IDWriteTextFormat2_GetLocaleName(This,name,size) (This)->lpVtbl->GetLocaleName(This,name,size)
/*** IDWriteTextFormat1 methods ***/
#define IDWriteTextFormat2_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
#define IDWriteTextFormat2_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
#define IDWriteTextFormat2_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
#define IDWriteTextFormat2_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
#define IDWriteTextFormat2_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
#define IDWriteTextFormat2_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
#define IDWriteTextFormat2_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
#define IDWriteTextFormat2_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
/*** IDWriteTextFormat2 methods ***/
#define IDWriteTextFormat2_SetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextFormat2_SetLineSpacing(This,spacing)
#define IDWriteTextFormat2_GetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextFormat2_GetLineSpacing(This,spacing)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteTextFormat2_QueryInterface(IDWriteTextFormat2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteTextFormat2_AddRef(IDWriteTextFormat2* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteTextFormat2_Release(IDWriteTextFormat2* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteTextFormat methods ***/
static FORCEINLINE HRESULT IDWriteTextFormat2_SetTextAlignment(IDWriteTextFormat2* This,DWRITE_TEXT_ALIGNMENT alignment) {
    return This->lpVtbl->SetTextAlignment(This,alignment);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetParagraphAlignment(IDWriteTextFormat2* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
    return This->lpVtbl->SetParagraphAlignment(This,alignment);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetWordWrapping(IDWriteTextFormat2* This,DWRITE_WORD_WRAPPING wrapping) {
    return This->lpVtbl->SetWordWrapping(This,wrapping);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetReadingDirection(IDWriteTextFormat2* This,DWRITE_READING_DIRECTION direction) {
    return This->lpVtbl->SetReadingDirection(This,direction);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetFlowDirection(IDWriteTextFormat2* This,DWRITE_FLOW_DIRECTION direction) {
    return This->lpVtbl->SetFlowDirection(This,direction);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetIncrementalTabStop(IDWriteTextFormat2* This,FLOAT tabstop) {
    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetTrimming(IDWriteTextFormat2* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
}
static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextFormat2_GetTextAlignment(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetTextAlignment(This);
}
static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextFormat2_GetParagraphAlignment(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetParagraphAlignment(This);
}
static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextFormat2_GetWordWrapping(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetWordWrapping(This);
}
static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextFormat2_GetReadingDirection(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetReadingDirection(This);
}
static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextFormat2_GetFlowDirection(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetFlowDirection(This);
}
static FORCEINLINE FLOAT IDWriteTextFormat2_GetIncrementalTabStop(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetIncrementalTabStop(This);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_GetTrimming(IDWriteTextFormat2* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_GetFontCollection(IDWriteTextFormat2* This,IDWriteFontCollection **collection) {
    return This->lpVtbl->GetFontCollection(This,collection);
}
static FORCEINLINE UINT32 IDWriteTextFormat2_GetFontFamilyNameLength(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetFontFamilyNameLength(This);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_GetFontFamilyName(IDWriteTextFormat2* This,WCHAR *name,UINT32 size) {
    return This->lpVtbl->GetFontFamilyName(This,name,size);
}
static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteTextFormat2_GetFontWeight(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetFontWeight(This);
}
static FORCEINLINE DWRITE_FONT_STYLE IDWriteTextFormat2_GetFontStyle(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetFontStyle(This);
}
static FORCEINLINE DWRITE_FONT_STRETCH IDWriteTextFormat2_GetFontStretch(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetFontStretch(This);
}
static FORCEINLINE FLOAT IDWriteTextFormat2_GetFontSize(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetFontSize(This);
}
static FORCEINLINE UINT32 IDWriteTextFormat2_GetLocaleNameLength(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetLocaleNameLength(This);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_GetLocaleName(IDWriteTextFormat2* This,WCHAR *name,UINT32 size) {
    return This->lpVtbl->GetLocaleName(This,name,size);
}
/*** IDWriteTextFormat1 methods ***/
static FORCEINLINE HRESULT IDWriteTextFormat2_SetVerticalGlyphOrientation(IDWriteTextFormat2* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
}
static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextFormat2_GetVerticalGlyphOrientation(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetVerticalGlyphOrientation(This);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetLastLineWrapping(IDWriteTextFormat2* This,BOOL lastline_wrapping_enabled) {
    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
}
static FORCEINLINE BOOL IDWriteTextFormat2_GetLastLineWrapping(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetLastLineWrapping(This);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetOpticalAlignment(IDWriteTextFormat2* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
    return This->lpVtbl->SetOpticalAlignment(This,alignment);
}
static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextFormat2_GetOpticalAlignment(IDWriteTextFormat2* This) {
    return This->lpVtbl->GetOpticalAlignment(This);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_SetFontFallback(IDWriteTextFormat2* This,IDWriteFontFallback *fallback) {
    return This->lpVtbl->SetFontFallback(This,fallback);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_GetFontFallback(IDWriteTextFormat2* This,IDWriteFontFallback **fallback) {
    return This->lpVtbl->GetFontFallback(This,fallback);
}
/*** IDWriteTextFormat2 methods ***/
static FORCEINLINE HRESULT IDWriteTextFormat2_SetLineSpacing(IDWriteTextFormat2* This,const DWRITE_LINE_SPACING *spacing) {
    return This->lpVtbl->IDWriteTextFormat2_SetLineSpacing(This,spacing);
}
static FORCEINLINE HRESULT IDWriteTextFormat2_GetLineSpacing(IDWriteTextFormat2* This,DWRITE_LINE_SPACING *spacing) {
    return This->lpVtbl->IDWriteTextFormat2_GetLineSpacing(This,spacing);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteTextFormat2_SetLineSpacing_Proxy(
    IDWriteTextFormat2* This,
    const DWRITE_LINE_SPACING *spacing);
void __RPC_STUB IDWriteTextFormat2_SetLineSpacing_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteTextFormat2_GetLineSpacing_Proxy(
    IDWriteTextFormat2* This,
    DWRITE_LINE_SPACING *spacing);
void __RPC_STUB IDWriteTextFormat2_GetLineSpacing_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteTextFormat2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteTextLayout3 interface
 */
#ifndef __IDWriteTextLayout3_INTERFACE_DEFINED__
#define __IDWriteTextLayout3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteTextLayout3, 0x07ddcd52, 0x020e, 0x4de8, 0xac,0x33, 0x6c,0x95,0x3d,0x83,0xf9,0x2d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("07ddcd52-020e-4de8-ac33-6c953d83f92d")
IDWriteTextLayout3 : public IDWriteTextLayout2
{
    virtual HRESULT STDMETHODCALLTYPE InvalidateLayout(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetLineSpacing(
        const DWRITE_LINE_SPACING *spacing) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLineSpacing(
        DWRITE_LINE_SPACING *spacing) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLineMetrics(
        DWRITE_LINE_METRICS1 *metrics,
        UINT32 max_count,
        UINT32 *count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteTextLayout3, 0x07ddcd52, 0x020e, 0x4de8, 0xac,0x33, 0x6c,0x95,0x3d,0x83,0xf9,0x2d)
#endif
#else
typedef struct IDWriteTextLayout3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteTextLayout3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteTextLayout3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteTextLayout3 *This);

    /*** IDWriteTextFormat methods ***/
    HRESULT (STDMETHODCALLTYPE *SetTextAlignment)(
        IDWriteTextLayout3 *This,
        DWRITE_TEXT_ALIGNMENT alignment);

    HRESULT (STDMETHODCALLTYPE *SetParagraphAlignment)(
        IDWriteTextLayout3 *This,
        DWRITE_PARAGRAPH_ALIGNMENT alignment);

    HRESULT (STDMETHODCALLTYPE *SetWordWrapping)(
        IDWriteTextLayout3 *This,
        DWRITE_WORD_WRAPPING wrapping);

    HRESULT (STDMETHODCALLTYPE *SetReadingDirection)(
        IDWriteTextLayout3 *This,
        DWRITE_READING_DIRECTION direction);

    HRESULT (STDMETHODCALLTYPE *SetFlowDirection)(
        IDWriteTextLayout3 *This,
        DWRITE_FLOW_DIRECTION direction);

    HRESULT (STDMETHODCALLTYPE *SetIncrementalTabStop)(
        IDWriteTextLayout3 *This,
        FLOAT tabstop);

    HRESULT (STDMETHODCALLTYPE *SetTrimming)(
        IDWriteTextLayout3 *This,
        const DWRITE_TRIMMING *trimming,
        IDWriteInlineObject *trimming_sign);

    HRESULT (STDMETHODCALLTYPE *SetLineSpacing)(
        IDWriteTextLayout3 *This,
        DWRITE_LINE_SPACING_METHOD spacing,
        FLOAT line_spacing,
        FLOAT baseline);

    DWRITE_TEXT_ALIGNMENT (STDMETHODCALLTYPE *GetTextAlignment)(
        IDWriteTextLayout3 *This);

    DWRITE_PARAGRAPH_ALIGNMENT (STDMETHODCALLTYPE *GetParagraphAlignment)(
        IDWriteTextLayout3 *This);

    DWRITE_WORD_WRAPPING (STDMETHODCALLTYPE *GetWordWrapping)(
        IDWriteTextLayout3 *This);

    DWRITE_READING_DIRECTION (STDMETHODCALLTYPE *GetReadingDirection)(
        IDWriteTextLayout3 *This);

    DWRITE_FLOW_DIRECTION (STDMETHODCALLTYPE *GetFlowDirection)(
        IDWriteTextLayout3 *This);

    FLOAT (STDMETHODCALLTYPE *GetIncrementalTabStop)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *GetTrimming)(
        IDWriteTextLayout3 *This,
        DWRITE_TRIMMING *options,
        IDWriteInlineObject **trimming_sign);

    HRESULT (STDMETHODCALLTYPE *GetLineSpacing)(
        IDWriteTextLayout3 *This,
        DWRITE_LINE_SPACING_METHOD *method,
        FLOAT *spacing,
        FLOAT *baseline);

    HRESULT (STDMETHODCALLTYPE *GetFontCollection)(
        IDWriteTextLayout3 *This,
        IDWriteFontCollection **collection);

    UINT32 (STDMETHODCALLTYPE *GetFontFamilyNameLength)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *GetFontFamilyName)(
        IDWriteTextLayout3 *This,
        WCHAR *name,
        UINT32 size);

    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetFontWeight)(
        IDWriteTextLayout3 *This);

    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetFontStyle)(
        IDWriteTextLayout3 *This);

    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetFontStretch)(
        IDWriteTextLayout3 *This);

    FLOAT (STDMETHODCALLTYPE *GetFontSize)(
        IDWriteTextLayout3 *This);

    UINT32 (STDMETHODCALLTYPE *GetLocaleNameLength)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *GetLocaleName)(
        IDWriteTextLayout3 *This,
        WCHAR *name,
        UINT32 size);

    /*** IDWriteTextLayout methods ***/
    HRESULT (STDMETHODCALLTYPE *SetMaxWidth)(
        IDWriteTextLayout3 *This,
        FLOAT maxWidth);

    HRESULT (STDMETHODCALLTYPE *SetMaxHeight)(
        IDWriteTextLayout3 *This,
        FLOAT maxHeight);

    HRESULT (STDMETHODCALLTYPE *SetFontCollection)(
        IDWriteTextLayout3 *This,
        IDWriteFontCollection *collection,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetFontFamilyName)(
        IDWriteTextLayout3 *This,
        const WCHAR *name,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetFontWeight)(
        IDWriteTextLayout3 *This,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetFontStyle)(
        IDWriteTextLayout3 *This,
        DWRITE_FONT_STYLE style,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetFontStretch)(
        IDWriteTextLayout3 *This,
        DWRITE_FONT_STRETCH stretch,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetFontSize)(
        IDWriteTextLayout3 *This,
        FLOAT size,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetUnderline)(
        IDWriteTextLayout3 *This,
        BOOL underline,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetStrikethrough)(
        IDWriteTextLayout3 *This,
        BOOL strikethrough,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetDrawingEffect)(
        IDWriteTextLayout3 *This,
        IUnknown *effect,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetInlineObject)(
        IDWriteTextLayout3 *This,
        IDWriteInlineObject *object,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetTypography)(
        IDWriteTextLayout3 *This,
        IDWriteTypography *typography,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *SetLocaleName)(
        IDWriteTextLayout3 *This,
        const WCHAR *locale,
        DWRITE_TEXT_RANGE range);

    FLOAT (STDMETHODCALLTYPE *GetMaxWidth)(
        IDWriteTextLayout3 *This);

    FLOAT (STDMETHODCALLTYPE *GetMaxHeight)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontCollection)(
        IDWriteTextLayout3 *This,
        UINT32 pos,
        IDWriteFontCollection **collection,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyNameLength)(
        IDWriteTextLayout3 *This,
        UINT32 pos,
        UINT32 *len,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontFamilyName)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        WCHAR *name,
        UINT32 name_size,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontWeight)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        DWRITE_FONT_WEIGHT *weight,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStyle)(
        IDWriteTextLayout3 *This,
        UINT32 currentPosition,
        DWRITE_FONT_STYLE *style,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontStretch)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        DWRITE_FONT_STRETCH *stretch,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetFontSize)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        FLOAT *size,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *GetUnderline)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        BOOL *has_underline,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *GetStrikethrough)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        BOOL *has_strikethrough,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *GetDrawingEffect)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        IUnknown **effect,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *GetInlineObject)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        IDWriteInlineObject **object,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *GetTypography)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        IDWriteTypography **typography,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleNameLength)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        UINT32 *length,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout_GetLocaleName)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        WCHAR *name,
        UINT32 name_size,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *Draw)(
        IDWriteTextLayout3 *This,
        void *context,
        IDWriteTextRenderer *renderer,
        FLOAT originX,
        FLOAT originY);

    HRESULT (STDMETHODCALLTYPE *GetLineMetrics)(
        IDWriteTextLayout3 *This,
        DWRITE_LINE_METRICS *metrics,
        UINT32 max_count,
        UINT32 *actual_count);

    HRESULT (STDMETHODCALLTYPE *GetMetrics)(
        IDWriteTextLayout3 *This,
        DWRITE_TEXT_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *GetOverhangMetrics)(
        IDWriteTextLayout3 *This,
        DWRITE_OVERHANG_METRICS *overhangs);

    HRESULT (STDMETHODCALLTYPE *GetClusterMetrics)(
        IDWriteTextLayout3 *This,
        DWRITE_CLUSTER_METRICS *metrics,
        UINT32 max_count,
        UINT32 *act_count);

    HRESULT (STDMETHODCALLTYPE *DetermineMinWidth)(
        IDWriteTextLayout3 *This,
        FLOAT *min_width);

    HRESULT (STDMETHODCALLTYPE *HitTestPoint)(
        IDWriteTextLayout3 *This,
        FLOAT pointX,
        FLOAT pointY,
        BOOL *is_trailinghit,
        BOOL *is_inside,
        DWRITE_HIT_TEST_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *HitTestTextPosition)(
        IDWriteTextLayout3 *This,
        UINT32 textPosition,
        BOOL is_trailinghit,
        FLOAT *pointX,
        FLOAT *pointY,
        DWRITE_HIT_TEST_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *HitTestTextRange)(
        IDWriteTextLayout3 *This,
        UINT32 textPosition,
        UINT32 textLength,
        FLOAT originX,
        FLOAT originY,
        DWRITE_HIT_TEST_METRICS *metrics,
        UINT32 max_metricscount,
        UINT32 *actual_metricscount);

    /*** IDWriteTextLayout1 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPairKerning)(
        IDWriteTextLayout3 *This,
        BOOL is_pairkerning_enabled,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *GetPairKerning)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        BOOL *is_pairkerning_enabled,
        DWRITE_TEXT_RANGE *range);

    HRESULT (STDMETHODCALLTYPE *SetCharacterSpacing)(
        IDWriteTextLayout3 *This,
        FLOAT leading_spacing,
        FLOAT trailing_spacing,
        FLOAT minimum_advance_width,
        DWRITE_TEXT_RANGE range);

    HRESULT (STDMETHODCALLTYPE *GetCharacterSpacing)(
        IDWriteTextLayout3 *This,
        UINT32 position,
        FLOAT *leading_spacing,
        FLOAT *trailing_spacing,
        FLOAT *minimum_advance_width,
        DWRITE_TEXT_RANGE *range);

    /*** IDWriteTextLayout2 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout2_GetMetrics)(
        IDWriteTextLayout3 *This,
        DWRITE_TEXT_METRICS1 *metrics);

    HRESULT (STDMETHODCALLTYPE *SetVerticalGlyphOrientation)(
        IDWriteTextLayout3 *This,
        DWRITE_VERTICAL_GLYPH_ORIENTATION orientation);

    DWRITE_VERTICAL_GLYPH_ORIENTATION (STDMETHODCALLTYPE *GetVerticalGlyphOrientation)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *SetLastLineWrapping)(
        IDWriteTextLayout3 *This,
        BOOL lastline_wrapping_enabled);

    BOOL (STDMETHODCALLTYPE *GetLastLineWrapping)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *SetOpticalAlignment)(
        IDWriteTextLayout3 *This,
        DWRITE_OPTICAL_ALIGNMENT alignment);

    DWRITE_OPTICAL_ALIGNMENT (STDMETHODCALLTYPE *GetOpticalAlignment)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *SetFontFallback)(
        IDWriteTextLayout3 *This,
        IDWriteFontFallback *fallback);

    HRESULT (STDMETHODCALLTYPE *GetFontFallback)(
        IDWriteTextLayout3 *This,
        IDWriteFontFallback **fallback);

    /*** IDWriteTextLayout3 methods ***/
    HRESULT (STDMETHODCALLTYPE *InvalidateLayout)(
        IDWriteTextLayout3 *This);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_SetLineSpacing)(
        IDWriteTextLayout3 *This,
        const DWRITE_LINE_SPACING *spacing);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_GetLineSpacing)(
        IDWriteTextLayout3 *This,
        DWRITE_LINE_SPACING *spacing);

    HRESULT (STDMETHODCALLTYPE *IDWriteTextLayout3_GetLineMetrics)(
        IDWriteTextLayout3 *This,
        DWRITE_LINE_METRICS1 *metrics,
        UINT32 max_count,
        UINT32 *count);

    END_INTERFACE
} IDWriteTextLayout3Vtbl;

interface IDWriteTextLayout3 {
    CONST_VTBL IDWriteTextLayout3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteTextLayout3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteTextLayout3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteTextLayout3_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteTextFormat methods ***/
#define IDWriteTextLayout3_SetTextAlignment(This,alignment) (This)->lpVtbl->SetTextAlignment(This,alignment)
#define IDWriteTextLayout3_SetParagraphAlignment(This,alignment) (This)->lpVtbl->SetParagraphAlignment(This,alignment)
#define IDWriteTextLayout3_SetWordWrapping(This,wrapping) (This)->lpVtbl->SetWordWrapping(This,wrapping)
#define IDWriteTextLayout3_SetReadingDirection(This,direction) (This)->lpVtbl->SetReadingDirection(This,direction)
#define IDWriteTextLayout3_SetFlowDirection(This,direction) (This)->lpVtbl->SetFlowDirection(This,direction)
#define IDWriteTextLayout3_SetIncrementalTabStop(This,tabstop) (This)->lpVtbl->SetIncrementalTabStop(This,tabstop)
#define IDWriteTextLayout3_SetTrimming(This,trimming,trimming_sign) (This)->lpVtbl->SetTrimming(This,trimming,trimming_sign)
#define IDWriteTextLayout3_GetTextAlignment(This) (This)->lpVtbl->GetTextAlignment(This)
#define IDWriteTextLayout3_GetParagraphAlignment(This) (This)->lpVtbl->GetParagraphAlignment(This)
#define IDWriteTextLayout3_GetWordWrapping(This) (This)->lpVtbl->GetWordWrapping(This)
#define IDWriteTextLayout3_GetReadingDirection(This) (This)->lpVtbl->GetReadingDirection(This)
#define IDWriteTextLayout3_GetFlowDirection(This) (This)->lpVtbl->GetFlowDirection(This)
#define IDWriteTextLayout3_GetIncrementalTabStop(This) (This)->lpVtbl->GetIncrementalTabStop(This)
#define IDWriteTextLayout3_GetTrimming(This,options,trimming_sign) (This)->lpVtbl->GetTrimming(This,options,trimming_sign)
/*** IDWriteTextLayout methods ***/
#define IDWriteTextLayout3_SetMaxWidth(This,maxWidth) (This)->lpVtbl->SetMaxWidth(This,maxWidth)
#define IDWriteTextLayout3_SetMaxHeight(This,maxHeight) (This)->lpVtbl->SetMaxHeight(This,maxHeight)
#define IDWriteTextLayout3_SetFontCollection(This,collection,range) (This)->lpVtbl->SetFontCollection(This,collection,range)
#define IDWriteTextLayout3_SetFontFamilyName(This,name,range) (This)->lpVtbl->SetFontFamilyName(This,name,range)
#define IDWriteTextLayout3_SetFontWeight(This,weight,range) (This)->lpVtbl->SetFontWeight(This,weight,range)
#define IDWriteTextLayout3_SetFontStyle(This,style,range) (This)->lpVtbl->SetFontStyle(This,style,range)
#define IDWriteTextLayout3_SetFontStretch(This,stretch,range) (This)->lpVtbl->SetFontStretch(This,stretch,range)
#define IDWriteTextLayout3_SetFontSize(This,size,range) (This)->lpVtbl->SetFontSize(This,size,range)
#define IDWriteTextLayout3_SetUnderline(This,underline,range) (This)->lpVtbl->SetUnderline(This,underline,range)
#define IDWriteTextLayout3_SetStrikethrough(This,strikethrough,range) (This)->lpVtbl->SetStrikethrough(This,strikethrough,range)
#define IDWriteTextLayout3_SetDrawingEffect(This,effect,range) (This)->lpVtbl->SetDrawingEffect(This,effect,range)
#define IDWriteTextLayout3_SetInlineObject(This,object,range) (This)->lpVtbl->SetInlineObject(This,object,range)
#define IDWriteTextLayout3_SetTypography(This,typography,range) (This)->lpVtbl->SetTypography(This,typography,range)
#define IDWriteTextLayout3_SetLocaleName(This,locale,range) (This)->lpVtbl->SetLocaleName(This,locale,range)
#define IDWriteTextLayout3_GetMaxWidth(This) (This)->lpVtbl->GetMaxWidth(This)
#define IDWriteTextLayout3_GetMaxHeight(This) (This)->lpVtbl->GetMaxHeight(This)
#define IDWriteTextLayout3_GetFontCollection(This,pos,collection,range) (This)->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range)
#define IDWriteTextLayout3_GetFontFamilyNameLength(This,pos,len,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range)
#define IDWriteTextLayout3_GetFontFamilyName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range)
#define IDWriteTextLayout3_GetFontWeight(This,position,weight,range) (This)->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range)
#define IDWriteTextLayout3_GetFontStyle(This,currentPosition,style,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range)
#define IDWriteTextLayout3_GetFontStretch(This,position,stretch,range) (This)->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range)
#define IDWriteTextLayout3_GetFontSize(This,position,size,range) (This)->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range)
#define IDWriteTextLayout3_GetUnderline(This,position,has_underline,range) (This)->lpVtbl->GetUnderline(This,position,has_underline,range)
#define IDWriteTextLayout3_GetStrikethrough(This,position,has_strikethrough,range) (This)->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range)
#define IDWriteTextLayout3_GetDrawingEffect(This,position,effect,range) (This)->lpVtbl->GetDrawingEffect(This,position,effect,range)
#define IDWriteTextLayout3_GetInlineObject(This,position,object,range) (This)->lpVtbl->GetInlineObject(This,position,object,range)
#define IDWriteTextLayout3_GetTypography(This,position,typography,range) (This)->lpVtbl->GetTypography(This,position,typography,range)
#define IDWriteTextLayout3_GetLocaleNameLength(This,position,length,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range)
#define IDWriteTextLayout3_GetLocaleName(This,position,name,name_size,range) (This)->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range)
#define IDWriteTextLayout3_Draw(This,context,renderer,originX,originY) (This)->lpVtbl->Draw(This,context,renderer,originX,originY)
#define IDWriteTextLayout3_GetOverhangMetrics(This,overhangs) (This)->lpVtbl->GetOverhangMetrics(This,overhangs)
#define IDWriteTextLayout3_GetClusterMetrics(This,metrics,max_count,act_count) (This)->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count)
#define IDWriteTextLayout3_DetermineMinWidth(This,min_width) (This)->lpVtbl->DetermineMinWidth(This,min_width)
#define IDWriteTextLayout3_HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics) (This)->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics)
#define IDWriteTextLayout3_HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics) (This)->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics)
#define IDWriteTextLayout3_HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount) (This)->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount)
/*** IDWriteTextLayout1 methods ***/
#define IDWriteTextLayout3_SetPairKerning(This,is_pairkerning_enabled,range) (This)->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range)
#define IDWriteTextLayout3_GetPairKerning(This,position,is_pairkerning_enabled,range) (This)->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range)
#define IDWriteTextLayout3_SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range)
#define IDWriteTextLayout3_GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range) (This)->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range)
/*** IDWriteTextLayout2 methods ***/
#define IDWriteTextLayout3_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics)
#define IDWriteTextLayout3_SetVerticalGlyphOrientation(This,orientation) (This)->lpVtbl->SetVerticalGlyphOrientation(This,orientation)
#define IDWriteTextLayout3_GetVerticalGlyphOrientation(This) (This)->lpVtbl->GetVerticalGlyphOrientation(This)
#define IDWriteTextLayout3_SetLastLineWrapping(This,lastline_wrapping_enabled) (This)->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled)
#define IDWriteTextLayout3_GetLastLineWrapping(This) (This)->lpVtbl->GetLastLineWrapping(This)
#define IDWriteTextLayout3_SetOpticalAlignment(This,alignment) (This)->lpVtbl->SetOpticalAlignment(This,alignment)
#define IDWriteTextLayout3_GetOpticalAlignment(This) (This)->lpVtbl->GetOpticalAlignment(This)
#define IDWriteTextLayout3_SetFontFallback(This,fallback) (This)->lpVtbl->SetFontFallback(This,fallback)
#define IDWriteTextLayout3_GetFontFallback(This,fallback) (This)->lpVtbl->GetFontFallback(This,fallback)
/*** IDWriteTextLayout3 methods ***/
#define IDWriteTextLayout3_InvalidateLayout(This) (This)->lpVtbl->InvalidateLayout(This)
#define IDWriteTextLayout3_SetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextLayout3_SetLineSpacing(This,spacing)
#define IDWriteTextLayout3_GetLineSpacing(This,spacing) (This)->lpVtbl->IDWriteTextLayout3_GetLineSpacing(This,spacing)
#define IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count) (This)->lpVtbl->IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteTextLayout3_QueryInterface(IDWriteTextLayout3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteTextLayout3_AddRef(IDWriteTextLayout3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteTextLayout3_Release(IDWriteTextLayout3* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteTextFormat methods ***/
static FORCEINLINE HRESULT IDWriteTextLayout3_SetTextAlignment(IDWriteTextLayout3* This,DWRITE_TEXT_ALIGNMENT alignment) {
    return This->lpVtbl->SetTextAlignment(This,alignment);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetParagraphAlignment(IDWriteTextLayout3* This,DWRITE_PARAGRAPH_ALIGNMENT alignment) {
    return This->lpVtbl->SetParagraphAlignment(This,alignment);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetWordWrapping(IDWriteTextLayout3* This,DWRITE_WORD_WRAPPING wrapping) {
    return This->lpVtbl->SetWordWrapping(This,wrapping);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetReadingDirection(IDWriteTextLayout3* This,DWRITE_READING_DIRECTION direction) {
    return This->lpVtbl->SetReadingDirection(This,direction);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFlowDirection(IDWriteTextLayout3* This,DWRITE_FLOW_DIRECTION direction) {
    return This->lpVtbl->SetFlowDirection(This,direction);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetIncrementalTabStop(IDWriteTextLayout3* This,FLOAT tabstop) {
    return This->lpVtbl->SetIncrementalTabStop(This,tabstop);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetTrimming(IDWriteTextLayout3* This,const DWRITE_TRIMMING *trimming,IDWriteInlineObject *trimming_sign) {
    return This->lpVtbl->SetTrimming(This,trimming,trimming_sign);
}
static FORCEINLINE DWRITE_TEXT_ALIGNMENT IDWriteTextLayout3_GetTextAlignment(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetTextAlignment(This);
}
static FORCEINLINE DWRITE_PARAGRAPH_ALIGNMENT IDWriteTextLayout3_GetParagraphAlignment(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetParagraphAlignment(This);
}
static FORCEINLINE DWRITE_WORD_WRAPPING IDWriteTextLayout3_GetWordWrapping(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetWordWrapping(This);
}
static FORCEINLINE DWRITE_READING_DIRECTION IDWriteTextLayout3_GetReadingDirection(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetReadingDirection(This);
}
static FORCEINLINE DWRITE_FLOW_DIRECTION IDWriteTextLayout3_GetFlowDirection(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetFlowDirection(This);
}
static FORCEINLINE FLOAT IDWriteTextLayout3_GetIncrementalTabStop(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetIncrementalTabStop(This);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetTrimming(IDWriteTextLayout3* This,DWRITE_TRIMMING *options,IDWriteInlineObject **trimming_sign) {
    return This->lpVtbl->GetTrimming(This,options,trimming_sign);
}
/*** IDWriteTextLayout methods ***/
static FORCEINLINE HRESULT IDWriteTextLayout3_SetMaxWidth(IDWriteTextLayout3* This,FLOAT maxWidth) {
    return This->lpVtbl->SetMaxWidth(This,maxWidth);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetMaxHeight(IDWriteTextLayout3* This,FLOAT maxHeight) {
    return This->lpVtbl->SetMaxHeight(This,maxHeight);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontCollection(IDWriteTextLayout3* This,IDWriteFontCollection *collection,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetFontCollection(This,collection,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontFamilyName(IDWriteTextLayout3* This,const WCHAR *name,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetFontFamilyName(This,name,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontWeight(IDWriteTextLayout3* This,DWRITE_FONT_WEIGHT weight,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetFontWeight(This,weight,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontStyle(IDWriteTextLayout3* This,DWRITE_FONT_STYLE style,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetFontStyle(This,style,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontStretch(IDWriteTextLayout3* This,DWRITE_FONT_STRETCH stretch,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetFontStretch(This,stretch,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontSize(IDWriteTextLayout3* This,FLOAT size,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetFontSize(This,size,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetUnderline(IDWriteTextLayout3* This,BOOL underline,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetUnderline(This,underline,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetStrikethrough(IDWriteTextLayout3* This,BOOL strikethrough,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetStrikethrough(This,strikethrough,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetDrawingEffect(IDWriteTextLayout3* This,IUnknown *effect,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetDrawingEffect(This,effect,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetInlineObject(IDWriteTextLayout3* This,IDWriteInlineObject *object,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetInlineObject(This,object,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetTypography(IDWriteTextLayout3* This,IDWriteTypography *typography,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetTypography(This,typography,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetLocaleName(IDWriteTextLayout3* This,const WCHAR *locale,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetLocaleName(This,locale,range);
}
static FORCEINLINE FLOAT IDWriteTextLayout3_GetMaxWidth(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetMaxWidth(This);
}
static FORCEINLINE FLOAT IDWriteTextLayout3_GetMaxHeight(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetMaxHeight(This);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontCollection(IDWriteTextLayout3* This,UINT32 pos,IDWriteFontCollection **collection,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontCollection(This,pos,collection,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontFamilyNameLength(IDWriteTextLayout3* This,UINT32 pos,UINT32 *len,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyNameLength(This,pos,len,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontFamilyName(IDWriteTextLayout3* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontFamilyName(This,position,name,name_size,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontWeight(IDWriteTextLayout3* This,UINT32 position,DWRITE_FONT_WEIGHT *weight,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontWeight(This,position,weight,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontStyle(IDWriteTextLayout3* This,UINT32 currentPosition,DWRITE_FONT_STYLE *style,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontStyle(This,currentPosition,style,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontStretch(IDWriteTextLayout3* This,UINT32 position,DWRITE_FONT_STRETCH *stretch,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontStretch(This,position,stretch,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontSize(IDWriteTextLayout3* This,UINT32 position,FLOAT *size,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetFontSize(This,position,size,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetUnderline(IDWriteTextLayout3* This,UINT32 position,BOOL *has_underline,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetUnderline(This,position,has_underline,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetStrikethrough(IDWriteTextLayout3* This,UINT32 position,BOOL *has_strikethrough,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetStrikethrough(This,position,has_strikethrough,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetDrawingEffect(IDWriteTextLayout3* This,UINT32 position,IUnknown **effect,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetDrawingEffect(This,position,effect,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetInlineObject(IDWriteTextLayout3* This,UINT32 position,IDWriteInlineObject **object,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetInlineObject(This,position,object,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetTypography(IDWriteTextLayout3* This,UINT32 position,IDWriteTypography **typography,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetTypography(This,position,typography,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetLocaleNameLength(IDWriteTextLayout3* This,UINT32 position,UINT32 *length,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetLocaleNameLength(This,position,length,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetLocaleName(IDWriteTextLayout3* This,UINT32 position,WCHAR *name,UINT32 name_size,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->IDWriteTextLayout_GetLocaleName(This,position,name,name_size,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_Draw(IDWriteTextLayout3* This,void *context,IDWriteTextRenderer *renderer,FLOAT originX,FLOAT originY) {
    return This->lpVtbl->Draw(This,context,renderer,originX,originY);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetOverhangMetrics(IDWriteTextLayout3* This,DWRITE_OVERHANG_METRICS *overhangs) {
    return This->lpVtbl->GetOverhangMetrics(This,overhangs);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetClusterMetrics(IDWriteTextLayout3* This,DWRITE_CLUSTER_METRICS *metrics,UINT32 max_count,UINT32 *act_count) {
    return This->lpVtbl->GetClusterMetrics(This,metrics,max_count,act_count);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_DetermineMinWidth(IDWriteTextLayout3* This,FLOAT *min_width) {
    return This->lpVtbl->DetermineMinWidth(This,min_width);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_HitTestPoint(IDWriteTextLayout3* This,FLOAT pointX,FLOAT pointY,BOOL *is_trailinghit,BOOL *is_inside,DWRITE_HIT_TEST_METRICS *metrics) {
    return This->lpVtbl->HitTestPoint(This,pointX,pointY,is_trailinghit,is_inside,metrics);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_HitTestTextPosition(IDWriteTextLayout3* This,UINT32 textPosition,BOOL is_trailinghit,FLOAT *pointX,FLOAT *pointY,DWRITE_HIT_TEST_METRICS *metrics) {
    return This->lpVtbl->HitTestTextPosition(This,textPosition,is_trailinghit,pointX,pointY,metrics);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_HitTestTextRange(IDWriteTextLayout3* This,UINT32 textPosition,UINT32 textLength,FLOAT originX,FLOAT originY,DWRITE_HIT_TEST_METRICS *metrics,UINT32 max_metricscount,UINT32 *actual_metricscount) {
    return This->lpVtbl->HitTestTextRange(This,textPosition,textLength,originX,originY,metrics,max_metricscount,actual_metricscount);
}
/*** IDWriteTextLayout1 methods ***/
static FORCEINLINE HRESULT IDWriteTextLayout3_SetPairKerning(IDWriteTextLayout3* This,BOOL is_pairkerning_enabled,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetPairKerning(This,is_pairkerning_enabled,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetPairKerning(IDWriteTextLayout3* This,UINT32 position,BOOL *is_pairkerning_enabled,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetPairKerning(This,position,is_pairkerning_enabled,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetCharacterSpacing(IDWriteTextLayout3* This,FLOAT leading_spacing,FLOAT trailing_spacing,FLOAT minimum_advance_width,DWRITE_TEXT_RANGE range) {
    return This->lpVtbl->SetCharacterSpacing(This,leading_spacing,trailing_spacing,minimum_advance_width,range);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetCharacterSpacing(IDWriteTextLayout3* This,UINT32 position,FLOAT *leading_spacing,FLOAT *trailing_spacing,FLOAT *minimum_advance_width,DWRITE_TEXT_RANGE *range) {
    return This->lpVtbl->GetCharacterSpacing(This,position,leading_spacing,trailing_spacing,minimum_advance_width,range);
}
/*** IDWriteTextLayout2 methods ***/
static FORCEINLINE HRESULT IDWriteTextLayout3_GetMetrics(IDWriteTextLayout3* This,DWRITE_TEXT_METRICS1 *metrics) {
    return This->lpVtbl->IDWriteTextLayout2_GetMetrics(This,metrics);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetVerticalGlyphOrientation(IDWriteTextLayout3* This,DWRITE_VERTICAL_GLYPH_ORIENTATION orientation) {
    return This->lpVtbl->SetVerticalGlyphOrientation(This,orientation);
}
static FORCEINLINE DWRITE_VERTICAL_GLYPH_ORIENTATION IDWriteTextLayout3_GetVerticalGlyphOrientation(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetVerticalGlyphOrientation(This);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetLastLineWrapping(IDWriteTextLayout3* This,BOOL lastline_wrapping_enabled) {
    return This->lpVtbl->SetLastLineWrapping(This,lastline_wrapping_enabled);
}
static FORCEINLINE BOOL IDWriteTextLayout3_GetLastLineWrapping(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetLastLineWrapping(This);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetOpticalAlignment(IDWriteTextLayout3* This,DWRITE_OPTICAL_ALIGNMENT alignment) {
    return This->lpVtbl->SetOpticalAlignment(This,alignment);
}
static FORCEINLINE DWRITE_OPTICAL_ALIGNMENT IDWriteTextLayout3_GetOpticalAlignment(IDWriteTextLayout3* This) {
    return This->lpVtbl->GetOpticalAlignment(This);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetFontFallback(IDWriteTextLayout3* This,IDWriteFontFallback *fallback) {
    return This->lpVtbl->SetFontFallback(This,fallback);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetFontFallback(IDWriteTextLayout3* This,IDWriteFontFallback **fallback) {
    return This->lpVtbl->GetFontFallback(This,fallback);
}
/*** IDWriteTextLayout3 methods ***/
static FORCEINLINE HRESULT IDWriteTextLayout3_InvalidateLayout(IDWriteTextLayout3* This) {
    return This->lpVtbl->InvalidateLayout(This);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_SetLineSpacing(IDWriteTextLayout3* This,const DWRITE_LINE_SPACING *spacing) {
    return This->lpVtbl->IDWriteTextLayout3_SetLineSpacing(This,spacing);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetLineSpacing(IDWriteTextLayout3* This,DWRITE_LINE_SPACING *spacing) {
    return This->lpVtbl->IDWriteTextLayout3_GetLineSpacing(This,spacing);
}
static FORCEINLINE HRESULT IDWriteTextLayout3_GetLineMetrics(IDWriteTextLayout3* This,DWRITE_LINE_METRICS1 *metrics,UINT32 max_count,UINT32 *count) {
    return This->lpVtbl->IDWriteTextLayout3_GetLineMetrics(This,metrics,max_count,count);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteTextLayout3_InvalidateLayout_Proxy(
    IDWriteTextLayout3* This);
void __RPC_STUB IDWriteTextLayout3_InvalidateLayout_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteTextLayout3_SetLineSpacing_Proxy(
    IDWriteTextLayout3* This,
    const DWRITE_LINE_SPACING *spacing);
void __RPC_STUB IDWriteTextLayout3_SetLineSpacing_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteTextLayout3_GetLineSpacing_Proxy(
    IDWriteTextLayout3* This,
    DWRITE_LINE_SPACING *spacing);
void __RPC_STUB IDWriteTextLayout3_GetLineSpacing_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteTextLayout3_GetLineMetrics_Proxy(
    IDWriteTextLayout3* This,
    DWRITE_LINE_METRICS1 *metrics,
    UINT32 max_count,
    UINT32 *count);
void __RPC_STUB IDWriteTextLayout3_GetLineMetrics_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteTextLayout3_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteGdiInterop1 interface
 */
#ifndef __IDWriteGdiInterop1_INTERFACE_DEFINED__
#define __IDWriteGdiInterop1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteGdiInterop1, 0x4556be70, 0x3abd, 0x4f70, 0x90,0xbe, 0x42,0x17,0x80,0xa6,0xf5,0x15);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4556be70-3abd-4f70-90be-421780a6f515")
IDWriteGdiInterop1 : public IDWriteGdiInterop
{
    virtual HRESULT STDMETHODCALLTYPE CreateFontFromLOGFONT(
        const LOGFONTW *logfont,
        IDWriteFontCollection *collection,
        IDWriteFont **font) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontSignature_(
        IDWriteFontFace *fontface,
        FONTSIGNATURE *fontsig) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontSignature(
        IDWriteFont *font,
        FONTSIGNATURE *fontsig) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetMatchingFontsByLOGFONT(
        const LOGFONTW *logfont,
        IDWriteFontSet *fontset,
        IDWriteFontSet **subset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteGdiInterop1, 0x4556be70, 0x3abd, 0x4f70, 0x90,0xbe, 0x42,0x17,0x80,0xa6,0xf5,0x15)
#endif
#else
typedef struct IDWriteGdiInterop1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteGdiInterop1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteGdiInterop1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteGdiInterop1 *This);

    /*** IDWriteGdiInterop methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFontFromLOGFONT)(
        IDWriteGdiInterop1 *This,
        const LOGFONTW *logfont,
        IDWriteFont **font);

    HRESULT (STDMETHODCALLTYPE *ConvertFontToLOGFONT)(
        IDWriteGdiInterop1 *This,
        IDWriteFont *font,
        LOGFONTW *logfont,
        BOOL *is_systemfont);

    HRESULT (STDMETHODCALLTYPE *ConvertFontFaceToLOGFONT)(
        IDWriteGdiInterop1 *This,
        IDWriteFontFace *font,
        LOGFONTW *logfont);

    HRESULT (STDMETHODCALLTYPE *CreateFontFaceFromHdc)(
        IDWriteGdiInterop1 *This,
        HDC hdc,
        IDWriteFontFace **fontface);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapRenderTarget)(
        IDWriteGdiInterop1 *This,
        HDC hdc,
        UINT32 width,
        UINT32 height,
        IDWriteBitmapRenderTarget **target);

    /*** IDWriteGdiInterop1 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteGdiInterop1_CreateFontFromLOGFONT)(
        IDWriteGdiInterop1 *This,
        const LOGFONTW *logfont,
        IDWriteFontCollection *collection,
        IDWriteFont **font);

    HRESULT (STDMETHODCALLTYPE *GetFontSignature_)(
        IDWriteGdiInterop1 *This,
        IDWriteFontFace *fontface,
        FONTSIGNATURE *fontsig);

    HRESULT (STDMETHODCALLTYPE *GetFontSignature)(
        IDWriteGdiInterop1 *This,
        IDWriteFont *font,
        FONTSIGNATURE *fontsig);

    HRESULT (STDMETHODCALLTYPE *GetMatchingFontsByLOGFONT)(
        IDWriteGdiInterop1 *This,
        const LOGFONTW *logfont,
        IDWriteFontSet *fontset,
        IDWriteFontSet **subset);

    END_INTERFACE
} IDWriteGdiInterop1Vtbl;

interface IDWriteGdiInterop1 {
    CONST_VTBL IDWriteGdiInterop1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteGdiInterop1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteGdiInterop1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteGdiInterop1_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteGdiInterop methods ***/
#define IDWriteGdiInterop1_ConvertFontToLOGFONT(This,font,logfont,is_systemfont) (This)->lpVtbl->ConvertFontToLOGFONT(This,font,logfont,is_systemfont)
#define IDWriteGdiInterop1_ConvertFontFaceToLOGFONT(This,font,logfont) (This)->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logfont)
#define IDWriteGdiInterop1_CreateFontFaceFromHdc(This,hdc,fontface) (This)->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontface)
#define IDWriteGdiInterop1_CreateBitmapRenderTarget(This,hdc,width,height,target) (This)->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,target)
/*** IDWriteGdiInterop1 methods ***/
#define IDWriteGdiInterop1_CreateFontFromLOGFONT(This,logfont,collection,font) (This)->lpVtbl->IDWriteGdiInterop1_CreateFontFromLOGFONT(This,logfont,collection,font)
#define IDWriteGdiInterop1_GetFontSignature_(This,fontface,fontsig) (This)->lpVtbl->GetFontSignature_(This,fontface,fontsig)
#define IDWriteGdiInterop1_GetFontSignature(This,font,fontsig) (This)->lpVtbl->GetFontSignature(This,font,fontsig)
#define IDWriteGdiInterop1_GetMatchingFontsByLOGFONT(This,logfont,fontset,subset) (This)->lpVtbl->GetMatchingFontsByLOGFONT(This,logfont,fontset,subset)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteGdiInterop1_QueryInterface(IDWriteGdiInterop1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteGdiInterop1_AddRef(IDWriteGdiInterop1* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteGdiInterop1_Release(IDWriteGdiInterop1* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteGdiInterop methods ***/
static FORCEINLINE HRESULT IDWriteGdiInterop1_ConvertFontToLOGFONT(IDWriteGdiInterop1* This,IDWriteFont *font,LOGFONTW *logfont,BOOL *is_systemfont) {
    return This->lpVtbl->ConvertFontToLOGFONT(This,font,logfont,is_systemfont);
}
static FORCEINLINE HRESULT IDWriteGdiInterop1_ConvertFontFaceToLOGFONT(IDWriteGdiInterop1* This,IDWriteFontFace *font,LOGFONTW *logfont) {
    return This->lpVtbl->ConvertFontFaceToLOGFONT(This,font,logfont);
}
static FORCEINLINE HRESULT IDWriteGdiInterop1_CreateFontFaceFromHdc(IDWriteGdiInterop1* This,HDC hdc,IDWriteFontFace **fontface) {
    return This->lpVtbl->CreateFontFaceFromHdc(This,hdc,fontface);
}
static FORCEINLINE HRESULT IDWriteGdiInterop1_CreateBitmapRenderTarget(IDWriteGdiInterop1* This,HDC hdc,UINT32 width,UINT32 height,IDWriteBitmapRenderTarget **target) {
    return This->lpVtbl->CreateBitmapRenderTarget(This,hdc,width,height,target);
}
/*** IDWriteGdiInterop1 methods ***/
static FORCEINLINE HRESULT IDWriteGdiInterop1_CreateFontFromLOGFONT(IDWriteGdiInterop1* This,const LOGFONTW *logfont,IDWriteFontCollection *collection,IDWriteFont **font) {
    return This->lpVtbl->IDWriteGdiInterop1_CreateFontFromLOGFONT(This,logfont,collection,font);
}
static FORCEINLINE HRESULT IDWriteGdiInterop1_GetFontSignature_(IDWriteGdiInterop1* This,IDWriteFontFace *fontface,FONTSIGNATURE *fontsig) {
    return This->lpVtbl->GetFontSignature_(This,fontface,fontsig);
}
static FORCEINLINE HRESULT IDWriteGdiInterop1_GetFontSignature(IDWriteGdiInterop1* This,IDWriteFont *font,FONTSIGNATURE *fontsig) {
    return This->lpVtbl->GetFontSignature(This,font,fontsig);
}
static FORCEINLINE HRESULT IDWriteGdiInterop1_GetMatchingFontsByLOGFONT(IDWriteGdiInterop1* This,const LOGFONTW *logfont,IDWriteFontSet *fontset,IDWriteFontSet **subset) {
    return This->lpVtbl->GetMatchingFontsByLOGFONT(This,logfont,fontset,subset);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteGdiInterop1_CreateFontFromLOGFONT_Proxy(
    IDWriteGdiInterop1* This,
    const LOGFONTW *logfont,
    IDWriteFontCollection *collection,
    IDWriteFont **font);
void __RPC_STUB IDWriteGdiInterop1_CreateFontFromLOGFONT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteGdiInterop1_GetFontSignature__Proxy(
    IDWriteGdiInterop1* This,
    IDWriteFontFace *fontface,
    FONTSIGNATURE *fontsig);
void __RPC_STUB IDWriteGdiInterop1_GetFontSignature__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteGdiInterop1_GetFontSignature_Proxy(
    IDWriteGdiInterop1* This,
    IDWriteFont *font,
    FONTSIGNATURE *fontsig);
void __RPC_STUB IDWriteGdiInterop1_GetFontSignature_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteGdiInterop1_GetMatchingFontsByLOGFONT_Proxy(
    IDWriteGdiInterop1* This,
    const LOGFONTW *logfont,
    IDWriteFontSet *fontset,
    IDWriteFontSet **subset);
void __RPC_STUB IDWriteGdiInterop1_GetMatchingFontsByLOGFONT_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteGdiInterop1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFontSetBuilder interface
 */
#ifndef __IDWriteFontSetBuilder_INTERFACE_DEFINED__
#define __IDWriteFontSetBuilder_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontSetBuilder, 0x2f642afe, 0x9c68, 0x4f40, 0xb8,0xbe, 0x45,0x74,0x01,0xaf,0xcb,0x3d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2f642afe-9c68-4f40-b8be-457401afcb3d")
IDWriteFontSetBuilder : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AddFontFaceReference_(
        IDWriteFontFaceReference *ref,
        const DWRITE_FONT_PROPERTY *props,
        UINT32 prop_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddFontFaceReference(
        IDWriteFontFaceReference *ref) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddFontSet(
        IDWriteFontSet *fontset) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateFontSet(
        IDWriteFontSet **fontset) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontSetBuilder, 0x2f642afe, 0x9c68, 0x4f40, 0xb8,0xbe, 0x45,0x74,0x01,0xaf,0xcb,0x3d)
#endif
#else
typedef struct IDWriteFontSetBuilderVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontSetBuilder *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontSetBuilder *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontSetBuilder *This);

    /*** IDWriteFontSetBuilder methods ***/
    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference_)(
        IDWriteFontSetBuilder *This,
        IDWriteFontFaceReference *ref,
        const DWRITE_FONT_PROPERTY *props,
        UINT32 prop_count);

    HRESULT (STDMETHODCALLTYPE *AddFontFaceReference)(
        IDWriteFontSetBuilder *This,
        IDWriteFontFaceReference *ref);

    HRESULT (STDMETHODCALLTYPE *AddFontSet)(
        IDWriteFontSetBuilder *This,
        IDWriteFontSet *fontset);

    HRESULT (STDMETHODCALLTYPE *CreateFontSet)(
        IDWriteFontSetBuilder *This,
        IDWriteFontSet **fontset);

    END_INTERFACE
} IDWriteFontSetBuilderVtbl;

interface IDWriteFontSetBuilder {
    CONST_VTBL IDWriteFontSetBuilderVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontSetBuilder_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontSetBuilder_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontSetBuilder_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontSetBuilder methods ***/
#define IDWriteFontSetBuilder_AddFontFaceReference_(This,ref,props,prop_count) (This)->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count)
#define IDWriteFontSetBuilder_AddFontFaceReference(This,ref) (This)->lpVtbl->AddFontFaceReference(This,ref)
#define IDWriteFontSetBuilder_AddFontSet(This,fontset) (This)->lpVtbl->AddFontSet(This,fontset)
#define IDWriteFontSetBuilder_CreateFontSet(This,fontset) (This)->lpVtbl->CreateFontSet(This,fontset)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontSetBuilder_QueryInterface(IDWriteFontSetBuilder* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontSetBuilder_AddRef(IDWriteFontSetBuilder* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontSetBuilder_Release(IDWriteFontSetBuilder* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontSetBuilder methods ***/
static FORCEINLINE HRESULT IDWriteFontSetBuilder_AddFontFaceReference_(IDWriteFontSetBuilder* This,IDWriteFontFaceReference *ref,const DWRITE_FONT_PROPERTY *props,UINT32 prop_count) {
    return This->lpVtbl->AddFontFaceReference_(This,ref,props,prop_count);
}
static FORCEINLINE HRESULT IDWriteFontSetBuilder_AddFontFaceReference(IDWriteFontSetBuilder* This,IDWriteFontFaceReference *ref) {
    return This->lpVtbl->AddFontFaceReference(This,ref);
}
static FORCEINLINE HRESULT IDWriteFontSetBuilder_AddFontSet(IDWriteFontSetBuilder* This,IDWriteFontSet *fontset) {
    return This->lpVtbl->AddFontSet(This,fontset);
}
static FORCEINLINE HRESULT IDWriteFontSetBuilder_CreateFontSet(IDWriteFontSetBuilder* This,IDWriteFontSet **fontset) {
    return This->lpVtbl->CreateFontSet(This,fontset);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFontSetBuilder_AddFontFaceReference__Proxy(
    IDWriteFontSetBuilder* This,
    IDWriteFontFaceReference *ref,
    const DWRITE_FONT_PROPERTY *props,
    UINT32 prop_count);
void __RPC_STUB IDWriteFontSetBuilder_AddFontFaceReference__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSetBuilder_AddFontFaceReference_Proxy(
    IDWriteFontSetBuilder* This,
    IDWriteFontFaceReference *ref);
void __RPC_STUB IDWriteFontSetBuilder_AddFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSetBuilder_AddFontSet_Proxy(
    IDWriteFontSetBuilder* This,
    IDWriteFontSet *fontset);
void __RPC_STUB IDWriteFontSetBuilder_AddFontSet_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontSetBuilder_CreateFontSet_Proxy(
    IDWriteFontSetBuilder* This,
    IDWriteFontSet **fontset);
void __RPC_STUB IDWriteFontSetBuilder_CreateFontSet_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontSetBuilder_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFactory3 interface
 */
#ifndef __IDWriteFactory3_INTERFACE_DEFINED__
#define __IDWriteFactory3_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFactory3, 0x9a1b41c3, 0xd3bb, 0x466a, 0x87,0xfc, 0xfe,0x67,0x55,0x6a,0x3b,0x65);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9a1b41c3-d3bb-466a-87fc-fe67556a3b65")
IDWriteFactory3 : public IDWriteFactory2
{
    virtual HRESULT STDMETHODCALLTYPE CreateGlyphRunAnalysis(
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE1 rendering_mode,
        DWRITE_MEASURING_MODE measuring_mode,
        DWRITE_GRID_FIT_MODE gridfit_mode,
        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
        FLOAT origin_x,
        FLOAT origin_y,
        IDWriteGlyphRunAnalysis **analysis) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateCustomRenderingParams(
        FLOAT gamma,
        FLOAT enhanced_contrast,
        FLOAT grayscale_enhanced_contrast,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY pixel_geometry,
        DWRITE_RENDERING_MODE1 rendering_mode,
        DWRITE_GRID_FIT_MODE gridfit_mode,
        IDWriteRenderingParams3 **params) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceReference_(
        IDWriteFontFile *file,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFaceReference **reference) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateFontFaceReference(
        const WCHAR *path,
        const FILETIME *writetime,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFaceReference **reference) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSystemFontSet(
        IDWriteFontSet **fontset) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateFontSetBuilder(
        IDWriteFontSetBuilder **builder) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateFontCollectionFromFontSet(
        IDWriteFontSet *fontset,
        IDWriteFontCollection1 **collection) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSystemFontCollection(
        BOOL include_downloadable,
        IDWriteFontCollection1 **collection,
        BOOL check_for_updates) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFontDownloadQueue(
        IDWriteFontDownloadQueue **queue) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFactory3, 0x9a1b41c3, 0xd3bb, 0x466a, 0x87,0xfc, 0xfe,0x67,0x55,0x6a,0x3b,0x65)
#endif
#else
typedef struct IDWriteFactory3Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFactory3 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFactory3 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFactory3 *This);

    /*** IDWriteFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
        IDWriteFactory3 *This,
        IDWriteFontCollection **collection,
        BOOL check_for_updates);

    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
        IDWriteFactory3 *This,
        IDWriteFontCollectionLoader *loader,
        const void *key,
        UINT32 key_size,
        IDWriteFontCollection **collection);

    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
        IDWriteFactory3 *This,
        IDWriteFontCollectionLoader *loader);

    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
        IDWriteFactory3 *This,
        IDWriteFontCollectionLoader *loader);

    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
        IDWriteFactory3 *This,
        const WCHAR *path,
        const FILETIME *writetime,
        IDWriteFontFile **font_file);

    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
        IDWriteFactory3 *This,
        const void *reference_key,
        UINT32 key_size,
        IDWriteFontFileLoader *loader,
        IDWriteFontFile **font_file);

    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
        IDWriteFactory3 *This,
        DWRITE_FONT_FACE_TYPE facetype,
        UINT32 files_number,
        IDWriteFontFile *const *font_files,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS sim_flags,
        IDWriteFontFace **font_face);

    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
        IDWriteFactory3 *This,
        IDWriteRenderingParams **params);

    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
        IDWriteFactory3 *This,
        HMONITOR monitor,
        IDWriteRenderingParams **params);

    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
        IDWriteFactory3 *This,
        FLOAT gamma,
        FLOAT enhancedContrast,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY geometry,
        DWRITE_RENDERING_MODE mode,
        IDWriteRenderingParams **params);

    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
        IDWriteFactory3 *This,
        IDWriteFontFileLoader *loader);

    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
        IDWriteFactory3 *This,
        IDWriteFontFileLoader *loader);

    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
        IDWriteFactory3 *This,
        const WCHAR *family_name,
        IDWriteFontCollection *collection,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_FONT_STYLE style,
        DWRITE_FONT_STRETCH stretch,
        FLOAT size,
        const WCHAR *locale,
        IDWriteTextFormat **format);

    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
        IDWriteFactory3 *This,
        IDWriteTypography **typography);

    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
        IDWriteFactory3 *This,
        IDWriteGdiInterop **gdi_interop);

    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
        IDWriteFactory3 *This,
        const WCHAR *string,
        UINT32 len,
        IDWriteTextFormat *format,
        FLOAT max_width,
        FLOAT max_height,
        IDWriteTextLayout **layout);

    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
        IDWriteFactory3 *This,
        const WCHAR *string,
        UINT32 len,
        IDWriteTextFormat *format,
        FLOAT layout_width,
        FLOAT layout_height,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        BOOL use_gdi_natural,
        IDWriteTextLayout **layout);

    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
        IDWriteFactory3 *This,
        IDWriteTextFormat *format,
        IDWriteInlineObject **trimming_sign);

    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
        IDWriteFactory3 *This,
        IDWriteTextAnalyzer **analyzer);

    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
        IDWriteFactory3 *This,
        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
        const WCHAR *locale,
        BOOL ignore_user_override,
        IDWriteNumberSubstitution **substitution);

    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
        IDWriteFactory3 *This,
        const DWRITE_GLYPH_RUN *glyph_run,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE rendering_mode,
        DWRITE_MEASURING_MODE measuring_mode,
        FLOAT baseline_x,
        FLOAT baseline_y,
        IDWriteGlyphRunAnalysis **analysis);

    /*** IDWriteFactory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
        IDWriteFactory3 *This,
        IDWriteFontCollection **collection,
        BOOL check_for_updates);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
        IDWriteFactory3 *This,
        FLOAT gamma,
        FLOAT enhcontrast,
        FLOAT enhcontrast_grayscale,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY geometry,
        DWRITE_RENDERING_MODE mode,
        IDWriteRenderingParams1 **params);

    /*** IDWriteFactory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
        IDWriteFactory3 *This,
        IDWriteFontFallback **fallback);

    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
        IDWriteFactory3 *This,
        IDWriteFontFallbackBuilder **fallbackbuilder);

    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
        IDWriteFactory3 *This,
        FLOAT originX,
        FLOAT originY,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
        DWRITE_MEASURING_MODE mode,
        const DWRITE_MATRIX *transform,
        UINT32 palette_index,
        IDWriteColorGlyphRunEnumerator **colorlayers);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
        IDWriteFactory3 *This,
        FLOAT gamma,
        FLOAT contrast,
        FLOAT grayscalecontrast,
        FLOAT cleartypeLevel,
        DWRITE_PIXEL_GEOMETRY pixelGeometry,
        DWRITE_RENDERING_MODE renderingMode,
        DWRITE_GRID_FIT_MODE gridFitMode,
        IDWriteRenderingParams2 **params);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
        IDWriteFactory3 *This,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE renderingMode,
        DWRITE_MEASURING_MODE measuringMode,
        DWRITE_GRID_FIT_MODE gridFitMode,
        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
        FLOAT originX,
        FLOAT originY,
        IDWriteGlyphRunAnalysis **analysis);

    /*** IDWriteFactory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
        IDWriteFactory3 *This,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE1 rendering_mode,
        DWRITE_MEASURING_MODE measuring_mode,
        DWRITE_GRID_FIT_MODE gridfit_mode,
        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
        FLOAT origin_x,
        FLOAT origin_y,
        IDWriteGlyphRunAnalysis **analysis);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
        IDWriteFactory3 *This,
        FLOAT gamma,
        FLOAT enhanced_contrast,
        FLOAT grayscale_enhanced_contrast,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY pixel_geometry,
        DWRITE_RENDERING_MODE1 rendering_mode,
        DWRITE_GRID_FIT_MODE gridfit_mode,
        IDWriteRenderingParams3 **params);

    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
        IDWriteFactory3 *This,
        IDWriteFontFile *file,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFaceReference **reference);

    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
        IDWriteFactory3 *This,
        const WCHAR *path,
        const FILETIME *writetime,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFaceReference **reference);

    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
        IDWriteFactory3 *This,
        IDWriteFontSet **fontset);

    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
        IDWriteFactory3 *This,
        IDWriteFontSetBuilder **builder);

    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
        IDWriteFactory3 *This,
        IDWriteFontSet *fontset,
        IDWriteFontCollection1 **collection);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
        IDWriteFactory3 *This,
        BOOL include_downloadable,
        IDWriteFontCollection1 **collection,
        BOOL check_for_updates);

    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
        IDWriteFactory3 *This,
        IDWriteFontDownloadQueue **queue);

    END_INTERFACE
} IDWriteFactory3Vtbl;

interface IDWriteFactory3 {
    CONST_VTBL IDWriteFactory3Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFactory3_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFactory3_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFactory3_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFactory methods ***/
#define IDWriteFactory3_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
#define IDWriteFactory3_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
#define IDWriteFactory3_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
#define IDWriteFactory3_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
#define IDWriteFactory3_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
#define IDWriteFactory3_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
#define IDWriteFactory3_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
#define IDWriteFactory3_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
#define IDWriteFactory3_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
#define IDWriteFactory3_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
#define IDWriteFactory3_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
#define IDWriteFactory3_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
#define IDWriteFactory3_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
#define IDWriteFactory3_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
#define IDWriteFactory3_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
#define IDWriteFactory3_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
#define IDWriteFactory3_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
#define IDWriteFactory3_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
/*** IDWriteFactory1 methods ***/
#define IDWriteFactory3_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
/*** IDWriteFactory2 methods ***/
#define IDWriteFactory3_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
#define IDWriteFactory3_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
#define IDWriteFactory3_TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers) (This)->lpVtbl->TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers)
/*** IDWriteFactory3 methods ***/
#define IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
#define IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
#define IDWriteFactory3_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
#define IDWriteFactory3_CreateFontFaceReference(This,path,writetime,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference)
#define IDWriteFactory3_GetSystemFontSet(This,fontset) (This)->lpVtbl->GetSystemFontSet(This,fontset)
#define IDWriteFactory3_CreateFontSetBuilder(This,builder) (This)->lpVtbl->CreateFontSetBuilder(This,builder)
#define IDWriteFactory3_CreateFontCollectionFromFontSet(This,fontset,collection) (This)->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection)
#define IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates) (This)->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates)
#define IDWriteFactory3_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFactory3_QueryInterface(IDWriteFactory3* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFactory3_AddRef(IDWriteFactory3* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFactory3_Release(IDWriteFactory3* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFactory methods ***/
static FORCEINLINE HRESULT IDWriteFactory3_CreateCustomFontCollection(IDWriteFactory3* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
}
static FORCEINLINE HRESULT IDWriteFactory3_RegisterFontCollectionLoader(IDWriteFactory3* This,IDWriteFontCollectionLoader *loader) {
    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory3_UnregisterFontCollectionLoader(IDWriteFactory3* This,IDWriteFontCollectionLoader *loader) {
    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFileReference(IDWriteFactory3* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateCustomFontFileReference(IDWriteFactory3* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFace(IDWriteFactory3* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateRenderingParams(IDWriteFactory3* This,IDWriteRenderingParams **params) {
    return This->lpVtbl->CreateRenderingParams(This,params);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateMonitorRenderingParams(IDWriteFactory3* This,HMONITOR monitor,IDWriteRenderingParams **params) {
    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
}
static FORCEINLINE HRESULT IDWriteFactory3_RegisterFontFileLoader(IDWriteFactory3* This,IDWriteFontFileLoader *loader) {
    return This->lpVtbl->RegisterFontFileLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory3_UnregisterFontFileLoader(IDWriteFactory3* This,IDWriteFontFileLoader *loader) {
    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateTextFormat(IDWriteFactory3* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateTypography(IDWriteFactory3* This,IDWriteTypography **typography) {
    return This->lpVtbl->CreateTypography(This,typography);
}
static FORCEINLINE HRESULT IDWriteFactory3_GetGdiInterop(IDWriteFactory3* This,IDWriteGdiInterop **gdi_interop) {
    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateTextLayout(IDWriteFactory3* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateGdiCompatibleTextLayout(IDWriteFactory3* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,BOOL use_gdi_natural,IDWriteTextLayout **layout) {
    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateEllipsisTrimmingSign(IDWriteFactory3* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateTextAnalyzer(IDWriteFactory3* This,IDWriteTextAnalyzer **analyzer) {
    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateNumberSubstitution(IDWriteFactory3* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,BOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
}
/*** IDWriteFactory1 methods ***/
static FORCEINLINE HRESULT IDWriteFactory3_GetEudcFontCollection(IDWriteFactory3* This,IDWriteFontCollection **collection,BOOL check_for_updates) {
    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
}
/*** IDWriteFactory2 methods ***/
static FORCEINLINE HRESULT IDWriteFactory3_GetSystemFontFallback(IDWriteFactory3* This,IDWriteFontFallback **fallback) {
    return This->lpVtbl->GetSystemFontFallback(This,fallback);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFallbackBuilder(IDWriteFactory3* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
}
static FORCEINLINE HRESULT IDWriteFactory3_TranslateColorGlyphRun(IDWriteFactory3* This,FLOAT originX,FLOAT originY,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,DWRITE_MEASURING_MODE mode,const DWRITE_MATRIX *transform,UINT32 palette_index,IDWriteColorGlyphRunEnumerator **colorlayers) {
    return This->lpVtbl->TranslateColorGlyphRun(This,originX,originY,run,rundescr,mode,transform,palette_index,colorlayers);
}
/*** IDWriteFactory3 methods ***/
static FORCEINLINE HRESULT IDWriteFactory3_CreateGlyphRunAnalysis(IDWriteFactory3* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateCustomRenderingParams(IDWriteFactory3* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFaceReference_(IDWriteFactory3* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontFaceReference(IDWriteFactory3* This,const WCHAR *path,const FILETIME *writetime,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference);
}
static FORCEINLINE HRESULT IDWriteFactory3_GetSystemFontSet(IDWriteFactory3* This,IDWriteFontSet **fontset) {
    return This->lpVtbl->GetSystemFontSet(This,fontset);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontSetBuilder(IDWriteFactory3* This,IDWriteFontSetBuilder **builder) {
    return This->lpVtbl->CreateFontSetBuilder(This,builder);
}
static FORCEINLINE HRESULT IDWriteFactory3_CreateFontCollectionFromFontSet(IDWriteFactory3* This,IDWriteFontSet *fontset,IDWriteFontCollection1 **collection) {
    return This->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection);
}
static FORCEINLINE HRESULT IDWriteFactory3_GetSystemFontCollection(IDWriteFactory3* This,BOOL include_downloadable,IDWriteFontCollection1 **collection,BOOL check_for_updates) {
    return This->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates);
}
static FORCEINLINE HRESULT IDWriteFactory3_GetFontDownloadQueue(IDWriteFactory3* This,IDWriteFontDownloadQueue **queue) {
    return This->lpVtbl->GetFontDownloadQueue(This,queue);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFactory3_CreateGlyphRunAnalysis_Proxy(
    IDWriteFactory3* This,
    const DWRITE_GLYPH_RUN *run,
    const DWRITE_MATRIX *transform,
    DWRITE_RENDERING_MODE1 rendering_mode,
    DWRITE_MEASURING_MODE measuring_mode,
    DWRITE_GRID_FIT_MODE gridfit_mode,
    DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
    FLOAT origin_x,
    FLOAT origin_y,
    IDWriteGlyphRunAnalysis **analysis);
void __RPC_STUB IDWriteFactory3_CreateGlyphRunAnalysis_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_CreateCustomRenderingParams_Proxy(
    IDWriteFactory3* This,
    FLOAT gamma,
    FLOAT enhanced_contrast,
    FLOAT grayscale_enhanced_contrast,
    FLOAT cleartype_level,
    DWRITE_PIXEL_GEOMETRY pixel_geometry,
    DWRITE_RENDERING_MODE1 rendering_mode,
    DWRITE_GRID_FIT_MODE gridfit_mode,
    IDWriteRenderingParams3 **params);
void __RPC_STUB IDWriteFactory3_CreateCustomRenderingParams_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_CreateFontFaceReference__Proxy(
    IDWriteFactory3* This,
    IDWriteFontFile *file,
    UINT32 index,
    DWRITE_FONT_SIMULATIONS simulations,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFactory3_CreateFontFaceReference__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_CreateFontFaceReference_Proxy(
    IDWriteFactory3* This,
    const WCHAR *path,
    const FILETIME *writetime,
    UINT32 index,
    DWRITE_FONT_SIMULATIONS simulations,
    IDWriteFontFaceReference **reference);
void __RPC_STUB IDWriteFactory3_CreateFontFaceReference_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_GetSystemFontSet_Proxy(
    IDWriteFactory3* This,
    IDWriteFontSet **fontset);
void __RPC_STUB IDWriteFactory3_GetSystemFontSet_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_CreateFontSetBuilder_Proxy(
    IDWriteFactory3* This,
    IDWriteFontSetBuilder **builder);
void __RPC_STUB IDWriteFactory3_CreateFontSetBuilder_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_CreateFontCollectionFromFontSet_Proxy(
    IDWriteFactory3* This,
    IDWriteFontSet *fontset,
    IDWriteFontCollection1 **collection);
void __RPC_STUB IDWriteFactory3_CreateFontCollectionFromFontSet_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_GetSystemFontCollection_Proxy(
    IDWriteFactory3* This,
    BOOL include_downloadable,
    IDWriteFontCollection1 **collection,
    BOOL check_for_updates);
void __RPC_STUB IDWriteFactory3_GetSystemFontCollection_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory3_GetFontDownloadQueue_Proxy(
    IDWriteFactory3* This,
    IDWriteFontDownloadQueue **queue);
void __RPC_STUB IDWriteFactory3_GetFontDownloadQueue_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFactory3_INTERFACE_DEFINED__ */

typedef enum DWRITE_GLYPH_IMAGE_FORMATS {
    DWRITE_GLYPH_IMAGE_FORMATS_NONE = 0,
    DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE = 1 << 0,
    DWRITE_GLYPH_IMAGE_FORMATS_CFF = 1 << 1,
    DWRITE_GLYPH_IMAGE_FORMATS_COLR = 1 << 2,
    DWRITE_GLYPH_IMAGE_FORMATS_SVG = 1 << 3,
    DWRITE_GLYPH_IMAGE_FORMATS_PNG = 1 << 4,
    DWRITE_GLYPH_IMAGE_FORMATS_JPEG = 1 << 5,
    DWRITE_GLYPH_IMAGE_FORMATS_TIFF = 1 << 6,
    DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = 1 << 7
} DWRITE_GLYPH_IMAGE_FORMATS;
typedef struct DWRITE_GLYPH_IMAGE_DATA {
    const void *imageData;
    UINT32 imageDataSize;
    UINT32 uniqueDataId;
    UINT32 pixelsPerEm;
    D2D1_SIZE_U pixelSize;
    D2D1_POINT_2L horizontalLeftOrigin;
    D2D1_POINT_2L horizontalRightOrigin;
    D2D1_POINT_2L verticalTopOrigin;
    D2D1_POINT_2L verticalBottomOrigin;
} DWRITE_GLYPH_IMAGE_DATA;
/*****************************************************************************
 * IDWriteFontFace4 interface
 */
#ifndef __IDWriteFontFace4_INTERFACE_DEFINED__
#define __IDWriteFontFace4_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFontFace4, 0x27f2a904, 0x4eb8, 0x441d, 0x96,0x78, 0x05,0x63,0xf5,0x3e,0x3e,0x2f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("27f2a904-4eb8-441d-9678-0563f53e3e2f")
IDWriteFontFace4 : public IDWriteFontFace3
{
    virtual HRESULT STDMETHODCALLTYPE GetGlyphImageFormats_(
        UINT16 glyph,
        UINT32 ppem_first,
        UINT32 ppem_last,
        DWRITE_GLYPH_IMAGE_FORMATS *formats) = 0;

    virtual DWRITE_GLYPH_IMAGE_FORMATS STDMETHODCALLTYPE GetGlyphImageFormats(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGlyphImageData(
        UINT16 glyph,
        UINT32 ppem,
        DWRITE_GLYPH_IMAGE_FORMATS format,
        DWRITE_GLYPH_IMAGE_DATA *data,
        void **context) = 0;

    virtual void STDMETHODCALLTYPE ReleaseGlyphImageData(
        void *context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFontFace4, 0x27f2a904, 0x4eb8, 0x441d, 0x96,0x78, 0x05,0x63,0xf5,0x3e,0x3e,0x2f)
#endif
#else
typedef struct IDWriteFontFace4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFontFace4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFontFace4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFontFace4 *This);

    /*** IDWriteFontFace methods ***/
    DWRITE_FONT_FACE_TYPE (STDMETHODCALLTYPE *GetType)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *GetFiles)(
        IDWriteFontFace4 *This,
        UINT32 *number_of_files,
        IDWriteFontFile **fontfiles);

    UINT32 (STDMETHODCALLTYPE *GetIndex)(
        IDWriteFontFace4 *This);

    DWRITE_FONT_SIMULATIONS (STDMETHODCALLTYPE *GetSimulations)(
        IDWriteFontFace4 *This);

    BOOL (STDMETHODCALLTYPE *IsSymbolFont)(
        IDWriteFontFace4 *This);

    void (STDMETHODCALLTYPE *GetMetrics)(
        IDWriteFontFace4 *This,
        DWRITE_FONT_METRICS *metrics);

    UINT16 (STDMETHODCALLTYPE *GetGlyphCount)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphMetrics)(
        IDWriteFontFace4 *This,
        const UINT16 *glyph_indices,
        UINT32 glyph_count,
        DWRITE_GLYPH_METRICS *metrics,
        BOOL is_sideways);

    HRESULT (STDMETHODCALLTYPE *GetGlyphIndices)(
        IDWriteFontFace4 *This,
        const UINT32 *codepoints,
        UINT32 count,
        UINT16 *glyph_indices);

    HRESULT (STDMETHODCALLTYPE *TryGetFontTable)(
        IDWriteFontFace4 *This,
        UINT32 table_tag,
        const void **table_data,
        UINT32 *table_size,
        void **context,
        BOOL *exists);

    void (STDMETHODCALLTYPE *ReleaseFontTable)(
        IDWriteFontFace4 *This,
        void *table_context);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunOutline)(
        IDWriteFontFace4 *This,
        FLOAT emSize,
        const UINT16 *glyph_indices,
        const FLOAT *glyph_advances,
        const DWRITE_GLYPH_OFFSET *glyph_offsets,
        UINT32 glyph_count,
        BOOL is_sideways,
        BOOL is_rtl,
        IDWriteGeometrySink *geometrysink);

    HRESULT (STDMETHODCALLTYPE *GetRecommendedRenderingMode)(
        IDWriteFontFace4 *This,
        FLOAT emSize,
        FLOAT pixels_per_dip,
        DWRITE_MEASURING_MODE mode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE *rendering_mode);

    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleMetrics)(
        IDWriteFontFace4 *This,
        FLOAT emSize,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        DWRITE_FONT_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphMetrics)(
        IDWriteFontFace4 *This,
        FLOAT emSize,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        BOOL use_gdi_natural,
        const UINT16 *glyph_indices,
        UINT32 glyph_count,
        DWRITE_GLYPH_METRICS *metrics,
        BOOL is_sideways);

    /*** IDWriteFontFace1 methods ***/
    void (STDMETHODCALLTYPE *IDWriteFontFace1_GetMetrics)(
        IDWriteFontFace4 *This,
        DWRITE_FONT_METRICS1 *metrics);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetGdiCompatibleMetrics)(
        IDWriteFontFace4 *This,
        FLOAT em_size,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        DWRITE_FONT_METRICS1 *metrics);

    void (STDMETHODCALLTYPE *GetCaretMetrics)(
        IDWriteFontFace4 *This,
        DWRITE_CARET_METRICS *metrics);

    HRESULT (STDMETHODCALLTYPE *GetUnicodeRanges)(
        IDWriteFontFace4 *This,
        UINT32 max_count,
        DWRITE_UNICODE_RANGE *ranges,
        UINT32 *count);

    BOOL (STDMETHODCALLTYPE *IsMonospacedFont)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *GetDesignGlyphAdvances)(
        IDWriteFontFace4 *This,
        UINT32 glyph_count,
        const UINT16 *indices,
        INT32 *advances,
        BOOL is_sideways);

    HRESULT (STDMETHODCALLTYPE *GetGdiCompatibleGlyphAdvances)(
        IDWriteFontFace4 *This,
        FLOAT em_size,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        BOOL use_gdi_natural,
        BOOL is_sideways,
        UINT32 glyph_count,
        const UINT16 *indices,
        INT32 *advances);

    HRESULT (STDMETHODCALLTYPE *GetKerningPairAdjustments)(
        IDWriteFontFace4 *This,
        UINT32 glyph_count,
        const UINT16 *indices,
        INT32 *adjustments);

    BOOL (STDMETHODCALLTYPE *HasKerningPairs)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace1_GetRecommendedRenderingMode)(
        IDWriteFontFace4 *This,
        FLOAT font_emsize,
        FLOAT dpiX,
        FLOAT dpiY,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuring_mode,
        DWRITE_RENDERING_MODE *rendering_mode);

    HRESULT (STDMETHODCALLTYPE *GetVerticalGlyphVariants)(
        IDWriteFontFace4 *This,
        UINT32 glyph_count,
        const UINT16 *nominal_indices,
        UINT16 *vertical_indices);

    BOOL (STDMETHODCALLTYPE *HasVerticalGlyphVariants)(
        IDWriteFontFace4 *This);

    /*** IDWriteFontFace2 methods ***/
    BOOL (STDMETHODCALLTYPE *IsColorFont)(
        IDWriteFontFace4 *This);

    UINT32 (STDMETHODCALLTYPE *GetColorPaletteCount)(
        IDWriteFontFace4 *This);

    UINT32 (STDMETHODCALLTYPE *GetPaletteEntryCount)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *GetPaletteEntries)(
        IDWriteFontFace4 *This,
        UINT32 palette_index,
        UINT32 first_entry_index,
        UINT32 entry_count,
        DWRITE_COLOR_F *entries);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace2_GetRecommendedRenderingMode)(
        IDWriteFontFace4 *This,
        FLOAT fontEmSize,
        FLOAT dpiX,
        FLOAT dpiY,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuringmode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE *renderingmode,
        DWRITE_GRID_FIT_MODE *gridfitmode);

    /*** IDWriteFontFace3 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetFontFaceReference)(
        IDWriteFontFace4 *This,
        IDWriteFontFaceReference **reference);

    void (STDMETHODCALLTYPE *GetPanose)(
        IDWriteFontFace4 *This,
        DWRITE_PANOSE *panose);

    DWRITE_FONT_WEIGHT (STDMETHODCALLTYPE *GetWeight)(
        IDWriteFontFace4 *This);

    DWRITE_FONT_STRETCH (STDMETHODCALLTYPE *GetStretch)(
        IDWriteFontFace4 *This);

    DWRITE_FONT_STYLE (STDMETHODCALLTYPE *GetStyle)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *GetFamilyNames)(
        IDWriteFontFace4 *This,
        IDWriteLocalizedStrings **names);

    HRESULT (STDMETHODCALLTYPE *GetFaceNames)(
        IDWriteFontFace4 *This,
        IDWriteLocalizedStrings **names);

    HRESULT (STDMETHODCALLTYPE *GetInformationalStrings)(
        IDWriteFontFace4 *This,
        DWRITE_INFORMATIONAL_STRING_ID stringid,
        IDWriteLocalizedStrings **strings,
        BOOL *exists);

    BOOL (STDMETHODCALLTYPE *HasCharacter)(
        IDWriteFontFace4 *This,
        UINT32 character);

    HRESULT (STDMETHODCALLTYPE *IDWriteFontFace3_GetRecommendedRenderingMode)(
        IDWriteFontFace4 *This,
        FLOAT emsize,
        FLOAT dpi_x,
        FLOAT dpi_y,
        const DWRITE_MATRIX *transform,
        BOOL is_sideways,
        DWRITE_OUTLINE_THRESHOLD threshold,
        DWRITE_MEASURING_MODE measuring_mode,
        IDWriteRenderingParams *params,
        DWRITE_RENDERING_MODE1 *rendering_mode,
        DWRITE_GRID_FIT_MODE *gridfit_mode);

    BOOL (STDMETHODCALLTYPE *IsCharacterLocal)(
        IDWriteFontFace4 *This,
        UINT32 character);

    BOOL (STDMETHODCALLTYPE *IsGlyphLocal)(
        IDWriteFontFace4 *This,
        UINT16 glyph);

    HRESULT (STDMETHODCALLTYPE *AreCharactersLocal)(
        IDWriteFontFace4 *This,
        const WCHAR *characters,
        UINT32 count,
        BOOL enqueue_if_not,
        BOOL *are_local);

    HRESULT (STDMETHODCALLTYPE *AreGlyphsLocal)(
        IDWriteFontFace4 *This,
        const UINT16 *glyphs,
        UINT32 count,
        BOOL enqueue_if_not,
        BOOL *are_local);

    /*** IDWriteFontFace4 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetGlyphImageFormats_)(
        IDWriteFontFace4 *This,
        UINT16 glyph,
        UINT32 ppem_first,
        UINT32 ppem_last,
        DWRITE_GLYPH_IMAGE_FORMATS *formats);

    DWRITE_GLYPH_IMAGE_FORMATS (STDMETHODCALLTYPE *GetGlyphImageFormats)(
        IDWriteFontFace4 *This);

    HRESULT (STDMETHODCALLTYPE *GetGlyphImageData)(
        IDWriteFontFace4 *This,
        UINT16 glyph,
        UINT32 ppem,
        DWRITE_GLYPH_IMAGE_FORMATS format,
        DWRITE_GLYPH_IMAGE_DATA *data,
        void **context);

    void (STDMETHODCALLTYPE *ReleaseGlyphImageData)(
        IDWriteFontFace4 *This,
        void *context);

    END_INTERFACE
} IDWriteFontFace4Vtbl;

interface IDWriteFontFace4 {
    CONST_VTBL IDWriteFontFace4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFontFace4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFontFace4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFontFace4_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFontFace methods ***/
#define IDWriteFontFace4_GetType(This) (This)->lpVtbl->GetType(This)
#define IDWriteFontFace4_GetFiles(This,number_of_files,fontfiles) (This)->lpVtbl->GetFiles(This,number_of_files,fontfiles)
#define IDWriteFontFace4_GetIndex(This) (This)->lpVtbl->GetIndex(This)
#define IDWriteFontFace4_GetSimulations(This) (This)->lpVtbl->GetSimulations(This)
#define IDWriteFontFace4_IsSymbolFont(This) (This)->lpVtbl->IsSymbolFont(This)
#define IDWriteFontFace4_GetGlyphCount(This) (This)->lpVtbl->GetGlyphCount(This)
#define IDWriteFontFace4_GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways)
#define IDWriteFontFace4_GetGlyphIndices(This,codepoints,count,glyph_indices) (This)->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices)
#define IDWriteFontFace4_TryGetFontTable(This,table_tag,table_data,table_size,context,exists) (This)->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists)
#define IDWriteFontFace4_ReleaseFontTable(This,table_context) (This)->lpVtbl->ReleaseFontTable(This,table_context)
#define IDWriteFontFace4_GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink) (This)->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink)
#define IDWriteFontFace4_GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways) (This)->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways)
/*** IDWriteFontFace1 methods ***/
#define IDWriteFontFace4_GetMetrics(This,metrics) (This)->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics)
#define IDWriteFontFace4_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics) (This)->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics)
#define IDWriteFontFace4_GetCaretMetrics(This,metrics) (This)->lpVtbl->GetCaretMetrics(This,metrics)
#define IDWriteFontFace4_GetUnicodeRanges(This,max_count,ranges,count) (This)->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count)
#define IDWriteFontFace4_IsMonospacedFont(This) (This)->lpVtbl->IsMonospacedFont(This)
#define IDWriteFontFace4_GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways) (This)->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways)
#define IDWriteFontFace4_GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances) (This)->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances)
#define IDWriteFontFace4_GetKerningPairAdjustments(This,glyph_count,indices,adjustments) (This)->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments)
#define IDWriteFontFace4_HasKerningPairs(This) (This)->lpVtbl->HasKerningPairs(This)
#define IDWriteFontFace4_GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices) (This)->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices)
#define IDWriteFontFace4_HasVerticalGlyphVariants(This) (This)->lpVtbl->HasVerticalGlyphVariants(This)
/*** IDWriteFontFace2 methods ***/
#define IDWriteFontFace4_IsColorFont(This) (This)->lpVtbl->IsColorFont(This)
#define IDWriteFontFace4_GetColorPaletteCount(This) (This)->lpVtbl->GetColorPaletteCount(This)
#define IDWriteFontFace4_GetPaletteEntryCount(This) (This)->lpVtbl->GetPaletteEntryCount(This)
#define IDWriteFontFace4_GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries) (This)->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries)
/*** IDWriteFontFace3 methods ***/
#define IDWriteFontFace4_GetFontFaceReference(This,reference) (This)->lpVtbl->GetFontFaceReference(This,reference)
#define IDWriteFontFace4_GetPanose(This,panose) (This)->lpVtbl->GetPanose(This,panose)
#define IDWriteFontFace4_GetWeight(This) (This)->lpVtbl->GetWeight(This)
#define IDWriteFontFace4_GetStretch(This) (This)->lpVtbl->GetStretch(This)
#define IDWriteFontFace4_GetStyle(This) (This)->lpVtbl->GetStyle(This)
#define IDWriteFontFace4_GetFamilyNames(This,names) (This)->lpVtbl->GetFamilyNames(This,names)
#define IDWriteFontFace4_GetFaceNames(This,names) (This)->lpVtbl->GetFaceNames(This,names)
#define IDWriteFontFace4_GetInformationalStrings(This,stringid,strings,exists) (This)->lpVtbl->GetInformationalStrings(This,stringid,strings,exists)
#define IDWriteFontFace4_HasCharacter(This,character) (This)->lpVtbl->HasCharacter(This,character)
#define IDWriteFontFace4_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode) (This)->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode)
#define IDWriteFontFace4_IsCharacterLocal(This,character) (This)->lpVtbl->IsCharacterLocal(This,character)
#define IDWriteFontFace4_IsGlyphLocal(This,glyph) (This)->lpVtbl->IsGlyphLocal(This,glyph)
#define IDWriteFontFace4_AreCharactersLocal(This,characters,count,enqueue_if_not,are_local) (This)->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local)
#define IDWriteFontFace4_AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local) (This)->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local)
/*** IDWriteFontFace4 methods ***/
#define IDWriteFontFace4_GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats) (This)->lpVtbl->GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats)
#define IDWriteFontFace4_GetGlyphImageFormats(This) (This)->lpVtbl->GetGlyphImageFormats(This)
#define IDWriteFontFace4_GetGlyphImageData(This,glyph,ppem,format,data,context) (This)->lpVtbl->GetGlyphImageData(This,glyph,ppem,format,data,context)
#define IDWriteFontFace4_ReleaseGlyphImageData(This,context) (This)->lpVtbl->ReleaseGlyphImageData(This,context)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFontFace4_QueryInterface(IDWriteFontFace4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFontFace4_AddRef(IDWriteFontFace4* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFontFace4_Release(IDWriteFontFace4* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFontFace methods ***/
static FORCEINLINE DWRITE_FONT_FACE_TYPE IDWriteFontFace4_GetType(IDWriteFontFace4* This) {
    return This->lpVtbl->GetType(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetFiles(IDWriteFontFace4* This,UINT32 *number_of_files,IDWriteFontFile **fontfiles) {
    return This->lpVtbl->GetFiles(This,number_of_files,fontfiles);
}
static FORCEINLINE UINT32 IDWriteFontFace4_GetIndex(IDWriteFontFace4* This) {
    return This->lpVtbl->GetIndex(This);
}
static FORCEINLINE DWRITE_FONT_SIMULATIONS IDWriteFontFace4_GetSimulations(IDWriteFontFace4* This) {
    return This->lpVtbl->GetSimulations(This);
}
static FORCEINLINE BOOL IDWriteFontFace4_IsSymbolFont(IDWriteFontFace4* This) {
    return This->lpVtbl->IsSymbolFont(This);
}
static FORCEINLINE UINT16 IDWriteFontFace4_GetGlyphCount(IDWriteFontFace4* This) {
    return This->lpVtbl->GetGlyphCount(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetDesignGlyphMetrics(IDWriteFontFace4* This,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,BOOL is_sideways) {
    return This->lpVtbl->GetDesignGlyphMetrics(This,glyph_indices,glyph_count,metrics,is_sideways);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphIndices(IDWriteFontFace4* This,const UINT32 *codepoints,UINT32 count,UINT16 *glyph_indices) {
    return This->lpVtbl->GetGlyphIndices(This,codepoints,count,glyph_indices);
}
static FORCEINLINE HRESULT IDWriteFontFace4_TryGetFontTable(IDWriteFontFace4* This,UINT32 table_tag,const void **table_data,UINT32 *table_size,void **context,BOOL *exists) {
    return This->lpVtbl->TryGetFontTable(This,table_tag,table_data,table_size,context,exists);
}
static FORCEINLINE void IDWriteFontFace4_ReleaseFontTable(IDWriteFontFace4* This,void *table_context) {
    This->lpVtbl->ReleaseFontTable(This,table_context);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphRunOutline(IDWriteFontFace4* This,FLOAT emSize,const UINT16 *glyph_indices,const FLOAT *glyph_advances,const DWRITE_GLYPH_OFFSET *glyph_offsets,UINT32 glyph_count,BOOL is_sideways,BOOL is_rtl,IDWriteGeometrySink *geometrysink) {
    return This->lpVtbl->GetGlyphRunOutline(This,emSize,glyph_indices,glyph_advances,glyph_offsets,glyph_count,is_sideways,is_rtl,geometrysink);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetGdiCompatibleGlyphMetrics(IDWriteFontFace4* This,FLOAT emSize,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,BOOL use_gdi_natural,const UINT16 *glyph_indices,UINT32 glyph_count,DWRITE_GLYPH_METRICS *metrics,BOOL is_sideways) {
    return This->lpVtbl->GetGdiCompatibleGlyphMetrics(This,emSize,pixels_per_dip,transform,use_gdi_natural,glyph_indices,glyph_count,metrics,is_sideways);
}
/*** IDWriteFontFace1 methods ***/
static FORCEINLINE void IDWriteFontFace4_GetMetrics(IDWriteFontFace4* This,DWRITE_FONT_METRICS1 *metrics) {
    This->lpVtbl->IDWriteFontFace1_GetMetrics(This,metrics);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetGdiCompatibleMetrics(IDWriteFontFace4* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,DWRITE_FONT_METRICS1 *metrics) {
    return This->lpVtbl->IDWriteFontFace1_GetGdiCompatibleMetrics(This,em_size,pixels_per_dip,transform,metrics);
}
static FORCEINLINE void IDWriteFontFace4_GetCaretMetrics(IDWriteFontFace4* This,DWRITE_CARET_METRICS *metrics) {
    This->lpVtbl->GetCaretMetrics(This,metrics);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetUnicodeRanges(IDWriteFontFace4* This,UINT32 max_count,DWRITE_UNICODE_RANGE *ranges,UINT32 *count) {
    return This->lpVtbl->GetUnicodeRanges(This,max_count,ranges,count);
}
static FORCEINLINE BOOL IDWriteFontFace4_IsMonospacedFont(IDWriteFontFace4* This) {
    return This->lpVtbl->IsMonospacedFont(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetDesignGlyphAdvances(IDWriteFontFace4* This,UINT32 glyph_count,const UINT16 *indices,INT32 *advances,BOOL is_sideways) {
    return This->lpVtbl->GetDesignGlyphAdvances(This,glyph_count,indices,advances,is_sideways);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetGdiCompatibleGlyphAdvances(IDWriteFontFace4* This,FLOAT em_size,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,BOOL use_gdi_natural,BOOL is_sideways,UINT32 glyph_count,const UINT16 *indices,INT32 *advances) {
    return This->lpVtbl->GetGdiCompatibleGlyphAdvances(This,em_size,pixels_per_dip,transform,use_gdi_natural,is_sideways,glyph_count,indices,advances);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetKerningPairAdjustments(IDWriteFontFace4* This,UINT32 glyph_count,const UINT16 *indices,INT32 *adjustments) {
    return This->lpVtbl->GetKerningPairAdjustments(This,glyph_count,indices,adjustments);
}
static FORCEINLINE BOOL IDWriteFontFace4_HasKerningPairs(IDWriteFontFace4* This) {
    return This->lpVtbl->HasKerningPairs(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetVerticalGlyphVariants(IDWriteFontFace4* This,UINT32 glyph_count,const UINT16 *nominal_indices,UINT16 *vertical_indices) {
    return This->lpVtbl->GetVerticalGlyphVariants(This,glyph_count,nominal_indices,vertical_indices);
}
static FORCEINLINE BOOL IDWriteFontFace4_HasVerticalGlyphVariants(IDWriteFontFace4* This) {
    return This->lpVtbl->HasVerticalGlyphVariants(This);
}
/*** IDWriteFontFace2 methods ***/
static FORCEINLINE BOOL IDWriteFontFace4_IsColorFont(IDWriteFontFace4* This) {
    return This->lpVtbl->IsColorFont(This);
}
static FORCEINLINE UINT32 IDWriteFontFace4_GetColorPaletteCount(IDWriteFontFace4* This) {
    return This->lpVtbl->GetColorPaletteCount(This);
}
static FORCEINLINE UINT32 IDWriteFontFace4_GetPaletteEntryCount(IDWriteFontFace4* This) {
    return This->lpVtbl->GetPaletteEntryCount(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetPaletteEntries(IDWriteFontFace4* This,UINT32 palette_index,UINT32 first_entry_index,UINT32 entry_count,DWRITE_COLOR_F *entries) {
    return This->lpVtbl->GetPaletteEntries(This,palette_index,first_entry_index,entry_count,entries);
}
/*** IDWriteFontFace3 methods ***/
static FORCEINLINE HRESULT IDWriteFontFace4_GetFontFaceReference(IDWriteFontFace4* This,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->GetFontFaceReference(This,reference);
}
static FORCEINLINE void IDWriteFontFace4_GetPanose(IDWriteFontFace4* This,DWRITE_PANOSE *panose) {
    This->lpVtbl->GetPanose(This,panose);
}
static FORCEINLINE DWRITE_FONT_WEIGHT IDWriteFontFace4_GetWeight(IDWriteFontFace4* This) {
    return This->lpVtbl->GetWeight(This);
}
static FORCEINLINE DWRITE_FONT_STRETCH IDWriteFontFace4_GetStretch(IDWriteFontFace4* This) {
    return This->lpVtbl->GetStretch(This);
}
static FORCEINLINE DWRITE_FONT_STYLE IDWriteFontFace4_GetStyle(IDWriteFontFace4* This) {
    return This->lpVtbl->GetStyle(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetFamilyNames(IDWriteFontFace4* This,IDWriteLocalizedStrings **names) {
    return This->lpVtbl->GetFamilyNames(This,names);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetFaceNames(IDWriteFontFace4* This,IDWriteLocalizedStrings **names) {
    return This->lpVtbl->GetFaceNames(This,names);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetInformationalStrings(IDWriteFontFace4* This,DWRITE_INFORMATIONAL_STRING_ID stringid,IDWriteLocalizedStrings **strings,BOOL *exists) {
    return This->lpVtbl->GetInformationalStrings(This,stringid,strings,exists);
}
static FORCEINLINE BOOL IDWriteFontFace4_HasCharacter(IDWriteFontFace4* This,UINT32 character) {
    return This->lpVtbl->HasCharacter(This,character);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetRecommendedRenderingMode(IDWriteFontFace4* This,FLOAT emsize,FLOAT dpi_x,FLOAT dpi_y,const DWRITE_MATRIX *transform,BOOL is_sideways,DWRITE_OUTLINE_THRESHOLD threshold,DWRITE_MEASURING_MODE measuring_mode,IDWriteRenderingParams *params,DWRITE_RENDERING_MODE1 *rendering_mode,DWRITE_GRID_FIT_MODE *gridfit_mode) {
    return This->lpVtbl->IDWriteFontFace3_GetRecommendedRenderingMode(This,emsize,dpi_x,dpi_y,transform,is_sideways,threshold,measuring_mode,params,rendering_mode,gridfit_mode);
}
static FORCEINLINE BOOL IDWriteFontFace4_IsCharacterLocal(IDWriteFontFace4* This,UINT32 character) {
    return This->lpVtbl->IsCharacterLocal(This,character);
}
static FORCEINLINE BOOL IDWriteFontFace4_IsGlyphLocal(IDWriteFontFace4* This,UINT16 glyph) {
    return This->lpVtbl->IsGlyphLocal(This,glyph);
}
static FORCEINLINE HRESULT IDWriteFontFace4_AreCharactersLocal(IDWriteFontFace4* This,const WCHAR *characters,UINT32 count,BOOL enqueue_if_not,BOOL *are_local) {
    return This->lpVtbl->AreCharactersLocal(This,characters,count,enqueue_if_not,are_local);
}
static FORCEINLINE HRESULT IDWriteFontFace4_AreGlyphsLocal(IDWriteFontFace4* This,const UINT16 *glyphs,UINT32 count,BOOL enqueue_if_not,BOOL *are_local) {
    return This->lpVtbl->AreGlyphsLocal(This,glyphs,count,enqueue_if_not,are_local);
}
/*** IDWriteFontFace4 methods ***/
static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphImageFormats_(IDWriteFontFace4* This,UINT16 glyph,UINT32 ppem_first,UINT32 ppem_last,DWRITE_GLYPH_IMAGE_FORMATS *formats) {
    return This->lpVtbl->GetGlyphImageFormats_(This,glyph,ppem_first,ppem_last,formats);
}
static FORCEINLINE DWRITE_GLYPH_IMAGE_FORMATS IDWriteFontFace4_GetGlyphImageFormats(IDWriteFontFace4* This) {
    return This->lpVtbl->GetGlyphImageFormats(This);
}
static FORCEINLINE HRESULT IDWriteFontFace4_GetGlyphImageData(IDWriteFontFace4* This,UINT16 glyph,UINT32 ppem,DWRITE_GLYPH_IMAGE_FORMATS format,DWRITE_GLYPH_IMAGE_DATA *data,void **context) {
    return This->lpVtbl->GetGlyphImageData(This,glyph,ppem,format,data,context);
}
static FORCEINLINE void IDWriteFontFace4_ReleaseGlyphImageData(IDWriteFontFace4* This,void *context) {
    This->lpVtbl->ReleaseGlyphImageData(This,context);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFontFace4_GetGlyphImageFormats__Proxy(
    IDWriteFontFace4* This,
    UINT16 glyph,
    UINT32 ppem_first,
    UINT32 ppem_last,
    DWRITE_GLYPH_IMAGE_FORMATS *formats);
void __RPC_STUB IDWriteFontFace4_GetGlyphImageFormats__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
DWRITE_GLYPH_IMAGE_FORMATS STDMETHODCALLTYPE IDWriteFontFace4_GetGlyphImageFormats_Proxy(
    IDWriteFontFace4* This);
void __RPC_STUB IDWriteFontFace4_GetGlyphImageFormats_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFontFace4_GetGlyphImageData_Proxy(
    IDWriteFontFace4* This,
    UINT16 glyph,
    UINT32 ppem,
    DWRITE_GLYPH_IMAGE_FORMATS format,
    DWRITE_GLYPH_IMAGE_DATA *data,
    void **context);
void __RPC_STUB IDWriteFontFace4_GetGlyphImageData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
void STDMETHODCALLTYPE IDWriteFontFace4_ReleaseGlyphImageData_Proxy(
    IDWriteFontFace4* This,
    void *context);
void __RPC_STUB IDWriteFontFace4_ReleaseGlyphImageData_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFontFace4_INTERFACE_DEFINED__ */

typedef struct DWRITE_COLOR_GLYPH_RUN1 {
    DWRITE_GLYPH_RUN glyphRun;
    DWRITE_GLYPH_RUN_DESCRIPTION *glyphRunDescription;
    FLOAT baselineOriginX;
    FLOAT baselineOriginY;
    DWRITE_COLOR_F runColor;
    UINT16 paletteIndex;
    DWRITE_GLYPH_IMAGE_FORMATS glyphImageFormat;
    DWRITE_MEASURING_MODE measuringMode;
} DWRITE_COLOR_GLYPH_RUN1;
/*****************************************************************************
 * IDWriteColorGlyphRunEnumerator1 interface
 */
#ifndef __IDWriteColorGlyphRunEnumerator1_INTERFACE_DEFINED__
#define __IDWriteColorGlyphRunEnumerator1_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteColorGlyphRunEnumerator1, 0x7c5f86da, 0xc7a1, 0x4f05, 0xb8,0xe1, 0x55,0xa1,0x79,0xfe,0x5a,0x35);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("7c5f86da-c7a1-4f05-b8e1-55a179fe5a35")
IDWriteColorGlyphRunEnumerator1 : public IDWriteColorGlyphRunEnumerator
{
    virtual HRESULT STDMETHODCALLTYPE GetCurrentRun(
        const DWRITE_COLOR_GLYPH_RUN1 **run) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteColorGlyphRunEnumerator1, 0x7c5f86da, 0xc7a1, 0x4f05, 0xb8,0xe1, 0x55,0xa1,0x79,0xfe,0x5a,0x35)
#endif
#else
typedef struct IDWriteColorGlyphRunEnumerator1Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteColorGlyphRunEnumerator1 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteColorGlyphRunEnumerator1 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteColorGlyphRunEnumerator1 *This);

    /*** IDWriteColorGlyphRunEnumerator methods ***/
    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        IDWriteColorGlyphRunEnumerator1 *This,
        BOOL *hasRun);

    HRESULT (STDMETHODCALLTYPE *GetCurrentRun)(
        IDWriteColorGlyphRunEnumerator1 *This,
        const DWRITE_COLOR_GLYPH_RUN **run);

    /*** IDWriteColorGlyphRunEnumerator1 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteColorGlyphRunEnumerator1_GetCurrentRun)(
        IDWriteColorGlyphRunEnumerator1 *This,
        const DWRITE_COLOR_GLYPH_RUN1 **run);

    END_INTERFACE
} IDWriteColorGlyphRunEnumerator1Vtbl;

interface IDWriteColorGlyphRunEnumerator1 {
    CONST_VTBL IDWriteColorGlyphRunEnumerator1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteColorGlyphRunEnumerator1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteColorGlyphRunEnumerator1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteColorGlyphRunEnumerator1_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteColorGlyphRunEnumerator methods ***/
#define IDWriteColorGlyphRunEnumerator1_MoveNext(This,hasRun) (This)->lpVtbl->MoveNext(This,hasRun)
/*** IDWriteColorGlyphRunEnumerator1 methods ***/
#define IDWriteColorGlyphRunEnumerator1_GetCurrentRun(This,run) (This)->lpVtbl->IDWriteColorGlyphRunEnumerator1_GetCurrentRun(This,run)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator1_QueryInterface(IDWriteColorGlyphRunEnumerator1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteColorGlyphRunEnumerator1_AddRef(IDWriteColorGlyphRunEnumerator1* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteColorGlyphRunEnumerator1_Release(IDWriteColorGlyphRunEnumerator1* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteColorGlyphRunEnumerator methods ***/
static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator1_MoveNext(IDWriteColorGlyphRunEnumerator1* This,BOOL *hasRun) {
    return This->lpVtbl->MoveNext(This,hasRun);
}
/*** IDWriteColorGlyphRunEnumerator1 methods ***/
static FORCEINLINE HRESULT IDWriteColorGlyphRunEnumerator1_GetCurrentRun(IDWriteColorGlyphRunEnumerator1* This,const DWRITE_COLOR_GLYPH_RUN1 **run) {
    return This->lpVtbl->IDWriteColorGlyphRunEnumerator1_GetCurrentRun(This,run);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteColorGlyphRunEnumerator1_GetCurrentRun_Proxy(
    IDWriteColorGlyphRunEnumerator1* This,
    const DWRITE_COLOR_GLYPH_RUN1 **run);
void __RPC_STUB IDWriteColorGlyphRunEnumerator1_GetCurrentRun_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteColorGlyphRunEnumerator1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * IDWriteFactory4 interface
 */
#ifndef __IDWriteFactory4_INTERFACE_DEFINED__
#define __IDWriteFactory4_INTERFACE_DEFINED__

DEFINE_GUID(IID_IDWriteFactory4, 0x4b0b5bd3, 0x0797, 0x4549, 0x8a,0xc5, 0xfe,0x91,0x5c,0xc5,0x38,0x56);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("4b0b5bd3-0797-4549-8ac5-fe915cc53856")
IDWriteFactory4 : public IDWriteFactory3
{
    virtual HRESULT STDMETHODCALLTYPE TranslateColorGlyphRun(
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
        DWRITE_MEASURING_MODE measuring_mode,
        const DWRITE_MATRIX *transform,
        UINT32 palette,
        IDWriteColorGlyphRunEnumerator1 **layers) = 0;

    virtual HRESULT STDMETHODCALLTYPE ComputeGlyphOrigins_(
        const DWRITE_GLYPH_RUN *run,
        D2D1_POINT_2F baseline_origin,
        D2D1_POINT_2F *origins) = 0;

    virtual HRESULT STDMETHODCALLTYPE ComputeGlyphOrigins(
        const DWRITE_GLYPH_RUN *run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_MATRIX *transform,
        D2D1_POINT_2F *origins) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(IDWriteFactory4, 0x4b0b5bd3, 0x0797, 0x4549, 0x8a,0xc5, 0xfe,0x91,0x5c,0xc5,0x38,0x56)
#endif
#else
typedef struct IDWriteFactory4Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        IDWriteFactory4 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        IDWriteFactory4 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        IDWriteFactory4 *This);

    /*** IDWriteFactory methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSystemFontCollection)(
        IDWriteFactory4 *This,
        IDWriteFontCollection **collection,
        BOOL check_for_updates);

    HRESULT (STDMETHODCALLTYPE *CreateCustomFontCollection)(
        IDWriteFactory4 *This,
        IDWriteFontCollectionLoader *loader,
        const void *key,
        UINT32 key_size,
        IDWriteFontCollection **collection);

    HRESULT (STDMETHODCALLTYPE *RegisterFontCollectionLoader)(
        IDWriteFactory4 *This,
        IDWriteFontCollectionLoader *loader);

    HRESULT (STDMETHODCALLTYPE *UnregisterFontCollectionLoader)(
        IDWriteFactory4 *This,
        IDWriteFontCollectionLoader *loader);

    HRESULT (STDMETHODCALLTYPE *CreateFontFileReference)(
        IDWriteFactory4 *This,
        const WCHAR *path,
        const FILETIME *writetime,
        IDWriteFontFile **font_file);

    HRESULT (STDMETHODCALLTYPE *CreateCustomFontFileReference)(
        IDWriteFactory4 *This,
        const void *reference_key,
        UINT32 key_size,
        IDWriteFontFileLoader *loader,
        IDWriteFontFile **font_file);

    HRESULT (STDMETHODCALLTYPE *CreateFontFace)(
        IDWriteFactory4 *This,
        DWRITE_FONT_FACE_TYPE facetype,
        UINT32 files_number,
        IDWriteFontFile *const *font_files,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS sim_flags,
        IDWriteFontFace **font_face);

    HRESULT (STDMETHODCALLTYPE *CreateRenderingParams)(
        IDWriteFactory4 *This,
        IDWriteRenderingParams **params);

    HRESULT (STDMETHODCALLTYPE *CreateMonitorRenderingParams)(
        IDWriteFactory4 *This,
        HMONITOR monitor,
        IDWriteRenderingParams **params);

    HRESULT (STDMETHODCALLTYPE *CreateCustomRenderingParams)(
        IDWriteFactory4 *This,
        FLOAT gamma,
        FLOAT enhancedContrast,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY geometry,
        DWRITE_RENDERING_MODE mode,
        IDWriteRenderingParams **params);

    HRESULT (STDMETHODCALLTYPE *RegisterFontFileLoader)(
        IDWriteFactory4 *This,
        IDWriteFontFileLoader *loader);

    HRESULT (STDMETHODCALLTYPE *UnregisterFontFileLoader)(
        IDWriteFactory4 *This,
        IDWriteFontFileLoader *loader);

    HRESULT (STDMETHODCALLTYPE *CreateTextFormat)(
        IDWriteFactory4 *This,
        const WCHAR *family_name,
        IDWriteFontCollection *collection,
        DWRITE_FONT_WEIGHT weight,
        DWRITE_FONT_STYLE style,
        DWRITE_FONT_STRETCH stretch,
        FLOAT size,
        const WCHAR *locale,
        IDWriteTextFormat **format);

    HRESULT (STDMETHODCALLTYPE *CreateTypography)(
        IDWriteFactory4 *This,
        IDWriteTypography **typography);

    HRESULT (STDMETHODCALLTYPE *GetGdiInterop)(
        IDWriteFactory4 *This,
        IDWriteGdiInterop **gdi_interop);

    HRESULT (STDMETHODCALLTYPE *CreateTextLayout)(
        IDWriteFactory4 *This,
        const WCHAR *string,
        UINT32 len,
        IDWriteTextFormat *format,
        FLOAT max_width,
        FLOAT max_height,
        IDWriteTextLayout **layout);

    HRESULT (STDMETHODCALLTYPE *CreateGdiCompatibleTextLayout)(
        IDWriteFactory4 *This,
        const WCHAR *string,
        UINT32 len,
        IDWriteTextFormat *format,
        FLOAT layout_width,
        FLOAT layout_height,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        BOOL use_gdi_natural,
        IDWriteTextLayout **layout);

    HRESULT (STDMETHODCALLTYPE *CreateEllipsisTrimmingSign)(
        IDWriteFactory4 *This,
        IDWriteTextFormat *format,
        IDWriteInlineObject **trimming_sign);

    HRESULT (STDMETHODCALLTYPE *CreateTextAnalyzer)(
        IDWriteFactory4 *This,
        IDWriteTextAnalyzer **analyzer);

    HRESULT (STDMETHODCALLTYPE *CreateNumberSubstitution)(
        IDWriteFactory4 *This,
        DWRITE_NUMBER_SUBSTITUTION_METHOD method,
        const WCHAR *locale,
        BOOL ignore_user_override,
        IDWriteNumberSubstitution **substitution);

    HRESULT (STDMETHODCALLTYPE *CreateGlyphRunAnalysis)(
        IDWriteFactory4 *This,
        const DWRITE_GLYPH_RUN *glyph_run,
        FLOAT pixels_per_dip,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE rendering_mode,
        DWRITE_MEASURING_MODE measuring_mode,
        FLOAT baseline_x,
        FLOAT baseline_y,
        IDWriteGlyphRunAnalysis **analysis);

    /*** IDWriteFactory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetEudcFontCollection)(
        IDWriteFactory4 *This,
        IDWriteFontCollection **collection,
        BOOL check_for_updates);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory1_CreateCustomRenderingParams)(
        IDWriteFactory4 *This,
        FLOAT gamma,
        FLOAT enhcontrast,
        FLOAT enhcontrast_grayscale,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY geometry,
        DWRITE_RENDERING_MODE mode,
        IDWriteRenderingParams1 **params);

    /*** IDWriteFactory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *GetSystemFontFallback)(
        IDWriteFactory4 *This,
        IDWriteFontFallback **fallback);

    HRESULT (STDMETHODCALLTYPE *CreateFontFallbackBuilder)(
        IDWriteFactory4 *This,
        IDWriteFontFallbackBuilder **fallbackbuilder);

    HRESULT (STDMETHODCALLTYPE *TranslateColorGlyphRun)(
        IDWriteFactory4 *This,
        FLOAT originX,
        FLOAT originY,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *rundescr,
        DWRITE_MEASURING_MODE mode,
        const DWRITE_MATRIX *transform,
        UINT32 palette_index,
        IDWriteColorGlyphRunEnumerator **colorlayers);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateCustomRenderingParams)(
        IDWriteFactory4 *This,
        FLOAT gamma,
        FLOAT contrast,
        FLOAT grayscalecontrast,
        FLOAT cleartypeLevel,
        DWRITE_PIXEL_GEOMETRY pixelGeometry,
        DWRITE_RENDERING_MODE renderingMode,
        DWRITE_GRID_FIT_MODE gridFitMode,
        IDWriteRenderingParams2 **params);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory2_CreateGlyphRunAnalysis)(
        IDWriteFactory4 *This,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE renderingMode,
        DWRITE_MEASURING_MODE measuringMode,
        DWRITE_GRID_FIT_MODE gridFitMode,
        DWRITE_TEXT_ANTIALIAS_MODE antialiasMode,
        FLOAT originX,
        FLOAT originY,
        IDWriteGlyphRunAnalysis **analysis);

    /*** IDWriteFactory3 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateGlyphRunAnalysis)(
        IDWriteFactory4 *This,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_MATRIX *transform,
        DWRITE_RENDERING_MODE1 rendering_mode,
        DWRITE_MEASURING_MODE measuring_mode,
        DWRITE_GRID_FIT_MODE gridfit_mode,
        DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,
        FLOAT origin_x,
        FLOAT origin_y,
        IDWriteGlyphRunAnalysis **analysis);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_CreateCustomRenderingParams)(
        IDWriteFactory4 *This,
        FLOAT gamma,
        FLOAT enhanced_contrast,
        FLOAT grayscale_enhanced_contrast,
        FLOAT cleartype_level,
        DWRITE_PIXEL_GEOMETRY pixel_geometry,
        DWRITE_RENDERING_MODE1 rendering_mode,
        DWRITE_GRID_FIT_MODE gridfit_mode,
        IDWriteRenderingParams3 **params);

    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference_)(
        IDWriteFactory4 *This,
        IDWriteFontFile *file,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFaceReference **reference);

    HRESULT (STDMETHODCALLTYPE *CreateFontFaceReference)(
        IDWriteFactory4 *This,
        const WCHAR *path,
        const FILETIME *writetime,
        UINT32 index,
        DWRITE_FONT_SIMULATIONS simulations,
        IDWriteFontFaceReference **reference);

    HRESULT (STDMETHODCALLTYPE *GetSystemFontSet)(
        IDWriteFactory4 *This,
        IDWriteFontSet **fontset);

    HRESULT (STDMETHODCALLTYPE *CreateFontSetBuilder)(
        IDWriteFactory4 *This,
        IDWriteFontSetBuilder **builder);

    HRESULT (STDMETHODCALLTYPE *CreateFontCollectionFromFontSet)(
        IDWriteFactory4 *This,
        IDWriteFontSet *fontset,
        IDWriteFontCollection1 **collection);

    HRESULT (STDMETHODCALLTYPE *IDWriteFactory3_GetSystemFontCollection)(
        IDWriteFactory4 *This,
        BOOL include_downloadable,
        IDWriteFontCollection1 **collection,
        BOOL check_for_updates);

    HRESULT (STDMETHODCALLTYPE *GetFontDownloadQueue)(
        IDWriteFactory4 *This,
        IDWriteFontDownloadQueue **queue);

    /*** IDWriteFactory4 methods ***/
    HRESULT (STDMETHODCALLTYPE *IDWriteFactory4_TranslateColorGlyphRun)(
        IDWriteFactory4 *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
        DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
        DWRITE_MEASURING_MODE measuring_mode,
        const DWRITE_MATRIX *transform,
        UINT32 palette,
        IDWriteColorGlyphRunEnumerator1 **layers);

    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins_)(
        IDWriteFactory4 *This,
        const DWRITE_GLYPH_RUN *run,
        D2D1_POINT_2F baseline_origin,
        D2D1_POINT_2F *origins);

    HRESULT (STDMETHODCALLTYPE *ComputeGlyphOrigins)(
        IDWriteFactory4 *This,
        const DWRITE_GLYPH_RUN *run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_MATRIX *transform,
        D2D1_POINT_2F *origins);

    END_INTERFACE
} IDWriteFactory4Vtbl;

interface IDWriteFactory4 {
    CONST_VTBL IDWriteFactory4Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define IDWriteFactory4_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define IDWriteFactory4_AddRef(This) (This)->lpVtbl->AddRef(This)
#define IDWriteFactory4_Release(This) (This)->lpVtbl->Release(This)
/*** IDWriteFactory methods ***/
#define IDWriteFactory4_CreateCustomFontCollection(This,loader,key,key_size,collection) (This)->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection)
#define IDWriteFactory4_RegisterFontCollectionLoader(This,loader) (This)->lpVtbl->RegisterFontCollectionLoader(This,loader)
#define IDWriteFactory4_UnregisterFontCollectionLoader(This,loader) (This)->lpVtbl->UnregisterFontCollectionLoader(This,loader)
#define IDWriteFactory4_CreateFontFileReference(This,path,writetime,font_file) (This)->lpVtbl->CreateFontFileReference(This,path,writetime,font_file)
#define IDWriteFactory4_CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file) (This)->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file)
#define IDWriteFactory4_CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face) (This)->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face)
#define IDWriteFactory4_CreateRenderingParams(This,params) (This)->lpVtbl->CreateRenderingParams(This,params)
#define IDWriteFactory4_CreateMonitorRenderingParams(This,monitor,params) (This)->lpVtbl->CreateMonitorRenderingParams(This,monitor,params)
#define IDWriteFactory4_RegisterFontFileLoader(This,loader) (This)->lpVtbl->RegisterFontFileLoader(This,loader)
#define IDWriteFactory4_UnregisterFontFileLoader(This,loader) (This)->lpVtbl->UnregisterFontFileLoader(This,loader)
#define IDWriteFactory4_CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format) (This)->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format)
#define IDWriteFactory4_CreateTypography(This,typography) (This)->lpVtbl->CreateTypography(This,typography)
#define IDWriteFactory4_GetGdiInterop(This,gdi_interop) (This)->lpVtbl->GetGdiInterop(This,gdi_interop)
#define IDWriteFactory4_CreateTextLayout(This,string,len,format,max_width,max_height,layout) (This)->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout)
#define IDWriteFactory4_CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout) (This)->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout)
#define IDWriteFactory4_CreateEllipsisTrimmingSign(This,format,trimming_sign) (This)->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign)
#define IDWriteFactory4_CreateTextAnalyzer(This,analyzer) (This)->lpVtbl->CreateTextAnalyzer(This,analyzer)
#define IDWriteFactory4_CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution) (This)->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution)
/*** IDWriteFactory1 methods ***/
#define IDWriteFactory4_GetEudcFontCollection(This,collection,check_for_updates) (This)->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates)
/*** IDWriteFactory2 methods ***/
#define IDWriteFactory4_GetSystemFontFallback(This,fallback) (This)->lpVtbl->GetSystemFontFallback(This,fallback)
#define IDWriteFactory4_CreateFontFallbackBuilder(This,fallbackbuilder) (This)->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder)
/*** IDWriteFactory3 methods ***/
#define IDWriteFactory4_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis) (This)->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis)
#define IDWriteFactory4_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params) (This)->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params)
#define IDWriteFactory4_CreateFontFaceReference_(This,file,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference)
#define IDWriteFactory4_CreateFontFaceReference(This,path,writetime,index,simulations,reference) (This)->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference)
#define IDWriteFactory4_GetSystemFontSet(This,fontset) (This)->lpVtbl->GetSystemFontSet(This,fontset)
#define IDWriteFactory4_CreateFontSetBuilder(This,builder) (This)->lpVtbl->CreateFontSetBuilder(This,builder)
#define IDWriteFactory4_CreateFontCollectionFromFontSet(This,fontset,collection) (This)->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection)
#define IDWriteFactory4_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates) (This)->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates)
#define IDWriteFactory4_GetFontDownloadQueue(This,queue) (This)->lpVtbl->GetFontDownloadQueue(This,queue)
/*** IDWriteFactory4 methods ***/
#define IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers) (This)->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers)
#define IDWriteFactory4_ComputeGlyphOrigins_(This,run,baseline_origin,origins) (This)->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins)
#define IDWriteFactory4_ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins) (This)->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT IDWriteFactory4_QueryInterface(IDWriteFactory4* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG IDWriteFactory4_AddRef(IDWriteFactory4* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG IDWriteFactory4_Release(IDWriteFactory4* This) {
    return This->lpVtbl->Release(This);
}
/*** IDWriteFactory methods ***/
static FORCEINLINE HRESULT IDWriteFactory4_CreateCustomFontCollection(IDWriteFactory4* This,IDWriteFontCollectionLoader *loader,const void *key,UINT32 key_size,IDWriteFontCollection **collection) {
    return This->lpVtbl->CreateCustomFontCollection(This,loader,key,key_size,collection);
}
static FORCEINLINE HRESULT IDWriteFactory4_RegisterFontCollectionLoader(IDWriteFactory4* This,IDWriteFontCollectionLoader *loader) {
    return This->lpVtbl->RegisterFontCollectionLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory4_UnregisterFontCollectionLoader(IDWriteFactory4* This,IDWriteFontCollectionLoader *loader) {
    return This->lpVtbl->UnregisterFontCollectionLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFileReference(IDWriteFactory4* This,const WCHAR *path,const FILETIME *writetime,IDWriteFontFile **font_file) {
    return This->lpVtbl->CreateFontFileReference(This,path,writetime,font_file);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateCustomFontFileReference(IDWriteFactory4* This,const void *reference_key,UINT32 key_size,IDWriteFontFileLoader *loader,IDWriteFontFile **font_file) {
    return This->lpVtbl->CreateCustomFontFileReference(This,reference_key,key_size,loader,font_file);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFace(IDWriteFactory4* This,DWRITE_FONT_FACE_TYPE facetype,UINT32 files_number,IDWriteFontFile *const *font_files,UINT32 index,DWRITE_FONT_SIMULATIONS sim_flags,IDWriteFontFace **font_face) {
    return This->lpVtbl->CreateFontFace(This,facetype,files_number,font_files,index,sim_flags,font_face);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateRenderingParams(IDWriteFactory4* This,IDWriteRenderingParams **params) {
    return This->lpVtbl->CreateRenderingParams(This,params);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateMonitorRenderingParams(IDWriteFactory4* This,HMONITOR monitor,IDWriteRenderingParams **params) {
    return This->lpVtbl->CreateMonitorRenderingParams(This,monitor,params);
}
static FORCEINLINE HRESULT IDWriteFactory4_RegisterFontFileLoader(IDWriteFactory4* This,IDWriteFontFileLoader *loader) {
    return This->lpVtbl->RegisterFontFileLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory4_UnregisterFontFileLoader(IDWriteFactory4* This,IDWriteFontFileLoader *loader) {
    return This->lpVtbl->UnregisterFontFileLoader(This,loader);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateTextFormat(IDWriteFactory4* This,const WCHAR *family_name,IDWriteFontCollection *collection,DWRITE_FONT_WEIGHT weight,DWRITE_FONT_STYLE style,DWRITE_FONT_STRETCH stretch,FLOAT size,const WCHAR *locale,IDWriteTextFormat **format) {
    return This->lpVtbl->CreateTextFormat(This,family_name,collection,weight,style,stretch,size,locale,format);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateTypography(IDWriteFactory4* This,IDWriteTypography **typography) {
    return This->lpVtbl->CreateTypography(This,typography);
}
static FORCEINLINE HRESULT IDWriteFactory4_GetGdiInterop(IDWriteFactory4* This,IDWriteGdiInterop **gdi_interop) {
    return This->lpVtbl->GetGdiInterop(This,gdi_interop);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateTextLayout(IDWriteFactory4* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT max_width,FLOAT max_height,IDWriteTextLayout **layout) {
    return This->lpVtbl->CreateTextLayout(This,string,len,format,max_width,max_height,layout);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateGdiCompatibleTextLayout(IDWriteFactory4* This,const WCHAR *string,UINT32 len,IDWriteTextFormat *format,FLOAT layout_width,FLOAT layout_height,FLOAT pixels_per_dip,const DWRITE_MATRIX *transform,BOOL use_gdi_natural,IDWriteTextLayout **layout) {
    return This->lpVtbl->CreateGdiCompatibleTextLayout(This,string,len,format,layout_width,layout_height,pixels_per_dip,transform,use_gdi_natural,layout);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateEllipsisTrimmingSign(IDWriteFactory4* This,IDWriteTextFormat *format,IDWriteInlineObject **trimming_sign) {
    return This->lpVtbl->CreateEllipsisTrimmingSign(This,format,trimming_sign);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateTextAnalyzer(IDWriteFactory4* This,IDWriteTextAnalyzer **analyzer) {
    return This->lpVtbl->CreateTextAnalyzer(This,analyzer);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateNumberSubstitution(IDWriteFactory4* This,DWRITE_NUMBER_SUBSTITUTION_METHOD method,const WCHAR *locale,BOOL ignore_user_override,IDWriteNumberSubstitution **substitution) {
    return This->lpVtbl->CreateNumberSubstitution(This,method,locale,ignore_user_override,substitution);
}
/*** IDWriteFactory1 methods ***/
static FORCEINLINE HRESULT IDWriteFactory4_GetEudcFontCollection(IDWriteFactory4* This,IDWriteFontCollection **collection,BOOL check_for_updates) {
    return This->lpVtbl->GetEudcFontCollection(This,collection,check_for_updates);
}
/*** IDWriteFactory2 methods ***/
static FORCEINLINE HRESULT IDWriteFactory4_GetSystemFontFallback(IDWriteFactory4* This,IDWriteFontFallback **fallback) {
    return This->lpVtbl->GetSystemFontFallback(This,fallback);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFallbackBuilder(IDWriteFactory4* This,IDWriteFontFallbackBuilder **fallbackbuilder) {
    return This->lpVtbl->CreateFontFallbackBuilder(This,fallbackbuilder);
}
/*** IDWriteFactory3 methods ***/
static FORCEINLINE HRESULT IDWriteFactory4_CreateGlyphRunAnalysis(IDWriteFactory4* This,const DWRITE_GLYPH_RUN *run,const DWRITE_MATRIX *transform,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_MEASURING_MODE measuring_mode,DWRITE_GRID_FIT_MODE gridfit_mode,DWRITE_TEXT_ANTIALIAS_MODE antialias_mode,FLOAT origin_x,FLOAT origin_y,IDWriteGlyphRunAnalysis **analysis) {
    return This->lpVtbl->IDWriteFactory3_CreateGlyphRunAnalysis(This,run,transform,rendering_mode,measuring_mode,gridfit_mode,antialias_mode,origin_x,origin_y,analysis);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateCustomRenderingParams(IDWriteFactory4* This,FLOAT gamma,FLOAT enhanced_contrast,FLOAT grayscale_enhanced_contrast,FLOAT cleartype_level,DWRITE_PIXEL_GEOMETRY pixel_geometry,DWRITE_RENDERING_MODE1 rendering_mode,DWRITE_GRID_FIT_MODE gridfit_mode,IDWriteRenderingParams3 **params) {
    return This->lpVtbl->IDWriteFactory3_CreateCustomRenderingParams(This,gamma,enhanced_contrast,grayscale_enhanced_contrast,cleartype_level,pixel_geometry,rendering_mode,gridfit_mode,params);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFaceReference_(IDWriteFactory4* This,IDWriteFontFile *file,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->CreateFontFaceReference_(This,file,index,simulations,reference);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontFaceReference(IDWriteFactory4* This,const WCHAR *path,const FILETIME *writetime,UINT32 index,DWRITE_FONT_SIMULATIONS simulations,IDWriteFontFaceReference **reference) {
    return This->lpVtbl->CreateFontFaceReference(This,path,writetime,index,simulations,reference);
}
static FORCEINLINE HRESULT IDWriteFactory4_GetSystemFontSet(IDWriteFactory4* This,IDWriteFontSet **fontset) {
    return This->lpVtbl->GetSystemFontSet(This,fontset);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontSetBuilder(IDWriteFactory4* This,IDWriteFontSetBuilder **builder) {
    return This->lpVtbl->CreateFontSetBuilder(This,builder);
}
static FORCEINLINE HRESULT IDWriteFactory4_CreateFontCollectionFromFontSet(IDWriteFactory4* This,IDWriteFontSet *fontset,IDWriteFontCollection1 **collection) {
    return This->lpVtbl->CreateFontCollectionFromFontSet(This,fontset,collection);
}
static FORCEINLINE HRESULT IDWriteFactory4_GetSystemFontCollection(IDWriteFactory4* This,BOOL include_downloadable,IDWriteFontCollection1 **collection,BOOL check_for_updates) {
    return This->lpVtbl->IDWriteFactory3_GetSystemFontCollection(This,include_downloadable,collection,check_for_updates);
}
static FORCEINLINE HRESULT IDWriteFactory4_GetFontDownloadQueue(IDWriteFactory4* This,IDWriteFontDownloadQueue **queue) {
    return This->lpVtbl->GetFontDownloadQueue(This,queue);
}
/*** IDWriteFactory4 methods ***/
static FORCEINLINE HRESULT IDWriteFactory4_TranslateColorGlyphRun(IDWriteFactory4* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *run,const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,DWRITE_GLYPH_IMAGE_FORMATS desired_formats,DWRITE_MEASURING_MODE measuring_mode,const DWRITE_MATRIX *transform,UINT32 palette,IDWriteColorGlyphRunEnumerator1 **layers) {
    return This->lpVtbl->IDWriteFactory4_TranslateColorGlyphRun(This,baseline_origin,run,run_desc,desired_formats,measuring_mode,transform,palette,layers);
}
static FORCEINLINE HRESULT IDWriteFactory4_ComputeGlyphOrigins_(IDWriteFactory4* This,const DWRITE_GLYPH_RUN *run,D2D1_POINT_2F baseline_origin,D2D1_POINT_2F *origins) {
    return This->lpVtbl->ComputeGlyphOrigins_(This,run,baseline_origin,origins);
}
static FORCEINLINE HRESULT IDWriteFactory4_ComputeGlyphOrigins(IDWriteFactory4* This,const DWRITE_GLYPH_RUN *run,DWRITE_MEASURING_MODE measuring_mode,D2D1_POINT_2F baseline_origin,const DWRITE_MATRIX *transform,D2D1_POINT_2F *origins) {
    return This->lpVtbl->ComputeGlyphOrigins(This,run,measuring_mode,baseline_origin,transform,origins);
}
#endif
#endif

#endif

HRESULT STDMETHODCALLTYPE IDWriteFactory4_TranslateColorGlyphRun_Proxy(
    IDWriteFactory4* This,
    D2D1_POINT_2F baseline_origin,
    const DWRITE_GLYPH_RUN *run,
    const DWRITE_GLYPH_RUN_DESCRIPTION *run_desc,
    DWRITE_GLYPH_IMAGE_FORMATS desired_formats,
    DWRITE_MEASURING_MODE measuring_mode,
    const DWRITE_MATRIX *transform,
    UINT32 palette,
    IDWriteColorGlyphRunEnumerator1 **layers);
void __RPC_STUB IDWriteFactory4_TranslateColorGlyphRun_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory4_ComputeGlyphOrigins__Proxy(
    IDWriteFactory4* This,
    const DWRITE_GLYPH_RUN *run,
    D2D1_POINT_2F baseline_origin,
    D2D1_POINT_2F *origins);
void __RPC_STUB IDWriteFactory4_ComputeGlyphOrigins__Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);
HRESULT STDMETHODCALLTYPE IDWriteFactory4_ComputeGlyphOrigins_Proxy(
    IDWriteFactory4* This,
    const DWRITE_GLYPH_RUN *run,
    DWRITE_MEASURING_MODE measuring_mode,
    D2D1_POINT_2F baseline_origin,
    const DWRITE_MATRIX *transform,
    D2D1_POINT_2F *origins);
void __RPC_STUB IDWriteFactory4_ComputeGlyphOrigins_Stub(
    IRpcStubBuffer* This,
    IRpcChannelBuffer* pRpcChannelBuffer,
    PRPC_MESSAGE pRpcMessage,
    DWORD* pdwStubPhase);

#endif  /* __IDWriteFactory4_INTERFACE_DEFINED__ */

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __dwrite_3_h__ */
