/*** Autogenerated by WIDL 10.15 from /home/runner/build_wine/wine/include/d2d1_2.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_2_h__
#define __d2d1_2_h__

/* Forward declarations */

#ifndef __ID2D1GeometryRealization_FWD_DEFINED__
#define __ID2D1GeometryRealization_FWD_DEFINED__
typedef interface ID2D1GeometryRealization ID2D1GeometryRealization;
#ifdef __cplusplus
interface ID2D1GeometryRealization;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DeviceContext1_FWD_DEFINED__
#define __ID2D1DeviceContext1_FWD_DEFINED__
typedef interface ID2D1DeviceContext1 ID2D1DeviceContext1;
#ifdef __cplusplus
interface ID2D1DeviceContext1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Device1_FWD_DEFINED__
#define __ID2D1Device1_FWD_DEFINED__
typedef interface ID2D1Device1 ID2D1Device1;
#ifdef __cplusplus
interface ID2D1Device1;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory2_FWD_DEFINED__
#define __ID2D1Factory2_FWD_DEFINED__
typedef interface ID2D1Factory2 ID2D1Factory2;
#ifdef __cplusplus
interface ID2D1Factory2;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1CommandSink1_FWD_DEFINED__
#define __ID2D1CommandSink1_FWD_DEFINED__
typedef interface ID2D1CommandSink1 ID2D1CommandSink1;
#ifdef __cplusplus
interface ID2D1CommandSink1;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <d2d1_1.h>
#include <d2d1effects_1.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef enum D2D1_RENDERING_PRIORITY {
    D2D1_RENDERING_PRIORITY_NORMAL = 0,
    D2D1_RENDERING_PRIORITY_LOW = 1,
    D2D1_RENDERING_PRIORITY_FORCE_DWORD = 0xffffffff
} D2D1_RENDERING_PRIORITY;
/*****************************************************************************
 * ID2D1GeometryRealization interface
 */
#ifndef __ID2D1GeometryRealization_INTERFACE_DEFINED__
#define __ID2D1GeometryRealization_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GeometryRealization, 0xa16907d7, 0xbc02, 0x4801, 0x99,0xe8, 0x8c,0xf7,0xf4,0x85,0xf7,0x74);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a16907d7-bc02-4801-99e8-8cf7f485f774")
ID2D1GeometryRealization : public ID2D1Resource
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GeometryRealization, 0xa16907d7, 0xbc02, 0x4801, 0x99,0xe8, 0x8c,0xf7,0xf4,0x85,0xf7,0x74)
#endif
#else
typedef struct ID2D1GeometryRealizationVtbl {
    BEGIN_INTERFACE

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

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

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

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

    END_INTERFACE
} ID2D1GeometryRealizationVtbl;

interface ID2D1GeometryRealization {
    CONST_VTBL ID2D1GeometryRealizationVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GeometryRealization_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GeometryRealization_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GeometryRealization_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1GeometryRealization_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1GeometryRealization_QueryInterface(ID2D1GeometryRealization* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1GeometryRealization_AddRef(ID2D1GeometryRealization* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1GeometryRealization_Release(ID2D1GeometryRealization* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1GeometryRealization_GetFactory(ID2D1GeometryRealization* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
#endif
#endif

#endif


#endif  /* __ID2D1GeometryRealization_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DeviceContext1 interface
 */
#ifndef __ID2D1DeviceContext1_INTERFACE_DEFINED__
#define __ID2D1DeviceContext1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DeviceContext1, 0xd37f57e4, 0x6908, 0x459f, 0xa1,0x99, 0xe7,0x2f,0x24,0xf7,0x99,0x87);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d37f57e4-6908-459f-a199-e72f24f79987")
ID2D1DeviceContext1 : public ID2D1DeviceContext
{
    virtual HRESULT STDMETHODCALLTYPE CreateFilledGeometryRealization(
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateStrokedGeometryRealization(
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization) = 0;

    virtual void STDMETHODCALLTYPE DrawGeometryRealization(
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DeviceContext1, 0xd37f57e4, 0x6908, 0x459f, 0xa1,0x99, 0xe7,0x2f,0x24,0xf7,0x99,0x87)
#endif
#else
typedef struct ID2D1DeviceContext1Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *CreateCompatibleRenderTarget)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *This,
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer);

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

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

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

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

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

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

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

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

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

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

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

    void (STDMETHODCALLTYPE *FillOpacityMask)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *This,
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *ID2D1DeviceContext_CreateGradientStopCollection)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *This,
        ID2D1Image *image,
        const D2D1_IMAGE_BRUSH_PROPERTIES *image_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1ImageBrush **brush);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawGlyphRun)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

    void (STDMETHODCALLTYPE *ID2D1DeviceContext_DrawBitmap)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *This,
        const D2D1_LAYER_PARAMETERS1 *layer_parameters,
        ID2D1Layer *layer);

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

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

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

    HRESULT (STDMETHODCALLTYPE *GetEffectRequiredInputRectangles)(
        ID2D1DeviceContext1 *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)(
        ID2D1DeviceContext1 *This,
        ID2D1Bitmap *mask,
        ID2D1Brush *brush,
        const D2D1_RECT_F *dst_rect,
        const D2D1_RECT_F *src_rect);

