/*** Autogenerated by WIDL 11.8 from ../wine/include/d2d1_1.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

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

#ifndef __d2d1_1_h__
#define __d2d1_1_h__

/* Forward declarations */

#ifndef __ID2D1GdiMetafileSink_FWD_DEFINED__
#define __ID2D1GdiMetafileSink_FWD_DEFINED__
typedef interface ID2D1GdiMetafileSink ID2D1GdiMetafileSink;
#ifdef __cplusplus
interface ID2D1GdiMetafileSink;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GdiMetafile_FWD_DEFINED__
#define __ID2D1GdiMetafile_FWD_DEFINED__
typedef interface ID2D1GdiMetafile ID2D1GdiMetafile;
#ifdef __cplusplus
interface ID2D1GdiMetafile;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1PathGeometry1_FWD_DEFINED__
#define __ID2D1PathGeometry1_FWD_DEFINED__
typedef interface ID2D1PathGeometry1 ID2D1PathGeometry1;
#ifdef __cplusplus
interface ID2D1PathGeometry1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Properties_FWD_DEFINED__
#define __ID2D1Properties_FWD_DEFINED__
typedef interface ID2D1Properties ID2D1Properties;
#ifdef __cplusplus
interface ID2D1Properties;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Effect_FWD_DEFINED__
#define __ID2D1Effect_FWD_DEFINED__
typedef interface ID2D1Effect ID2D1Effect;
#ifdef __cplusplus
interface ID2D1Effect;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DrawingStateBlock1_FWD_DEFINED__
#define __ID2D1DrawingStateBlock1_FWD_DEFINED__
typedef interface ID2D1DrawingStateBlock1 ID2D1DrawingStateBlock1;
#ifdef __cplusplus
interface ID2D1DrawingStateBlock1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ColorContext_FWD_DEFINED__
#define __ID2D1ColorContext_FWD_DEFINED__
typedef interface ID2D1ColorContext ID2D1ColorContext;
#ifdef __cplusplus
interface ID2D1ColorContext;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Bitmap1_FWD_DEFINED__
#define __ID2D1Bitmap1_FWD_DEFINED__
typedef interface ID2D1Bitmap1 ID2D1Bitmap1;
#ifdef __cplusplus
interface ID2D1Bitmap1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BitmapBrush1_FWD_DEFINED__
#define __ID2D1BitmapBrush1_FWD_DEFINED__
typedef interface ID2D1BitmapBrush1 ID2D1BitmapBrush1;
#ifdef __cplusplus
interface ID2D1BitmapBrush1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GradientStopCollection1_FWD_DEFINED__
#define __ID2D1GradientStopCollection1_FWD_DEFINED__
typedef interface ID2D1GradientStopCollection1 ID2D1GradientStopCollection1;
#ifdef __cplusplus
interface ID2D1GradientStopCollection1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device_FWD_DEFINED__
#define __ID2D1Device_FWD_DEFINED__
typedef interface ID2D1Device ID2D1Device;
#ifdef __cplusplus
interface ID2D1Device;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1CommandSink_FWD_DEFINED__
#define __ID2D1CommandSink_FWD_DEFINED__
typedef interface ID2D1CommandSink ID2D1CommandSink;
#ifdef __cplusplus
interface ID2D1CommandSink;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1CommandList_FWD_DEFINED__
#define __ID2D1CommandList_FWD_DEFINED__
typedef interface ID2D1CommandList ID2D1CommandList;
#ifdef __cplusplus
interface ID2D1CommandList;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1PrintControl_FWD_DEFINED__
#define __ID2D1PrintControl_FWD_DEFINED__
typedef interface ID2D1PrintControl ID2D1PrintControl;
#ifdef __cplusplus
interface ID2D1PrintControl;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ImageBrush_FWD_DEFINED__
#define __ID2D1ImageBrush_FWD_DEFINED__
typedef interface ID2D1ImageBrush ID2D1ImageBrush;
#ifdef __cplusplus
interface ID2D1ImageBrush;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext_FWD_DEFINED__
#define __ID2D1DeviceContext_FWD_DEFINED__
typedef interface ID2D1DeviceContext ID2D1DeviceContext;
#ifdef __cplusplus
interface ID2D1DeviceContext;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1StrokeStyle1_FWD_DEFINED__
#define __ID2D1StrokeStyle1_FWD_DEFINED__
typedef interface ID2D1StrokeStyle1 ID2D1StrokeStyle1;
#ifdef __cplusplus
interface ID2D1StrokeStyle1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory1_FWD_DEFINED__
#define __ID2D1Factory1_FWD_DEFINED__
typedef interface ID2D1Factory1 ID2D1Factory1;
#ifdef __cplusplus
interface ID2D1Factory1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Multithread_FWD_DEFINED__
#define __ID2D1Multithread_FWD_DEFINED__
typedef interface ID2D1Multithread ID2D1Multithread;
#ifdef __cplusplus
interface ID2D1Multithread;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <d2d1.h>
#include <d2d1effects.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef __ID2D1DeviceContext_FWD_DEFINED__
#define __ID2D1DeviceContext_FWD_DEFINED__
typedef interface ID2D1DeviceContext ID2D1DeviceContext;
#ifdef __cplusplus
interface ID2D1DeviceContext;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Properties_FWD_DEFINED__
#define __ID2D1Properties_FWD_DEFINED__
typedef interface ID2D1Properties ID2D1Properties;
#ifdef __cplusplus
interface ID2D1Properties;
#endif /* __cplusplus */
#endif

#ifndef __IPrintDocumentPackageTarget_FWD_DEFINED__
#define __IPrintDocumentPackageTarget_FWD_DEFINED__
typedef interface IPrintDocumentPackageTarget IPrintDocumentPackageTarget;
#ifdef __cplusplus
interface IPrintDocumentPackageTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1PrintControl_FWD_DEFINED__
#define __ID2D1PrintControl_FWD_DEFINED__
typedef interface ID2D1PrintControl ID2D1PrintControl;
#ifdef __cplusplus
interface ID2D1PrintControl;
#endif /* __cplusplus */
#endif

#ifndef __IWICImagingFactory_FWD_DEFINED__
#define __IWICImagingFactory_FWD_DEFINED__
typedef interface IWICImagingFactory IWICImagingFactory;
#ifdef __cplusplus
interface IWICImagingFactory;
#endif /* __cplusplus */
#endif

#ifndef __IWICColorContext_FWD_DEFINED__
#define __IWICColorContext_FWD_DEFINED__
typedef interface IWICColorContext IWICColorContext;
#ifdef __cplusplus
interface IWICColorContext;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1ColorContext_FWD_DEFINED__
#define __ID2D1ColorContext_FWD_DEFINED__
typedef interface ID2D1ColorContext ID2D1ColorContext;
#ifdef __cplusplus
interface ID2D1ColorContext;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Effect_FWD_DEFINED__
#define __ID2D1Effect_FWD_DEFINED__
typedef interface ID2D1Effect ID2D1Effect;
#ifdef __cplusplus
interface ID2D1Effect;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BitmapBrush1_FWD_DEFINED__
#define __ID2D1BitmapBrush1_FWD_DEFINED__
typedef interface ID2D1BitmapBrush1 ID2D1BitmapBrush1;
#ifdef __cplusplus
interface ID2D1BitmapBrush1;
#endif /* __cplusplus */
#endif