    /*** ID2D1DeviceContext1 methods ***/
    HRESULT (STDMETHODCALLTYPE *CreateFilledGeometryRealization)(
        ID2D1DeviceContext1 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        ID2D1GeometryRealization **realization);

    HRESULT (STDMETHODCALLTYPE *CreateStrokedGeometryRealization)(
        ID2D1DeviceContext1 *This,
        ID2D1Geometry *geometry,
        float tolerance,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        ID2D1GeometryRealization **realization);

    void (STDMETHODCALLTYPE *DrawGeometryRealization)(
        ID2D1DeviceContext1 *This,
        ID2D1GeometryRealization *realization,
        ID2D1Brush *brush);

    END_INTERFACE
} ID2D1DeviceContext1Vtbl;

interface ID2D1DeviceContext1 {
    CONST_VTBL ID2D1DeviceContext1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DeviceContext1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DeviceContext1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DeviceContext1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DeviceContext1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DeviceContext1_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DeviceContext1_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DeviceContext1_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext1_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DeviceContext1_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DeviceContext1_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DeviceContext1_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DeviceContext1_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext1_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext1_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DeviceContext1_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext1_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DeviceContext1_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext1_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DeviceContext1_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DeviceContext1_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DeviceContext1_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DeviceContext1_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 ID2D1DeviceContext1_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1DeviceContext1_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DeviceContext1_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DeviceContext1_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext1_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DeviceContext1_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DeviceContext1_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DeviceContext1_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext1_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DeviceContext1_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DeviceContext1_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DeviceContext1_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DeviceContext1_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DeviceContext1_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DeviceContext1_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DeviceContext1_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DeviceContext1_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DeviceContext1_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DeviceContext1_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DeviceContext1_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DeviceContext1_GetPixelFormat(This) ID2D1DeviceContext1_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext1_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext1_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DeviceContext1_GetSize(This) ID2D1DeviceContext1_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext1_GetPixelSize(This) ID2D1DeviceContext1_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DeviceContext1_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DeviceContext1_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DeviceContext methods ***/
#define ID2D1DeviceContext1_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DeviceContext1_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DeviceContext1_CreateColorContext(This,space,profile,profile_size,color_context) (This)->lpVtbl->CreateColorContext(This,space,profile,profile_size,color_context)
#define ID2D1DeviceContext1_CreateColorContextFromFilename(This,filename,color_context) (This)->lpVtbl->CreateColorContextFromFilename(This,filename,color_context)
#define ID2D1DeviceContext1_CreateColorContextFromWicColorContext(This,wic_color_context,color_context) (This)->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context)
#define ID2D1DeviceContext1_CreateBitmapFromDxgiSurface(This,surface,desc,bitmap) (This)->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap)
#define ID2D1DeviceContext1_CreateEffect(This,effect_id,effect) (This)->lpVtbl->CreateEffect(This,effect_id,effect)
#define ID2D1DeviceContext1_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 ID2D1DeviceContext1_CreateImageBrush(This,image,image_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateImageBrush(This,image,image_brush_desc,brush_desc,brush)
#define ID2D1DeviceContext1_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush) (This)->lpVtbl->ID2D1DeviceContext_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,bitmap_brush)
#define ID2D1DeviceContext1_CreateCommandList(This,command_list) (This)->lpVtbl->CreateCommandList(This,command_list)
#define ID2D1DeviceContext1_IsDxgiFormatSupported(This,format) (This)->lpVtbl->IsDxgiFormatSupported(This,format)
#define ID2D1DeviceContext1_IsBufferPrecisionSupported(This,buffer_precision) (This)->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision)
#define ID2D1DeviceContext1_GetImageLocalBounds(This,image,local_bounds) (This)->lpVtbl->GetImageLocalBounds(This,image,local_bounds)
#define ID2D1DeviceContext1_GetImageWorldBounds(This,image,world_bounds) (This)->lpVtbl->GetImageWorldBounds(This,image,world_bounds)
#define ID2D1DeviceContext1_GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds) (This)->lpVtbl->GetGlyphRunWorldBounds(This,baseline_origin,glyph_run,measuring_mode,bounds)
#define ID2D1DeviceContext1_GetDevice(This,device) (This)->lpVtbl->GetDevice(This,device)
#define ID2D1DeviceContext1_SetTarget(This,target) (This)->lpVtbl->SetTarget(This,target)
#define ID2D1DeviceContext1_GetTarget(This,target) (This)->lpVtbl->GetTarget(This,target)
#define ID2D1DeviceContext1_SetRenderingControls(This,rendering_controls) (This)->lpVtbl->SetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext1_GetRenderingControls(This,rendering_controls) (This)->lpVtbl->GetRenderingControls(This,rendering_controls)
#define ID2D1DeviceContext1_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1DeviceContext1_GetPrimitiveBlend(This) (This)->lpVtbl->GetPrimitiveBlend(This)
#define ID2D1DeviceContext1_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1DeviceContext1_GetUnitMode(This) (This)->lpVtbl->GetUnitMode(This)
#define ID2D1DeviceContext1_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 ID2D1DeviceContext1_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 ID2D1DeviceContext1_DrawGdiMetafile(This,metafile,target_offset) (This)->lpVtbl->DrawGdiMetafile(This,metafile,target_offset)
#define ID2D1DeviceContext1_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 ID2D1DeviceContext1_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer)
#define ID2D1DeviceContext1_InvalidateEffectInputRectangle(This,effect,input,input_rect) (This)->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect)
#define ID2D1DeviceContext1_GetEffectInvalidRectangleCount(This,effect,rect_count) (This)->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count)
#define ID2D1DeviceContext1_GetEffectInvalidRectangles(This,effect,rectangles,rect_count) (This)->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count)
#define ID2D1DeviceContext1_GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count) (This)->lpVtbl->GetEffectRequiredInputRectangles(This,effect,image_rect,desc,input_rect,input_count)
#define ID2D1DeviceContext1_FillOpacityMask(This,mask,brush,dst_rect,src_rect) (This)->lpVtbl->ID2D1DeviceContext_FillOpacityMask(This,mask,brush,dst_rect,src_rect)
/*** ID2D1DeviceContext1 methods ***/
#define ID2D1DeviceContext1_CreateFilledGeometryRealization(This,geometry,tolerance,realization) (This)->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization)
#define ID2D1DeviceContext1_CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization) (This)->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization)
#define ID2D1DeviceContext1_DrawGeometryRealization(This,realization,brush) (This)->lpVtbl->DrawGeometryRealization(This,realization,brush)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1DeviceContext1_QueryInterface(ID2D1DeviceContext1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1DeviceContext1_AddRef(ID2D1DeviceContext1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1DeviceContext1_Release(ID2D1DeviceContext1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1DeviceContext1_GetFactory(ID2D1DeviceContext1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static inline HRESULT ID2D1DeviceContext1_CreateSharedBitmap(ID2D1DeviceContext1* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext1_CreateSolidColorBrush(ID2D1DeviceContext1* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static inline HRESULT ID2D1DeviceContext1_CreateLinearGradientBrush(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateRadialGradientBrush(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateCompatibleRenderTarget(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateLayer(ID2D1DeviceContext1* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static inline HRESULT ID2D1DeviceContext1_CreateMesh(ID2D1DeviceContext1* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static inline void ID2D1DeviceContext1_DrawLine(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_DrawRectangle(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_FillRectangle(ID2D1DeviceContext1* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext1_DrawRoundedRectangle(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_FillRoundedRectangle(ID2D1DeviceContext1* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static inline void ID2D1DeviceContext1_DrawEllipse(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_FillEllipse(ID2D1DeviceContext1* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static inline void ID2D1DeviceContext1_DrawGeometry(ID2D1DeviceContext1* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static inline void ID2D1DeviceContext1_FillGeometry(ID2D1DeviceContext1* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline void ID2D1DeviceContext1_FillMesh(ID2D1DeviceContext1* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline void ID2D1DeviceContext1_DrawText(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_DrawTextLayout(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_SetTransform(ID2D1DeviceContext1* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static inline void ID2D1DeviceContext1_GetTransform(ID2D1DeviceContext1* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static inline void ID2D1DeviceContext1_SetAntialiasMode(ID2D1DeviceContext1* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline D2D1_ANTIALIAS_MODE ID2D1DeviceContext1_GetAntialiasMode(ID2D1DeviceContext1* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static inline void ID2D1DeviceContext1_SetTextAntialiasMode(ID2D1DeviceContext1* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline D2D1_TEXT_ANTIALIAS_MODE ID2D1DeviceContext1_GetTextAntialiasMode(ID2D1DeviceContext1* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static inline void ID2D1DeviceContext1_SetTextRenderingParams(ID2D1DeviceContext1* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext1_GetTextRenderingParams(ID2D1DeviceContext1* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static inline void ID2D1DeviceContext1_SetTags(ID2D1DeviceContext1* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext1_GetTags(ID2D1DeviceContext1* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static inline void ID2D1DeviceContext1_PopLayer(ID2D1DeviceContext1* This) {
    This->lpVtbl->PopLayer(This);
}
static inline HRESULT ID2D1DeviceContext1_Flush(ID2D1DeviceContext1* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static inline void ID2D1DeviceContext1_SaveDrawingState(ID2D1DeviceContext1* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext1_RestoreDrawingState(ID2D1DeviceContext1* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static inline void ID2D1DeviceContext1_PushAxisAlignedClip(ID2D1DeviceContext1* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline void ID2D1DeviceContext1_PopAxisAlignedClip(ID2D1DeviceContext1* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static inline void ID2D1DeviceContext1_Clear(ID2D1DeviceContext1* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static inline void ID2D1DeviceContext1_BeginDraw(ID2D1DeviceContext1* This) {
    This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1DeviceContext1_EndDraw(ID2D1DeviceContext1* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static inline D2D1_PIXEL_FORMAT ID2D1DeviceContext1_GetPixelFormat(ID2D1DeviceContext1* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static inline void ID2D1DeviceContext1_SetDpi(ID2D1DeviceContext1* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static inline void ID2D1DeviceContext1_GetDpi(ID2D1DeviceContext1* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static inline D2D1_SIZE_F ID2D1DeviceContext1_GetSize(ID2D1DeviceContext1* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static inline D2D1_SIZE_U ID2D1DeviceContext1_GetPixelSize(ID2D1DeviceContext1* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static inline UINT32 ID2D1DeviceContext1_GetMaximumBitmapSize(ID2D1DeviceContext1* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static inline BOOL ID2D1DeviceContext1_IsSupported(ID2D1DeviceContext1* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DeviceContext methods ***/
static inline HRESULT ID2D1DeviceContext1_CreateBitmap(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateBitmapFromWicBitmap(ID2D1DeviceContext1* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->ID2D1DeviceContext_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext1_CreateColorContext(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateColorContextFromFilename(ID2D1DeviceContext1* This,const WCHAR *filename,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromFilename(This,filename,color_context);
}
static inline HRESULT ID2D1DeviceContext1_CreateColorContextFromWicColorContext(ID2D1DeviceContext1* This,IWICColorContext *wic_color_context,ID2D1ColorContext **color_context) {
    return This->lpVtbl->CreateColorContextFromWicColorContext(This,wic_color_context,color_context);
}
static inline HRESULT ID2D1DeviceContext1_CreateBitmapFromDxgiSurface(ID2D1DeviceContext1* This,IDXGISurface *surface,const D2D1_BITMAP_PROPERTIES1 *desc,ID2D1Bitmap1 **bitmap) {
    return This->lpVtbl->CreateBitmapFromDxgiSurface(This,surface,desc,bitmap);
}
static inline HRESULT ID2D1DeviceContext1_CreateEffect(ID2D1DeviceContext1* This,REFCLSID effect_id,ID2D1Effect **effect) {
    return This->lpVtbl->CreateEffect(This,effect_id,effect);
}
static inline HRESULT ID2D1DeviceContext1_CreateGradientStopCollection(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateImageBrush(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateBitmapBrush(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_CreateCommandList(ID2D1DeviceContext1* This,ID2D1CommandList **command_list) {
    return This->lpVtbl->CreateCommandList(This,command_list);
}
static inline BOOL ID2D1DeviceContext1_IsDxgiFormatSupported(ID2D1DeviceContext1* This,DXGI_FORMAT format) {
    return This->lpVtbl->IsDxgiFormatSupported(This,format);
}
static inline BOOL ID2D1DeviceContext1_IsBufferPrecisionSupported(ID2D1DeviceContext1* This,D2D1_BUFFER_PRECISION buffer_precision) {
    return This->lpVtbl->IsBufferPrecisionSupported(This,buffer_precision);
}
static inline HRESULT ID2D1DeviceContext1_GetImageLocalBounds(ID2D1DeviceContext1* This,ID2D1Image *image,D2D1_RECT_F *local_bounds) {
    return This->lpVtbl->GetImageLocalBounds(This,image,local_bounds);
}
static inline HRESULT ID2D1DeviceContext1_GetImageWorldBounds(ID2D1DeviceContext1* This,ID2D1Image *image,D2D1_RECT_F *world_bounds) {
    return This->lpVtbl->GetImageWorldBounds(This,image,world_bounds);
}
static inline HRESULT ID2D1DeviceContext1_GetGlyphRunWorldBounds(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_GetDevice(ID2D1DeviceContext1* This,ID2D1Device **device) {
    This->lpVtbl->GetDevice(This,device);
}
static inline void ID2D1DeviceContext1_SetTarget(ID2D1DeviceContext1* This,ID2D1Image *target) {
    This->lpVtbl->SetTarget(This,target);
}
static inline void ID2D1DeviceContext1_GetTarget(ID2D1DeviceContext1* This,ID2D1Image **target) {
    This->lpVtbl->GetTarget(This,target);
}
static inline void ID2D1DeviceContext1_SetRenderingControls(ID2D1DeviceContext1* This,const D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->SetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext1_GetRenderingControls(ID2D1DeviceContext1* This,D2D1_RENDERING_CONTROLS *rendering_controls) {
    This->lpVtbl->GetRenderingControls(This,rendering_controls);
}
static inline void ID2D1DeviceContext1_SetPrimitiveBlend(ID2D1DeviceContext1* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline D2D1_PRIMITIVE_BLEND ID2D1DeviceContext1_GetPrimitiveBlend(ID2D1DeviceContext1* This) {
    return This->lpVtbl->GetPrimitiveBlend(This);
}
static inline void ID2D1DeviceContext1_SetUnitMode(ID2D1DeviceContext1* This,D2D1_UNIT_MODE unit_mode) {
    This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline D2D1_UNIT_MODE ID2D1DeviceContext1_GetUnitMode(ID2D1DeviceContext1* This) {
    return This->lpVtbl->GetUnitMode(This);
}
static inline void ID2D1DeviceContext1_DrawGlyphRun(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_DrawImage(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_DrawGdiMetafile(ID2D1DeviceContext1* This,ID2D1GdiMetafile *metafile,const D2D1_POINT_2F *target_offset) {
    This->lpVtbl->DrawGdiMetafile(This,metafile,target_offset);
}
static inline void ID2D1DeviceContext1_DrawBitmap(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_PushLayer(ID2D1DeviceContext1* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->ID2D1DeviceContext_PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1DeviceContext1_InvalidateEffectInputRectangle(ID2D1DeviceContext1* This,ID2D1Effect *effect,UINT32 input,const D2D1_RECT_F *input_rect) {
    return This->lpVtbl->InvalidateEffectInputRectangle(This,effect,input,input_rect);
}
static inline HRESULT ID2D1DeviceContext1_GetEffectInvalidRectangleCount(ID2D1DeviceContext1* This,ID2D1Effect *effect,UINT32 *rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangleCount(This,effect,rect_count);
}
static inline HRESULT ID2D1DeviceContext1_GetEffectInvalidRectangles(ID2D1DeviceContext1* This,ID2D1Effect *effect,D2D1_RECT_F *rectangles,UINT32 rect_count) {
    return This->lpVtbl->GetEffectInvalidRectangles(This,effect,rectangles,rect_count);
}
static inline HRESULT ID2D1DeviceContext1_GetEffectRequiredInputRectangles(ID2D1DeviceContext1* 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 ID2D1DeviceContext1_FillOpacityMask(ID2D1DeviceContext1* 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);
}
/*** ID2D1DeviceContext1 methods ***/
static inline HRESULT ID2D1DeviceContext1_CreateFilledGeometryRealization(ID2D1DeviceContext1* This,ID2D1Geometry *geometry,float tolerance,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateFilledGeometryRealization(This,geometry,tolerance,realization);
}
static inline HRESULT ID2D1DeviceContext1_CreateStrokedGeometryRealization(ID2D1DeviceContext1* This,ID2D1Geometry *geometry,float tolerance,float stroke_width,ID2D1StrokeStyle *stroke_style,ID2D1GeometryRealization **realization) {
    return This->lpVtbl->CreateStrokedGeometryRealization(This,geometry,tolerance,stroke_width,stroke_style,realization);
}
static inline void ID2D1DeviceContext1_DrawGeometryRealization(ID2D1DeviceContext1* This,ID2D1GeometryRealization *realization,ID2D1Brush *brush) {
    This->lpVtbl->DrawGeometryRealization(This,realization,brush);
}
#endif
#endif

#endif


#endif  /* __ID2D1DeviceContext1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Device1 interface
 */
#ifndef __ID2D1Device1_INTERFACE_DEFINED__
#define __ID2D1Device1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Device1, 0xd21768e1, 0x23a4, 0x4823, 0xa1,0x4b, 0x7c,0x3e,0xba,0x85,0xd6,0x58);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("d21768e1-23a4-4823-a14b-7c3eba85d658")
ID2D1Device1 : public ID2D1Device
{
    virtual D2D1_RENDERING_PRIORITY STDMETHODCALLTYPE GetRenderingPriority(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetRenderingPriority(
        D2D1_RENDERING_PRIORITY priority) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDeviceContext(
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Device1, 0xd21768e1, 0x23a4, 0x4823, 0xa1,0x4b, 0x7c,0x3e,0xba,0x85,0xd6,0x58)
#endif
#else
typedef struct ID2D1Device1Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

    /*** ID2D1Device1 methods ***/
    D2D1_RENDERING_PRIORITY (STDMETHODCALLTYPE *GetRenderingPriority)(
        ID2D1Device1 *This);

    void (STDMETHODCALLTYPE *SetRenderingPriority)(
        ID2D1Device1 *This,
        D2D1_RENDERING_PRIORITY priority);

    HRESULT (STDMETHODCALLTYPE *ID2D1Device1_CreateDeviceContext)(
        ID2D1Device1 *This,
        D2D1_DEVICE_CONTEXT_OPTIONS options,
        ID2D1DeviceContext1 **device_context);

    END_INTERFACE
} ID2D1Device1Vtbl;

interface ID2D1Device1 {
    CONST_VTBL ID2D1Device1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Device1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Device1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Device1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Device1_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Device methods ***/
#define ID2D1Device1_CreatePrintControl(This,wic_factory,document_target,desc,print_control) (This)->lpVtbl->CreatePrintControl(This,wic_factory,document_target,desc,print_control)
#define ID2D1Device1_SetMaximumTextureMemory(This,max_texture_memory) (This)->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory)
#define ID2D1Device1_GetMaximumTextureMemory(This) (This)->lpVtbl->GetMaximumTextureMemory(This)
#define ID2D1Device1_ClearResources(This,msec_since_use) (This)->lpVtbl->ClearResources(This,msec_since_use)
/*** ID2D1Device1 methods ***/
#define ID2D1Device1_GetRenderingPriority(This) (This)->lpVtbl->GetRenderingPriority(This)
#define ID2D1Device1_SetRenderingPriority(This,priority) (This)->lpVtbl->SetRenderingPriority(This,priority)
#define ID2D1Device1_CreateDeviceContext(This,options,device_context) (This)->lpVtbl->ID2D1Device1_CreateDeviceContext(This,options,device_context)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Device1_QueryInterface(ID2D1Device1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Device1_AddRef(ID2D1Device1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Device1_Release(ID2D1Device1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static inline void ID2D1Device1_GetFactory(ID2D1Device1* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Device methods ***/
static inline HRESULT ID2D1Device1_CreatePrintControl(ID2D1Device1* 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 ID2D1Device1_SetMaximumTextureMemory(ID2D1Device1* This,UINT64 max_texture_memory) {
    This->lpVtbl->SetMaximumTextureMemory(This,max_texture_memory);
}
static inline UINT64 ID2D1Device1_GetMaximumTextureMemory(ID2D1Device1* This) {
    return This->lpVtbl->GetMaximumTextureMemory(This);
}
static inline HRESULT ID2D1Device1_ClearResources(ID2D1Device1* This,UINT msec_since_use) {
    return This->lpVtbl->ClearResources(This,msec_since_use);
}
/*** ID2D1Device1 methods ***/
static inline D2D1_RENDERING_PRIORITY ID2D1Device1_GetRenderingPriority(ID2D1Device1* This) {
    return This->lpVtbl->GetRenderingPriority(This);
}
static inline void ID2D1Device1_SetRenderingPriority(ID2D1Device1* This,D2D1_RENDERING_PRIORITY priority) {
    This->lpVtbl->SetRenderingPriority(This,priority);
}
static inline HRESULT ID2D1Device1_CreateDeviceContext(ID2D1Device1* This,D2D1_DEVICE_CONTEXT_OPTIONS options,ID2D1DeviceContext1 **device_context) {
    return This->lpVtbl->ID2D1Device1_CreateDeviceContext(This,options,device_context);
}
#endif
#endif

#endif


#endif  /* __ID2D1Device1_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory2 interface
 */
#ifndef __ID2D1Factory2_INTERFACE_DEFINED__
#define __ID2D1Factory2_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory2, 0x94f81a73, 0x9212, 0x4376, 0x9c,0x58, 0xb1,0x6a,0x3a,0x0d,0x39,0x92);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("94f81a73-9212-4376-9c58-b16a3a0d3992")
ID2D1Factory2 : public ID2D1Factory1
{
    virtual HRESULT STDMETHODCALLTYPE CreateDevice(
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory2, 0x94f81a73, 0x9212, 0x4376, 0x9c,0x58, 0xb1,0x6a,0x3a,0x0d,0x39,0x92)
#endif
#else
typedef struct ID2D1Factory2Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *RegisterEffectFromString)(
        ID2D1Factory2 *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)(
        ID2D1Factory2 *This,
        REFCLSID effect_id);

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

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

    /*** ID2D1Factory2 methods ***/
    HRESULT (STDMETHODCALLTYPE *ID2D1Factory2_CreateDevice)(
        ID2D1Factory2 *This,
        IDXGIDevice *dxgi_device,
        ID2D1Device1 **device);

    END_INTERFACE
} ID2D1Factory2Vtbl;

interface ID2D1Factory2 {
    CONST_VTBL ID2D1Factory2Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory2_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory2_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory2_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory2_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory2_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory2_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory2_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory2_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory2_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory2_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory2_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory2_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory2_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory2_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
/*** ID2D1Factory1 methods ***/
#define ID2D1Factory2_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->ID2D1Factory1_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory2_CreatePathGeometry(This,geometry) (This)->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry)
#define ID2D1Factory2_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->ID2D1Factory1_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory2_CreateGdiMetafile(This,stream,metafile) (This)->lpVtbl->CreateGdiMetafile(This,stream,metafile)
#define ID2D1Factory2_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 ID2D1Factory2_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 ID2D1Factory2_UnregisterEffect(This,effect_id) (This)->lpVtbl->UnregisterEffect(This,effect_id)
#define ID2D1Factory2_GetRegisteredEffects(This,effects,effect_count,returned,registered) (This)->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered)
#define ID2D1Factory2_GetEffectProperties(This,effect_id,props) (This)->lpVtbl->GetEffectProperties(This,effect_id,props)
/*** ID2D1Factory2 methods ***/
#define ID2D1Factory2_CreateDevice(This,dxgi_device,device) (This)->lpVtbl->ID2D1Factory2_CreateDevice(This,dxgi_device,device)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1Factory2_QueryInterface(ID2D1Factory2* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1Factory2_AddRef(ID2D1Factory2* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1Factory2_Release(ID2D1Factory2* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static inline HRESULT ID2D1Factory2_ReloadSystemMetrics(ID2D1Factory2* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static inline void ID2D1Factory2_GetDesktopDpi(ID2D1Factory2* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static inline HRESULT ID2D1Factory2_CreateRectangleGeometry(ID2D1Factory2* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory2_CreateRoundedRectangleGeometry(ID2D1Factory2* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static inline HRESULT ID2D1Factory2_CreateEllipseGeometry(ID2D1Factory2* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static inline HRESULT ID2D1Factory2_CreateGeometryGroup(ID2D1Factory2* 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 ID2D1Factory2_CreateTransformedGeometry(ID2D1Factory2* 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 ID2D1Factory2_CreateWicBitmapRenderTarget(ID2D1Factory2* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static inline HRESULT ID2D1Factory2_CreateHwndRenderTarget(ID2D1Factory2* 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 ID2D1Factory2_CreateDxgiSurfaceRenderTarget(ID2D1Factory2* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static inline HRESULT ID2D1Factory2_CreateDCRenderTarget(ID2D1Factory2* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
/*** ID2D1Factory1 methods ***/
static inline HRESULT ID2D1Factory2_CreateStrokeStyle(ID2D1Factory2* 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 ID2D1Factory2_CreatePathGeometry(ID2D1Factory2* This,ID2D1PathGeometry1 **geometry) {
    return This->lpVtbl->ID2D1Factory1_CreatePathGeometry(This,geometry);
}
static inline HRESULT ID2D1Factory2_CreateDrawingStateBlock(ID2D1Factory2* 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 ID2D1Factory2_CreateGdiMetafile(ID2D1Factory2* This,IStream *stream,ID2D1GdiMetafile **metafile) {
    return This->lpVtbl->CreateGdiMetafile(This,stream,metafile);
}
static inline HRESULT ID2D1Factory2_RegisterEffectFromStream(ID2D1Factory2* 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 ID2D1Factory2_RegisterEffectFromString(ID2D1Factory2* 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 ID2D1Factory2_UnregisterEffect(ID2D1Factory2* This,REFCLSID effect_id) {
    return This->lpVtbl->UnregisterEffect(This,effect_id);
}
static inline HRESULT ID2D1Factory2_GetRegisteredEffects(ID2D1Factory2* This,CLSID *effects,UINT32 effect_count,UINT32 *returned,UINT32 *registered) {
    return This->lpVtbl->GetRegisteredEffects(This,effects,effect_count,returned,registered);
}
static inline HRESULT ID2D1Factory2_GetEffectProperties(ID2D1Factory2* This,REFCLSID effect_id,ID2D1Properties **props) {
    return This->lpVtbl->GetEffectProperties(This,effect_id,props);
}
/*** ID2D1Factory2 methods ***/
static inline HRESULT ID2D1Factory2_CreateDevice(ID2D1Factory2* This,IDXGIDevice *dxgi_device,ID2D1Device1 **device) {
    return This->lpVtbl->ID2D1Factory2_CreateDevice(This,dxgi_device,device);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory2_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1CommandSink1 interface
 */
#ifndef __ID2D1CommandSink1_INTERFACE_DEFINED__
#define __ID2D1CommandSink1_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1CommandSink1, 0x9eb767fd, 0x4269, 0x4467, 0xb8,0xc2, 0xeb,0x30,0xcb,0x30,0x57,0x43);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("9eb767fd-4269-4467-b8c2-eb30cb305743")
ID2D1CommandSink1 : public ID2D1CommandSink
{
    virtual HRESULT STDMETHODCALLTYPE SetPrimitiveBlend1(
        D2D1_PRIMITIVE_BLEND primitive_blend) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1CommandSink1, 0x9eb767fd, 0x4269, 0x4467, 0xb8,0xc2, 0xeb,0x30,0xcb,0x30,0x57,0x43)
#endif
#else
typedef struct ID2D1CommandSink1Vtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

    HRESULT (STDMETHODCALLTYPE *DrawGlyphRun)(
        ID2D1CommandSink1 *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)(
        ID2D1CommandSink1 *This,
        D2D1_POINT_2F p0,
        D2D1_POINT_2F p1,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style);

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

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

    HRESULT (STDMETHODCALLTYPE *DrawBitmap)(
        ID2D1CommandSink1 *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)(
        ID2D1CommandSink1 *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)(
        ID2D1CommandSink1 *This,
        ID2D1GdiMetafile *metafile,
        const D2D1_POINT_2F *target_offset);

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

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

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

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

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

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

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

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

    /*** ID2D1CommandSink1 methods ***/
    HRESULT (STDMETHODCALLTYPE *SetPrimitiveBlend1)(
        ID2D1CommandSink1 *This,
        D2D1_PRIMITIVE_BLEND primitive_blend);

    END_INTERFACE
} ID2D1CommandSink1Vtbl;

interface ID2D1CommandSink1 {
    CONST_VTBL ID2D1CommandSink1Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1CommandSink1_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1CommandSink1_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1CommandSink1_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1CommandSink methods ***/
#define ID2D1CommandSink1_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1CommandSink1_EndDraw(This) (This)->lpVtbl->EndDraw(This)
#define ID2D1CommandSink1_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink1_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1CommandSink1_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1CommandSink1_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1CommandSink1_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1CommandSink1_SetPrimitiveBlend(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend(This,primitive_blend)
#define ID2D1CommandSink1_SetUnitMode(This,unit_mode) (This)->lpVtbl->SetUnitMode(This,unit_mode)
#define ID2D1CommandSink1_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1CommandSink1_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 ID2D1CommandSink1_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1CommandSink1_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1CommandSink1_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1CommandSink1_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 ID2D1CommandSink1_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 ID2D1CommandSink1_DrawGdiMetafile(This,metafile,target_offset) (This)->lpVtbl->DrawGdiMetafile(This,metafile,target_offset)
#define ID2D1CommandSink1_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1CommandSink1_FillOpacityMask(This,bitmap,brush,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,bitmap,brush,dst_rect,src_rect)
#define ID2D1CommandSink1_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1CommandSink1_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1CommandSink1_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1CommandSink1_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1CommandSink1_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1CommandSink1_PopLayer(This) (This)->lpVtbl->PopLayer(This)
/*** ID2D1CommandSink1 methods ***/
#define ID2D1CommandSink1_SetPrimitiveBlend1(This,primitive_blend) (This)->lpVtbl->SetPrimitiveBlend1(This,primitive_blend)
#else
/*** IUnknown methods ***/
static inline HRESULT ID2D1CommandSink1_QueryInterface(ID2D1CommandSink1* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ID2D1CommandSink1_AddRef(ID2D1CommandSink1* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ID2D1CommandSink1_Release(ID2D1CommandSink1* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1CommandSink methods ***/
static inline HRESULT ID2D1CommandSink1_BeginDraw(ID2D1CommandSink1* This) {
    return This->lpVtbl->BeginDraw(This);
}
static inline HRESULT ID2D1CommandSink1_EndDraw(ID2D1CommandSink1* This) {
    return This->lpVtbl->EndDraw(This);
}
static inline HRESULT ID2D1CommandSink1_SetAntialiasMode(ID2D1CommandSink1* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink1_SetTags(ID2D1CommandSink1* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    return This->lpVtbl->SetTags(This,tag1,tag2);
}
static inline HRESULT ID2D1CommandSink1_SetTextAntialiasMode(ID2D1CommandSink1* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static inline HRESULT ID2D1CommandSink1_SetTextRenderingParams(ID2D1CommandSink1* This,IDWriteRenderingParams *text_rendering_params) {
    return This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static inline HRESULT ID2D1CommandSink1_SetTransform(ID2D1CommandSink1* This,const D2D1_MATRIX_3X2_F *transform) {
    return This->lpVtbl->SetTransform(This,transform);
}
static inline HRESULT ID2D1CommandSink1_SetPrimitiveBlend(ID2D1CommandSink1* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend(This,primitive_blend);
}
static inline HRESULT ID2D1CommandSink1_SetUnitMode(ID2D1CommandSink1* This,D2D1_UNIT_MODE unit_mode) {
    return This->lpVtbl->SetUnitMode(This,unit_mode);
}
static inline HRESULT ID2D1CommandSink1_Clear(ID2D1CommandSink1* This,const D2D1_COLOR_F *color) {
    return This->lpVtbl->Clear(This,color);
}
static inline HRESULT ID2D1CommandSink1_DrawGlyphRun(ID2D1CommandSink1* 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 ID2D1CommandSink1_DrawLine(ID2D1CommandSink1* 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 ID2D1CommandSink1_DrawGeometry(ID2D1CommandSink1* 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 ID2D1CommandSink1_DrawRectangle(ID2D1CommandSink1* 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 ID2D1CommandSink1_DrawBitmap(ID2D1CommandSink1* 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 ID2D1CommandSink1_DrawImage(ID2D1CommandSink1* 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 ID2D1CommandSink1_DrawGdiMetafile(ID2D1CommandSink1* This,ID2D1GdiMetafile *metafile,const D2D1_POINT_2F *target_offset) {
    return This->lpVtbl->DrawGdiMetafile(This,metafile,target_offset);
}
static inline HRESULT ID2D1CommandSink1_FillMesh(ID2D1CommandSink1* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    return This->lpVtbl->FillMesh(This,mesh,brush);
}
static inline HRESULT ID2D1CommandSink1_FillOpacityMask(ID2D1CommandSink1* 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 ID2D1CommandSink1_FillGeometry(ID2D1CommandSink1* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    return This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static inline HRESULT ID2D1CommandSink1_FillRectangle(ID2D1CommandSink1* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    return This->lpVtbl->FillRectangle(This,rect,brush);
}
static inline HRESULT ID2D1CommandSink1_PushAxisAlignedClip(ID2D1CommandSink1* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    return This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static inline HRESULT ID2D1CommandSink1_PushLayer(ID2D1CommandSink1* This,const D2D1_LAYER_PARAMETERS1 *layer_parameters,ID2D1Layer *layer) {
    return This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static inline HRESULT ID2D1CommandSink1_PopAxisAlignedClip(ID2D1CommandSink1* This) {
    return This->lpVtbl->PopAxisAlignedClip(This);
}
static inline HRESULT ID2D1CommandSink1_PopLayer(ID2D1CommandSink1* This) {
    return This->lpVtbl->PopLayer(This);
}
/*** ID2D1CommandSink1 methods ***/
static inline HRESULT ID2D1CommandSink1_SetPrimitiveBlend1(ID2D1CommandSink1* This,D2D1_PRIMITIVE_BLEND primitive_blend) {
    return This->lpVtbl->SetPrimitiveBlend1(This,primitive_blend);
}
#endif
#endif

#endif


#endif  /* __ID2D1CommandSink1_INTERFACE_DEFINED__ */

float __stdcall  D2D1ComputeMaximumScaleFactor(const D2D1_MATRIX_3X2_F *matrix);

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __d2d1_2_h__ */