typedef D2D_VECTOR_2F D2D1_VECTOR_2F;
typedef D2D_VECTOR_3F D2D1_VECTOR_3F;
typedef D2D_VECTOR_4F D2D1_VECTOR_4F;
typedef D2D_MATRIX_4X3_F D2D1_MATRIX_4X3_F;
typedef D2D_MATRIX_4X4_F D2D1_MATRIX_4X4_F;
typedef D2D_MATRIX_5X4_F D2D1_MATRIX_5X4_F;
#ifndef __dwrite_h__
typedef struct DWRITE_GLYPH_RUN_DESCRIPTION DWRITE_GLYPH_RUN_DESCRIPTION;
#endif /* __dwrite_h__ */
#define D2D1_INVALID_PROPERTY_INDEX UINT_MAX
typedef enum D2D1_DEVICE_CONTEXT_OPTIONS {
    D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0x0,
    D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 0x1,
    D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_DEVICE_CONTEXT_OPTIONS;
typedef enum D2D1_STROKE_TRANSFORM_TYPE {
    D2D1_STROKE_TRANSFORM_TYPE_NORMAL = 0x0,
    D2D1_STROKE_TRANSFORM_TYPE_FIXED = 0x1,
    D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE = 0x2,
    D2D1_STROKE_TRANSFORM_TYPE_FORCE_DWORD = 0xffffffff
} D2D1_STROKE_TRANSFORM_TYPE;
typedef enum D2D1_PRIMITIVE_BLEND {
    D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0x0,
    D2D1_PRIMITIVE_BLEND_COPY = 0x1,
    D2D1_PRIMITIVE_BLEND_MIN = 0x2,
    D2D1_PRIMITIVE_BLEND_ADD = 0x3,
    D2D1_PRIMITIVE_BLEND_MAX = 0x4,
    D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff
} D2D1_PRIMITIVE_BLEND;
typedef enum D2D1_UNIT_MODE {
    D2D1_UNIT_MODE_DIPS = 0x0,
    D2D1_UNIT_MODE_PIXELS = 0x1,
    D2D1_UNIT_MODE_FORCE_DWORD = 0xffffffff
} D2D1_UNIT_MODE;
typedef enum D2D1_PRINT_FONT_SUBSET_MODE {
    D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT = 0x0,
    D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE = 0x1,
    D2D1_PRINT_FONT_SUBSET_MODE_NONE = 0x2,
    D2D1_PRINT_FONT_SUBSET_MODE_FORCE_DWORD = 0xffffffff
} D2D1_PRINT_FONT_SUBSET_MODE;
typedef enum D2D1_COLOR_SPACE {
    D2D1_COLOR_SPACE_CUSTOM = 0x0,
    D2D1_COLOR_SPACE_SRGB = 0x1,
    D2D1_COLOR_SPACE_SCRGB = 0x2,
    D2D1_COLOR_SPACE_FORCE_DWORD = 0xffffffff
} D2D1_COLOR_SPACE;
typedef enum D2D1_BITMAP_OPTIONS {
    D2D1_BITMAP_OPTIONS_NONE = 0x0,
    D2D1_BITMAP_OPTIONS_TARGET = 0x1,
    D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x2,
    D2D1_BITMAP_OPTIONS_CPU_READ = 0x4,
    D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x8,
    D2D1_BITMAP_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_BITMAP_OPTIONS;
typedef enum D2D1_MAP_OPTIONS {
    D2D1_MAP_OPTIONS_NONE = 0x0,
    D2D1_MAP_OPTIONS_READ = 0x1,
    D2D1_MAP_OPTIONS_WRITE = 0x2,
    D2D1_MAP_OPTIONS_DISCARD = 0x4,
    D2D1_MAP_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_MAP_OPTIONS;
typedef enum D2D1_BUFFER_PRECISION {
    D2D1_BUFFER_PRECISION_UNKNOWN = 0x0,
    D2D1_BUFFER_PRECISION_8BPC_UNORM = 0x1,
    D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB = 0x2,
    D2D1_BUFFER_PRECISION_16BPC_UNORM = 0x3,
    D2D1_BUFFER_PRECISION_16BPC_FLOAT = 0x4,
    D2D1_BUFFER_PRECISION_32BPC_FLOAT = 0x5,
    D2D1_BUFFER_PRECISION_FORCE_DWORD = 0xffffffff
} D2D1_BUFFER_PRECISION;
typedef enum D2D1_COLOR_INTERPOLATION_MODE {
    D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT = 0x0,
    D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED = 0x1,
    D2D1_COLOR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff
} D2D1_COLOR_INTERPOLATION_MODE;
typedef enum D2D1_INTERPOLATION_MODE {
    D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
    D2D1_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
    D2D1_INTERPOLATION_MODE_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC,
    D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR,
    D2D1_INTERPOLATION_MODE_ANISOTROPIC = D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC,
    D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC,
    D2D1_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff
} D2D1_INTERPOLATION_MODE;
typedef enum D2D1_COMPOSITE_MODE {
    D2D1_COMPOSITE_MODE_SOURCE_OVER = 0x0,
    D2D1_COMPOSITE_MODE_DESTINATION_OVER = 0x1,
    D2D1_COMPOSITE_MODE_SOURCE_IN = 0x2,
    D2D1_COMPOSITE_MODE_DESTINATION_IN = 0x3,
    D2D1_COMPOSITE_MODE_SOURCE_OUT = 0x4,
    D2D1_COMPOSITE_MODE_DESTINATION_OUT = 0x5,
    D2D1_COMPOSITE_MODE_SOURCE_ATOP = 0x6,
    D2D1_COMPOSITE_MODE_DESTINATION_ATOP = 0x7,
    D2D1_COMPOSITE_MODE_XOR = 0x8,
    D2D1_COMPOSITE_MODE_PLUS = 0x9,
    D2D1_COMPOSITE_MODE_SOURCE_COPY = 0xa,
    D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY = 0xb,
    D2D1_COMPOSITE_MODE_MASK_INVERT = 0xc,
    D2D1_COMPOSITE_MODE_FORCE_DWORD = 0xffffffff
} D2D1_COMPOSITE_MODE;
typedef enum D2D1_LAYER_OPTIONS1 {
    D2D1_LAYER_OPTIONS1_NONE = 0x0,
    D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND = 0x1,
    D2D1_LAYER_OPTIONS1_IGNORE_ALPHA = 0x2,
    D2D1_LAYER_OPTIONS1_FORCE_DWORD = 0xffffffff
} D2D1_LAYER_OPTIONS1;
struct D2D1_PROPERTY_BINDING;
typedef enum D2D1_PROPERTY_TYPE {
    D2D1_PROPERTY_TYPE_UNKNOWN = 0x0,
    D2D1_PROPERTY_TYPE_STRING = 0x1,
    D2D1_PROPERTY_TYPE_BOOL = 0x2,
    D2D1_PROPERTY_TYPE_UINT32 = 0x3,
    D2D1_PROPERTY_TYPE_INT32 = 0x4,
    D2D1_PROPERTY_TYPE_FLOAT = 0x5,
    D2D1_PROPERTY_TYPE_VECTOR2 = 0x6,
    D2D1_PROPERTY_TYPE_VECTOR3 = 0x7,
    D2D1_PROPERTY_TYPE_VECTOR4 = 0x8,
    D2D1_PROPERTY_TYPE_BLOB = 0x9,
    D2D1_PROPERTY_TYPE_IUNKNOWN = 0xa,
    D2D1_PROPERTY_TYPE_ENUM = 0xb,
    D2D1_PROPERTY_TYPE_ARRAY = 0xc,
    D2D1_PROPERTY_TYPE_CLSID = 0xd,
    D2D1_PROPERTY_TYPE_MATRIX_3X2 = 0xe,
    D2D1_PROPERTY_TYPE_MATRIX_4X3 = 0xf,
    D2D1_PROPERTY_TYPE_MATRIX_4X4 = 0x10,
    D2D1_PROPERTY_TYPE_MATRIX_5X4 = 0x11,
    D2D1_PROPERTY_TYPE_COLOR_CONTEXT = 0x12,
    D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff
} D2D1_PROPERTY_TYPE;
typedef enum D2D1_PROPERTY {
    D2D1_PROPERTY_CLSID = 0x80000000,
    D2D1_PROPERTY_DISPLAYNAME = 0x80000001,
    D2D1_PROPERTY_AUTHOR = 0x80000002,
    D2D1_PROPERTY_CATEGORY = 0x80000003,
    D2D1_PROPERTY_DESCRIPTION = 0x80000004,
    D2D1_PROPERTY_INPUTS = 0x80000005,
    D2D1_PROPERTY_CACHED = 0x80000006,
    D2D1_PROPERTY_PRECISION = 0x80000007,
    D2D1_PROPERTY_MIN_INPUTS = 0x80000008,
    D2D1_PROPERTY_MAX_INPUTS = 0x80000009,
    D2D1_PROPERTY_FORCE_DWORD = 0xffffffff
} D2D1_PROPERTY;
typedef enum D2D1_SUBPROPERTY {
    D2D1_SUBPROPERTY_DISPLAYNAME = 0x80000000,
    D2D1_SUBPROPERTY_ISREADONLY = 0x80000001,
    D2D1_SUBPROPERTY_MIN = 0x80000002,
    D2D1_SUBPROPERTY_MAX = 0x80000003,
    D2D1_SUBPROPERTY_DEFAULT = 0x80000004,
    D2D1_SUBPROPERTY_FIELDS = 0x80000005,
    D2D1_SUBPROPERTY_INDEX = 0x80000006,
    D2D1_SUBPROPERTY_FORCE_DWORD = 0xffffffff
} D2D1_SUBPROPERTY;
typedef enum D2D1_THREADING_MODE {
    D2D1_THREADING_MODE_SINGLE_THREADED = D2D1_FACTORY_TYPE_SINGLE_THREADED,
    D2D1_THREADING_MODE_MULTI_THREADED = D2D1_FACTORY_TYPE_MULTI_THREADED,
    D2D1_THREADING_MODE_FORCE_DWORD = 0xffffffff
} D2D1_THREADING_MODE;
typedef struct D2D1_CREATION_PROPERTIES {
    D2D1_THREADING_MODE threadingMode;
    D2D1_DEBUG_LEVEL debugLevel;
    D2D1_DEVICE_CONTEXT_OPTIONS options;
} D2D1_CREATION_PROPERTIES;
typedef struct D2D1_STROKE_STYLE_PROPERTIES1 {
    D2D1_CAP_STYLE startCap;
    D2D1_CAP_STYLE endCap;
    D2D1_CAP_STYLE dashCap;
    D2D1_LINE_JOIN lineJoin;
    float miterLimit;
    D2D1_DASH_STYLE dashStyle;
    float dashOffset;
    D2D1_STROKE_TRANSFORM_TYPE transformType;
} D2D1_STROKE_STYLE_PROPERTIES1;
typedef struct D2D1_DRAWING_STATE_DESCRIPTION1 {
    D2D1_ANTIALIAS_MODE antialiasMode;
    D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;
    D2D1_TAG tag1;
    D2D1_TAG tag2;
    D2D1_MATRIX_3X2_F transform;
    D2D1_PRIMITIVE_BLEND primitiveBlend;
    D2D1_UNIT_MODE unitMode;
} D2D1_DRAWING_STATE_DESCRIPTION1;
typedef struct D2D1_PRINT_CONTROL_PROPERTIES {
    D2D1_PRINT_FONT_SUBSET_MODE fontSubset;
    float rasterDPI;
    D2D1_COLOR_SPACE colorSpace;
} D2D1_PRINT_CONTROL_PROPERTIES;
typedef struct D2D1_MAPPED_RECT {
    UINT32 pitch;
    BYTE *bits;
} D2D1_MAPPED_RECT;
typedef struct D2D1_BITMAP_PROPERTIES1 {
    D2D1_PIXEL_FORMAT pixelFormat;
    float dpiX;
    float dpiY;
    D2D1_BITMAP_OPTIONS bitmapOptions;
    ID2D1ColorContext *colorContext;
} D2D1_BITMAP_PROPERTIES1;
typedef struct D2D1_IMAGE_BRUSH_PROPERTIES {
    D2D1_RECT_F sourceRectangle;
    D2D1_EXTEND_MODE extendModeX;
    D2D1_EXTEND_MODE extendModeY;
    D2D1_INTERPOLATION_MODE interpolationMode;
} D2D1_IMAGE_BRUSH_PROPERTIES;
typedef struct D2D1_BITMAP_BRUSH_PROPERTIES1 {
    D2D1_EXTEND_MODE extendModeX;
    D2D1_EXTEND_MODE extendModeY;
    D2D1_INTERPOLATION_MODE interpolationMode;
} D2D1_BITMAP_BRUSH_PROPERTIES1;
typedef struct D2D1_RENDERING_CONTROLS {
    D2D1_BUFFER_PRECISION bufferPrecision;
    D2D1_SIZE_U tileSize;
} D2D1_RENDERING_CONTROLS;
typedef struct D2D1_LAYER_PARAMETERS1 {
    D2D1_RECT_F contentBounds;
    ID2D1Geometry *geometricMask;
    D2D1_ANTIALIAS_MODE maskAntialiasMode;
    D2D1_MATRIX_3X2_F maskTransform;
    float opacity;
    ID2D1Brush *opacityBrush;
    D2D1_LAYER_OPTIONS1 layerOptions;
} D2D1_LAYER_PARAMETERS1;
typedef struct D2D1_EFFECT_INPUT_DESCRIPTION {
    ID2D1Effect *effect;
    UINT32 inputIndex;
    D2D1_RECT_F inputRectangle;
} D2D1_EFFECT_INPUT_DESCRIPTION;
typedef struct D2D1_POINT_DESCRIPTION {
    D2D1_POINT_2F point;
    D2D1_POINT_2F unitTangentVector;
    UINT32 endSegment;
    UINT32 endFigure;
    float lengthToEndSegment;
} D2D1_POINT_DESCRIPTION;
typedef HRESULT (__stdcall *PD2D1_EFFECT_FACTORY)(IUnknown **effect);
/*****************************************************************************
 * ID2D1GdiMetafileSink interface
 */
#ifndef __ID2D1GdiMetafileSink_INTERFACE_DEFINED__
#define __ID2D1GdiMetafileSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GdiMetafileSink, 0x82237326, 0x8111, 0x4f7c, 0xbc,0xf4, 0xb5,0xc1,0x17,0x55,0x64,0xfe);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("82237326-8111-4f7c-bcf4-b5c1175564fe")
ID2D1GdiMetafileSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ProcessRecord(
        DWORD type,
        const void *data,
        DWORD size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GdiMetafileSink, 0x82237326, 0x8111, 0x4f7c, 0xbc,0xf4, 0xb5,0xc1,0x17,0x55,0x64,0xfe)
#endif
#else
typedef struct ID2D1GdiMetafileSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1GdiMetafileSink methods ***/
    HRESULT (STDMETHODCALLTYPE *ProcessRecord)(
        ID2D1GdiMetafileSink *This,
        DWORD type,
        const void *data,
        DWORD size);

    END_INTERFACE
} ID2D1GdiMetafileSinkVtbl;

interface ID2D1GdiMetafileSink {
    CONST_VTBL ID2D1GdiMetafileSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GdiMetafileSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GdiMetafileSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GdiMetafileSink_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1GdiMetafileSink methods ***/
#define ID2D1GdiMetafileSink_ProcessRecord(This,type,data,size) (This)->lpVtbl->ProcessRecord(This,type,data,size)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1GdiMetafileSink_QueryInterface(ID2D1GdiMetafileSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1GdiMetafileSink_AddRef(ID2D1GdiMetafileSink* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1GdiMetafileSink_Release(ID2D1GdiMetafileSink* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1GdiMetafileSink methods ***/
static inline HRESULT ID2D1GdiMetafileSink_ProcessRecord(ID2D1GdiMetafileSink* This,DWORD type,const void *data,DWORD size) {
    return This->lpVtbl->ProcessRecord(This,type,data,size);
}
#endif
#endif

#endif


#endif  /* __ID2D1GdiMetafileSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GdiMetafile interface
 */
#ifndef __ID2D1GdiMetafile_INTERFACE_DEFINED__
#define __ID2D1GdiMetafile_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GdiMetafile, 0x2f543dc3, 0xcfc1, 0x4211, 0x86,0x4f, 0xcf,0xd9,0x1c,0x6f,0x33,0x95);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2f543dc3-cfc1-4211-864f-cfd91c6f3395")
ID2D1GdiMetafile : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE Stream(
        ID2D1GdiMetafileSink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetBounds(
        D2D1_RECT_F *bounds) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GdiMetafile, 0x2f543dc3, 0xcfc1, 0x4211, 0x86,0x4f, 0xcf,0xd9,0x1c,0x6f,0x33,0x95)
#endif
#else
typedef struct ID2D1GdiMetafileVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1GdiMetafile *This,
        ID2D1Factory **factory);

    /*** ID2D1GdiMetafile methods ***/
    HRESULT (STDMETHODCALLTYPE *Stream)(
        ID2D1GdiMetafile *This,
        ID2D1GdiMetafileSink *sink);

    HRESULT (STDMETHODCALLTYPE *GetBounds)(
        ID2D1GdiMetafile *This,
        D2D1_RECT_F *bounds);

    END_INTERFACE
} ID2D1GdiMetafileVtbl;

interface ID2D1GdiMetafile {
    CONST_VTBL ID2D1GdiMetafileVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GdiMetafile_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GdiMetafile_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GdiMetafile_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1GdiMetafile_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1GdiMetafile methods ***/
#define ID2D1GdiMetafile_Stream(This,sink) (This)->lpVtbl->Stream(This,sink)
#define ID2D1GdiMetafile_GetBounds(This,bounds) (This)->lpVtbl->GetBounds(This,bounds)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1GdiMetafile_QueryInterface(ID2D1GdiMetafile* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1GdiMetafile_AddRef(ID2D1GdiMetafile* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1GdiMetafile_Release(ID2D1GdiMetafile* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1GdiMetafile_GetFactory(ID2D1GdiMetafile* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1GdiMetafile methods ***/
static inline HRESULT ID2D1GdiMetafile_Stream(ID2D1GdiMetafile* This,ID2D1GdiMetafileSink *sink) {
    return This->lpVtbl->Stream(This,sink);
}
static inline HRESULT ID2D1GdiMetafile_GetBounds(ID2D1GdiMetafile* This,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,bounds);
}
#endif
#endif

#endif


#endif  /* __ID2D1GdiMetafile_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1PathGeometry1 interface
 */
#ifndef __ID2D1PathGeometry1_INTERFACE_DEFINED__
#define __ID2D1PathGeometry1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1PathGeometry1, 0x62baa2d2, 0xab54, 0x41b7, 0xb8,0x72, 0x78,0x7e,0x01,0x06,0xa4,0x21);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("62baa2d2-ab54-41b7-b872-787e0106a421")
ID2D1PathGeometry1 : public ID2D1PathGeometry
{
    virtual HRESULT STDMETHODCALLTYPE ComputePointAndSegmentAtLength(
        float length,
        UINT32 start_segment,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_POINT_DESCRIPTION *point_desc) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1PathGeometry1, 0x62baa2d2, 0xab54, 0x41b7, 0xb8,0x72, 0x78,0x7e,0x01,0x06,0xa4,0x21)
#endif
#else
typedef struct ID2D1PathGeometry1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1PathGeometry1 *This,
        ID2D1Factory **factory);

    /*** ID2D1Geometry methods ***/
    HRESULT (STDMETHODCALLTYPE *GetBounds)(
        ID2D1PathGeometry1 *This,
        const D2D1_MATRIX_3X2_F *transform,
        D2D1_RECT_F *bounds);

    HRESULT (STDMETHODCALLTYPE *GetWidenedBounds)(
        ID2D1PathGeometry1 *This,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_RECT_F *bounds);

    HRESULT (STDMETHODCALLTYPE *StrokeContainsPoint)(
        ID2D1PathGeometry1 *This,
        D2D1_POINT_2F point,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        BOOL *contains);

    HRESULT (STDMETHODCALLTYPE *FillContainsPoint)(
        ID2D1PathGeometry1 *This,
        D2D1_POINT_2F point,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        BOOL *contains);

    HRESULT (STDMETHODCALLTYPE *CompareWithGeometry)(
        ID2D1PathGeometry1 *This,
        ID2D1Geometry *geometry,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_GEOMETRY_RELATION *relation);

    HRESULT (STDMETHODCALLTYPE *Simplify)(
        ID2D1PathGeometry1 *This,
        D2D1_GEOMETRY_SIMPLIFICATION_OPTION option,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink);

    HRESULT (STDMETHODCALLTYPE *Tessellate)(
        ID2D1PathGeometry1 *This,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1TessellationSink *sink);

    HRESULT (STDMETHODCALLTYPE *CombineWithGeometry)(
        ID2D1PathGeometry1 *This,
        ID2D1Geometry *geometry,
        D2D1_COMBINE_MODE combine_mode,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink);

    HRESULT (STDMETHODCALLTYPE *Outline)(
        ID2D1PathGeometry1 *This,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink);

    HRESULT (STDMETHODCALLTYPE *ComputeArea)(
        ID2D1PathGeometry1 *This,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        float *area);

    HRESULT (STDMETHODCALLTYPE *ComputeLength)(
        ID2D1PathGeometry1 *This,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        float *length);

    HRESULT (STDMETHODCALLTYPE *ComputePointAtLength)(
        ID2D1PathGeometry1 *This,
        float length,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_POINT_2F *point,
        D2D1_POINT_2F *tangent);

    HRESULT (STDMETHODCALLTYPE *Widen)(
        ID2D1PathGeometry1 *This,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink);

    /*** ID2D1PathGeometry methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        ID2D1PathGeometry1 *This,
        ID2D1GeometrySink **sink);

    HRESULT (STDMETHODCALLTYPE *Stream)(
        ID2D1PathGeometry1 *This,
        ID2D1GeometrySink *sink);

    HRESULT (STDMETHODCALLTYPE *GetSegmentCount)(
        ID2D1PathGeometry1 *This,
        UINT32 *count);

    HRESULT (STDMETHODCALLTYPE *GetFigureCount)(
        ID2D1PathGeometry1 *This,
        UINT32 *count);

    /*** ID2D1PathGeometry1 methods ***/
    HRESULT (STDMETHODCALLTYPE *ComputePointAndSegmentAtLength)(
        ID2D1PathGeometry1 *This,
        float length,
        UINT32 start_segment,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_POINT_DESCRIPTION *point_desc);

    END_INTERFACE
} ID2D1PathGeometry1Vtbl;

interface ID2D1PathGeometry1 {
    CONST_VTBL ID2D1PathGeometry1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1PathGeometry1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1PathGeometry1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1PathGeometry1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1PathGeometry1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1PathGeometry1_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1PathGeometry1_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1PathGeometry1_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1PathGeometry1_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1PathGeometry1_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1PathGeometry1_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1PathGeometry1_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1PathGeometry1_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1PathGeometry1_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1PathGeometry1_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1PathGeometry1_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1PathGeometry1_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1PathGeometry1_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1PathGeometry methods ***/
#define ID2D1PathGeometry1_Open(This,sink) (This)->lpVtbl->Open(This,sink)
#define ID2D1PathGeometry1_Stream(This,sink) (This)->lpVtbl->Stream(This,sink)
#define ID2D1PathGeometry1_GetSegmentCount(This,count) (This)->lpVtbl->GetSegmentCount(This,count)
#define ID2D1PathGeometry1_GetFigureCount(This,count) (This)->lpVtbl->GetFigureCount(This,count)
/*** ID2D1PathGeometry1 methods ***/
#define ID2D1PathGeometry1_ComputePointAndSegmentAtLength(This,length,start_segment,transform,tolerance,point_desc) (This)->lpVtbl->ComputePointAndSegmentAtLength(This,length,start_segment,transform,tolerance,point_desc)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1PathGeometry1_QueryInterface(ID2D1PathGeometry1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1PathGeometry1_AddRef(ID2D1PathGeometry1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1PathGeometry1_Release(ID2D1PathGeometry1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1PathGeometry1_GetFactory(ID2D1PathGeometry1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static inline HRESULT ID2D1PathGeometry1_GetBounds(ID2D1PathGeometry1* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static inline HRESULT ID2D1PathGeometry1_GetWidenedBounds(ID2D1PathGeometry1* This,float stroke_width,ID2D1StrokeStyle *stroke_style,const D2D1_MATRIX_3X2_F *transform,float tolerance,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds);
}
static inline HRESULT ID2D1PathGeometry1_StrokeContainsPoint(ID2D1PathGeometry1* This,D2D1_POINT_2F point,float stroke_width,ID2D1StrokeStyle *stroke_style,const D2D1_MATRIX_3X2_F *transform,float tolerance,BOOL *contains) {
    return This->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains);
}
static inline HRESULT ID2D1PathGeometry1_FillContainsPoint(ID2D1PathGeometry1* This,D2D1_POINT_2F point,const D2D1_MATRIX_3X2_F *transform,float tolerance,BOOL *contains) {
    return This->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains);
}
static inline HRESULT ID2D1PathGeometry1_CompareWithGeometry(ID2D1PathGeometry1* This,ID2D1Geometry *geometry,const D2D1_MATRIX_3X2_F *transform,float tolerance,D2D1_GEOMETRY_RELATION *relation) {
    return This->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation);
}
static inline HRESULT ID2D1PathGeometry1_Simplify(ID2D1PathGeometry1* This,D2D1_GEOMETRY_SIMPLIFICATION_OPTION option,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Simplify(This,option,transform,tolerance,sink);
}
static inline HRESULT ID2D1PathGeometry1_Tessellate(ID2D1PathGeometry1* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static inline HRESULT ID2D1PathGeometry1_CombineWithGeometry(ID2D1PathGeometry1* This,ID2D1Geometry *geometry,D2D1_COMBINE_MODE combine_mode,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink);
}
static inline HRESULT ID2D1PathGeometry1_Outline(ID2D1PathGeometry1* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static inline HRESULT ID2D1PathGeometry1_ComputeArea(ID2D1PathGeometry1* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static inline HRESULT ID2D1PathGeometry1_ComputeLength(ID2D1PathGeometry1* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static inline HRESULT ID2D1PathGeometry1_ComputePointAtLength(ID2D1PathGeometry1* This,float length,const D2D1_MATRIX_3X2_F *transform,float tolerance,D2D1_POINT_2F *point,D2D1_POINT_2F *tangent) {
    return This->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent);
}
static inline HRESULT ID2D1PathGeometry1_Widen(ID2D1PathGeometry1* This,float stroke_width,ID2D1StrokeStyle *stroke_style,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink);
}
/*** ID2D1PathGeometry methods ***/
static inline HRESULT ID2D1PathGeometry1_Open(ID2D1PathGeometry1* This,ID2D1GeometrySink **sink) {
    return This->lpVtbl->Open(This,sink);
}
static inline HRESULT ID2D1PathGeometry1_Stream(ID2D1PathGeometry1* This,ID2D1GeometrySink *sink) {
    return This->lpVtbl->Stream(This,sink);
}
static inline HRESULT ID2D1PathGeometry1_GetSegmentCount(ID2D1PathGeometry1* This,UINT32 *count) {
    return This->lpVtbl->GetSegmentCount(This,count);
}
static inline HRESULT ID2D1PathGeometry1_GetFigureCount(ID2D1PathGeometry1* This,UINT32 *count) {
    return This->lpVtbl->GetFigureCount(This,count);
}
/*** ID2D1PathGeometry1 methods ***/
static inline HRESULT ID2D1PathGeometry1_ComputePointAndSegmentAtLength(ID2D1PathGeometry1* This,float length,UINT32 start_segment,const D2D1_MATRIX_3X2_F *transform,float tolerance,D2D1_POINT_DESCRIPTION *point_desc) {
    return This->lpVtbl->ComputePointAndSegmentAtLength(This,length,start_segment,transform,tolerance,point_desc);
}
#endif
#endif

#endif


#endif  /* __ID2D1PathGeometry1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Properties interface
 */
#ifndef __ID2D1Properties_INTERFACE_DEFINED__
#define __ID2D1Properties_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Properties, 0x483473d7, 0xcd46, 0x4f9d, 0x9d,0x3a, 0x31,0x12,0xaa,0x80,0x15,0x9d);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("483473d7-cd46-4f9d-9d3a-3112aa80159d")
ID2D1Properties : public IUnknown
{
    virtual UINT32 STDMETHODCALLTYPE GetPropertyCount(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetPropertyName(
        UINT32 index,
        WCHAR *name,
        UINT32 name_count) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetPropertyNameLength(
        UINT32 index) = 0;

    virtual D2D1_PROPERTY_TYPE STDMETHODCALLTYPE GetType(
        UINT32 index) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetPropertyIndex(
        const WCHAR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetValueByName(
        const WCHAR *name,
        D2D1_PROPERTY_TYPE type,
        const BYTE *value,
        UINT32 value_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetValue(
        UINT32 index,
        D2D1_PROPERTY_TYPE type,
        const BYTE *value,
        UINT32 value_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetValueByName(
        const WCHAR *name,
        D2D1_PROPERTY_TYPE type,
        BYTE *value,
        UINT32 value_size) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetValue(
        UINT32 index,
        D2D1_PROPERTY_TYPE type,
        BYTE *value,
        UINT32 value_size) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetValueSize(
        UINT32 index) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSubProperties(
        UINT32 index,
        ID2D1Properties **props) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Properties, 0x483473d7, 0xcd46, 0x4f9d, 0x9d,0x3a, 0x31,0x12,0xaa,0x80,0x15,0x9d)
#endif
#else
typedef struct ID2D1PropertiesVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Properties methods ***/
    UINT32 (STDMETHODCALLTYPE *GetPropertyCount)(
        ID2D1Properties *This);

    HRESULT (STDMETHODCALLTYPE *GetPropertyName)(
        ID2D1Properties *This,
        UINT32 index,
        WCHAR *name,
        UINT32 name_count);

    UINT32 (STDMETHODCALLTYPE *GetPropertyNameLength)(
        ID2D1Properties *This,
        UINT32 index);

    D2D1_PROPERTY_TYPE (STDMETHODCALLTYPE *GetType)(
        ID2D1Properties *This,
        UINT32 index);

    UINT32 (STDMETHODCALLTYPE *GetPropertyIndex)(
        ID2D1Properties *This,
        const WCHAR *name);

    HRESULT (STDMETHODCALLTYPE *SetValueByName)(
        ID2D1Properties *This,
        const WCHAR *name,
        D2D1_PROPERTY_TYPE type,
        const BYTE *value,
        UINT32 value_size);

    HRESULT (STDMETHODCALLTYPE *SetValue)(
        ID2D1Properties *This,
        UINT32 index,
        D2D1_PROPERTY_TYPE type,
        const BYTE *value,
        UINT32 value_size);

    HRESULT (STDMETHODCALLTYPE *GetValueByName)(
        ID2D1Properties *This,
        const WCHAR *name,
        D2D1_PROPERTY_TYPE type,
        BYTE *value,
        UINT32 value_size);

    HRESULT (STDMETHODCALLTYPE *GetValue)(
        ID2D1Properties *This,
        UINT32 index,
        D2D1_PROPERTY_TYPE type,
        BYTE *value,
        UINT32 value_size);

    UINT32 (STDMETHODCALLTYPE *GetValueSize)(
        ID2D1Properties *This,
        UINT32 index);

    HRESULT (STDMETHODCALLTYPE *GetSubProperties)(
        ID2D1Properties *This,
        UINT32 index,
        ID2D1Properties **props);

    END_INTERFACE
} ID2D1PropertiesVtbl;

interface ID2D1Properties {
    CONST_VTBL ID2D1PropertiesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Properties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Properties_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Properties_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Properties methods ***/
#define ID2D1Properties_GetPropertyCount(This) (This)->lpVtbl->GetPropertyCount(This)
#define ID2D1Properties_GetPropertyName(This,index,name,name_count) (This)->lpVtbl->GetPropertyName(This,index,name,name_count)
#define ID2D1Properties_GetPropertyNameLength(This,index) (This)->lpVtbl->GetPropertyNameLength(This,index)
#define ID2D1Properties_GetType(This,index) (This)->lpVtbl->GetType(This,index)
#define ID2D1Properties_GetPropertyIndex(This,name) (This)->lpVtbl->GetPropertyIndex(This,name)
#define ID2D1Properties_SetValueByName(This,name,type,value,value_size) (This)->lpVtbl->SetValueByName(This,name,type,value,value_size)
#define ID2D1Properties_SetValue(This,index,type,value,value_size) (This)->lpVtbl->SetValue(This,index,type,value,value_size)
#define ID2D1Properties_GetValueByName(This,name,type,value,value_size) (This)->lpVtbl->GetValueByName(This,name,type,value,value_size)
#define ID2D1Properties_GetValue(This,index,type,value,value_size) (This)->lpVtbl->GetValue(This,index,type,value,value_size)
#define ID2D1Properties_GetValueSize(This,index) (This)->lpVtbl->GetValueSize(This,index)
#define ID2D1Properties_GetSubProperties(This,index,props) (This)->lpVtbl->GetSubProperties(This,index,props)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Properties_QueryInterface(ID2D1Properties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Properties_AddRef(ID2D1Properties* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Properties_Release(ID2D1Properties* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Properties methods ***/
static inline UINT32 ID2D1Properties_GetPropertyCount(ID2D1Properties* This) {
    return This->lpVtbl->GetPropertyCount(This);
}
static inline HRESULT ID2D1Properties_GetPropertyName(ID2D1Properties* This,UINT32 index,WCHAR *name,UINT32 name_count) {
    return This->lpVtbl->GetPropertyName(This,index,name,name_count);
}
static inline UINT32 ID2D1Properties_GetPropertyNameLength(ID2D1Properties* This,UINT32 index) {
    return This->lpVtbl->GetPropertyNameLength(This,index);
}
static inline D2D1_PROPERTY_TYPE ID2D1Properties_GetType(ID2D1Properties* This,UINT32 index) {
    return This->lpVtbl->GetType(This,index);
}
static inline UINT32 ID2D1Properties_GetPropertyIndex(ID2D1Properties* This,const WCHAR *name) {
    return This->lpVtbl->GetPropertyIndex(This,name);
}
static inline HRESULT ID2D1Properties_SetValueByName(ID2D1Properties* This,const WCHAR *name,D2D1_PROPERTY_TYPE type,const BYTE *value,UINT32 value_size) {
    return This->lpVtbl->SetValueByName(This,name,type,value,value_size);
}
static inline HRESULT ID2D1Properties_SetValue(ID2D1Properties* This,UINT32 index,D2D1_PROPERTY_TYPE type,const BYTE *value,UINT32 value_size) {
    return This->lpVtbl->SetValue(This,index,type,value,value_size);
}
static inline HRESULT ID2D1Properties_GetValueByName(ID2D1Properties* This,const WCHAR *name,D2D1_PROPERTY_TYPE type,BYTE *value,UINT32 value_size) {
    return This->lpVtbl->GetValueByName(This,name,type,value,value_size);
}
static inline HRESULT ID2D1Properties_GetValue(ID2D1Properties* This,UINT32 index,D2D1_PROPERTY_TYPE type,BYTE *value,UINT32 value_size) {
    return This->lpVtbl->GetValue(This,index,type,value,value_size);
}
static inline UINT32 ID2D1Properties_GetValueSize(ID2D1Properties* This,UINT32 index) {
    return This->lpVtbl->GetValueSize(This,index);
}
static inline HRESULT ID2D1Properties_GetSubProperties(ID2D1Properties* This,UINT32 index,ID2D1Properties **props) {
    return This->lpVtbl->GetSubProperties(This,index,props);
}
#endif
#endif

#endif


#endif  /* __ID2D1Properties_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Effect interface
 */
#ifndef __ID2D1Effect_INTERFACE_DEFINED__
#define __ID2D1Effect_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Effect, 0x28211a43, 0x7d89, 0x476f, 0x81,0x81, 0x2d,0x61,0x59,0xb2,0x20,0xad);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("28211a43-7d89-476f-8181-2d6159b220ad")
ID2D1Effect : public ID2D1Properties
{
    virtual void STDMETHODCALLTYPE SetInput(
        UINT32 index,
        ID2D1Image *input,
        BOOL invalidate) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetInputCount(
        UINT32 count) = 0;

    virtual void STDMETHODCALLTYPE GetInput(
        UINT32 index,
        ID2D1Image **input) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetInputCount(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetOutput(
        ID2D1Image **output) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Effect, 0x28211a43, 0x7d89, 0x476f, 0x81,0x81, 0x2d,0x61,0x59,0xb2,0x20,0xad)
#endif
#else
typedef struct ID2D1EffectVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Properties methods ***/
    UINT32 (STDMETHODCALLTYPE *GetPropertyCount)(
        ID2D1Effect *This);

    HRESULT (STDMETHODCALLTYPE *GetPropertyName)(
        ID2D1Effect *This,
        UINT32 index,
        WCHAR *name,
        UINT32 name_count);

    UINT32 (STDMETHODCALLTYPE *GetPropertyNameLength)(
        ID2D1Effect *This,
        UINT32 index);

    D2D1_PROPERTY_TYPE (STDMETHODCALLTYPE *GetType)(
        ID2D1Effect *This,
        UINT32 index);

    UINT32 (STDMETHODCALLTYPE *GetPropertyIndex)(
        ID2D1Effect *This,
        const WCHAR *name);

    HRESULT (STDMETHODCALLTYPE *SetValueByName)(
        ID2D1Effect *This,
        const WCHAR *name,
        D2D1_PROPERTY_TYPE type,
        const BYTE *value,
        UINT32 value_size);

    HRESULT (STDMETHODCALLTYPE *SetValue)(
        ID2D1Effect *This,
        UINT32 index,
        D2D1_PROPERTY_TYPE type,
        const BYTE *value,
        UINT32 value_size);

    HRESULT (STDMETHODCALLTYPE *GetValueByName)(
        ID2D1Effect *This,
        const WCHAR *name,
        D2D1_PROPERTY_TYPE type,
        BYTE *value,
        UINT32 value_size);

    HRESULT (STDMETHODCALLTYPE *GetValue)(
        ID2D1Effect *This,
        UINT32 index,
        D2D1_PROPERTY_TYPE type,
        BYTE *value,
        UINT32 value_size);

    UINT32 (STDMETHODCALLTYPE *GetValueSize)(
        ID2D1Effect *This,
        UINT32 index);

    HRESULT (STDMETHODCALLTYPE *GetSubProperties)(
        ID2D1Effect *This,
        UINT32 index,
        ID2D1Properties **props);

    /*** ID2D1Effect methods ***/
    void (STDMETHODCALLTYPE *SetInput)(
        ID2D1Effect *This,
        UINT32 index,
        ID2D1Image *input,
        BOOL invalidate);

    HRESULT (STDMETHODCALLTYPE *SetInputCount)(
        ID2D1Effect *This,
        UINT32 count);

    void (STDMETHODCALLTYPE *GetInput)(
        ID2D1Effect *This,
        UINT32 index,
        ID2D1Image **input);

    UINT32 (STDMETHODCALLTYPE *GetInputCount)(
        ID2D1Effect *This);

    void (STDMETHODCALLTYPE *GetOutput)(
        ID2D1Effect *This,
        ID2D1Image **output);

    END_INTERFACE
} ID2D1EffectVtbl;

interface ID2D1Effect {
    CONST_VTBL ID2D1EffectVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Effect_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Effect_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Effect_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Properties methods ***/
#define ID2D1Effect_GetPropertyCount(This) (This)->lpVtbl->GetPropertyCount(This)
#define ID2D1Effect_GetPropertyName(This,index,name,name_count) (This)->lpVtbl->GetPropertyName(This,index,name,name_count)
#define ID2D1Effect_GetPropertyNameLength(This,index) (This)->lpVtbl->GetPropertyNameLength(This,index)
#define ID2D1Effect_GetType(This,index) (This)->lpVtbl->GetType(This,index)
#define ID2D1Effect_GetPropertyIndex(This,name) (This)->lpVtbl->GetPropertyIndex(This,name)
#define ID2D1Effect_SetValueByName(This,name,type,value,value_size) (This)->lpVtbl->SetValueByName(This,name,type,value,value_size)
#define ID2D1Effect_SetValue(This,index,type,value,value_size) (This)->lpVtbl->SetValue(This,index,type,value,value_size)
#define ID2D1Effect_GetValueByName(This,name,type,value,value_size) (This)->lpVtbl->GetValueByName(This,name,type,value,value_size)
#define ID2D1Effect_GetValue(This,index,type,value,value_size) (This)->lpVtbl->GetValue(This,index,type,value,value_size)
#define ID2D1Effect_GetValueSize(This,index) (This)->lpVtbl->GetValueSize(This,index)
#define ID2D1Effect_GetSubProperties(This,index,props) (This)->lpVtbl->GetSubProperties(This,index,props)
/*** ID2D1Effect methods ***/
#define ID2D1Effect_SetInput(This,index,input,invalidate) (This)->lpVtbl->SetInput(This,index,input,invalidate)
#define ID2D1Effect_SetInputCount(This,count) (This)->lpVtbl->SetInputCount(This,count)
#define ID2D1Effect_GetInput(This,index,input) (This)->lpVtbl->GetInput(This,index,input)
#define ID2D1Effect_GetInputCount(This) (This)->lpVtbl->GetInputCount(This)
#define ID2D1Effect_GetOutput(This,output) (This)->lpVtbl->GetOutput(This,output)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Effect_QueryInterface(ID2D1Effect* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Effect_AddRef(ID2D1Effect* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Effect_Release(ID2D1Effect* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Properties methods ***/
static inline UINT32 ID2D1Effect_GetPropertyCount(ID2D1Effect* This) {
    return This->lpVtbl->GetPropertyCount(This);
}
static inline HRESULT ID2D1Effect_GetPropertyName(ID2D1Effect* This,UINT32 index,WCHAR *name,UINT32 name_count) {
    return This->lpVtbl->GetPropertyName(This,index,name,name_count);
}
static inline UINT32 ID2D1Effect_GetPropertyNameLength(ID2D1Effect* This,UINT32 index) {
    return This->lpVtbl->GetPropertyNameLength(This,index);
}
static inline D2D1_PROPERTY_TYPE ID2D1Effect_GetType(ID2D1Effect* This,UINT32 index) {
    return This->lpVtbl->GetType(This,index);
}
static inline UINT32 ID2D1Effect_GetPropertyIndex(ID2D1Effect* This,const WCHAR *name) {
    return This->lpVtbl->GetPropertyIndex(This,name);
}
static inline HRESULT ID2D1Effect_SetValueByName(ID2D1Effect* This,const WCHAR *name,D2D1_PROPERTY_TYPE type,const BYTE *value,UINT32 value_size) {
    return This->lpVtbl->SetValueByName(This,name,type,value,value_size);
}
static inline HRESULT ID2D1Effect_SetValue(ID2D1Effect* This,UINT32 index,D2D1_PROPERTY_TYPE type,const BYTE *value,UINT32 value_size) {
    return This->lpVtbl->SetValue(This,index,type,value,value_size);
}
static inline HRESULT ID2D1Effect_GetValueByName(ID2D1Effect* This,const WCHAR *name,D2D1_PROPERTY_TYPE type,BYTE *value,UINT32 value_size) {
    return This->lpVtbl->GetValueByName(This,name,type,value,value_size);
}
static inline HRESULT ID2D1Effect_GetValue(ID2D1Effect* This,UINT32 index,D2D1_PROPERTY_TYPE type,BYTE *value,UINT32 value_size) {
    return This->lpVtbl->GetValue(This,index,type,value,value_size);
}
static inline UINT32 ID2D1Effect_GetValueSize(ID2D1Effect* This,UINT32 index) {
    return This->lpVtbl->GetValueSize(This,index);
}
static inline HRESULT ID2D1Effect_GetSubProperties(ID2D1Effect* This,UINT32 index,ID2D1Properties **props) {
    return This->lpVtbl->GetSubProperties(This,index,props);
}
/*** ID2D1Effect methods ***/
static inline void ID2D1Effect_SetInput(ID2D1Effect* This,UINT32 index,ID2D1Image *input,BOOL invalidate) {
    This->lpVtbl->SetInput(This,index,input,invalidate);
}
static inline HRESULT ID2D1Effect_SetInputCount(ID2D1Effect* This,UINT32 count) {
    return This->lpVtbl->SetInputCount(This,count);
}
static inline void ID2D1Effect_GetInput(ID2D1Effect* This,UINT32 index,ID2D1Image **input) {
    This->lpVtbl->GetInput(This,index,input);
}
static inline UINT32 ID2D1Effect_GetInputCount(ID2D1Effect* This) {
    return This->lpVtbl->GetInputCount(This);
}
static inline void ID2D1Effect_GetOutput(ID2D1Effect* This,ID2D1Image **output) {
    This->lpVtbl->GetOutput(This,output);
}
#endif
#endif

#endif


#endif  /* __ID2D1Effect_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DrawingStateBlock1 interface
 */
#ifndef __ID2D1DrawingStateBlock1_INTERFACE_DEFINED__
#define __ID2D1DrawingStateBlock1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DrawingStateBlock1, 0x689f1f85, 0xc72e, 0x4e33, 0x8f,0x19, 0x85,0x75,0x4e,0xfd,0x5a,0xce);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("689f1f85-c72e-4e33-8f19-85754efd5ace")
ID2D1DrawingStateBlock1 : public ID2D1DrawingStateBlock
{
    virtual void STDMETHODCALLTYPE GetDescription(
        D2D1_DRAWING_STATE_DESCRIPTION1 *desc) = 0;

    virtual void STDMETHODCALLTYPE SetDescription(
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DrawingStateBlock1, 0x689f1f85, 0xc72e, 0x4e33, 0x8f,0x19, 0x85,0x75,0x4e,0xfd,0x5a,0xce)
#endif
#else
typedef struct ID2D1DrawingStateBlock1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DrawingStateBlock1 *This,
        ID2D1Factory **factory);

    /*** ID2D1DrawingStateBlock methods ***/
    void (STDMETHODCALLTYPE *GetDescription)(
        ID2D1DrawingStateBlock1 *This,
        D2D1_DRAWING_STATE_DESCRIPTION *desc);

    void (STDMETHODCALLTYPE *SetDescription)(
        ID2D1DrawingStateBlock1 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DrawingStateBlock1 *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DrawingStateBlock1 *This,
        IDWriteRenderingParams **text_rendering_params);

    /*** ID2D1DrawingStateBlock1 methods ***/
    void (STDMETHODCALLTYPE *ID2D1DrawingStateBlock1_GetDescription)(
        ID2D1DrawingStateBlock1 *This,
        D2D1_DRAWING_STATE_DESCRIPTION1 *desc);

    void (STDMETHODCALLTYPE *ID2D1DrawingStateBlock1_SetDescription)(
        ID2D1DrawingStateBlock1 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc);

    END_INTERFACE
} ID2D1DrawingStateBlock1Vtbl;

interface ID2D1DrawingStateBlock1 {
    CONST_VTBL ID2D1DrawingStateBlock1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DrawingStateBlock1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DrawingStateBlock1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DrawingStateBlock1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DrawingStateBlock1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1DrawingStateBlock methods ***/
#define ID2D1DrawingStateBlock1_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DrawingStateBlock1_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
/*** ID2D1DrawingStateBlock1 methods ***/
#define ID2D1DrawingStateBlock1_GetDescription(This,desc) (This)->lpVtbl->ID2D1DrawingStateBlock1_GetDescription(This,desc)
#define ID2D1DrawingStateBlock1_SetDescription(This,desc) (This)->lpVtbl->ID2D1DrawingStateBlock1_SetDescription(This,desc)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DrawingStateBlock1_QueryInterface(ID2D1DrawingStateBlock1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DrawingStateBlock1_AddRef(ID2D1DrawingStateBlock1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DrawingStateBlock1_Release(ID2D1DrawingStateBlock1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DrawingStateBlock1_GetFactory(ID2D1DrawingStateBlock1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1DrawingStateBlock methods ***/
static inline void ID2D1DrawingStateBlock1_SetTextRenderingParams(ID2D1DrawingStateBlock1* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DrawingStateBlock1_GetTextRenderingParams(ID2D1DrawingStateBlock1* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
/*** ID2D1DrawingStateBlock1 methods ***/
static inline void ID2D1DrawingStateBlock1_GetDescription(ID2D1DrawingStateBlock1* This,D2D1_DRAWING_STATE_DESCRIPTION1 *desc) {
    This->lpVtbl->ID2D1DrawingStateBlock1_GetDescription(This,desc);
}
static inline void ID2D1DrawingStateBlock1_SetDescription(ID2D1DrawingStateBlock1* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc) {
    This->lpVtbl->ID2D1DrawingStateBlock1_SetDescription(This,desc);
}
#endif
#endif

#endif


#endif  /* __ID2D1DrawingStateBlock1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ColorContext interface
 */
#ifndef __ID2D1ColorContext_INTERFACE_DEFINED__
#define __ID2D1ColorContext_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ColorContext, 0x1c4820bb, 0x5771, 0x4518, 0xa5,0x81, 0x2f,0xe4,0xdd,0x0e,0xc6,0x57);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1c4820bb-5771-4518-a581-2fe4dd0ec657")
ID2D1ColorContext : public ID2D1Resource
{
    virtual D2D1_COLOR_SPACE STDMETHODCALLTYPE GetColorSpace(
        ) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetProfileSize(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProfile(
        BYTE *profile,
        UINT32 size) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ColorContext, 0x1c4820bb, 0x5771, 0x4518, 0xa5,0x81, 0x2f,0xe4,0xdd,0x0e,0xc6,0x57)
#endif
#else
typedef struct ID2D1ColorContextVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1ColorContext *This,
        ID2D1Factory **factory);

    /*** ID2D1ColorContext methods ***/
    D2D1_COLOR_SPACE (STDMETHODCALLTYPE *GetColorSpace)(
        ID2D1ColorContext *This);

    UINT32 (STDMETHODCALLTYPE *GetProfileSize)(
        ID2D1ColorContext *This);

    HRESULT (STDMETHODCALLTYPE *GetProfile)(
        ID2D1ColorContext *This,
        BYTE *profile,
        UINT32 size);

    END_INTERFACE
} ID2D1ColorContextVtbl;

interface ID2D1ColorContext {
    CONST_VTBL ID2D1ColorContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ColorContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ColorContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ColorContext_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1ColorContext_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1ColorContext methods ***/
#define ID2D1ColorContext_GetColorSpace(This) (This)->lpVtbl->GetColorSpace(This)
#define ID2D1ColorContext_GetProfileSize(This) (This)->lpVtbl->GetProfileSize(This)
#define ID2D1ColorContext_GetProfile(This,profile,size) (This)->lpVtbl->GetProfile(This,profile,size)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1ColorContext_QueryInterface(ID2D1ColorContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1ColorContext_AddRef(ID2D1ColorContext* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1ColorContext_Release(ID2D1ColorContext* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1ColorContext_GetFactory(ID2D1ColorContext* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1ColorContext methods ***/
static inline D2D1_COLOR_SPACE ID2D1ColorContext_GetColorSpace(ID2D1ColorContext* This) {
    return This->lpVtbl->GetColorSpace(This);
}
static inline UINT32 ID2D1ColorContext_GetProfileSize(ID2D1ColorContext* This) {
    return This->lpVtbl->GetProfileSize(This);
}
static inline HRESULT ID2D1ColorContext_GetProfile(ID2D1ColorContext* This,BYTE *profile,UINT32 size) {
    return This->lpVtbl->GetProfile(This,profile,size);
}
#endif
#endif

#endif


#endif  /* __ID2D1ColorContext_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Bitmap1 interface
 */
#ifndef __ID2D1Bitmap1_INTERFACE_DEFINED__
#define __ID2D1Bitmap1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Bitmap1, 0xa898a84c, 0x3873, 0x4588, 0xb0,0x8b, 0xeb,0xbf,0x97,0x8d,0xf0,0x41);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a898a84c-3873-4588-b08b-ebbf978df041")
ID2D1Bitmap1 : public ID2D1Bitmap
{
    virtual void STDMETHODCALLTYPE GetColorContext(
        ID2D1ColorContext **context) = 0;

    virtual D2D1_BITMAP_OPTIONS STDMETHODCALLTYPE GetOptions(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSurface(
        IDXGISurface **surface) = 0;

    virtual HRESULT STDMETHODCALLTYPE Map(
        D2D1_MAP_OPTIONS options,
        D2D1_MAPPED_RECT *mapped_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE Unmap(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Bitmap1, 0xa898a84c, 0x3873, 0x4588, 0xb0,0x8b, 0xeb,0xbf,0x97,0x8d,0xf0,0x41)
#endif
#else
typedef struct ID2D1Bitmap1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Bitmap1 *This,
        ID2D1Factory **factory);

    /*** ID2D1Bitmap methods ***/
    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1Bitmap1 *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1Bitmap1 *This,
        D2D1_SIZE_U *__ret);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1Bitmap1 *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1Bitmap1 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CopyFromBitmap)(
        ID2D1Bitmap1 *This,
        const D2D1_POINT_2U *dst_point,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_U *src_rect);

    HRESULT (STDMETHODCALLTYPE *CopyFromRenderTarget)(
        ID2D1Bitmap1 *This,
        const D2D1_POINT_2U *dst_point,
        ID2D1RenderTarget *render_target,
        const D2D1_RECT_U *src_rect);

    HRESULT (STDMETHODCALLTYPE *CopyFromMemory)(
        ID2D1Bitmap1 *This,
        const D2D1_RECT_U *dst_rect,
        const void *src_data,
        UINT32 pitch);

    /*** ID2D1Bitmap1 methods ***/
    void (STDMETHODCALLTYPE *GetColorContext)(
        ID2D1Bitmap1 *This,
        ID2D1ColorContext **context);

    D2D1_BITMAP_OPTIONS (STDMETHODCALLTYPE *GetOptions)(
        ID2D1Bitmap1 *This);

    HRESULT (STDMETHODCALLTYPE *GetSurface)(
        ID2D1Bitmap1 *This,
        IDXGISurface **surface);

    HRESULT (STDMETHODCALLTYPE *Map)(
        ID2D1Bitmap1 *This,
        D2D1_MAP_OPTIONS options,
        D2D1_MAPPED_RECT *mapped_rect);

    HRESULT (STDMETHODCALLTYPE *Unmap)(
        ID2D1Bitmap1 *This);

    END_INTERFACE
} ID2D1Bitmap1Vtbl;

interface ID2D1Bitmap1 {
    CONST_VTBL ID2D1Bitmap1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Bitmap1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Bitmap1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Bitmap1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Bitmap1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Bitmap methods ***/
#define ID2D1Bitmap1_GetSize(This) ID2D1Bitmap1_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Bitmap1_GetPixelSize(This) ID2D1Bitmap1_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Bitmap1_GetPixelFormat(This) ID2D1Bitmap1_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Bitmap1_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1Bitmap1_CopyFromBitmap(This,dst_point,bitmap,src_rect) (This)->lpVtbl->CopyFromBitmap(This,dst_point,bitmap,src_rect)
#define ID2D1Bitmap1_CopyFromRenderTarget(This,dst_point,render_target,src_rect) (This)->lpVtbl->CopyFromRenderTarget(This,dst_point,render_target,src_rect)
#define ID2D1Bitmap1_CopyFromMemory(This,dst_rect,src_data,pitch) (This)->lpVtbl->CopyFromMemory(This,dst_rect,src_data,pitch)
/*** ID2D1Bitmap1 methods ***/
#define ID2D1Bitmap1_GetColorContext(This,context) (This)->lpVtbl->GetColorContext(This,context)
#define ID2D1Bitmap1_GetOptions(This) (This)->lpVtbl->GetOptions(This)
#define ID2D1Bitmap1_GetSurface(This,surface) (This)->lpVtbl->GetSurface(This,surface)
#define ID2D1Bitmap1_Map(This,options,mapped_rect) (This)->lpVtbl->Map(This,options,mapped_rect)
#define ID2D1Bitmap1_Unmap(This) (This)->lpVtbl->Unmap(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Bitmap1_QueryInterface(ID2D1Bitmap1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Bitmap1_AddRef(ID2D1Bitmap1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Bitmap1_Release(ID2D1Bitmap1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Bitmap1_GetFactory(ID2D1Bitmap1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Bitmap methods ***/
static inline D2D1_SIZE_F ID2D1Bitmap1_GetSize(ID2D1Bitmap1* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1Bitmap1_GetPixelSize(ID2D1Bitmap1* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline D2D1_PIXEL_FORMAT ID2D1Bitmap1_GetPixelFormat(ID2D1Bitmap1* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1Bitmap1_GetDpi(ID2D1Bitmap1* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Bitmap1_CopyFromBitmap(ID2D1Bitmap1* This,const D2D1_POINT_2U *dst_point,ID2D1Bitmap *bitmap,const D2D1_RECT_U *src_rect) {
    return This->lpVtbl->CopyFromBitmap(This,dst_point,bitmap,src_rect);
}
static inline HRESULT ID2D1Bitmap1_CopyFromRenderTarget(ID2D1Bitmap1* This,const D2D1_POINT_2U *dst_point,ID2D1RenderTarget *render_target,const D2D1_RECT_U *src_rect) {
    return This->lpVtbl->CopyFromRenderTarget(This,dst_point,render_target,src_rect);
}
static inline HRESULT ID2D1Bitmap1_CopyFromMemory(ID2D1Bitmap1* This,const D2D1_RECT_U *dst_rect,const void *src_data,UINT32 pitch) {
    return This->lpVtbl->CopyFromMemory(This,dst_rect,src_data,pitch);
}
/*** ID2D1Bitmap1 methods ***/
static inline void ID2D1Bitmap1_GetColorContext(ID2D1Bitmap1* This,ID2D1ColorContext **context) {
    This->lpVtbl->GetColorContext(This,context);
}
static inline D2D1_BITMAP_OPTIONS ID2D1Bitmap1_GetOptions(ID2D1Bitmap1* This) {
    return This->lpVtbl->GetOptions(This);
}
static inline HRESULT ID2D1Bitmap1_GetSurface(ID2D1Bitmap1* This,IDXGISurface **surface) {
    return This->lpVtbl->GetSurface(This,surface);
}
static inline HRESULT ID2D1Bitmap1_Map(ID2D1Bitmap1* This,D2D1_MAP_OPTIONS options,D2D1_MAPPED_RECT *mapped_rect) {
    return This->lpVtbl->Map(This,options,mapped_rect);
}
static inline HRESULT ID2D1Bitmap1_Unmap(ID2D1Bitmap1* This) {
    return This->lpVtbl->Unmap(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1Bitmap1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1BitmapBrush1 interface
 */
#ifndef __ID2D1BitmapBrush1_INTERFACE_DEFINED__
#define __ID2D1BitmapBrush1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1BitmapBrush1, 0x41343a53, 0xe41a, 0x49a2, 0x91,0xcd, 0x21,0x79,0x3b,0xbb,0x62,0xe5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("41343a53-e41a-49a2-91cd-21793bbb62e5")
ID2D1BitmapBrush1 : public ID2D1BitmapBrush
{
    virtual void STDMETHODCALLTYPE SetInterpolationMode1(
        D2D1_INTERPOLATION_MODE mode) = 0;

    virtual D2D1_INTERPOLATION_MODE STDMETHODCALLTYPE GetInterpolationMode1(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1BitmapBrush1, 0x41343a53, 0xe41a, 0x49a2, 0x91,0xcd, 0x21,0x79,0x3b,0xbb,0x62,0xe5)
#endif
#else
typedef struct ID2D1BitmapBrush1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1BitmapBrush1 *This,
        ID2D1Factory **factory);

    /*** ID2D1Brush methods ***/
    void (STDMETHODCALLTYPE *SetOpacity)(
        ID2D1BitmapBrush1 *This,
        float opacity);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1BitmapBrush1 *This,
        const D2D1_MATRIX_3X2_F *transform);

    float (STDMETHODCALLTYPE *GetOpacity)(
        ID2D1BitmapBrush1 *This);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1BitmapBrush1 *This,
        D2D1_MATRIX_3X2_F *transform);

    /*** ID2D1BitmapBrush methods ***/
    void (STDMETHODCALLTYPE *SetExtendModeX)(
        ID2D1BitmapBrush1 *This,
        D2D1_EXTEND_MODE mode);

    void (STDMETHODCALLTYPE *SetExtendModeY)(
        ID2D1BitmapBrush1 *This,
        D2D1_EXTEND_MODE mode);

    void (STDMETHODCALLTYPE *SetInterpolationMode)(
        ID2D1BitmapBrush1 *This,
        D2D1_BITMAP_INTERPOLATION_MODE mode);

    void (STDMETHODCALLTYPE *SetBitmap)(
        ID2D1BitmapBrush1 *This,
        ID2D1Bitmap *bitmap);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendModeX)(
        ID2D1BitmapBrush1 *This);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendModeY)(
        ID2D1BitmapBrush1 *This);

    D2D1_BITMAP_INTERPOLATION_MODE (STDMETHODCALLTYPE *GetInterpolationMode)(
        ID2D1BitmapBrush1 *This);

    void (STDMETHODCALLTYPE *GetBitmap)(
        ID2D1BitmapBrush1 *This,
        ID2D1Bitmap **bitmap);

    /*** ID2D1BitmapBrush1 methods ***/
    void (STDMETHODCALLTYPE *SetInterpolationMode1)(
        ID2D1BitmapBrush1 *This,
        D2D1_INTERPOLATION_MODE mode);

    D2D1_INTERPOLATION_MODE (STDMETHODCALLTYPE *GetInterpolationMode1)(
        ID2D1BitmapBrush1 *This);

    END_INTERFACE
} ID2D1BitmapBrush1Vtbl;

interface ID2D1BitmapBrush1 {
    CONST_VTBL ID2D1BitmapBrush1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1BitmapBrush1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1BitmapBrush1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1BitmapBrush1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1BitmapBrush1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1BitmapBrush1_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1BitmapBrush1_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1BitmapBrush1_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1BitmapBrush1_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
/*** ID2D1BitmapBrush methods ***/
#define ID2D1BitmapBrush1_SetExtendModeX(This,mode) (This)->lpVtbl->SetExtendModeX(This,mode)
#define ID2D1BitmapBrush1_SetExtendModeY(This,mode) (This)->lpVtbl->SetExtendModeY(This,mode)
#define ID2D1BitmapBrush1_SetInterpolationMode(This,mode) (This)->lpVtbl->SetInterpolationMode(This,mode)
#define ID2D1BitmapBrush1_SetBitmap(This,bitmap) (This)->lpVtbl->SetBitmap(This,bitmap)
#define ID2D1BitmapBrush1_GetExtendModeX(This) (This)->lpVtbl->GetExtendModeX(This)
#define ID2D1BitmapBrush1_GetExtendModeY(This) (This)->lpVtbl->GetExtendModeY(This)
#define ID2D1BitmapBrush1_GetInterpolationMode(This) (This)->lpVtbl->GetInterpolationMode(This)
#define ID2D1BitmapBrush1_GetBitmap(This,bitmap) (This)->lpVtbl->GetBitmap(This,bitmap)
/*** ID2D1BitmapBrush1 methods ***/
#define ID2D1BitmapBrush1_SetInterpolationMode1(This,mode) (This)->lpVtbl->SetInterpolationMode1(This,mode)
#define ID2D1BitmapBrush1_GetInterpolationMode1(This) (This)->lpVtbl->GetInterpolationMode1(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1BitmapBrush1_QueryInterface(ID2D1BitmapBrush1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1BitmapBrush1_AddRef(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1BitmapBrush1_Release(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1BitmapBrush1_GetFactory(ID2D1BitmapBrush1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static inline void ID2D1BitmapBrush1_SetOpacity(ID2D1BitmapBrush1* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static inline void ID2D1BitmapBrush1_SetTransform(ID2D1BitmapBrush1* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline float ID2D1BitmapBrush1_GetOpacity(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->GetOpacity(This);
}
static inline void ID2D1BitmapBrush1_GetTransform(ID2D1BitmapBrush1* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
/*** ID2D1BitmapBrush methods ***/
static inline void ID2D1BitmapBrush1_SetExtendModeX(ID2D1BitmapBrush1* This,D2D1_EXTEND_MODE mode) {
    This->lpVtbl->SetExtendModeX(This,mode);
}
static inline void ID2D1BitmapBrush1_SetExtendModeY(ID2D1BitmapBrush1* This,D2D1_EXTEND_MODE mode) {
    This->lpVtbl->SetExtendModeY(This,mode);
}
static inline void ID2D1BitmapBrush1_SetInterpolationMode(ID2D1BitmapBrush1* This,D2D1_BITMAP_INTERPOLATION_MODE mode) {
    This->lpVtbl->SetInterpolationMode(This,mode);
}
static inline void ID2D1BitmapBrush1_SetBitmap(ID2D1BitmapBrush1* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->SetBitmap(This,bitmap);
}
static inline D2D1_EXTEND_MODE ID2D1BitmapBrush1_GetExtendModeX(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->GetExtendModeX(This);
}
static inline D2D1_EXTEND_MODE ID2D1BitmapBrush1_GetExtendModeY(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->GetExtendModeY(This);
}
static inline D2D1_BITMAP_INTERPOLATION_MODE ID2D1BitmapBrush1_GetInterpolationMode(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->GetInterpolationMode(This);
}
static inline void ID2D1BitmapBrush1_GetBitmap(ID2D1BitmapBrush1* This,ID2D1Bitmap **bitmap) {
    This->lpVtbl->GetBitmap(This,bitmap);
}
/*** ID2D1BitmapBrush1 methods ***/
static inline void ID2D1BitmapBrush1_SetInterpolationMode1(ID2D1BitmapBrush1* This,D2D1_INTERPOLATION_MODE mode) {
    This->lpVtbl->SetInterpolationMode1(This,mode);
}
static inline D2D1_INTERPOLATION_MODE ID2D1BitmapBrush1_GetInterpolationMode1(ID2D1BitmapBrush1* This) {
    return This->lpVtbl->GetInterpolationMode1(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1BitmapBrush1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GradientStopCollection1 interface
 */
#ifndef __ID2D1GradientStopCollection1_INTERFACE_DEFINED__
#define __ID2D1GradientStopCollection1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GradientStopCollection1, 0xae1572f4, 0x5dd0, 0x4777, 0x99,0x8b, 0x92,0x79,0x47,0x2a,0xe6,0x3b);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("ae1572f4-5dd0-4777-998b-9279472ae63b")
ID2D1GradientStopCollection1 : public ID2D1GradientStopCollection
{
    virtual void STDMETHODCALLTYPE GetGradientStops1(
        D2D1_GRADIENT_STOP *gradient,
        UINT32 count) = 0;

    virtual D2D1_COLOR_SPACE STDMETHODCALLTYPE GetPreInterpolationSpace(
        ) = 0;

    virtual D2D1_COLOR_SPACE STDMETHODCALLTYPE GetPostInterpolationSpace(
        ) = 0;

    virtual D2D1_BUFFER_PRECISION STDMETHODCALLTYPE GetBufferPrecision(
        ) = 0;

    virtual D2D1_COLOR_INTERPOLATION_MODE STDMETHODCALLTYPE GetColorInterpolationMode(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GradientStopCollection1, 0xae1572f4, 0x5dd0, 0x4777, 0x99,0x8b, 0x92,0x79,0x47,0x2a,0xe6,0x3b)
#endif
#else
typedef struct ID2D1GradientStopCollection1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1GradientStopCollection1 *This,
        ID2D1Factory **factory);

    /*** ID2D1GradientStopCollection methods ***/
    UINT32 (STDMETHODCALLTYPE *GetGradientStopCount)(
        ID2D1GradientStopCollection1 *This);

    void (STDMETHODCALLTYPE *GetGradientStops)(
        ID2D1GradientStopCollection1 *This,
        D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count);

    D2D1_GAMMA (STDMETHODCALLTYPE *GetColorInterpolationGamma)(
        ID2D1GradientStopCollection1 *This);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendMode)(
        ID2D1GradientStopCollection1 *This);

    /*** ID2D1GradientStopCollection1 methods ***/
    void (STDMETHODCALLTYPE *GetGradientStops1)(
        ID2D1GradientStopCollection1 *This,
        D2D1_GRADIENT_STOP *gradient,
        UINT32 count);

    D2D1_COLOR_SPACE (STDMETHODCALLTYPE *GetPreInterpolationSpace)(
        ID2D1GradientStopCollection1 *This);

    D2D1_COLOR_SPACE (STDMETHODCALLTYPE *GetPostInterpolationSpace)(
        ID2D1GradientStopCollection1 *This);

    D2D1_BUFFER_PRECISION (STDMETHODCALLTYPE *GetBufferPrecision)(
        ID2D1GradientStopCollection1 *This);

    D2D1_COLOR_INTERPOLATION_MODE (STDMETHODCALLTYPE *GetColorInterpolationMode)(
        ID2D1GradientStopCollection1 *This);

    END_INTERFACE
} ID2D1GradientStopCollection1Vtbl;

interface ID2D1GradientStopCollection1 {
    CONST_VTBL ID2D1GradientStopCollection1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GradientStopCollection1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GradientStopCollection1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GradientStopCollection1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1GradientStopCollection1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1GradientStopCollection methods ***/
#define ID2D1GradientStopCollection1_GetGradientStopCount(This) (This)->lpVtbl->GetGradientStopCount(This)
#define ID2D1GradientStopCollection1_GetGradientStops(This,stops,stop_count) (This)->lpVtbl->GetGradientStops(This,stops,stop_count)
#define ID2D1GradientStopCollection1_GetColorInterpolationGamma(This) (This)->lpVtbl->GetColorInterpolationGamma(This)
#define ID2D1GradientStopCollection1_GetExtendMode(This) (This)->lpVtbl->GetExtendMode(This)
/*** ID2D1GradientStopCollection1 methods ***/
#define ID2D1GradientStopCollection1_GetGradientStops1(This,gradient,count) (This)->lpVtbl->GetGradientStops1(This,gradient,count)
#define ID2D1GradientStopCollection1_GetPreInterpolationSpace(This) (This)->lpVtbl->GetPreInterpolationSpace(This)
#define ID2D1GradientStopCollection1_GetPostInterpolationSpace(This) (This)->lpVtbl->GetPostInterpolationSpace(This)
#define ID2D1GradientStopCollection1_GetBufferPrecision(This) (This)->lpVtbl->GetBufferPrecision(This)
#define ID2D1GradientStopCollection1_GetColorInterpolationMode(This) (This)->lpVtbl->GetColorInterpolationMode(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1GradientStopCollection1_QueryInterface(ID2D1GradientStopCollection1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1GradientStopCollection1_AddRef(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1GradientStopCollection1_Release(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1GradientStopCollection1_GetFactory(ID2D1GradientStopCollection1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1GradientStopCollection methods ***/
static inline UINT32 ID2D1GradientStopCollection1_GetGradientStopCount(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetGradientStopCount(This);
}
static inline void ID2D1GradientStopCollection1_GetGradientStops(ID2D1GradientStopCollection1* This,D2D1_GRADIENT_STOP *stops,UINT32 stop_count) {
    This->lpVtbl->GetGradientStops(This,stops,stop_count);
}
static inline D2D1_GAMMA ID2D1GradientStopCollection1_GetColorInterpolationGamma(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetColorInterpolationGamma(This);
}
static inline D2D1_EXTEND_MODE ID2D1GradientStopCollection1_GetExtendMode(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetExtendMode(This);
}
/*** ID2D1GradientStopCollection1 methods ***/
static inline void ID2D1GradientStopCollection1_GetGradientStops1(ID2D1GradientStopCollection1* This,D2D1_GRADIENT_STOP *gradient,UINT32 count) {
    This->lpVtbl->GetGradientStops1(This,gradient,count);
}
static inline D2D1_COLOR_SPACE ID2D1GradientStopCollection1_GetPreInterpolationSpace(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetPreInterpolationSpace(This);
}
static inline D2D1_COLOR_SPACE ID2D1GradientStopCollection1_GetPostInterpolationSpace(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetPostInterpolationSpace(This);
}
static inline D2D1_BUFFER_PRECISION ID2D1GradientStopCollection1_GetBufferPrecision(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetBufferPrecision(This);
}
static inline D2D1_COLOR_INTERPOLATION_MODE ID2D1GradientStopCollection1_GetColorInterpolationMode(ID2D1GradientStopCollection1* This) {
    return This->lpVtbl->GetColorInterpolationMode(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1GradientStopCollection1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device interface
 */
#ifndef __ID2D1Device_INTERFACE_DEFINED__
#define __ID2D1Device_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device, 0x47dd575d, 0xac05, 0x4cdd, 0x80,0x49, 0x9b,0x02,0xcd,0x16,0xf4,0x4c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("47dd575d-ac05-4cdd-8049-9b02cd16f44c")
ID2D1Device : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatePrintControl(
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control) = 0;

    virtual void STDMETHODCALLTYPE SetMaximumTextureMemory(
        UINT64 max_texture_memory) = 0;

    virtual UINT64 STDMETHODCALLTYPE GetMaximumTextureMemory(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE ClearResources(
        UINT msec_since_use = 0) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device, 0x47dd575d, 0xac05, 0x4cdd, 0x80,0x49, 0x9b,0x02,0xcd,0x16,0xf4,0x4c)
#endif
#else
typedef struct ID2D1DeviceVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1Device *This,
        ID2D1Factory **factory);

    /*** ID2D1Device methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDeviceContext)(
        ID2D1Device *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext **context);

    HRESULT (STDMETHODCALLTYPE *CreatePrintControl)(
        ID2D1Device *This,
        IWICImagingFactory *wic_factory,
        IPrintDocumentPackageTarget *document_target,
        const D2D1_PRINT_CONTROL_PROPERTIES *desc,
        ID2D1PrintControl **print_control);

    void (STDMETHODCALLTYPE *SetMaximumTextureMemory)(
        ID2D1Device *This,
        UINT64 max_texture_memory);

    UINT64 (STDMETHODCALLTYPE *GetMaximumTextureMemory)(
        ID2D1Device *This);

    HRESULT (STDMETHODCALLTYPE *ClearResources)(
        ID2D1Device *This,
        UINT msec_since_use);

    END_INTERFACE
} ID2D1DeviceVtbl;

interface ID2D1Device {
    CONST_VTBL ID2D1DeviceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device_CreateDeviceContext(This,options,context) (This)->lpVtbl->CreateDeviceContext(This,options,context)
#define ID2D1Device_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device_QueryInterface(ID2D1Device* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device_AddRef(ID2D1Device* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device_Release(ID2D1Device* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device_GetFactory(ID2D1Device* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device_CreateDeviceContext(ID2D1Device* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext **context) {
    return This->lpVtbl->CreateDeviceContext(This,options,context);
}
static inline HRESULT ID2D1Device_CreatePrintControl(ID2D1Device* This,IWICImagingFactory *wic_factory,IPrintDocumentPackageTarget *document_target,const D2D1_PRINT_CONTROL_PROPERTIES *desc,ID2D1PrintControl **print_control) {
    return This->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control);
}
static inline void ID2D1Device_SetMaximumTextureMemory(ID2D1Device* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device_GetMaximumTextureMemory(ID2D1Device* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device_ClearResources(ID2D1Device* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1CommandSink interface
 */
#ifndef __ID2D1CommandSink_INTERFACE_DEFINED__
#define __ID2D1CommandSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1CommandSink, 0x54d7898a, 0xa061, 0x40a7, 0xbe,0xc7, 0xe4,0x65,0xbc,0xba,0x2c,0x4f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("54d7898a-a061-40a7-bec7-e465bcba2c4f")
ID2D1CommandSink : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE BeginDraw(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE EndDraw(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetAntialiasMode(
        D2D1_ANTIALIAS_MODE antialias_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTags(
        D2D1_TAG tag1,
        D2D1_TAG tag2) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextAntialiasMode(
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTextRenderingParams(
        IDWriteRenderingParams *text_rendering_params) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetTransform(
        const D2D1_MATRIX_3X2_F *transform) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetPrimitiveBlend(
        D2D1_PRIMITIVE_BLEND primitive_blend) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetUnitMode(
        D2D1_UNIT_MODE unit_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clear(
        const D2D1_COLOR_F *color) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawGlyphRun(
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawLine(
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawGeometry(
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawRectangle(
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawBitmap(
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawImage(
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE DrawGdiMetafile(
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset) = 0;

    virtual HRESULT STDMETHODCALLTYPE FillMesh(
        ID2D1Mesh *mesh,
        ID2D1Brush *brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE FillOpacityMask(
        ID2D1Bitmap *bitmap,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE FillGeometry(
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE FillRectangle(
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE PushAxisAlignedClip(
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE PushLayer(
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer) = 0;

    virtual HRESULT STDMETHODCALLTYPE PopAxisAlignedClip(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE PopLayer(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1CommandSink, 0x54d7898a, 0xa061, 0x40a7, 0xbe,0xc7, 0xe4,0x65,0xbc,0xba,0x2c,0x4f)
#endif
#else
typedef struct ID2D1CommandSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1CommandSink methods ***/
    HRESULT (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1CommandSink *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1CommandSink *This);

    HRESULT (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1CommandSink *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTags)(
        ID2D1CommandSink *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    HRESULT (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1CommandSink *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1CommandSink *This,
        IDWriteRenderingParams *text_rendering_params);

    HRESULT (STDMETHODCALLTYPE *SetTransform)(
        ID2D1CommandSink *This,
        const D2D1_MATRIX_3X2_F *transform);

    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1CommandSink *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    HRESULT (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1CommandSink *This,
        D2D1_UNIT_MODE unit_mode);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        ID2D1CommandSink *This,
        const D2D1_COLOR_F *color);

    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1CommandSink *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    HRESULT (STDMETHODCALLTYPE *DrawLine)(
        ID2D1CommandSink *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1CommandSink *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1CommandSink *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    HRESULT (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1CommandSink *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    HRESULT (STDMETHODCALLTYPE *DrawImage)(
        ID2D1CommandSink *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    HRESULT (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1CommandSink *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    HRESULT (STDMETHODCALLTYPE *FillMesh)(
        ID2D1CommandSink *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1CommandSink *This,
        ID2D1Bitmap *bitmap,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    HRESULT (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1CommandSink *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    HRESULT (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1CommandSink *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    HRESULT (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1CommandSink *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    HRESULT (STDMETHODCALLTYPE *PushLayer)(
        ID2D1CommandSink *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1CommandSink *This);

    HRESULT (STDMETHODCALLTYPE *PopLayer)(
        ID2D1CommandSink *This);

    END_INTERFACE
} ID2D1CommandSinkVtbl;

interface ID2D1CommandSink {
    CONST_VTBL ID2D1CommandSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1CommandSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1CommandSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1CommandSink_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1CommandSink methods ***/
#define ID2D1CommandSink_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1CommandSink_EndDraw(This) (This)->lpVtbl->EndDraw(This)
#define ID2D1CommandSink_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1CommandSink_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1CommandSink_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1CommandSink_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1CommandSink_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1CommandSink_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1CommandSink_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1CommandSink_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1CommandSink_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1CommandSink_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1CommandSink_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1CommandSink_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1CommandSink_DrawGdiMetafile(This,metafile,target_offset) (This)->lpVtbl->DrawGdiMetafile(This,metafile,target_offset)
#define ID2D1CommandSink_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1CommandSink_FillOpacityMask(This,bitmap,brush,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect)
#define ID2D1CommandSink_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1CommandSink_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1CommandSink_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1CommandSink_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1CommandSink_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1CommandSink_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1CommandSink_QueryInterface(ID2D1CommandSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1CommandSink_AddRef(ID2D1CommandSink* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1CommandSink_Release(ID2D1CommandSink* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1CommandSink methods ***/
static inline HRESULT ID2D1CommandSink_BeginDraw(ID2D1CommandSink* This) {
    return This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1CommandSink_EndDraw(ID2D1CommandSink* This) {
    return This->lpVtbl->EndDraw(This);
}
static inline HRESULT ID2D1CommandSink_SetAntialiasMode(ID2D1CommandSink* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink_SetTags(ID2D1CommandSink* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    return This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline HRESULT ID2D1CommandSink_SetTextAntialiasMode(ID2D1CommandSink* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink_SetTextRenderingParams(ID2D1CommandSink* This,IDWriteRenderingParams *text_rendering_params) {
    return This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline HRESULT ID2D1CommandSink_SetTransform(ID2D1CommandSink* This,const D2D1_MATRIX_3X2_F *transform) {
    return This->lpVtbl->SetTransform(This,transform);
}
static inline HRESULT ID2D1CommandSink_SetPrimitiveBlend(ID2D1CommandSink* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline HRESULT ID2D1CommandSink_SetUnitMode(ID2D1CommandSink* This,D2D1_UNIT_MODE unit_mode) {
    return This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline HRESULT ID2D1CommandSink_Clear(ID2D1CommandSink* This,const D2D1_COLOR_F *color) {
    return This->lpVtbl->Clear(This,color);
}
static inline HRESULT ID2D1CommandSink_DrawGlyphRun(ID2D1CommandSink* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    return This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline HRESULT ID2D1CommandSink_DrawLine(ID2D1CommandSink* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink_DrawGeometry(ID2D1CommandSink* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink_DrawRectangle(ID2D1CommandSink* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    return This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline HRESULT ID2D1CommandSink_DrawBitmap(ID2D1CommandSink* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    return This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline HRESULT ID2D1CommandSink_DrawImage(ID2D1CommandSink* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    return This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline HRESULT ID2D1CommandSink_DrawGdiMetafile(ID2D1CommandSink* This,ID2D1GdiMetafile *metafile,const D2D1_POINT_2F *target_offset) {
    return This->lpVtbl->DrawGdiMetafile(This,metafile,target_offset);
}
static inline HRESULT ID2D1CommandSink_FillMesh(ID2D1CommandSink* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    return This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline HRESULT ID2D1CommandSink_FillOpacityMask(ID2D1CommandSink* This,ID2D1Bitmap *bitmap,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    return This->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect);
}
static inline HRESULT ID2D1CommandSink_FillGeometry(ID2D1CommandSink* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    return This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline HRESULT ID2D1CommandSink_FillRectangle(ID2D1CommandSink* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    return This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline HRESULT ID2D1CommandSink_PushAxisAlignedClip(ID2D1CommandSink* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline HRESULT ID2D1CommandSink_PushLayer(ID2D1CommandSink* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    return This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1CommandSink_PopAxisAlignedClip(ID2D1CommandSink* This) {
    return This->lpVtbl->PopAxisAlignedClip(This);
}
static inline HRESULT ID2D1CommandSink_PopLayer(ID2D1CommandSink* This) {
    return This->lpVtbl->PopLayer(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1CommandSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1CommandList interface
 */
#ifndef __ID2D1CommandList_INTERFACE_DEFINED__
#define __ID2D1CommandList_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1CommandList, 0xb4f34a19, 0x2383, 0x4d76, 0x94,0xf6, 0xec,0x34,0x36,0x57,0xc3,0xdc);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b4f34a19-2383-4d76-94f6-ec343657c3dc")
ID2D1CommandList : public ID2D1Image
{
    virtual HRESULT STDMETHODCALLTYPE Stream(
        ID2D1CommandSink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1CommandList, 0xb4f34a19, 0x2383, 0x4d76, 0x94,0xf6, 0xec,0x34,0x36,0x57,0xc3,0xdc)
#endif
#else
typedef struct ID2D1CommandListVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1CommandList *This,
        ID2D1Factory **factory);

    /*** ID2D1CommandList methods ***/
    HRESULT (STDMETHODCALLTYPE *Stream)(
        ID2D1CommandList *This,
        ID2D1CommandSink *sink);

    HRESULT (STDMETHODCALLTYPE *Close)(
        ID2D1CommandList *This);

    END_INTERFACE
} ID2D1CommandListVtbl;

interface ID2D1CommandList {
    CONST_VTBL ID2D1CommandListVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1CommandList_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1CommandList_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1CommandList_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1CommandList_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1CommandList methods ***/
#define ID2D1CommandList_Stream(This,sink) (This)->lpVtbl->Stream(This,sink)
#define ID2D1CommandList_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1CommandList_QueryInterface(ID2D1CommandList* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1CommandList_AddRef(ID2D1CommandList* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1CommandList_Release(ID2D1CommandList* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1CommandList_GetFactory(ID2D1CommandList* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1CommandList methods ***/
static inline HRESULT ID2D1CommandList_Stream(ID2D1CommandList* This,ID2D1CommandSink *sink) {
    return This->lpVtbl->Stream(This,sink);
}
static inline HRESULT ID2D1CommandList_Close(ID2D1CommandList* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1CommandList_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1PrintControl interface
 */
#ifndef __ID2D1PrintControl_INTERFACE_DEFINED__
#define __ID2D1PrintControl_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1PrintControl, 0x2c1d867d, 0xc290, 0x41c8, 0xae,0x7e, 0x34,0xa9,0x87,0x02,0xe9,0xa5);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2c1d867d-c290-41c8-ae7e-34a98702e9a5")
ID2D1PrintControl : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE AddPage(
        ID2D1CommandList *list,
        D2D_SIZE_F size,
        IStream *stream,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1PrintControl, 0x2c1d867d, 0xc290, 0x41c8, 0xae,0x7e, 0x34,0xa9,0x87,0x02,0xe9,0xa5)
#endif
#else
typedef struct ID2D1PrintControlVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1PrintControl methods ***/
    HRESULT (STDMETHODCALLTYPE *AddPage)(
        ID2D1PrintControl *This,
        ID2D1CommandList *list,
        D2D_SIZE_F size,
        IStream *stream,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    HRESULT (STDMETHODCALLTYPE *Close)(
        ID2D1PrintControl *This);

    END_INTERFACE
} ID2D1PrintControlVtbl;

interface ID2D1PrintControl {
    CONST_VTBL ID2D1PrintControlVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1PrintControl_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1PrintControl_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1PrintControl_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1PrintControl methods ***/
#define ID2D1PrintControl_AddPage(This,list,size,stream,tag1,tag2) (This)->lpVtbl->AddPage(This,list,size,stream,tag1,tag2)
#define ID2D1PrintControl_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1PrintControl_QueryInterface(ID2D1PrintControl* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1PrintControl_AddRef(ID2D1PrintControl* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1PrintControl_Release(ID2D1PrintControl* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1PrintControl methods ***/
static inline HRESULT ID2D1PrintControl_AddPage(ID2D1PrintControl* This,ID2D1CommandList *list,D2D_SIZE_F size,IStream *stream,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->AddPage(This,list,size,stream,tag1,tag2);
}
static inline HRESULT ID2D1PrintControl_Close(ID2D1PrintControl* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1PrintControl_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1ImageBrush interface
 */
#ifndef __ID2D1ImageBrush_INTERFACE_DEFINED__
#define __ID2D1ImageBrush_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1ImageBrush, 0xfe9e984d, 0x3f95, 0x407c, 0xb5,0xdb, 0xcb,0x94,0xd4,0xe8,0xf8,0x7c);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("fe9e984d-3f95-407c-b5db-cb94d4e8f87c")
ID2D1ImageBrush : public ID2D1Brush
{
    virtual void STDMETHODCALLTYPE SetImage(
        ID2D1Image *image) = 0;

    virtual void STDMETHODCALLTYPE SetExtendModeX(
        D2D1_EXTEND_MODE extend_mode) = 0;

    virtual void STDMETHODCALLTYPE SetExtendModeY(
        D2D1_EXTEND_MODE extend_mode) = 0;

    virtual void STDMETHODCALLTYPE SetInterpolationMode(
        D2D1_INTERPOLATION_MODE interpolation_mode) = 0;

    virtual void STDMETHODCALLTYPE SetSourceRectangle(
        const D2D1_RECT_F *rect) = 0;

    virtual void STDMETHODCALLTYPE GetImage(
        ID2D1Image **image) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendModeX(
        ) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendModeY(
        ) = 0;

    virtual D2D1_INTERPOLATION_MODE STDMETHODCALLTYPE GetInterpolationMode(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetSourceRectangle(
        D2D1_RECT_F *rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1ImageBrush, 0xfe9e984d, 0x3f95, 0x407c, 0xb5,0xdb, 0xcb,0x94,0xd4,0xe8,0xf8,0x7c)
#endif
#else
typedef struct ID2D1ImageBrushVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1ImageBrush *This,
        ID2D1Factory **factory);

    /*** ID2D1Brush methods ***/
    void (STDMETHODCALLTYPE *SetOpacity)(
        ID2D1ImageBrush *This,
        float opacity);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1ImageBrush *This,
        const D2D1_MATRIX_3X2_F *transform);

    float (STDMETHODCALLTYPE *GetOpacity)(
        ID2D1ImageBrush *This);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1ImageBrush *This,
        D2D1_MATRIX_3X2_F *transform);

    /*** ID2D1ImageBrush methods ***/
    void (STDMETHODCALLTYPE *SetImage)(
        ID2D1ImageBrush *This,
        ID2D1Image *image);

    void (STDMETHODCALLTYPE *SetExtendModeX)(
        ID2D1ImageBrush *This,
        D2D1_EXTEND_MODE extend_mode);

    void (STDMETHODCALLTYPE *SetExtendModeY)(
        ID2D1ImageBrush *This,
        D2D1_EXTEND_MODE extend_mode);

    void (STDMETHODCALLTYPE *SetInterpolationMode)(
        ID2D1ImageBrush *This,
        D2D1_INTERPOLATION_MODE interpolation_mode);

    void (STDMETHODCALLTYPE *SetSourceRectangle)(
        ID2D1ImageBrush *This,
        const D2D1_RECT_F *rect);

    void (STDMETHODCALLTYPE *GetImage)(
        ID2D1ImageBrush *This,
        ID2D1Image **image);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendModeX)(
        ID2D1ImageBrush *This);

    D2D1_EXTEND_MODE (STDMETHODCALLTYPE *GetExtendModeY)(
        ID2D1ImageBrush *This);

    D2D1_INTERPOLATION_MODE (STDMETHODCALLTYPE *GetInterpolationMode)(
        ID2D1ImageBrush *This);

    void (STDMETHODCALLTYPE *GetSourceRectangle)(
        ID2D1ImageBrush *This,
        D2D1_RECT_F *rect);

    END_INTERFACE
} ID2D1ImageBrushVtbl;

interface ID2D1ImageBrush {
    CONST_VTBL ID2D1ImageBrushVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1ImageBrush_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1ImageBrush_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1ImageBrush_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1ImageBrush_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1ImageBrush_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1ImageBrush_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1ImageBrush_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1ImageBrush_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
/*** ID2D1ImageBrush methods ***/
#define ID2D1ImageBrush_SetImage(This,image) (This)->lpVtbl->SetImage(This,image)
#define ID2D1ImageBrush_SetExtendModeX(This,extend_mode) (This)->lpVtbl->SetExtendModeX(This,extend_mode)
#define ID2D1ImageBrush_SetExtendModeY(This,extend_mode) (This)->lpVtbl->SetExtendModeY(This,extend_mode)
#define ID2D1ImageBrush_SetInterpolationMode(This,interpolation_mode) (This)->lpVtbl->SetInterpolationMode(This,interpolation_mode)
#define ID2D1ImageBrush_SetSourceRectangle(This,rect) (This)->lpVtbl->SetSourceRectangle(This,rect)
#define ID2D1ImageBrush_GetImage(This,image) (This)->lpVtbl->GetImage(This,image)
#define ID2D1ImageBrush_GetExtendModeX(This) (This)->lpVtbl->GetExtendModeX(This)
#define ID2D1ImageBrush_GetExtendModeY(This) (This)->lpVtbl->GetExtendModeY(This)
#define ID2D1ImageBrush_GetInterpolationMode(This) (This)->lpVtbl->GetInterpolationMode(This)
#define ID2D1ImageBrush_GetSourceRectangle(This,rect) (This)->lpVtbl->GetSourceRectangle(This,rect)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1ImageBrush_QueryInterface(ID2D1ImageBrush* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1ImageBrush_AddRef(ID2D1ImageBrush* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1ImageBrush_Release(ID2D1ImageBrush* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1ImageBrush_GetFactory(ID2D1ImageBrush* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static inline void ID2D1ImageBrush_SetOpacity(ID2D1ImageBrush* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static inline void ID2D1ImageBrush_SetTransform(ID2D1ImageBrush* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline float ID2D1ImageBrush_GetOpacity(ID2D1ImageBrush* This) {
    return This->lpVtbl->GetOpacity(This);
}
static inline void ID2D1ImageBrush_GetTransform(ID2D1ImageBrush* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
/*** ID2D1ImageBrush methods ***/
static inline void ID2D1ImageBrush_SetImage(ID2D1ImageBrush* This,ID2D1Image *image) {
    This->lpVtbl->SetImage(This,image);
}
static inline void ID2D1ImageBrush_SetExtendModeX(ID2D1ImageBrush* This,D2D1_EXTEND_MODE extend_mode) {
    This->lpVtbl->SetExtendModeX(This,extend_mode);
}
static inline void ID2D1ImageBrush_SetExtendModeY(ID2D1ImageBrush* This,D2D1_EXTEND_MODE extend_mode) {
    This->lpVtbl->SetExtendModeY(This,extend_mode);
}
static inline void ID2D1ImageBrush_SetInterpolationMode(ID2D1ImageBrush* This,D2D1_INTERPOLATION_MODE interpolation_mode) {
    This->lpVtbl->SetInterpolationMode(This,interpolation_mode);
}
static inline void ID2D1ImageBrush_SetSourceRectangle(ID2D1ImageBrush* This,const D2D1_RECT_F *rect) {
    This->lpVtbl->SetSourceRectangle(This,rect);
}
static inline void ID2D1ImageBrush_GetImage(ID2D1ImageBrush* This,ID2D1Image **image) {
    This->lpVtbl->GetImage(This,image);
}
static inline D2D1_EXTEND_MODE ID2D1ImageBrush_GetExtendModeX(ID2D1ImageBrush* This) {
    return This->lpVtbl->GetExtendModeX(This);
}
static inline D2D1_EXTEND_MODE ID2D1ImageBrush_GetExtendModeY(ID2D1ImageBrush* This) {
    return This->lpVtbl->GetExtendModeY(This);
}
static inline D2D1_INTERPOLATION_MODE ID2D1ImageBrush_GetInterpolationMode(ID2D1ImageBrush* This) {
    return This->lpVtbl->GetInterpolationMode(This);
}
static inline void ID2D1ImageBrush_GetSourceRectangle(ID2D1ImageBrush* This,D2D1_RECT_F *rect) {
    This->lpVtbl->GetSourceRectangle(This,rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1ImageBrush_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext interface
 */
#ifndef __ID2D1DeviceContext_INTERFACE_DEFINED__
#define __ID2D1DeviceContext_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext, 0xe8f7fe7a, 0x191c, 0x466d, 0xad,0x95, 0x97,0x56,0x78,0xbd,0xa9,0x98);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e8f7fe7a-191c-466d-ad95-975678bda998")
ID2D1DeviceContext : public ID2D1RenderTarget
{
    virtual HRESULT STDMETHODCALLTYPE CreateBitmap(
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBitmapFromWicBitmap(
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContext(
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContextFromFilename(
        const WCHAR *filename,
        ID2D1ColorContext **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateColorContextFromWicColorContext(
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBitmapFromDxgiSurface(
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateEffect(
        REFCLSID effect_id,
        ID2D1Effect **effect) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGradientStopCollection(
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateImageBrush(
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBitmapBrush(
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateCommandList(
        ID2D1CommandList **command_list) = 0;

    virtual BOOL STDMETHODCALLTYPE IsDxgiFormatSupported(
        DXGI_FORMAT format) = 0;

    virtual BOOL STDMETHODCALLTYPE IsBufferPrecisionSupported(
        D2D1_BUFFER_PRECISION buffer_precision) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetImageLocalBounds(
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetImageWorldBounds(
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetGlyphRunWorldBounds(
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds) = 0;

    virtual void STDMETHODCALLTYPE GetDevice(
        ID2D1Device **device) = 0;

    virtual void STDMETHODCALLTYPE SetTarget(
        ID2D1Image *target) = 0;

    virtual void STDMETHODCALLTYPE GetTarget(
        ID2D1Image **target) = 0;

    virtual void STDMETHODCALLTYPE SetRenderingControls(
        const D2D1_RENDERING_CONTROLS *rendering_controls) = 0;

    virtual void STDMETHODCALLTYPE GetRenderingControls(
        D2D1_RENDERING_CONTROLS *rendering_controls) = 0;

    virtual void STDMETHODCALLTYPE SetPrimitiveBlend(
        D2D1_PRIMITIVE_BLEND primitive_blend) = 0;

    virtual D2D1_PRIMITIVE_BLEND STDMETHODCALLTYPE GetPrimitiveBlend(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetUnitMode(
        D2D1_UNIT_MODE unit_mode) = 0;

    virtual D2D1_UNIT_MODE STDMETHODCALLTYPE GetUnitMode(
        ) = 0;

    virtual void STDMETHODCALLTYPE DrawGlyphRun(
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode) = 0;

    virtual void STDMETHODCALLTYPE DrawImage(
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode) = 0;

    virtual void STDMETHODCALLTYPE DrawGdiMetafile(
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset) = 0;

    virtual void STDMETHODCALLTYPE DrawBitmap(
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform) = 0;

    virtual void STDMETHODCALLTYPE PushLayer(
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer) = 0;

    virtual HRESULT STDMETHODCALLTYPE InvalidateEffectInputRectangle(
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEffectInvalidRectangleCount(
        ID2D1Effect *effect,
        UINT32 *rect_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEffectInvalidRectangles(
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEffectRequiredInputRectangles(
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count) = 0;

    virtual void STDMETHODCALLTYPE FillOpacityMask(
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext, 0xe8f7fe7a, 0x191c, 0x466d, 0xad,0x95, 0x97,0x56,0x78,0xbd,0xa9,0x98)
#endif
#else
typedef struct ID2D1DeviceContextVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1DeviceContext *This,
        ID2D1Factory **factory);

    /*** ID2D1RenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateBitmap)(
        ID2D1DeviceContext *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateSharedBitmap)(
        ID2D1DeviceContext *This,
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapBrush)(
        ID2D1DeviceContext *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateSolidColorBrush)(
        ID2D1DeviceContext *This,
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateGradientStopCollection)(
        ID2D1DeviceContext *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateLinearGradientBrush)(
        ID2D1DeviceContext *This,
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateRadialGradientBrush)(
        ID2D1DeviceContext *This,
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush);

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext *This,
        const D2D1_SIZE_F *size,
        const D2D1_SIZE_U *pixel_size,
        const D2D1_PIXEL_FORMAT *format,
        D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,
        ID2D1BitmapRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateLayer)(
        ID2D1DeviceContext *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

    HRESULT (STDMETHODCALLTYPE *CreateMesh)(
        ID2D1DeviceContext *This,
        ID2D1Mesh **mesh);

    void (STDMETHODCALLTYPE *DrawLine)(
        ID2D1DeviceContext *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *DrawRectangle)(
        ID2D1DeviceContext *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRectangle)(
        ID2D1DeviceContext *This,
        const D2D1_RECT_F *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawRoundedRectangle)(
        ID2D1DeviceContext *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillRoundedRectangle)(
        ID2D1DeviceContext *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawEllipse)(
        ID2D1DeviceContext *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillEllipse)(
        ID2D1DeviceContext *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *DrawGeometry)(
        ID2D1DeviceContext *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

    void (STDMETHODCALLTYPE *FillGeometry)(
        ID2D1DeviceContext *This,
        ID2D1Geometry *geometry,
        ID2D1Brush *brush,
        ID2D1Brush *opacity_brush);

    void (STDMETHODCALLTYPE *FillMesh)(
        ID2D1DeviceContext *This,
        ID2D1Mesh *mesh,
        ID2D1Brush *brush);

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        D2D1_OPACITY_MASK_CONTENT content,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1DeviceContext *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect);

    void (STDMETHODCALLTYPE *DrawText)(
        ID2D1DeviceContext *This,
        const WCHAR *string,
        UINT32 string_len,
        IDWriteTextFormat *text_format,
        const D2D1_RECT_F *layout_rect,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawTextLayout)(
        ID2D1DeviceContext *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

    void (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1DeviceContext *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *SetTransform)(
        ID2D1DeviceContext *This,
        const D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *GetTransform)(
        ID2D1DeviceContext *This,
        D2D1_MATRIX_3X2_F *transform);

    void (STDMETHODCALLTYPE *SetAntialiasMode)(
        ID2D1DeviceContext *This,
        D2D1_ANTIALIAS_MODE antialias_mode);

    D2D1_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetAntialiasMode)(
        ID2D1DeviceContext *This);

    void (STDMETHODCALLTYPE *SetTextAntialiasMode)(
        ID2D1DeviceContext *This,
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode);

    D2D1_TEXT_ANTIALIAS_MODE (STDMETHODCALLTYPE *GetTextAntialiasMode)(
        ID2D1DeviceContext *This);

    void (STDMETHODCALLTYPE *SetTextRenderingParams)(
        ID2D1DeviceContext *This,
        IDWriteRenderingParams *text_rendering_params);

    void (STDMETHODCALLTYPE *GetTextRenderingParams)(
        ID2D1DeviceContext *This,
        IDWriteRenderingParams **text_rendering_params);

    void (STDMETHODCALLTYPE *SetTags)(
        ID2D1DeviceContext *This,
        D2D1_TAG tag1,
        D2D1_TAG tag2);

    void (STDMETHODCALLTYPE *GetTags)(
        ID2D1DeviceContext *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *PushLayer)(
        ID2D1DeviceContext *This,
        const D2D1_LAYER_PARAMETERS *layer_parameters,
        ID2D1Layer *layer);

    void (STDMETHODCALLTYPE *PopLayer)(
        ID2D1DeviceContext *This);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        ID2D1DeviceContext *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    void (STDMETHODCALLTYPE *SaveDrawingState)(
        ID2D1DeviceContext *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *RestoreDrawingState)(
        ID2D1DeviceContext *This,
        ID2D1DrawingStateBlock *state_block);

    void (STDMETHODCALLTYPE *PushAxisAlignedClip)(
        ID2D1DeviceContext *This,
        const D2D1_RECT_F *clip_rect,
        D2D1_ANTIALIAS_MODE antialias_mode);

    void (STDMETHODCALLTYPE *PopAxisAlignedClip)(
        ID2D1DeviceContext *This);

    void (STDMETHODCALLTYPE *Clear)(
        ID2D1DeviceContext *This,
        const D2D1_COLOR_F *color);

    void (STDMETHODCALLTYPE *BeginDraw)(
        ID2D1DeviceContext *This);

    HRESULT (STDMETHODCALLTYPE *EndDraw)(
        ID2D1DeviceContext *This,
        D2D1_TAG *tag1,
        D2D1_TAG *tag2);

    D2D1_PIXEL_FORMAT * (STDMETHODCALLTYPE *GetPixelFormat)(
        ID2D1DeviceContext *This,
        D2D1_PIXEL_FORMAT *__ret);

    void (STDMETHODCALLTYPE *SetDpi)(
        ID2D1DeviceContext *This,
        float dpi_x,
        float dpi_y);

    void (STDMETHODCALLTYPE *GetDpi)(
        ID2D1DeviceContext *This,
        float *dpi_x,
        float *dpi_y);

    D2D1_SIZE_F * (STDMETHODCALLTYPE *GetSize)(
        ID2D1DeviceContext *This,
        D2D1_SIZE_F *__ret);

    D2D1_SIZE_U * (STDMETHODCALLTYPE *GetPixelSize)(
        ID2D1DeviceContext *This,
        D2D1_SIZE_U *__ret);

    UINT32 (STDMETHODCALLTYPE *GetMaximumBitmapSize)(
        ID2D1DeviceContext *This);

    BOOL (STDMETHODCALLTYPE *IsSupported)(
        ID2D1DeviceContext *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc);

    /*** ID2D1DeviceContext methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmap)(
        ID2D1DeviceContext *This,
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapFromWicBitmap)(
        ID2D1DeviceContext *This,
        IWICBitmapSource *bitmap_source,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateColorContext)(
        ID2D1DeviceContext *This,
        D2D1_COLOR_SPACE space,
        const BYTE *profile,
        UINT32 profile_size,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromFilename)(
        ID2D1DeviceContext *This,
        const WCHAR *filename,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateColorContextFromWicColorContext)(
        ID2D1DeviceContext *This,
        IWICColorContext *wic_color_context,
        ID2D1ColorContext **color_context);

    HRESULT (STDMETHODCALLTYPE *CreateBitmapFromDxgiSurface)(
        ID2D1DeviceContext *This,
        IDXGISurface *surface,
        const D2D1_BITMAP_PROPERTIES1 *desc,
        ID2D1Bitmap1 **bitmap);

    HRESULT (STDMETHODCALLTYPE *CreateEffect)(
        ID2D1DeviceContext *This,
        REFCLSID effect_id,
        ID2D1Effect **effect);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext *This,
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_COLOR_SPACE preinterpolation_space,
        D2D1_COLOR_SPACE postinterpolation_space,
        D2D1_BUFFER_PRECISION buffer_precision,
        D2D1_EXTEND_MODE extend_mode,
        D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,
        ID2D1GradientStopCollection1 **gradient);

    HRESULT (STDMETHODCALLTYPE *CreateImageBrush)(
        ID2D1DeviceContext *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateBitmapBrush)(
        ID2D1DeviceContext *This,
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush1 **bitmap_brush);

    HRESULT (STDMETHODCALLTYPE *CreateCommandList)(
        ID2D1DeviceContext *This,
        ID2D1CommandList **command_list);

    BOOL (STDMETHODCALLTYPE *IsDxgiFormatSupported)(
        ID2D1DeviceContext *This,
        DXGI_FORMAT format);

    BOOL (STDMETHODCALLTYPE *IsBufferPrecisionSupported)(
        ID2D1DeviceContext *This,
        D2D1_BUFFER_PRECISION buffer_precision);

    HRESULT (STDMETHODCALLTYPE *GetImageLocalBounds)(
        ID2D1DeviceContext *This,
        ID2D1Image *image,
        D2D1_RECT_F *local_bounds);

    HRESULT (STDMETHODCALLTYPE *GetImageWorldBounds)(
        ID2D1DeviceContext *This,
        ID2D1Image *image,
        D2D1_RECT_F *world_bounds);

    HRESULT (STDMETHODCALLTYPE *GetGlyphRunWorldBounds)(
        ID2D1DeviceContext *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        DWRITE_MEASURING_MODE measuring_mode,
        D2D1_RECT_F *bounds);

    void (STDMETHODCALLTYPE *GetDevice)(
        ID2D1DeviceContext *This,
        ID2D1Device **device);

    void (STDMETHODCALLTYPE *SetTarget)(
        ID2D1DeviceContext *This,
        ID2D1Image *target);

    void (STDMETHODCALLTYPE *GetTarget)(
        ID2D1DeviceContext *This,
        ID2D1Image **target);

    void (STDMETHODCALLTYPE *SetRenderingControls)(
        ID2D1DeviceContext *This,
        const D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *GetRenderingControls)(
        ID2D1DeviceContext *This,
        D2D1_RENDERING_CONTROLS *rendering_controls);

    void (STDMETHODCALLTYPE *SetPrimitiveBlend)(
        ID2D1DeviceContext *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    D2D1_PRIMITIVE_BLEND (STDMETHODCALLTYPE *GetPrimitiveBlend)(
        ID2D1DeviceContext *This);

    void (STDMETHODCALLTYPE *SetUnitMode)(
        ID2D1DeviceContext *This,
        D2D1_UNIT_MODE unit_mode);

    D2D1_UNIT_MODE (STDMETHODCALLTYPE *GetUnitMode)(
        ID2D1DeviceContext *This);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext *This,
        D2D1_POINT_2F baseline_origin,
        const DWRITE_GLYPH_RUN *glyph_run,
        const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,
        ID2D1Brush *brush,
        DWRITE_MEASURING_MODE measuring_mode);

    void (STDMETHODCALLTYPE *DrawImage)(
        ID2D1DeviceContext *This,
        ID2D1Image *image,
        const D2D1_POINT_2F *target_offset,
        const D2D1_RECT_F *image_rect,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        D2D1_COMPOSITE_MODE composite_mode);

    void (STDMETHODCALLTYPE *DrawGdiMetafile)(
        ID2D1DeviceContext *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext *This,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_F *dst_rect,
        float opacity,
        D2D1_INTERPOLATION_MODE interpolation_mode,
        const D2D1_RECT_F *src_rect,
        const D2D1_MATRIX_4X4_F *perspective_transform);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_PushLayer)(
        ID2D1DeviceContext *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

    HRESULT (STDMETHODCALLTYPE *InvalidateEffectInputRectangle)(
        ID2D1DeviceContext *This,
        ID2D1Effect *effect,
        UINT32 input,
        const D2D1_RECT_F *input_rect);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangleCount)(
        ID2D1DeviceContext *This,
        ID2D1Effect *effect,
        UINT32 *rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectInvalidRectangles)(
        ID2D1DeviceContext *This,
        ID2D1Effect *effect,
        D2D1_RECT_F *rectangles,
        UINT32 rect_count);

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext *This,
        ID2D1Effect *effect,
        const D2D1_RECT_F *image_rect,
        const D2D1_EFFECT_INPUT_DESCRIPTION *desc,
        D2D1_RECT_F *input_rect,
        UINT32 input_count);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_FillOpacityMask)(
        ID2D1DeviceContext *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    END_INTERFACE
} ID2D1DeviceContextVtbl;

interface ID2D1DeviceContext {
    CONST_VTBL ID2D1DeviceContextVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext_DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode) (This)->lpVtbl->DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode)
#define ID2D1DeviceContext_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1DeviceContext_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext_GetPixelFormat(This) ID2D1DeviceContext_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext_GetSize(This) ID2D1DeviceContext_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext_GetPixelSize(This) ID2D1DeviceContext_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient) (This)->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient)
#define ID2D1DeviceContext_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode) (This)->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode)
#define ID2D1DeviceContext_DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode) (This)->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode)
#define ID2D1DeviceContext_DrawGdiMetafile(This,metafile,target_offset) (This)->lpVtbl->DrawGdiMetafile(This,metafile,target_offset)
#define ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform) (This)->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform)
#define ID2D1DeviceContext_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext_QueryInterface(ID2D1DeviceContext* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext_AddRef(ID2D1DeviceContext* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext_Release(ID2D1DeviceContext* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext_GetFactory(ID2D1DeviceContext* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext_CreateSharedBitmap(ID2D1DeviceContext* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext_CreateSolidColorBrush(ID2D1DeviceContext* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext_CreateLinearGradientBrush(ID2D1DeviceContext* This,const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1LinearGradientBrush **brush) {
    return This->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext_CreateRadialGradientBrush(ID2D1DeviceContext* This,const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1GradientStopCollection *gradient,ID2D1RadialGradientBrush **brush) {
    return This->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush);
}
static inline HRESULT ID2D1DeviceContext_CreateCompatibleRenderTarget(ID2D1DeviceContext* This,const D2D1_SIZE_F *size,const D2D1_SIZE_U *pixel_size,const D2D1_PIXEL_FORMAT *format,D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options,ID2D1BitmapRenderTarget **render_target) {
    return This->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target);
}
static inline HRESULT ID2D1DeviceContext_CreateLayer(ID2D1DeviceContext* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext_CreateMesh(ID2D1DeviceContext* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext_DrawLine(ID2D1DeviceContext* This,D2D1_POINT_2F p0,D2D1_POINT_2F p1,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext_DrawRectangle(ID2D1DeviceContext* This,const D2D1_RECT_F *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext_FillRectangle(ID2D1DeviceContext* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext_DrawRoundedRectangle(ID2D1DeviceContext* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext_FillRoundedRectangle(ID2D1DeviceContext* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext_DrawEllipse(ID2D1DeviceContext* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext_FillEllipse(ID2D1DeviceContext* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext_DrawGeometry(ID2D1DeviceContext* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext_FillGeometry(ID2D1DeviceContext* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext_FillMesh(ID2D1DeviceContext* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext_DrawText(ID2D1DeviceContext* This,const WCHAR *string,UINT32 string_len,IDWriteTextFormat *text_format,const D2D1_RECT_F *layout_rect,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawText(This,string,string_len,text_format,layout_rect,brush,options,measuring_mode);
}
static inline void ID2D1DeviceContext_DrawTextLayout(ID2D1DeviceContext* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static inline void ID2D1DeviceContext_SetTransform(ID2D1DeviceContext* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext_GetTransform(ID2D1DeviceContext* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext_SetAntialiasMode(ID2D1DeviceContext* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext_GetAntialiasMode(ID2D1DeviceContext* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext_SetTextAntialiasMode(ID2D1DeviceContext* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext_GetTextAntialiasMode(ID2D1DeviceContext* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext_SetTextRenderingParams(ID2D1DeviceContext* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext_GetTextRenderingParams(ID2D1DeviceContext* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext_SetTags(ID2D1DeviceContext* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext_GetTags(ID2D1DeviceContext* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext_PopLayer(ID2D1DeviceContext* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext_Flush(ID2D1DeviceContext* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext_SaveDrawingState(ID2D1DeviceContext* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext_RestoreDrawingState(ID2D1DeviceContext* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext_PushAxisAlignedClip(ID2D1DeviceContext* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext_PopAxisAlignedClip(ID2D1DeviceContext* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext_Clear(ID2D1DeviceContext* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext_BeginDraw(ID2D1DeviceContext* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext_EndDraw(ID2D1DeviceContext* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext_GetPixelFormat(ID2D1DeviceContext* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext_SetDpi(ID2D1DeviceContext* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext_GetDpi(ID2D1DeviceContext* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext_GetSize(ID2D1DeviceContext* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext_GetPixelSize(ID2D1DeviceContext* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext_GetMaximumBitmapSize(ID2D1DeviceContext* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext_IsSupported(ID2D1DeviceContext* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext_CreateBitmap(ID2D1DeviceContext* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext_CreateBitmapFromWicBitmap(ID2D1DeviceContext* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext_CreateColorContext(ID2D1DeviceContext* This,D2D1_COLOR_SPACE space,const BYTE *profile,UINT32 profile_size,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context);
}
static inline HRESULT ID2D1DeviceContext_CreateColorContextFromFilename(ID2D1DeviceContext* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext_CreateColorContextFromWicColorContext(ID2D1DeviceContext* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext_CreateBitmapFromDxgiSurface(ID2D1DeviceContext* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext_CreateEffect(ID2D1DeviceContext* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext_CreateGradientStopCollection(ID2D1DeviceContext* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_COLOR_SPACE preinterpolation_space,D2D1_COLOR_SPACE postinterpolation_space,D2D1_BUFFER_PRECISION buffer_precision,D2D1_EXTEND_MODE extend_mode,D2D1_COLOR_INTERPOLATION_MODE color_interpolation_mode,ID2D1GradientStopCollection1 **gradient) {
    return This->lpVtbl->ID2D1DeviceContext_CreateGradientStopCollection(This,stops,stop_count,preinterpolation_space,postinterpolation_space,buffer_precision,extend_mode,color_interpolation_mode,gradient);
}
static inline HRESULT ID2D1DeviceContext_CreateImageBrush(ID2D1DeviceContext* This,ID2D1Image *image,const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1ImageBrush **brush) {
    return This->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush);
}
static inline HRESULT ID2D1DeviceContext_CreateBitmapBrush(ID2D1DeviceContext* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES1 *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush1 **bitmap_brush) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush);
}
static inline HRESULT ID2D1DeviceContext_CreateCommandList(ID2D1DeviceContext* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext_IsDxgiFormatSupported(ID2D1DeviceContext* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext_IsBufferPrecisionSupported(ID2D1DeviceContext* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext_GetImageLocalBounds(ID2D1DeviceContext* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext_GetImageWorldBounds(ID2D1DeviceContext* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext_GetGlyphRunWorldBounds(ID2D1DeviceContext* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,DWRITE_MEASURING_MODE measuring_mode,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds);
}
static inline void ID2D1DeviceContext_GetDevice(ID2D1DeviceContext* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext_SetTarget(ID2D1DeviceContext* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext_GetTarget(ID2D1DeviceContext* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext_SetRenderingControls(ID2D1DeviceContext* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext_GetRenderingControls(ID2D1DeviceContext* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext_SetPrimitiveBlend(ID2D1DeviceContext* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext_GetPrimitiveBlend(ID2D1DeviceContext* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext_SetUnitMode(ID2D1DeviceContext* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext_GetUnitMode(ID2D1DeviceContext* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext_DrawGlyphRun(ID2D1DeviceContext* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->ID2D1DeviceContext_DrawGlyphRun(This,baseline_origin,glyph_run,glyph_run_desc,brush,measuring_mode);
}
static inline void ID2D1DeviceContext_DrawImage(ID2D1DeviceContext* This,ID2D1Image *image,const D2D1_POINT_2F *target_offset,const D2D1_RECT_F *image_rect,D2D1_INTERPOLATION_MODE interpolation_mode,D2D1_COMPOSITE_MODE composite_mode) {
    This->lpVtbl->DrawImage(This,image,target_offset,image_rect,interpolation_mode,composite_mode);
}
static inline void ID2D1DeviceContext_DrawGdiMetafile(ID2D1DeviceContext* This,ID2D1GdiMetafile *metafile,const D2D1_POINT_2F *target_offset) {
    This->lpVtbl->DrawGdiMetafile(This,metafile,target_offset);
}
static inline void ID2D1DeviceContext_DrawBitmap(ID2D1DeviceContext* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect,const D2D1_MATRIX_4X4_F *perspective_transform) {
    This->lpVtbl->ID2D1DeviceContext_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect,perspective_transform);
}
static inline void ID2D1DeviceContext_PushLayer(ID2D1DeviceContext* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext_InvalidateEffectInputRectangle(ID2D1DeviceContext* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext_GetEffectInvalidRectangleCount(ID2D1DeviceContext* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext_GetEffectInvalidRectangles(ID2D1DeviceContext* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext_GetEffectRequiredInputRectangles(ID2D1DeviceContext* This,ID2D1Effect *effect,const D2D1_RECT_F *image_rect,const D2D1_EFFECT_INPUT_DESCRIPTION *desc,D2D1_RECT_F *input_rect,UINT32 input_count) {
    return This->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count);
}
static inline void ID2D1DeviceContext_FillOpacityMask(ID2D1DeviceContext* This,ID2D1Bitmap *mask,ID2D1Brush *brush,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1StrokeStyle1 interface
 */
#ifndef __ID2D1StrokeStyle1_INTERFACE_DEFINED__
#define __ID2D1StrokeStyle1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1StrokeStyle1, 0x10a72a66, 0xe91c, 0x43f4, 0x99,0x3f, 0xdd,0xf4,0xb8,0x2b,0x0b,0x4a);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("10a72a66-e91c-43f4-993f-ddf4b82b0b4a")
ID2D1StrokeStyle1 : public ID2D1StrokeStyle
{
    virtual D2D1_STROKE_TRANSFORM_TYPE STDMETHODCALLTYPE GetStrokeTransformType(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1StrokeStyle1, 0x10a72a66, 0xe91c, 0x43f4, 0x99,0x3f, 0xdd,0xf4,0xb8,0x2b,0x0b,0x4a)
#endif
#else
typedef struct ID2D1StrokeStyle1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Resource methods ***/
    void (STDMETHODCALLTYPE *GetFactory)(
        ID2D1StrokeStyle1 *This,
        ID2D1Factory **factory);

    /*** ID2D1StrokeStyle methods ***/
    D2D1_CAP_STYLE (STDMETHODCALLTYPE *GetStartCap)(
        ID2D1StrokeStyle1 *This);

    D2D1_CAP_STYLE (STDMETHODCALLTYPE *GetEndCap)(
        ID2D1StrokeStyle1 *This);

    D2D1_CAP_STYLE (STDMETHODCALLTYPE *GetDashCap)(
        ID2D1StrokeStyle1 *This);

    float (STDMETHODCALLTYPE *GetMiterLimit)(
        ID2D1StrokeStyle1 *This);

    D2D1_LINE_JOIN (STDMETHODCALLTYPE *GetLineJoin)(
        ID2D1StrokeStyle1 *This);

    float (STDMETHODCALLTYPE *GetDashOffset)(
        ID2D1StrokeStyle1 *This);

    D2D1_DASH_STYLE (STDMETHODCALLTYPE *GetDashStyle)(
        ID2D1StrokeStyle1 *This);

    UINT32 (STDMETHODCALLTYPE *GetDashesCount)(
        ID2D1StrokeStyle1 *This);

    void (STDMETHODCALLTYPE *GetDashes)(
        ID2D1StrokeStyle1 *This,
        float *dashes,
        UINT32 count);

    /*** ID2D1StrokeStyle1 methods ***/
    D2D1_STROKE_TRANSFORM_TYPE (STDMETHODCALLTYPE *GetStrokeTransformType)(
        ID2D1StrokeStyle1 *This);

    END_INTERFACE
} ID2D1StrokeStyle1Vtbl;

interface ID2D1StrokeStyle1 {
    CONST_VTBL ID2D1StrokeStyle1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1StrokeStyle1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1StrokeStyle1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1StrokeStyle1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1StrokeStyle1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1StrokeStyle methods ***/
#define ID2D1StrokeStyle1_GetStartCap(This) (This)->lpVtbl->GetStartCap(This)
#define ID2D1StrokeStyle1_GetEndCap(This) (This)->lpVtbl->GetEndCap(This)
#define ID2D1StrokeStyle1_GetDashCap(This) (This)->lpVtbl->GetDashCap(This)
#define ID2D1StrokeStyle1_GetMiterLimit(This) (This)->lpVtbl->GetMiterLimit(This)
#define ID2D1StrokeStyle1_GetLineJoin(This) (This)->lpVtbl->GetLineJoin(This)
#define ID2D1StrokeStyle1_GetDashOffset(This) (This)->lpVtbl->GetDashOffset(This)
#define ID2D1StrokeStyle1_GetDashStyle(This) (This)->lpVtbl->GetDashStyle(This)
#define ID2D1StrokeStyle1_GetDashesCount(This) (This)->lpVtbl->GetDashesCount(This)
#define ID2D1StrokeStyle1_GetDashes(This,dashes,count) (This)->lpVtbl->GetDashes(This,dashes,count)
/*** ID2D1StrokeStyle1 methods ***/
#define ID2D1StrokeStyle1_GetStrokeTransformType(This) (This)->lpVtbl->GetStrokeTransformType(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1StrokeStyle1_QueryInterface(ID2D1StrokeStyle1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1StrokeStyle1_AddRef(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1StrokeStyle1_Release(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1StrokeStyle1_GetFactory(ID2D1StrokeStyle1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1StrokeStyle methods ***/
static inline D2D1_CAP_STYLE ID2D1StrokeStyle1_GetStartCap(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetStartCap(This);
}
static inline D2D1_CAP_STYLE ID2D1StrokeStyle1_GetEndCap(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetEndCap(This);
}
static inline D2D1_CAP_STYLE ID2D1StrokeStyle1_GetDashCap(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetDashCap(This);
}
static inline float ID2D1StrokeStyle1_GetMiterLimit(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetMiterLimit(This);
}
static inline D2D1_LINE_JOIN ID2D1StrokeStyle1_GetLineJoin(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetLineJoin(This);
}
static inline float ID2D1StrokeStyle1_GetDashOffset(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetDashOffset(This);
}
static inline D2D1_DASH_STYLE ID2D1StrokeStyle1_GetDashStyle(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetDashStyle(This);
}
static inline UINT32 ID2D1StrokeStyle1_GetDashesCount(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetDashesCount(This);
}
static inline void ID2D1StrokeStyle1_GetDashes(ID2D1StrokeStyle1* This,float *dashes,UINT32 count) {
    This->lpVtbl->GetDashes(This,dashes,count);
}
/*** ID2D1StrokeStyle1 methods ***/
static inline D2D1_STROKE_TRANSFORM_TYPE ID2D1StrokeStyle1_GetStrokeTransformType(ID2D1StrokeStyle1* This) {
    return This->lpVtbl->GetStrokeTransformType(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1StrokeStyle1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory1 interface
 */
#ifndef __ID2D1Factory1_INTERFACE_DEFINED__
#define __ID2D1Factory1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory1, 0xbb12d362, 0xdaee, 0x4b9a, 0xaa,0x1d, 0x14,0xba,0x40,0x1c,0xfa,0x1f);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("bb12d362-daee-4b9a-aa1d-14ba401cfa1f")
ID2D1Factory1 : public ID2D1Factory
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device **device) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateStrokeStyle(
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreatePathGeometry(
        ID2D1PathGeometry1 **geometry) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDrawingStateBlock(
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGdiMetafile(
        IStream *stream,
        ID2D1GdiMetafile **metafile) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterEffectFromStream(
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory) = 0;

    virtual HRESULT STDMETHODCALLTYPE RegisterEffectFromString(
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory) = 0;

    virtual HRESULT STDMETHODCALLTYPE UnregisterEffect(
        REFCLSID effect_id) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRegisteredEffects(
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetEffectProperties(
        REFCLSID effect_id,
        ID2D1Properties **props) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory1, 0xbb12d362, 0xdaee, 0x4b9a, 0xaa,0x1d, 0x14,0xba,0x40,0x1c,0xfa,0x1f)
#endif
#else
typedef struct ID2D1Factory1Vtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Factory methods ***/
    HRESULT (STDMETHODCALLTYPE *ReloadSystemMetrics)(
        ID2D1Factory1 *This);

    void (STDMETHODCALLTYPE *GetDesktopDpi)(
        ID2D1Factory1 *This,
        float *dpi_x,
        float *dpi_y);

    HRESULT (STDMETHODCALLTYPE *CreateRectangleGeometry)(
        ID2D1Factory1 *This,
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateRoundedRectangleGeometry)(
        ID2D1Factory1 *This,
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateEllipseGeometry)(
        ID2D1Factory1 *This,
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateGeometryGroup)(
        ID2D1Factory1 *This,
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group);

    HRESULT (STDMETHODCALLTYPE *CreateTransformedGeometry)(
        ID2D1Factory1 *This,
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry);

    HRESULT (STDMETHODCALLTYPE *CreatePathGeometry)(
        ID2D1Factory1 *This,
        ID2D1PathGeometry **geometry);

    HRESULT (STDMETHODCALLTYPE *CreateStrokeStyle)(
        ID2D1Factory1 *This,
        const D2D1_STROKE_STYLE_PROPERTIES *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle **stroke_style);

    HRESULT (STDMETHODCALLTYPE *CreateDrawingStateBlock)(
        ID2D1Factory1 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateWicBitmapRenderTarget)(
        ID2D1Factory1 *This,
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateHwndRenderTarget)(
        ID2D1Factory1 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDxgiSurfaceRenderTarget)(
        ID2D1Factory1 *This,
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target);

    HRESULT (STDMETHODCALLTYPE *CreateDCRenderTarget)(
        ID2D1Factory1 *This,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target);

    /*** ID2D1Factory1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateDevice)(
        ID2D1Factory1 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device **device);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateStrokeStyle)(
        ID2D1Factory1 *This,
        const D2D1_STROKE_STYLE_PROPERTIES1 *desc,
        const float *dashes,
        UINT32 dash_count,
        ID2D1StrokeStyle1 **stroke_style);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreatePathGeometry)(
        ID2D1Factory1 *This,
        ID2D1PathGeometry1 **geometry);

    HRESULT (STDMETHODCALLTYPE *ID2D1Factory1_CreateDrawingStateBlock)(
        ID2D1Factory1 *This,
        const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,
        IDWriteRenderingParams *text_rendering_params,
        ID2D1DrawingStateBlock1 **state_block);

    HRESULT (STDMETHODCALLTYPE *CreateGdiMetafile)(
        ID2D1Factory1 *This,
        IStream *stream,
        ID2D1GdiMetafile **metafile);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromStream)(
        ID2D1Factory1 *This,
        REFCLSID effect_id,
        IStream *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory1 *This,
        REFCLSID effect_id,
        const WCHAR *property_xml,
        const struct D2D1_PROPERTY_BINDING *bindings,
        UINT32 binding_count,
        PD2D1_EFFECT_FACTORY effect_factory);

    HRESULT (STDMETHODCALLTYPE *UnregisterEffect)(
        ID2D1Factory1 *This,
        REFCLSID effect_id);

    HRESULT (STDMETHODCALLTYPE *GetRegisteredEffects)(
        ID2D1Factory1 *This,
        CLSID *effects,
        UINT32 effect_count,
        UINT32 *returned,
        UINT32 *registered);

    HRESULT (STDMETHODCALLTYPE *GetEffectProperties)(
        ID2D1Factory1 *This,
        REFCLSID effect_id,
        ID2D1Properties **props);

    END_INTERFACE
} ID2D1Factory1Vtbl;

interface ID2D1Factory1 {
    CONST_VTBL ID2D1Factory1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory1_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory1_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory1_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory1_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory1_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory1_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory1_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory1_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory1_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory1_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory1_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory1_CreateDevice(This,dxgi_device,device) (This)->lpVtbl->CreateDevice(This,dxgi_device,device)
#define ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory1_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory1_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory1_RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory1_RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory) (This)->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory)
#define ID2D1Factory1_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory1_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory1_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory1_QueryInterface(ID2D1Factory1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory1_AddRef(ID2D1Factory1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory1_Release(ID2D1Factory1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory1_ReloadSystemMetrics(ID2D1Factory1* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory1_GetDesktopDpi(ID2D1Factory1* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory1_CreateRectangleGeometry(ID2D1Factory1* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory1_CreateRoundedRectangleGeometry(ID2D1Factory1* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory1_CreateEllipseGeometry(ID2D1Factory1* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory1_CreateGeometryGroup(ID2D1Factory1* This,D2D1_FILL_MODE fill_mode,ID2D1Geometry **geometries,UINT32 geometry_count,ID2D1GeometryGroup **group) {
    return This->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group);
}
static inline HRESULT ID2D1Factory1_CreateTransformedGeometry(ID2D1Factory1* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static inline HRESULT ID2D1Factory1_CreateWicBitmapRenderTarget(ID2D1Factory1* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory1_CreateHwndRenderTarget(ID2D1Factory1* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,ID2D1HwndRenderTarget **render_target) {
    return This->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target);
}
static inline HRESULT ID2D1Factory1_CreateDxgiSurfaceRenderTarget(ID2D1Factory1* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory1_CreateDCRenderTarget(ID2D1Factory1* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory1_CreateDevice(ID2D1Factory1* This,IDXGIDevice *dxgi_device,ID2D1Device **device) {
    return This->lpVtbl->CreateDevice(This,dxgi_device,device);
}
static inline HRESULT ID2D1Factory1_CreateStrokeStyle(ID2D1Factory1* This,const D2D1_STROKE_STYLE_PROPERTIES1 *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle1 **stroke_style) {
    return This->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static inline HRESULT ID2D1Factory1_CreatePathGeometry(ID2D1Factory1* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory1_CreateDrawingStateBlock(ID2D1Factory1* This,const D2D1_DRAWING_STATE_DESCRIPTION1 *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock1 **state_block) {
    return This->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static inline HRESULT ID2D1Factory1_CreateGdiMetafile(ID2D1Factory1* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory1_RegisterEffectFromStream(ID2D1Factory1* This,REFCLSID effect_id,IStream *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromStream(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory1_RegisterEffectFromString(ID2D1Factory1* This,REFCLSID effect_id,const WCHAR *property_xml,const struct D2D1_PROPERTY_BINDING *bindings,UINT32 binding_count,PD2D1_EFFECT_FACTORY effect_factory) {
    return This->lpVtbl->RegisterEffectFromString(This,effect_id,property_xml,bindings,binding_count,effect_factory);
}
static inline HRESULT ID2D1Factory1_UnregisterEffect(ID2D1Factory1* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory1_GetRegisteredEffects(ID2D1Factory1* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory1_GetEffectProperties(ID2D1Factory1* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Multithread interface
 */
#ifndef __ID2D1Multithread_INTERFACE_DEFINED__
#define __ID2D1Multithread_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Multithread, 0x31e6e7bc, 0xe0ff, 0x4d46, 0x8c,0x64, 0xa0,0xa8,0xc4,0x1c,0x15,0xd3);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("31e6e7bc-e0ff-4d46-8c64-a0a8c41c15d3")
ID2D1Multithread : public IUnknown
{
    virtual BOOL STDMETHODCALLTYPE GetMultithreadProtected(
        ) = 0;

    virtual void STDMETHODCALLTYPE Enter(
        ) = 0;

    virtual void STDMETHODCALLTYPE Leave(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Multithread, 0x31e6e7bc, 0xe0ff, 0x4d46, 0x8c,0x64, 0xa0,0xa8,0xc4,0x1c,0x15,0xd3)
#endif
#else
typedef struct ID2D1MultithreadVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1Multithread methods ***/
    BOOL (STDMETHODCALLTYPE *GetMultithreadProtected)(
        ID2D1Multithread *This);

    void (STDMETHODCALLTYPE *Enter)(
        ID2D1Multithread *This);

    void (STDMETHODCALLTYPE *Leave)(
        ID2D1Multithread *This);

    END_INTERFACE
} ID2D1MultithreadVtbl;

interface ID2D1Multithread {
    CONST_VTBL ID2D1MultithreadVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Multithread_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Multithread_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Multithread_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Multithread methods ***/
#define ID2D1Multithread_GetMultithreadProtected(This) (This)->lpVtbl->GetMultithreadProtected(This)
#define ID2D1Multithread_Enter(This) (This)->lpVtbl->Enter(This)
#define ID2D1Multithread_Leave(This) (This)->lpVtbl->Leave(This)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Multithread_QueryInterface(ID2D1Multithread* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Multithread_AddRef(ID2D1Multithread* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Multithread_Release(ID2D1Multithread* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Multithread methods ***/
static inline BOOL ID2D1Multithread_GetMultithreadProtected(ID2D1Multithread* This) {
    return This->lpVtbl->GetMultithreadProtected(This);
}
static inline void ID2D1Multithread_Enter(ID2D1Multithread* This) {
    This->lpVtbl->Enter(This);
}
static inline void ID2D1Multithread_Leave(ID2D1Multithread* This) {
    This->lpVtbl->Leave(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1Multithread_INTERFACE_DEFINED__ */

HRESULT __stdcall  D2D1CreateDevice(IDXGIDevice *dxgi_device,const D2D1_CREATION_PROPERTIES *creation_properties,ID2D1Device **device);

HRESULT __stdcall  D2D1CreateDeviceContext(IDXGISurface *dxgi_surface,const D2D1_CREATION_PROPERTIES *creation_properties,ID2D1DeviceContext **context);

void __stdcall  D2D1SinCos(float angle,float *s,float *c);

float __stdcall  D2D1Tan(float angle);

float __stdcall  D2D1Vec3Length(float x,float y,float z);

D2D1_COLOR_F __stdcall  D2D1ConvertColorSpace(D2D1_COLOR_SPACE src_colour_space,D2D1_COLOR_SPACE dst_colour_space,const D2D1_COLOR_F *colour);

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __d2d1_1_h__ */
