/*** Autogenerated by WIDL 5.0.5 from d2d1.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_h__
#define __d2d1_h__

/* Forward declarations */

#ifndef __ID2D1Resource_FWD_DEFINED__
#define __ID2D1Resource_FWD_DEFINED__
typedef interface ID2D1Resource ID2D1Resource;
#ifdef __cplusplus
interface ID2D1Resource;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1StrokeStyle_FWD_DEFINED__
#define __ID2D1StrokeStyle_FWD_DEFINED__
typedef interface ID2D1StrokeStyle ID2D1StrokeStyle;
#ifdef __cplusplus
interface ID2D1StrokeStyle;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1SimplifiedGeometrySink_FWD_DEFINED__
#define __ID2D1SimplifiedGeometrySink_FWD_DEFINED__
typedef interface ID2D1SimplifiedGeometrySink ID2D1SimplifiedGeometrySink;
#ifdef __cplusplus
interface ID2D1SimplifiedGeometrySink;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1TessellationSink_FWD_DEFINED__
#define __ID2D1TessellationSink_FWD_DEFINED__
typedef interface ID2D1TessellationSink ID2D1TessellationSink;
#ifdef __cplusplus
interface ID2D1TessellationSink;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Geometry_FWD_DEFINED__
#define __ID2D1Geometry_FWD_DEFINED__
typedef interface ID2D1Geometry ID2D1Geometry;
#ifdef __cplusplus
interface ID2D1Geometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1RectangleGeometry_FWD_DEFINED__
#define __ID2D1RectangleGeometry_FWD_DEFINED__
typedef interface ID2D1RectangleGeometry ID2D1RectangleGeometry;
#ifdef __cplusplus
interface ID2D1RectangleGeometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1RoundedRectangleGeometry_FWD_DEFINED__
#define __ID2D1RoundedRectangleGeometry_FWD_DEFINED__
typedef interface ID2D1RoundedRectangleGeometry ID2D1RoundedRectangleGeometry;
#ifdef __cplusplus
interface ID2D1RoundedRectangleGeometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1EllipseGeometry_FWD_DEFINED__
#define __ID2D1EllipseGeometry_FWD_DEFINED__
typedef interface ID2D1EllipseGeometry ID2D1EllipseGeometry;
#ifdef __cplusplus
interface ID2D1EllipseGeometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GeometryGroup_FWD_DEFINED__
#define __ID2D1GeometryGroup_FWD_DEFINED__
typedef interface ID2D1GeometryGroup ID2D1GeometryGroup;
#ifdef __cplusplus
interface ID2D1GeometryGroup;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1TransformedGeometry_FWD_DEFINED__
#define __ID2D1TransformedGeometry_FWD_DEFINED__
typedef interface ID2D1TransformedGeometry ID2D1TransformedGeometry;
#ifdef __cplusplus
interface ID2D1TransformedGeometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GeometrySink_FWD_DEFINED__
#define __ID2D1GeometrySink_FWD_DEFINED__
typedef interface ID2D1GeometrySink ID2D1GeometrySink;
#ifdef __cplusplus
interface ID2D1GeometrySink;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1PathGeometry_FWD_DEFINED__
#define __ID2D1PathGeometry_FWD_DEFINED__
typedef interface ID2D1PathGeometry ID2D1PathGeometry;
#ifdef __cplusplus
interface ID2D1PathGeometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DrawingStateBlock_FWD_DEFINED__
#define __ID2D1DrawingStateBlock_FWD_DEFINED__
typedef interface ID2D1DrawingStateBlock ID2D1DrawingStateBlock;
#ifdef __cplusplus
interface ID2D1DrawingStateBlock;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Image_FWD_DEFINED__
#define __ID2D1Image_FWD_DEFINED__
typedef interface ID2D1Image ID2D1Image;
#ifdef __cplusplus
interface ID2D1Image;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Bitmap_FWD_DEFINED__
#define __ID2D1Bitmap_FWD_DEFINED__
typedef interface ID2D1Bitmap ID2D1Bitmap;
#ifdef __cplusplus
interface ID2D1Bitmap;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Brush_FWD_DEFINED__
#define __ID2D1Brush_FWD_DEFINED__
typedef interface ID2D1Brush ID2D1Brush;
#ifdef __cplusplus
interface ID2D1Brush;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BitmapBrush_FWD_DEFINED__
#define __ID2D1BitmapBrush_FWD_DEFINED__
typedef interface ID2D1BitmapBrush ID2D1BitmapBrush;
#ifdef __cplusplus
interface ID2D1BitmapBrush;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1SolidColorBrush_FWD_DEFINED__
#define __ID2D1SolidColorBrush_FWD_DEFINED__
typedef interface ID2D1SolidColorBrush ID2D1SolidColorBrush;
#ifdef __cplusplus
interface ID2D1SolidColorBrush;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GradientStopCollection_FWD_DEFINED__
#define __ID2D1GradientStopCollection_FWD_DEFINED__
typedef interface ID2D1GradientStopCollection ID2D1GradientStopCollection;
#ifdef __cplusplus
interface ID2D1GradientStopCollection;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1LinearGradientBrush_FWD_DEFINED__
#define __ID2D1LinearGradientBrush_FWD_DEFINED__
typedef interface ID2D1LinearGradientBrush ID2D1LinearGradientBrush;
#ifdef __cplusplus
interface ID2D1LinearGradientBrush;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1RadialGradientBrush_FWD_DEFINED__
#define __ID2D1RadialGradientBrush_FWD_DEFINED__
typedef interface ID2D1RadialGradientBrush ID2D1RadialGradientBrush;
#ifdef __cplusplus
interface ID2D1RadialGradientBrush;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Layer_FWD_DEFINED__
#define __ID2D1Layer_FWD_DEFINED__
typedef interface ID2D1Layer ID2D1Layer;
#ifdef __cplusplus
interface ID2D1Layer;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Mesh_FWD_DEFINED__
#define __ID2D1Mesh_FWD_DEFINED__
typedef interface ID2D1Mesh ID2D1Mesh;
#ifdef __cplusplus
interface ID2D1Mesh;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1RenderTarget_FWD_DEFINED__
#define __ID2D1RenderTarget_FWD_DEFINED__
typedef interface ID2D1RenderTarget ID2D1RenderTarget;
#ifdef __cplusplus
interface ID2D1RenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BitmapRenderTarget_FWD_DEFINED__
#define __ID2D1BitmapRenderTarget_FWD_DEFINED__
typedef interface ID2D1BitmapRenderTarget ID2D1BitmapRenderTarget;
#ifdef __cplusplus
interface ID2D1BitmapRenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1HwndRenderTarget_FWD_DEFINED__
#define __ID2D1HwndRenderTarget_FWD_DEFINED__
typedef interface ID2D1HwndRenderTarget ID2D1HwndRenderTarget;
#ifdef __cplusplus
interface ID2D1HwndRenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1DCRenderTarget_FWD_DEFINED__
#define __ID2D1DCRenderTarget_FWD_DEFINED__
typedef interface ID2D1DCRenderTarget ID2D1DCRenderTarget;
#ifdef __cplusplus
interface ID2D1DCRenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1GdiInteropRenderTarget_FWD_DEFINED__
#define __ID2D1GdiInteropRenderTarget_FWD_DEFINED__
typedef interface ID2D1GdiInteropRenderTarget ID2D1GdiInteropRenderTarget;
#ifdef __cplusplus
interface ID2D1GdiInteropRenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Factory_FWD_DEFINED__
#define __ID2D1Factory_FWD_DEFINED__
typedef interface ID2D1Factory ID2D1Factory;
#ifdef __cplusplus
interface ID2D1Factory;
#endif /* __cplusplus */
#endif

/* Headers for imported files */

#include <unknwn.h>
#include <dcommon.h>
#include <d2dbasetypes.h>
#include <d3d10_1.h>
#include <d2derr.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifdef WINE_NO_UNICODE_MACROS
#undef DrawText
#endif
#ifndef __ID2D1Factory_FWD_DEFINED__
#define __ID2D1Factory_FWD_DEFINED__
typedef interface ID2D1Factory ID2D1Factory;
#ifdef __cplusplus
interface ID2D1Factory;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1RenderTarget_FWD_DEFINED__
#define __ID2D1RenderTarget_FWD_DEFINED__
typedef interface ID2D1RenderTarget ID2D1RenderTarget;
#ifdef __cplusplus
interface ID2D1RenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1BitmapRenderTarget_FWD_DEFINED__
#define __ID2D1BitmapRenderTarget_FWD_DEFINED__
typedef interface ID2D1BitmapRenderTarget ID2D1BitmapRenderTarget;
#ifdef __cplusplus
interface ID2D1BitmapRenderTarget;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Geometry_FWD_DEFINED__
#define __ID2D1Geometry_FWD_DEFINED__
typedef interface ID2D1Geometry ID2D1Geometry;
#ifdef __cplusplus
interface ID2D1Geometry;
#endif /* __cplusplus */
#endif

#ifndef __ID2D1Brush_FWD_DEFINED__
#define __ID2D1Brush_FWD_DEFINED__
typedef interface ID2D1Brush ID2D1Brush;
#ifdef __cplusplus
interface ID2D1Brush;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteRenderingParams_FWD_DEFINED__
#define __IDWriteRenderingParams_FWD_DEFINED__
typedef interface IDWriteRenderingParams IDWriteRenderingParams;
#ifdef __cplusplus
interface IDWriteRenderingParams;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteTextFormat_FWD_DEFINED__
#define __IDWriteTextFormat_FWD_DEFINED__
typedef interface IDWriteTextFormat IDWriteTextFormat;
#ifdef __cplusplus
interface IDWriteTextFormat;
#endif /* __cplusplus */
#endif

#ifndef __IDWriteTextLayout_FWD_DEFINED__
#define __IDWriteTextLayout_FWD_DEFINED__
typedef interface IDWriteTextLayout IDWriteTextLayout;
#ifdef __cplusplus
interface IDWriteTextLayout;
#endif /* __cplusplus */
#endif

#ifndef __IWICBitmapSource_FWD_DEFINED__
#define __IWICBitmapSource_FWD_DEFINED__
typedef interface IWICBitmapSource IWICBitmapSource;
#ifdef __cplusplus
interface IWICBitmapSource;
#endif /* __cplusplus */
#endif

#ifndef __IWICBitmap_FWD_DEFINED__
#define __IWICBitmap_FWD_DEFINED__
typedef interface IWICBitmap IWICBitmap;
#ifdef __cplusplus
interface IWICBitmap;
#endif /* __cplusplus */
#endif

#ifndef __dwrite_h__
typedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN;
#endif /* __dwrite_h__ */
typedef D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F;
typedef D2D_RECT_F D2D1_RECT_F;
typedef D2D_SIZE_F D2D1_SIZE_F;
typedef UINT64 D2D1_TAG;
typedef D2D_POINT_2U D2D1_POINT_2U;
typedef D2D_RECT_U D2D1_RECT_U;
typedef D2D_COLOR_F D2D1_COLOR_F;
#define D2D1_DEFAULT_FLATTENING_TOLERANCE (0.25f)
enum {
    D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR = 0,
    D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR = 1,
    D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC = 2,
    D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR = 3,
    D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC = 4,
    D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC = 5,
    D2D1_INTERPOLATION_MODE_DEFINITION_FANT = 6,
    D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR = 7
};
typedef enum D2D1_DEBUG_LEVEL {
    D2D1_DEBUG_LEVEL_NONE = 0,
    D2D1_DEBUG_LEVEL_ERROR = 1,
    D2D1_DEBUG_LEVEL_WARNING = 2,
    D2D1_DEBUG_LEVEL_INFORMATION = 3,
    D2D1_DEBUG_LEVEL_FORCE_DWORD = 0xffffffff
} D2D1_DEBUG_LEVEL;
typedef enum D2D1_FACTORY_TYPE {
    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
    D2D1_FACTORY_TYPE_MULTI_THREADED = 1,
    D2D1_FACTORY_TYPE_FORCE_DWORD = 0xfffffff
} D2D1_FACTORY_TYPE;
typedef enum D2D1_FILL_MODE {
    D2D1_FILL_MODE_ALTERNATE = 0,
    D2D1_FILL_MODE_WINDING = 1,
    D2D1_FILL_MODE_FORCE_DWORD = 0xffffffff
} D2D1_FILL_MODE;
typedef enum D2D1_PATH_SEGMENT {
    D2D1_PATH_SEGMENT_NONE = 0,
    D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 1,
    D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 2,
    D2D1_PATH_SEGMENT_FORCE_DWORD = 0xffffffff
} D2D1_PATH_SEGMENT;
typedef enum D2D1_FIGURE_BEGIN {
    D2D1_FIGURE_BEGIN_FILLED = 0,
    D2D1_FIGURE_BEGIN_HOLLOW = 1,
    D2D1_FIGURE_BEGIN_FORCE_DWORD = 0xffffffff
} D2D1_FIGURE_BEGIN;
typedef enum D2D1_FIGURE_END {
    D2D1_FIGURE_END_OPEN = 0,
    D2D1_FIGURE_END_CLOSED = 1,
    D2D1_FIGURE_END_FORCE_DWORD = 0xffffffff
} D2D1_FIGURE_END;
typedef enum D2D1_CAP_STYLE {
    D2D1_CAP_STYLE_FLAT = 0,
    D2D1_CAP_STYLE_SQUARE = 1,
    D2D1_CAP_STYLE_ROUND = 2,
    D2D1_CAP_STYLE_TRIANGLE = 3,
    D2D1_CAP_STYLE_FORCE_DWORD = 0xffffffff
} D2D1_CAP_STYLE;
typedef enum D2D1_LINE_JOIN {
    D2D1_LINE_JOIN_MITER = 0,
    D2D1_LINE_JOIN_BEVEL = 1,
    D2D1_LINE_JOIN_ROUND = 2,
    D2D1_LINE_JOIN_MITER_OR_BEVEL = 3,
    D2D1_LINE_JOIN_FORCE_DWORD = 0xffffffff
} D2D1_LINE_JOIN;
typedef enum D2D1_DASH_STYLE {
    D2D1_DASH_STYLE_SOLID = 0,
    D2D1_DASH_STYLE_DASH = 1,
    D2D1_DASH_STYLE_DOT = 2,
    D2D1_DASH_STYLE_DASH_DOT = 3,
    D2D1_DASH_STYLE_DASH_DOT_DOT = 4,
    D2D1_DASH_STYLE_CUSTOM = 5,
    D2D1_DASH_STYLE_FORCE_DWORD = 0xffffffff
} D2D1_DASH_STYLE;
typedef enum D2D1_GEOMETRY_RELATION {
    D2D1_GEOMETRY_RELATION_UNKNOWN = 0,
    D2D1_GEOMETRY_RELATION_DISJOINT = 1,
    D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2,
    D2D1_GEOMETRY_RELATION_CONTAINS = 3,
    D2D1_GEOMETRY_RELATION_OVERLAP = 4,
    D2D1_GEOMETRY_RELATION_FORCE_DWORD = 0xffffffff
} D2D1_GEOMETRY_RELATION;
typedef enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION {
    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES = 0,
    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES = 1,
    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_FORCE_DWORD = 0xffffffff
} D2D1_GEOMETRY_SIMPLIFICATION_OPTION;
typedef enum D2D1_COMBINE_MODE {
    D2D1_COMBINE_MODE_UNION = 0,
    D2D1_COMBINE_MODE_INTERSECT = 1,
    D2D1_COMBINE_MODE_XOR = 2,
    D2D1_COMBINE_MODE_EXCLUDE = 3,
    D2D1_COMBINE_MODE_FORCE_DWORD = 0xffffffff
} D2D1_COMBINE_MODE;
typedef enum D2D1_SWEEP_DIRECTION {
    D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE = 0,
    D2D1_SWEEP_DIRECTION_CLOCKWISE = 1,
    D2D1_SWEEP_DIRECTION_FORCE_DWORD = 0xffffffff
} D2D1_SWEEP_DIRECTION;
typedef enum D2D1_ARC_SIZE {
    D2D1_ARC_SIZE_SMALL = 0,
    D2D1_ARC_SIZE_LARGE = 1,
    D2D1_ARC_SIZE_FORCE_DWORD = 0xffffffff
} D2D1_ARC_SIZE;
typedef enum D2D1_ANTIALIAS_MODE {
    D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0,
    D2D1_ANTIALIAS_MODE_ALIASED = 1,
    D2D1_ANTIALIAS_MODE_FORCE_DWORD = 0xffffffff
} D2D1_ANTIALIAS_MODE;
typedef enum D2D1_TEXT_ANTIALIAS_MODE {
    D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0,
    D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1,
    D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2,
    D2D1_TEXT_ANTIALIAS_MODE_ALIASED = 3,
    D2D1_TEXT_ANTIALIAS_MODE_FORCE_DWORD = 0xffffffff
} D2D1_TEXT_ANTIALIAS_MODE;
typedef enum D2D1_EXTEND_MODE {
    D2D1_EXTEND_MODE_CLAMP = 0,
    D2D1_EXTEND_MODE_WRAP = 1,
    D2D1_EXTEND_MODE_MIRROR = 2,
    D2D1_EXTEND_MODE_FORCE_DWORD = 0xffffffff
} D2D1_EXTEND_MODE;
typedef enum D2D1_BITMAP_INTERPOLATION_MODE {
    D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
    D2D1_BITMAP_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
    D2D1_BITMAP_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff
} D2D1_BITMAP_INTERPOLATION_MODE;
typedef enum D2D1_GAMMA {
    D2D1_GAMMA_2_2 = 0,
    D2D1_GAMMA_1_0 = 1,
    D2D1_GAMMA_FORCE_DWORD = 0xffffffff
} D2D1_GAMMA;
typedef enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS {
    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE = 0x0,
    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE = 0x1,
    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS;
typedef enum D2D1_OPACITY_MASK_CONTENT {
    D2D1_OPACITY_MASK_CONTENT_GRAPHICS = 0,
    D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL = 1,
    D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE = 2,
    D2D1_OPACITY_MASK_CONTENT_FORCE_DWORD = 0xffffffff
} D2D1_OPACITY_MASK_CONTENT;
typedef enum D2D1_DRAW_TEXT_OPTIONS {
    D2D1_DRAW_TEXT_OPTIONS_NO_SNAP = 0x1,
    D2D1_DRAW_TEXT_OPTIONS_CLIP = 0x2,
    D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x4,
    D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING = 0x8,
    D2D1_DRAW_TEXT_OPTIONS_NONE = 0x0,
    D2D1_DRAW_TEXT_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_DRAW_TEXT_OPTIONS;
typedef enum D2D1_LAYER_OPTIONS {
    D2D1_LAYER_OPTIONS_NONE = 0x0,
    D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE = 0x1,
    D2D1_LAYER_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_LAYER_OPTIONS;
typedef enum D2D1_RENDER_TARGET_TYPE {
    D2D1_RENDER_TARGET_TYPE_DEFAULT = 0,
    D2D1_RENDER_TARGET_TYPE_SOFTWARE = 1,
    D2D1_RENDER_TARGET_TYPE_HARDWARE = 2,
    D2D1_RENDER_TARGET_TYPE_FORCE_DWORD = 0xffffffff
} D2D1_RENDER_TARGET_TYPE;
typedef enum D2D1_RENDER_TARGET_USAGE {
    D2D1_RENDER_TARGET_USAGE_NONE = 0x0,
    D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING = 0x1,
    D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE = 0x2,
    D2D1_RENDER_TARGET_USAGE_FORCE_DWORD = 0xffffffff
} D2D1_RENDER_TARGET_USAGE;
typedef enum D2D1_FEATURE_LEVEL {
    D2D1_FEATURE_LEVEL_DEFAULT = 0,
    D2D1_FEATURE_LEVEL_9 = D3D_FEATURE_LEVEL_9_1,
    D2D1_FEATURE_LEVEL_10 = D3D_FEATURE_LEVEL_10_0,
    D2D1_FEATURE_LEVEL_FORCE_DWORD = 0xffffffff
} D2D1_FEATURE_LEVEL;
typedef enum D2D1_WINDOW_STATE {
    D2D1_WINDOW_STATE_NONE = 0,
    D2D1_WINDOW_STATE_OCCLUDED = 1,
    D2D1_WINDOW_STATE_FORCE_DWORD = 0xffffffff
} D2D1_WINDOW_STATE;
typedef enum D2D1_DC_INITIALIZE_MODE {
    D2D1_DC_INITIALIZE_MODE_COPY = 0,
    D2D1_DC_INITIALIZE_MODE_CLEAR = 1,
    D2D1_DC_INITIALIZE_MODE_FORCE_DWORD = 0xffffffff
} D2D1_DC_INITIALIZE_MODE;
typedef enum D2D1_PRESENT_OPTIONS {
    D2D1_PRESENT_OPTIONS_NONE = 0x0,
    D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS = 0x1,
    D2D1_PRESENT_OPTIONS_IMMEDIATELY = 0x2,
    D2D1_PRESENT_OPTIONS_FORCE_DWORD = 0xffffffff
} D2D1_PRESENT_OPTIONS;
typedef struct D2D1_BEZIER_SEGMENT {
    D2D1_POINT_2F point1;
    D2D1_POINT_2F point2;
    D2D1_POINT_2F point3;
} D2D1_BEZIER_SEGMENT;
typedef struct D2D1_FACTORY_OPTIONS {
    D2D1_DEBUG_LEVEL debugLevel;
} D2D1_FACTORY_OPTIONS;
typedef struct D2D1_TRIANGLE {
    D2D1_POINT_2F point1;
    D2D1_POINT_2F point2;
    D2D1_POINT_2F point3;
} D2D1_TRIANGLE;
typedef struct D2D1_ROUNDED_RECT {
    D2D1_RECT_F rect;
    float radiusX;
    float radiusY;
} D2D1_ROUNDED_RECT;
typedef struct D2D1_ELLIPSE {
    D2D1_POINT_2F point;
    float radiusX;
    float radiusY;
} D2D1_ELLIPSE;
typedef struct D2D1_QUADRATIC_BEZIER_SEGMENT {
    D2D1_POINT_2F point1;
    D2D1_POINT_2F point2;
} D2D1_QUADRATIC_BEZIER_SEGMENT;
typedef struct D2D1_ARC_SEGMENT {
    D2D1_POINT_2F point;
    D2D1_SIZE_F size;
    float rotationAngle;
    D2D1_SWEEP_DIRECTION sweepDirection;
    D2D1_ARC_SIZE arcSize;
} D2D1_ARC_SEGMENT;
typedef struct D2D1_DRAWING_STATE_DESCRIPTION {
    D2D1_ANTIALIAS_MODE antialiasMode;
    D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;
    D2D1_TAG tag1;
    D2D1_TAG tag2;
    D2D1_MATRIX_3X2_F transform;
} D2D1_DRAWING_STATE_DESCRIPTION;
typedef struct D2D1_GRADIENT_STOP {
    float position;
    D2D1_COLOR_F color;
} D2D1_GRADIENT_STOP;
typedef struct D2D1_BITMAP_PROPERTIES {
    D2D1_PIXEL_FORMAT pixelFormat;
    float dpiX;
    float dpiY;
} D2D1_BITMAP_PROPERTIES;
typedef struct D2D1_BITMAP_BRUSH_PROPERTIES {
    D2D1_EXTEND_MODE extendModeX;
    D2D1_EXTEND_MODE extendModeY;
    D2D1_BITMAP_INTERPOLATION_MODE interpolationMode;
} D2D1_BITMAP_BRUSH_PROPERTIES;
typedef struct D2D1_BRUSH_PROPERTIES {
    float opacity;
    D2D1_MATRIX_3X2_F transform;
} D2D1_BRUSH_PROPERTIES;
typedef struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES {
    D2D1_POINT_2F startPoint;
    D2D1_POINT_2F endPoint;
} D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES;
typedef struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES {
    D2D1_POINT_2F center;
    D2D1_POINT_2F gradientOriginOffset;
    float radiusX;
    float radiusY;
} D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES;
typedef struct D2D1_LAYER_PARAMETERS {
    D2D1_RECT_F contentBounds;
    ID2D1Geometry *geometricMask;
    D2D1_ANTIALIAS_MODE maskAntialiasMode;
    D2D1_MATRIX_3X2_F maskTransform;
    float opacity;
    ID2D1Brush *opacityBrush;
    D2D1_LAYER_OPTIONS layerOptions;
} D2D1_LAYER_PARAMETERS;
typedef struct D2D1_RENDER_TARGET_PROPERTIES {
    D2D1_RENDER_TARGET_TYPE type;
    D2D1_PIXEL_FORMAT pixelFormat;
    float dpiX;
    float dpiY;
    D2D1_RENDER_TARGET_USAGE usage;
    D2D1_FEATURE_LEVEL minLevel;
} D2D1_RENDER_TARGET_PROPERTIES;
typedef struct D2D1_STROKE_STYLE_PROPERTIES {
    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_STYLE_PROPERTIES;
typedef struct D2D1_HWND_RENDER_TARGET_PROPERTIES {
    HWND hwnd;
    D2D1_SIZE_U pixelSize;
    D2D1_PRESENT_OPTIONS presentOptions;
} D2D1_HWND_RENDER_TARGET_PROPERTIES;
/*****************************************************************************
 * ID2D1Resource interface
 */
#ifndef __ID2D1Resource_INTERFACE_DEFINED__
#define __ID2D1Resource_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Resource, 0x2cd90691, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd90691-12e2-11dc-9fed-001143a055f9")
ID2D1Resource : public IUnknown
{
    virtual void STDMETHODCALLTYPE GetFactory(
        ID2D1Factory **factory) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Resource, 0x2cd90691, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1ResourceVtbl {
    BEGIN_INTERFACE

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

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

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

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

    END_INTERFACE
} ID2D1ResourceVtbl;

interface ID2D1Resource {
    CONST_VTBL ID2D1ResourceVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Resource_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Resource_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Resource_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Resource_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Resource_QueryInterface(ID2D1Resource* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Resource_AddRef(ID2D1Resource* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Resource_Release(ID2D1Resource* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Resource_GetFactory(ID2D1Resource* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
#endif
#endif

#endif


#endif  /* __ID2D1Resource_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1StrokeStyle interface
 */
#ifndef __ID2D1StrokeStyle_INTERFACE_DEFINED__
#define __ID2D1StrokeStyle_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1StrokeStyle, 0x2cd9069d, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd9069d-12e2-11dc-9fed-001143a055f9")
ID2D1StrokeStyle : public ID2D1Resource
{
    virtual D2D1_CAP_STYLE STDMETHODCALLTYPE GetStartCap(
        ) = 0;

    virtual D2D1_CAP_STYLE STDMETHODCALLTYPE GetEndCap(
        ) = 0;

    virtual D2D1_CAP_STYLE STDMETHODCALLTYPE GetDashCap(
        ) = 0;

    virtual float STDMETHODCALLTYPE GetMiterLimit(
        ) = 0;

    virtual D2D1_LINE_JOIN STDMETHODCALLTYPE GetLineJoin(
        ) = 0;

    virtual float STDMETHODCALLTYPE GetDashOffset(
        ) = 0;

    virtual D2D1_DASH_STYLE STDMETHODCALLTYPE GetDashStyle(
        ) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetDashesCount(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDashes(
        float *dashes,
        UINT32 count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1StrokeStyle, 0x2cd9069d, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1StrokeStyleVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1StrokeStyleVtbl;

interface ID2D1StrokeStyle {
    CONST_VTBL ID2D1StrokeStyleVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1StrokeStyle_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1StrokeStyle_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1StrokeStyle_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1StrokeStyle_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1StrokeStyle methods ***/
#define ID2D1StrokeStyle_GetStartCap(This) (This)->lpVtbl->GetStartCap(This)
#define ID2D1StrokeStyle_GetEndCap(This) (This)->lpVtbl->GetEndCap(This)
#define ID2D1StrokeStyle_GetDashCap(This) (This)->lpVtbl->GetDashCap(This)
#define ID2D1StrokeStyle_GetMiterLimit(This) (This)->lpVtbl->GetMiterLimit(This)
#define ID2D1StrokeStyle_GetLineJoin(This) (This)->lpVtbl->GetLineJoin(This)
#define ID2D1StrokeStyle_GetDashOffset(This) (This)->lpVtbl->GetDashOffset(This)
#define ID2D1StrokeStyle_GetDashStyle(This) (This)->lpVtbl->GetDashStyle(This)
#define ID2D1StrokeStyle_GetDashesCount(This) (This)->lpVtbl->GetDashesCount(This)
#define ID2D1StrokeStyle_GetDashes(This,dashes,count) (This)->lpVtbl->GetDashes(This,dashes,count)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1StrokeStyle_QueryInterface(ID2D1StrokeStyle* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1StrokeStyle_AddRef(ID2D1StrokeStyle* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1StrokeStyle_Release(ID2D1StrokeStyle* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1StrokeStyle_GetFactory(ID2D1StrokeStyle* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1StrokeStyle methods ***/
static FORCEINLINE D2D1_CAP_STYLE ID2D1StrokeStyle_GetStartCap(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetStartCap(This);
}
static FORCEINLINE D2D1_CAP_STYLE ID2D1StrokeStyle_GetEndCap(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetEndCap(This);
}
static FORCEINLINE D2D1_CAP_STYLE ID2D1StrokeStyle_GetDashCap(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetDashCap(This);
}
static FORCEINLINE float ID2D1StrokeStyle_GetMiterLimit(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetMiterLimit(This);
}
static FORCEINLINE D2D1_LINE_JOIN ID2D1StrokeStyle_GetLineJoin(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetLineJoin(This);
}
static FORCEINLINE float ID2D1StrokeStyle_GetDashOffset(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetDashOffset(This);
}
static FORCEINLINE D2D1_DASH_STYLE ID2D1StrokeStyle_GetDashStyle(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetDashStyle(This);
}
static FORCEINLINE UINT32 ID2D1StrokeStyle_GetDashesCount(ID2D1StrokeStyle* This) {
    return This->lpVtbl->GetDashesCount(This);
}
static FORCEINLINE void ID2D1StrokeStyle_GetDashes(ID2D1StrokeStyle* This,float *dashes,UINT32 count) {
    This->lpVtbl->GetDashes(This,dashes,count);
}
#endif
#endif

#endif


#endif  /* __ID2D1StrokeStyle_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1SimplifiedGeometrySink interface
 */
#ifndef __ID2D1SimplifiedGeometrySink_INTERFACE_DEFINED__
#define __ID2D1SimplifiedGeometrySink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1SimplifiedGeometrySink, 0x2cd9069e, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd9069e-12e2-11dc-9fed-001143a055f9")
ID2D1SimplifiedGeometrySink : public IUnknown
{
    virtual void STDMETHODCALLTYPE SetFillMode(
        D2D1_FILL_MODE mode) = 0;

    virtual void STDMETHODCALLTYPE SetSegmentFlags(
        D2D1_PATH_SEGMENT vertexFlags) = 0;

    virtual void STDMETHODCALLTYPE BeginFigure(
        D2D1_POINT_2F startPoint,
        D2D1_FIGURE_BEGIN figureBegin) = 0;

    virtual void STDMETHODCALLTYPE AddLines(
        const D2D1_POINT_2F *points,
        UINT32 count) = 0;

    virtual void STDMETHODCALLTYPE AddBeziers(
        const D2D1_BEZIER_SEGMENT *beziers,
        UINT32 count) = 0;

    virtual void STDMETHODCALLTYPE EndFigure(
        D2D1_FIGURE_END figureEnd) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1SimplifiedGeometrySink, 0x2cd9069e, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1SimplifiedGeometrySinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1SimplifiedGeometrySink methods ***/
    void (STDMETHODCALLTYPE *SetFillMode)(
        ID2D1SimplifiedGeometrySink *This,
        D2D1_FILL_MODE mode);

    void (STDMETHODCALLTYPE *SetSegmentFlags)(
        ID2D1SimplifiedGeometrySink *This,
        D2D1_PATH_SEGMENT vertexFlags);

    void (STDMETHODCALLTYPE *BeginFigure)(
        ID2D1SimplifiedGeometrySink *This,
        D2D1_POINT_2F startPoint,
        D2D1_FIGURE_BEGIN figureBegin);

    void (STDMETHODCALLTYPE *AddLines)(
        ID2D1SimplifiedGeometrySink *This,
        const D2D1_POINT_2F *points,
        UINT32 count);

    void (STDMETHODCALLTYPE *AddBeziers)(
        ID2D1SimplifiedGeometrySink *This,
        const D2D1_BEZIER_SEGMENT *beziers,
        UINT32 count);

    void (STDMETHODCALLTYPE *EndFigure)(
        ID2D1SimplifiedGeometrySink *This,
        D2D1_FIGURE_END figureEnd);

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

    END_INTERFACE
} ID2D1SimplifiedGeometrySinkVtbl;

interface ID2D1SimplifiedGeometrySink {
    CONST_VTBL ID2D1SimplifiedGeometrySinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1SimplifiedGeometrySink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1SimplifiedGeometrySink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1SimplifiedGeometrySink_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1SimplifiedGeometrySink methods ***/
#define ID2D1SimplifiedGeometrySink_SetFillMode(This,mode) (This)->lpVtbl->SetFillMode(This,mode)
#define ID2D1SimplifiedGeometrySink_SetSegmentFlags(This,vertexFlags) (This)->lpVtbl->SetSegmentFlags(This,vertexFlags)
#define ID2D1SimplifiedGeometrySink_BeginFigure(This,startPoint,figureBegin) (This)->lpVtbl->BeginFigure(This,startPoint,figureBegin)
#define ID2D1SimplifiedGeometrySink_AddLines(This,points,count) (This)->lpVtbl->AddLines(This,points,count)
#define ID2D1SimplifiedGeometrySink_AddBeziers(This,beziers,count) (This)->lpVtbl->AddBeziers(This,beziers,count)
#define ID2D1SimplifiedGeometrySink_EndFigure(This,figureEnd) (This)->lpVtbl->EndFigure(This,figureEnd)
#define ID2D1SimplifiedGeometrySink_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1SimplifiedGeometrySink_QueryInterface(ID2D1SimplifiedGeometrySink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1SimplifiedGeometrySink_AddRef(ID2D1SimplifiedGeometrySink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1SimplifiedGeometrySink_Release(ID2D1SimplifiedGeometrySink* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1SimplifiedGeometrySink methods ***/
static FORCEINLINE void ID2D1SimplifiedGeometrySink_SetFillMode(ID2D1SimplifiedGeometrySink* This,D2D1_FILL_MODE mode) {
    This->lpVtbl->SetFillMode(This,mode);
}
static FORCEINLINE void ID2D1SimplifiedGeometrySink_SetSegmentFlags(ID2D1SimplifiedGeometrySink* This,D2D1_PATH_SEGMENT vertexFlags) {
    This->lpVtbl->SetSegmentFlags(This,vertexFlags);
}
static FORCEINLINE void ID2D1SimplifiedGeometrySink_BeginFigure(ID2D1SimplifiedGeometrySink* This,D2D1_POINT_2F startPoint,D2D1_FIGURE_BEGIN figureBegin) {
    This->lpVtbl->BeginFigure(This,startPoint,figureBegin);
}
static FORCEINLINE void ID2D1SimplifiedGeometrySink_AddLines(ID2D1SimplifiedGeometrySink* This,const D2D1_POINT_2F *points,UINT32 count) {
    This->lpVtbl->AddLines(This,points,count);
}
static FORCEINLINE void ID2D1SimplifiedGeometrySink_AddBeziers(ID2D1SimplifiedGeometrySink* This,const D2D1_BEZIER_SEGMENT *beziers,UINT32 count) {
    This->lpVtbl->AddBeziers(This,beziers,count);
}
static FORCEINLINE void ID2D1SimplifiedGeometrySink_EndFigure(ID2D1SimplifiedGeometrySink* This,D2D1_FIGURE_END figureEnd) {
    This->lpVtbl->EndFigure(This,figureEnd);
}
static FORCEINLINE HRESULT ID2D1SimplifiedGeometrySink_Close(ID2D1SimplifiedGeometrySink* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1SimplifiedGeometrySink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1TessellationSink interface
 */
#ifndef __ID2D1TessellationSink_INTERFACE_DEFINED__
#define __ID2D1TessellationSink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1TessellationSink, 0x2cd906c1, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906c1-12e2-11dc-9fed-001143a055f9")
ID2D1TessellationSink : public IUnknown
{
    virtual void STDMETHODCALLTYPE AddTriangles(
        const D2D1_TRIANGLE *triangles,
        UINT32 count) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1TessellationSink, 0x2cd906c1, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1TessellationSinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1TessellationSink methods ***/
    void (STDMETHODCALLTYPE *AddTriangles)(
        ID2D1TessellationSink *This,
        const D2D1_TRIANGLE *triangles,
        UINT32 count);

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

    END_INTERFACE
} ID2D1TessellationSinkVtbl;

interface ID2D1TessellationSink {
    CONST_VTBL ID2D1TessellationSinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1TessellationSink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1TessellationSink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1TessellationSink_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1TessellationSink methods ***/
#define ID2D1TessellationSink_AddTriangles(This,triangles,count) (This)->lpVtbl->AddTriangles(This,triangles,count)
#define ID2D1TessellationSink_Close(This) (This)->lpVtbl->Close(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1TessellationSink_QueryInterface(ID2D1TessellationSink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1TessellationSink_AddRef(ID2D1TessellationSink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1TessellationSink_Release(ID2D1TessellationSink* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1TessellationSink methods ***/
static FORCEINLINE void ID2D1TessellationSink_AddTriangles(ID2D1TessellationSink* This,const D2D1_TRIANGLE *triangles,UINT32 count) {
    This->lpVtbl->AddTriangles(This,triangles,count);
}
static FORCEINLINE HRESULT ID2D1TessellationSink_Close(ID2D1TessellationSink* This) {
    return This->lpVtbl->Close(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1TessellationSink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Geometry interface
 */
#ifndef __ID2D1Geometry_INTERFACE_DEFINED__
#define __ID2D1Geometry_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Geometry, 0x2cd906a1, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a1-12e2-11dc-9fed-001143a055f9")
ID2D1Geometry : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE GetBounds(
        const D2D1_MATRIX_3X2_F *transform,
        D2D1_RECT_F *bounds) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetWidenedBounds(
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_RECT_F *bounds) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE FillContainsPoint(
        D2D1_POINT_2F point,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        BOOL *contains) = 0;

    virtual HRESULT STDMETHODCALLTYPE CompareWithGeometry(
        ID2D1Geometry *geometry,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_GEOMETRY_RELATION *relation) = 0;

    virtual HRESULT STDMETHODCALLTYPE Simplify(
        D2D1_GEOMETRY_SIMPLIFICATION_OPTION option,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE Tessellate(
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1TessellationSink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE CombineWithGeometry(
        ID2D1Geometry *geometry,
        D2D1_COMBINE_MODE combine_mode,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE Outline(
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE ComputeArea(
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        float *area) = 0;

    virtual HRESULT STDMETHODCALLTYPE ComputeLength(
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        float *length) = 0;

    virtual HRESULT STDMETHODCALLTYPE ComputePointAtLength(
        float length,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        D2D1_POINT_2F *point,
        D2D1_POINT_2F *tangent) = 0;

    virtual HRESULT STDMETHODCALLTYPE Widen(
        float stroke_width,
        ID2D1StrokeStyle *stroke_style,
        const D2D1_MATRIX_3X2_F *transform,
        float tolerance,
        ID2D1SimplifiedGeometrySink *sink) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Geometry, 0x2cd906a1, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1GeometryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1GeometryVtbl;

interface ID2D1Geometry {
    CONST_VTBL ID2D1GeometryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Geometry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Geometry_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Geometry_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Geometry_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1Geometry_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1Geometry_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1Geometry_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1Geometry_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1Geometry_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1Geometry_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1Geometry_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1Geometry_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1Geometry_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1Geometry_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1Geometry_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1Geometry_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1Geometry_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Geometry_QueryInterface(ID2D1Geometry* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Geometry_AddRef(ID2D1Geometry* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Geometry_Release(ID2D1Geometry* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Geometry_GetFactory(ID2D1Geometry* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1Geometry_GetBounds(ID2D1Geometry* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1Geometry_GetWidenedBounds(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_StrokeContainsPoint(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_FillContainsPoint(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_CompareWithGeometry(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_Simplify(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_Tessellate(ID2D1Geometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1Geometry_CombineWithGeometry(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_Outline(ID2D1Geometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1Geometry_ComputeArea(ID2D1Geometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1Geometry_ComputeLength(ID2D1Geometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1Geometry_ComputePointAtLength(ID2D1Geometry* 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 FORCEINLINE HRESULT ID2D1Geometry_Widen(ID2D1Geometry* 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);
}
#endif
#endif

#endif


#endif  /* __ID2D1Geometry_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1RectangleGeometry interface
 */
#ifndef __ID2D1RectangleGeometry_INTERFACE_DEFINED__
#define __ID2D1RectangleGeometry_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1RectangleGeometry, 0x2cd906a2, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a2-12e2-11dc-9fed-001143a055f9")
ID2D1RectangleGeometry : public ID2D1Geometry
{
    virtual void STDMETHODCALLTYPE GetRect(
        D2D1_RECT_F *rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1RectangleGeometry, 0x2cd906a2, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1RectangleGeometryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1RectangleGeometry methods ***/
    void (STDMETHODCALLTYPE *GetRect)(
        ID2D1RectangleGeometry *This,
        D2D1_RECT_F *rect);

    END_INTERFACE
} ID2D1RectangleGeometryVtbl;

interface ID2D1RectangleGeometry {
    CONST_VTBL ID2D1RectangleGeometryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1RectangleGeometry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1RectangleGeometry_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1RectangleGeometry_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1RectangleGeometry_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1RectangleGeometry_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1RectangleGeometry_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1RectangleGeometry_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1RectangleGeometry_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1RectangleGeometry_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1RectangleGeometry_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1RectangleGeometry_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1RectangleGeometry_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1RectangleGeometry_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1RectangleGeometry_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1RectangleGeometry_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1RectangleGeometry_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1RectangleGeometry_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1RectangleGeometry methods ***/
#define ID2D1RectangleGeometry_GetRect(This,rect) (This)->lpVtbl->GetRect(This,rect)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1RectangleGeometry_QueryInterface(ID2D1RectangleGeometry* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1RectangleGeometry_AddRef(ID2D1RectangleGeometry* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1RectangleGeometry_Release(ID2D1RectangleGeometry* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1RectangleGeometry_GetFactory(ID2D1RectangleGeometry* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1RectangleGeometry_GetBounds(ID2D1RectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1RectangleGeometry_GetWidenedBounds(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_StrokeContainsPoint(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_FillContainsPoint(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_CompareWithGeometry(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_Simplify(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_Tessellate(ID2D1RectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1RectangleGeometry_CombineWithGeometry(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_Outline(ID2D1RectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1RectangleGeometry_ComputeArea(ID2D1RectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1RectangleGeometry_ComputeLength(ID2D1RectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1RectangleGeometry_ComputePointAtLength(ID2D1RectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RectangleGeometry_Widen(ID2D1RectangleGeometry* 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);
}
/*** ID2D1RectangleGeometry methods ***/
static FORCEINLINE void ID2D1RectangleGeometry_GetRect(ID2D1RectangleGeometry* This,D2D1_RECT_F *rect) {
    This->lpVtbl->GetRect(This,rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1RectangleGeometry_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1RoundedRectangleGeometry interface
 */
#ifndef __ID2D1RoundedRectangleGeometry_INTERFACE_DEFINED__
#define __ID2D1RoundedRectangleGeometry_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1RoundedRectangleGeometry, 0x2cd906a3, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a3-12e2-11dc-9fed-001143a055f9")
ID2D1RoundedRectangleGeometry : public ID2D1Geometry
{
    virtual void STDMETHODCALLTYPE GetRoundedRect(
        D2D1_ROUNDED_RECT *rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1RoundedRectangleGeometry, 0x2cd906a3, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1RoundedRectangleGeometryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1RoundedRectangleGeometry methods ***/
    void (STDMETHODCALLTYPE *GetRoundedRect)(
        ID2D1RoundedRectangleGeometry *This,
        D2D1_ROUNDED_RECT *rect);

    END_INTERFACE
} ID2D1RoundedRectangleGeometryVtbl;

interface ID2D1RoundedRectangleGeometry {
    CONST_VTBL ID2D1RoundedRectangleGeometryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1RoundedRectangleGeometry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1RoundedRectangleGeometry_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1RoundedRectangleGeometry_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1RoundedRectangleGeometry_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1RoundedRectangleGeometry_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1RoundedRectangleGeometry_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1RoundedRectangleGeometry_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1RoundedRectangleGeometry_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1RoundedRectangleGeometry_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1RoundedRectangleGeometry_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1RoundedRectangleGeometry_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1RoundedRectangleGeometry_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1RoundedRectangleGeometry_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1RoundedRectangleGeometry_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1RoundedRectangleGeometry_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1RoundedRectangleGeometry_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1RoundedRectangleGeometry_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1RoundedRectangleGeometry methods ***/
#define ID2D1RoundedRectangleGeometry_GetRoundedRect(This,rect) (This)->lpVtbl->GetRoundedRect(This,rect)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_QueryInterface(ID2D1RoundedRectangleGeometry* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1RoundedRectangleGeometry_AddRef(ID2D1RoundedRectangleGeometry* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1RoundedRectangleGeometry_Release(ID2D1RoundedRectangleGeometry* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1RoundedRectangleGeometry_GetFactory(ID2D1RoundedRectangleGeometry* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_GetBounds(ID2D1RoundedRectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_GetWidenedBounds(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_StrokeContainsPoint(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_FillContainsPoint(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_CompareWithGeometry(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_Simplify(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_Tessellate(ID2D1RoundedRectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_CombineWithGeometry(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_Outline(ID2D1RoundedRectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_ComputeArea(ID2D1RoundedRectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_ComputeLength(ID2D1RoundedRectangleGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_ComputePointAtLength(ID2D1RoundedRectangleGeometry* 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 FORCEINLINE HRESULT ID2D1RoundedRectangleGeometry_Widen(ID2D1RoundedRectangleGeometry* 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);
}
/*** ID2D1RoundedRectangleGeometry methods ***/
static FORCEINLINE void ID2D1RoundedRectangleGeometry_GetRoundedRect(ID2D1RoundedRectangleGeometry* This,D2D1_ROUNDED_RECT *rect) {
    This->lpVtbl->GetRoundedRect(This,rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1RoundedRectangleGeometry_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1EllipseGeometry interface
 */
#ifndef __ID2D1EllipseGeometry_INTERFACE_DEFINED__
#define __ID2D1EllipseGeometry_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1EllipseGeometry, 0x2cd906a4, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a4-12e2-11dc-9fed-001143a055f9")
ID2D1EllipseGeometry : public ID2D1Geometry
{
    virtual void STDMETHODCALLTYPE GetEllipse(
        D2D1_ELLIPSE *ellipse) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1EllipseGeometry, 0x2cd906a4, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1EllipseGeometryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1EllipseGeometry methods ***/
    void (STDMETHODCALLTYPE *GetEllipse)(
        ID2D1EllipseGeometry *This,
        D2D1_ELLIPSE *ellipse);

    END_INTERFACE
} ID2D1EllipseGeometryVtbl;

interface ID2D1EllipseGeometry {
    CONST_VTBL ID2D1EllipseGeometryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1EllipseGeometry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1EllipseGeometry_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1EllipseGeometry_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1EllipseGeometry_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1EllipseGeometry_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1EllipseGeometry_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1EllipseGeometry_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1EllipseGeometry_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1EllipseGeometry_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1EllipseGeometry_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1EllipseGeometry_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1EllipseGeometry_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1EllipseGeometry_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1EllipseGeometry_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1EllipseGeometry_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1EllipseGeometry_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1EllipseGeometry_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1EllipseGeometry methods ***/
#define ID2D1EllipseGeometry_GetEllipse(This,ellipse) (This)->lpVtbl->GetEllipse(This,ellipse)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1EllipseGeometry_QueryInterface(ID2D1EllipseGeometry* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1EllipseGeometry_AddRef(ID2D1EllipseGeometry* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1EllipseGeometry_Release(ID2D1EllipseGeometry* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1EllipseGeometry_GetFactory(ID2D1EllipseGeometry* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1EllipseGeometry_GetBounds(ID2D1EllipseGeometry* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1EllipseGeometry_GetWidenedBounds(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_StrokeContainsPoint(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_FillContainsPoint(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_CompareWithGeometry(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_Simplify(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_Tessellate(ID2D1EllipseGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1EllipseGeometry_CombineWithGeometry(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_Outline(ID2D1EllipseGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1EllipseGeometry_ComputeArea(ID2D1EllipseGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1EllipseGeometry_ComputeLength(ID2D1EllipseGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1EllipseGeometry_ComputePointAtLength(ID2D1EllipseGeometry* 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 FORCEINLINE HRESULT ID2D1EllipseGeometry_Widen(ID2D1EllipseGeometry* 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);
}
/*** ID2D1EllipseGeometry methods ***/
static FORCEINLINE void ID2D1EllipseGeometry_GetEllipse(ID2D1EllipseGeometry* This,D2D1_ELLIPSE *ellipse) {
    This->lpVtbl->GetEllipse(This,ellipse);
}
#endif
#endif

#endif


#endif  /* __ID2D1EllipseGeometry_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GeometryGroup interface
 */
#ifndef __ID2D1GeometryGroup_INTERFACE_DEFINED__
#define __ID2D1GeometryGroup_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GeometryGroup, 0x2cd906a6, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a6-12e2-11dc-9fed-001143a055f9")
ID2D1GeometryGroup : public ID2D1Geometry
{
    virtual D2D1_FILL_MODE STDMETHODCALLTYPE GetFillMode(
        ) = 0;

    virtual UINT32 STDMETHODCALLTYPE GetSourceGeometryCount(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetSourceGeometries(
        ID2D1Geometry **geometry,
        UINT32 geometry_count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GeometryGroup, 0x2cd906a6, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1GeometryGroupVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1GeometryGroup methods ***/
    D2D1_FILL_MODE (STDMETHODCALLTYPE *GetFillMode)(
        ID2D1GeometryGroup *This);

    UINT32 (STDMETHODCALLTYPE *GetSourceGeometryCount)(
        ID2D1GeometryGroup *This);

    void (STDMETHODCALLTYPE *GetSourceGeometries)(
        ID2D1GeometryGroup *This,
        ID2D1Geometry **geometry,
        UINT32 geometry_count);

    END_INTERFACE
} ID2D1GeometryGroupVtbl;

interface ID2D1GeometryGroup {
    CONST_VTBL ID2D1GeometryGroupVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GeometryGroup_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GeometryGroup_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GeometryGroup_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1GeometryGroup_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1GeometryGroup_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1GeometryGroup_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1GeometryGroup_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1GeometryGroup_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1GeometryGroup_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1GeometryGroup_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1GeometryGroup_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1GeometryGroup_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1GeometryGroup_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1GeometryGroup_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1GeometryGroup_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1GeometryGroup_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1GeometryGroup_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1GeometryGroup methods ***/
#define ID2D1GeometryGroup_GetFillMode(This) (This)->lpVtbl->GetFillMode(This)
#define ID2D1GeometryGroup_GetSourceGeometryCount(This) (This)->lpVtbl->GetSourceGeometryCount(This)
#define ID2D1GeometryGroup_GetSourceGeometries(This,geometry,geometry_count) (This)->lpVtbl->GetSourceGeometries(This,geometry,geometry_count)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1GeometryGroup_QueryInterface(ID2D1GeometryGroup* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1GeometryGroup_AddRef(ID2D1GeometryGroup* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1GeometryGroup_Release(ID2D1GeometryGroup* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1GeometryGroup_GetFactory(ID2D1GeometryGroup* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1GeometryGroup_GetBounds(ID2D1GeometryGroup* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1GeometryGroup_GetWidenedBounds(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_StrokeContainsPoint(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_FillContainsPoint(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_CompareWithGeometry(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_Simplify(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_Tessellate(ID2D1GeometryGroup* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1GeometryGroup_CombineWithGeometry(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_Outline(ID2D1GeometryGroup* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1GeometryGroup_ComputeArea(ID2D1GeometryGroup* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1GeometryGroup_ComputeLength(ID2D1GeometryGroup* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1GeometryGroup_ComputePointAtLength(ID2D1GeometryGroup* 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 FORCEINLINE HRESULT ID2D1GeometryGroup_Widen(ID2D1GeometryGroup* 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);
}
/*** ID2D1GeometryGroup methods ***/
static FORCEINLINE D2D1_FILL_MODE ID2D1GeometryGroup_GetFillMode(ID2D1GeometryGroup* This) {
    return This->lpVtbl->GetFillMode(This);
}
static FORCEINLINE UINT32 ID2D1GeometryGroup_GetSourceGeometryCount(ID2D1GeometryGroup* This) {
    return This->lpVtbl->GetSourceGeometryCount(This);
}
static FORCEINLINE void ID2D1GeometryGroup_GetSourceGeometries(ID2D1GeometryGroup* This,ID2D1Geometry **geometry,UINT32 geometry_count) {
    This->lpVtbl->GetSourceGeometries(This,geometry,geometry_count);
}
#endif
#endif

#endif


#endif  /* __ID2D1GeometryGroup_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1TransformedGeometry interface
 */
#ifndef __ID2D1TransformedGeometry_INTERFACE_DEFINED__
#define __ID2D1TransformedGeometry_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1TransformedGeometry, 0x2cd906bb, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906bb-12e2-11dc-9fed-001143a055f9")
ID2D1TransformedGeometry : public ID2D1Geometry
{
    virtual void STDMETHODCALLTYPE GetSourceGeometry(
        ID2D1Geometry **geometry) = 0;

    virtual void STDMETHODCALLTYPE GetTransform(
        D2D1_MATRIX_3X2_F *transform) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1TransformedGeometry, 0x2cd906bb, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1TransformedGeometryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1TransformedGeometry methods ***/
    void (STDMETHODCALLTYPE *GetSourceGeometry)(
        ID2D1TransformedGeometry *This,
        ID2D1Geometry **geometry);

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

    END_INTERFACE
} ID2D1TransformedGeometryVtbl;

interface ID2D1TransformedGeometry {
    CONST_VTBL ID2D1TransformedGeometryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1TransformedGeometry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1TransformedGeometry_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1TransformedGeometry_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1TransformedGeometry_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1TransformedGeometry_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1TransformedGeometry_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1TransformedGeometry_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1TransformedGeometry_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1TransformedGeometry_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1TransformedGeometry_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1TransformedGeometry_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1TransformedGeometry_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1TransformedGeometry_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1TransformedGeometry_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1TransformedGeometry_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1TransformedGeometry_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1TransformedGeometry_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1TransformedGeometry methods ***/
#define ID2D1TransformedGeometry_GetSourceGeometry(This,geometry) (This)->lpVtbl->GetSourceGeometry(This,geometry)
#define ID2D1TransformedGeometry_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1TransformedGeometry_QueryInterface(ID2D1TransformedGeometry* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1TransformedGeometry_AddRef(ID2D1TransformedGeometry* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1TransformedGeometry_Release(ID2D1TransformedGeometry* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1TransformedGeometry_GetFactory(ID2D1TransformedGeometry* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1TransformedGeometry_GetBounds(ID2D1TransformedGeometry* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1TransformedGeometry_GetWidenedBounds(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_StrokeContainsPoint(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_FillContainsPoint(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_CompareWithGeometry(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_Simplify(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_Tessellate(ID2D1TransformedGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1TransformedGeometry_CombineWithGeometry(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_Outline(ID2D1TransformedGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1TransformedGeometry_ComputeArea(ID2D1TransformedGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1TransformedGeometry_ComputeLength(ID2D1TransformedGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1TransformedGeometry_ComputePointAtLength(ID2D1TransformedGeometry* 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 FORCEINLINE HRESULT ID2D1TransformedGeometry_Widen(ID2D1TransformedGeometry* 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);
}
/*** ID2D1TransformedGeometry methods ***/
static FORCEINLINE void ID2D1TransformedGeometry_GetSourceGeometry(ID2D1TransformedGeometry* This,ID2D1Geometry **geometry) {
    This->lpVtbl->GetSourceGeometry(This,geometry);
}
static FORCEINLINE void ID2D1TransformedGeometry_GetTransform(ID2D1TransformedGeometry* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
#endif
#endif

#endif


#endif  /* __ID2D1TransformedGeometry_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GeometrySink interface
 */
#ifndef __ID2D1GeometrySink_INTERFACE_DEFINED__
#define __ID2D1GeometrySink_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GeometrySink, 0x2cd9069f, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd9069f-12e2-11dc-9fed-001143a055f9")
ID2D1GeometrySink : public ID2D1SimplifiedGeometrySink
{
    virtual void STDMETHODCALLTYPE AddLine(
        D2D1_POINT_2F point) = 0;

    virtual void STDMETHODCALLTYPE AddBezier(
        const D2D1_BEZIER_SEGMENT *bezier) = 0;

    virtual void STDMETHODCALLTYPE AddQuadraticBezier(
        const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier) = 0;

    virtual void STDMETHODCALLTYPE AddQuadraticBeziers(
        const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers,
        UINT32 bezier_count) = 0;

    virtual void STDMETHODCALLTYPE AddArc(
        const D2D1_ARC_SEGMENT *arc) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GeometrySink, 0x2cd9069f, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1GeometrySinkVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1SimplifiedGeometrySink methods ***/
    void (STDMETHODCALLTYPE *SetFillMode)(
        ID2D1GeometrySink *This,
        D2D1_FILL_MODE mode);

    void (STDMETHODCALLTYPE *SetSegmentFlags)(
        ID2D1GeometrySink *This,
        D2D1_PATH_SEGMENT vertexFlags);

    void (STDMETHODCALLTYPE *BeginFigure)(
        ID2D1GeometrySink *This,
        D2D1_POINT_2F startPoint,
        D2D1_FIGURE_BEGIN figureBegin);

    void (STDMETHODCALLTYPE *AddLines)(
        ID2D1GeometrySink *This,
        const D2D1_POINT_2F *points,
        UINT32 count);

    void (STDMETHODCALLTYPE *AddBeziers)(
        ID2D1GeometrySink *This,
        const D2D1_BEZIER_SEGMENT *beziers,
        UINT32 count);

    void (STDMETHODCALLTYPE *EndFigure)(
        ID2D1GeometrySink *This,
        D2D1_FIGURE_END figureEnd);

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

    /*** ID2D1GeometrySink methods ***/
    void (STDMETHODCALLTYPE *AddLine)(
        ID2D1GeometrySink *This,
        D2D1_POINT_2F point);

    void (STDMETHODCALLTYPE *AddBezier)(
        ID2D1GeometrySink *This,
        const D2D1_BEZIER_SEGMENT *bezier);

    void (STDMETHODCALLTYPE *AddQuadraticBezier)(
        ID2D1GeometrySink *This,
        const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier);

    void (STDMETHODCALLTYPE *AddQuadraticBeziers)(
        ID2D1GeometrySink *This,
        const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers,
        UINT32 bezier_count);

    void (STDMETHODCALLTYPE *AddArc)(
        ID2D1GeometrySink *This,
        const D2D1_ARC_SEGMENT *arc);

    END_INTERFACE
} ID2D1GeometrySinkVtbl;

interface ID2D1GeometrySink {
    CONST_VTBL ID2D1GeometrySinkVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GeometrySink_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GeometrySink_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GeometrySink_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1SimplifiedGeometrySink methods ***/
#define ID2D1GeometrySink_SetFillMode(This,mode) (This)->lpVtbl->SetFillMode(This,mode)
#define ID2D1GeometrySink_SetSegmentFlags(This,vertexFlags) (This)->lpVtbl->SetSegmentFlags(This,vertexFlags)
#define ID2D1GeometrySink_BeginFigure(This,startPoint,figureBegin) (This)->lpVtbl->BeginFigure(This,startPoint,figureBegin)
#define ID2D1GeometrySink_AddLines(This,points,count) (This)->lpVtbl->AddLines(This,points,count)
#define ID2D1GeometrySink_AddBeziers(This,beziers,count) (This)->lpVtbl->AddBeziers(This,beziers,count)
#define ID2D1GeometrySink_EndFigure(This,figureEnd) (This)->lpVtbl->EndFigure(This,figureEnd)
#define ID2D1GeometrySink_Close(This) (This)->lpVtbl->Close(This)
/*** ID2D1GeometrySink methods ***/
#define ID2D1GeometrySink_AddLine(This,point) (This)->lpVtbl->AddLine(This,point)
#define ID2D1GeometrySink_AddBezier(This,bezier) (This)->lpVtbl->AddBezier(This,bezier)
#define ID2D1GeometrySink_AddQuadraticBezier(This,bezier) (This)->lpVtbl->AddQuadraticBezier(This,bezier)
#define ID2D1GeometrySink_AddQuadraticBeziers(This,beziers,bezier_count) (This)->lpVtbl->AddQuadraticBeziers(This,beziers,bezier_count)
#define ID2D1GeometrySink_AddArc(This,arc) (This)->lpVtbl->AddArc(This,arc)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1GeometrySink_QueryInterface(ID2D1GeometrySink* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1GeometrySink_AddRef(ID2D1GeometrySink* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1GeometrySink_Release(ID2D1GeometrySink* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1SimplifiedGeometrySink methods ***/
static FORCEINLINE void ID2D1GeometrySink_SetFillMode(ID2D1GeometrySink* This,D2D1_FILL_MODE mode) {
    This->lpVtbl->SetFillMode(This,mode);
}
static FORCEINLINE void ID2D1GeometrySink_SetSegmentFlags(ID2D1GeometrySink* This,D2D1_PATH_SEGMENT vertexFlags) {
    This->lpVtbl->SetSegmentFlags(This,vertexFlags);
}
static FORCEINLINE void ID2D1GeometrySink_BeginFigure(ID2D1GeometrySink* This,D2D1_POINT_2F startPoint,D2D1_FIGURE_BEGIN figureBegin) {
    This->lpVtbl->BeginFigure(This,startPoint,figureBegin);
}
static FORCEINLINE void ID2D1GeometrySink_AddLines(ID2D1GeometrySink* This,const D2D1_POINT_2F *points,UINT32 count) {
    This->lpVtbl->AddLines(This,points,count);
}
static FORCEINLINE void ID2D1GeometrySink_AddBeziers(ID2D1GeometrySink* This,const D2D1_BEZIER_SEGMENT *beziers,UINT32 count) {
    This->lpVtbl->AddBeziers(This,beziers,count);
}
static FORCEINLINE void ID2D1GeometrySink_EndFigure(ID2D1GeometrySink* This,D2D1_FIGURE_END figureEnd) {
    This->lpVtbl->EndFigure(This,figureEnd);
}
static FORCEINLINE HRESULT ID2D1GeometrySink_Close(ID2D1GeometrySink* This) {
    return This->lpVtbl->Close(This);
}
/*** ID2D1GeometrySink methods ***/
static FORCEINLINE void ID2D1GeometrySink_AddLine(ID2D1GeometrySink* This,D2D1_POINT_2F point) {
    This->lpVtbl->AddLine(This,point);
}
static FORCEINLINE void ID2D1GeometrySink_AddBezier(ID2D1GeometrySink* This,const D2D1_BEZIER_SEGMENT *bezier) {
    This->lpVtbl->AddBezier(This,bezier);
}
static FORCEINLINE void ID2D1GeometrySink_AddQuadraticBezier(ID2D1GeometrySink* This,const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier) {
    This->lpVtbl->AddQuadraticBezier(This,bezier);
}
static FORCEINLINE void ID2D1GeometrySink_AddQuadraticBeziers(ID2D1GeometrySink* This,const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers,UINT32 bezier_count) {
    This->lpVtbl->AddQuadraticBeziers(This,beziers,bezier_count);
}
static FORCEINLINE void ID2D1GeometrySink_AddArc(ID2D1GeometrySink* This,const D2D1_ARC_SEGMENT *arc) {
    This->lpVtbl->AddArc(This,arc);
}
#endif
#endif

#endif


#endif  /* __ID2D1GeometrySink_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1PathGeometry interface
 */
#ifndef __ID2D1PathGeometry_INTERFACE_DEFINED__
#define __ID2D1PathGeometry_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1PathGeometry, 0x2cd906a5, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a5-12e2-11dc-9fed-001143a055f9")
ID2D1PathGeometry : public ID2D1Geometry
{
    virtual HRESULT STDMETHODCALLTYPE Open(
        ID2D1GeometrySink **sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE Stream(
        ID2D1GeometrySink *sink) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetSegmentCount(
        UINT32 *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetFigureCount(
        UINT32 *count) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1PathGeometry, 0x2cd906a5, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1PathGeometryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1PathGeometryVtbl;

interface ID2D1PathGeometry {
    CONST_VTBL ID2D1PathGeometryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1PathGeometry_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1PathGeometry_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1PathGeometry_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1PathGeometry_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Geometry methods ***/
#define ID2D1PathGeometry_GetBounds(This,transform,bounds) (This)->lpVtbl->GetBounds(This,transform,bounds)
#define ID2D1PathGeometry_GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds) (This)->lpVtbl->GetWidenedBounds(This,stroke_width,stroke_style,transform,tolerance,bounds)
#define ID2D1PathGeometry_StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains) (This)->lpVtbl->StrokeContainsPoint(This,point,stroke_width,stroke_style,transform,tolerance,contains)
#define ID2D1PathGeometry_FillContainsPoint(This,point,transform,tolerance,contains) (This)->lpVtbl->FillContainsPoint(This,point,transform,tolerance,contains)
#define ID2D1PathGeometry_CompareWithGeometry(This,geometry,transform,tolerance,relation) (This)->lpVtbl->CompareWithGeometry(This,geometry,transform,tolerance,relation)
#define ID2D1PathGeometry_Simplify(This,option,transform,tolerance,sink) (This)->lpVtbl->Simplify(This,option,transform,tolerance,sink)
#define ID2D1PathGeometry_Tessellate(This,transform,tolerance,sink) (This)->lpVtbl->Tessellate(This,transform,tolerance,sink)
#define ID2D1PathGeometry_CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink) (This)->lpVtbl->CombineWithGeometry(This,geometry,combine_mode,transform,tolerance,sink)
#define ID2D1PathGeometry_Outline(This,transform,tolerance,sink) (This)->lpVtbl->Outline(This,transform,tolerance,sink)
#define ID2D1PathGeometry_ComputeArea(This,transform,tolerance,area) (This)->lpVtbl->ComputeArea(This,transform,tolerance,area)
#define ID2D1PathGeometry_ComputeLength(This,transform,tolerance,length) (This)->lpVtbl->ComputeLength(This,transform,tolerance,length)
#define ID2D1PathGeometry_ComputePointAtLength(This,length,transform,tolerance,point,tangent) (This)->lpVtbl->ComputePointAtLength(This,length,transform,tolerance,point,tangent)
#define ID2D1PathGeometry_Widen(This,stroke_width,stroke_style,transform,tolerance,sink) (This)->lpVtbl->Widen(This,stroke_width,stroke_style,transform,tolerance,sink)
/*** ID2D1PathGeometry methods ***/
#define ID2D1PathGeometry_Open(This,sink) (This)->lpVtbl->Open(This,sink)
#define ID2D1PathGeometry_Stream(This,sink) (This)->lpVtbl->Stream(This,sink)
#define ID2D1PathGeometry_GetSegmentCount(This,count) (This)->lpVtbl->GetSegmentCount(This,count)
#define ID2D1PathGeometry_GetFigureCount(This,count) (This)->lpVtbl->GetFigureCount(This,count)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1PathGeometry_QueryInterface(ID2D1PathGeometry* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1PathGeometry_AddRef(ID2D1PathGeometry* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1PathGeometry_Release(ID2D1PathGeometry* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1PathGeometry_GetFactory(ID2D1PathGeometry* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Geometry methods ***/
static FORCEINLINE HRESULT ID2D1PathGeometry_GetBounds(ID2D1PathGeometry* This,const D2D1_MATRIX_3X2_F *transform,D2D1_RECT_F *bounds) {
    return This->lpVtbl->GetBounds(This,transform,bounds);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_GetWidenedBounds(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_StrokeContainsPoint(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_FillContainsPoint(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_CompareWithGeometry(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_Simplify(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_Tessellate(ID2D1PathGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1TessellationSink *sink) {
    return This->lpVtbl->Tessellate(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_CombineWithGeometry(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_Outline(ID2D1PathGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,ID2D1SimplifiedGeometrySink *sink) {
    return This->lpVtbl->Outline(This,transform,tolerance,sink);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_ComputeArea(ID2D1PathGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *area) {
    return This->lpVtbl->ComputeArea(This,transform,tolerance,area);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_ComputeLength(ID2D1PathGeometry* This,const D2D1_MATRIX_3X2_F *transform,float tolerance,float *length) {
    return This->lpVtbl->ComputeLength(This,transform,tolerance,length);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_ComputePointAtLength(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_Widen(ID2D1PathGeometry* 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 FORCEINLINE HRESULT ID2D1PathGeometry_Open(ID2D1PathGeometry* This,ID2D1GeometrySink **sink) {
    return This->lpVtbl->Open(This,sink);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_Stream(ID2D1PathGeometry* This,ID2D1GeometrySink *sink) {
    return This->lpVtbl->Stream(This,sink);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_GetSegmentCount(ID2D1PathGeometry* This,UINT32 *count) {
    return This->lpVtbl->GetSegmentCount(This,count);
}
static FORCEINLINE HRESULT ID2D1PathGeometry_GetFigureCount(ID2D1PathGeometry* This,UINT32 *count) {
    return This->lpVtbl->GetFigureCount(This,count);
}
#endif
#endif

#endif


#endif  /* __ID2D1PathGeometry_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DrawingStateBlock interface
 */
#ifndef __ID2D1DrawingStateBlock_INTERFACE_DEFINED__
#define __ID2D1DrawingStateBlock_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DrawingStateBlock, 0x28506e39, 0xebf6, 0x46a1, 0xbb,0x47, 0xfd,0x85,0x56,0x5a,0xb9,0x57);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("28506e39-ebf6-46a1-bb47-fd85565ab957")
ID2D1DrawingStateBlock : public ID2D1Resource
{
    virtual void STDMETHODCALLTYPE GetDescription(
        D2D1_DRAWING_STATE_DESCRIPTION *desc) = 0;

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

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

    virtual void STDMETHODCALLTYPE GetTextRenderingParams(
        IDWriteRenderingParams **text_rendering_params) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DrawingStateBlock, 0x28506e39, 0xebf6, 0x46a1, 0xbb,0x47, 0xfd,0x85,0x56,0x5a,0xb9,0x57)
#endif
#else
typedef struct ID2D1DrawingStateBlockVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1DrawingStateBlockVtbl;

interface ID2D1DrawingStateBlock {
    CONST_VTBL ID2D1DrawingStateBlockVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DrawingStateBlock_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DrawingStateBlock_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DrawingStateBlock_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DrawingStateBlock_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1DrawingStateBlock methods ***/
#define ID2D1DrawingStateBlock_GetDescription(This,desc) (This)->lpVtbl->GetDescription(This,desc)
#define ID2D1DrawingStateBlock_SetDescription(This,desc) (This)->lpVtbl->SetDescription(This,desc)
#define ID2D1DrawingStateBlock_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DrawingStateBlock_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1DrawingStateBlock_QueryInterface(ID2D1DrawingStateBlock* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1DrawingStateBlock_AddRef(ID2D1DrawingStateBlock* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1DrawingStateBlock_Release(ID2D1DrawingStateBlock* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1DrawingStateBlock_GetFactory(ID2D1DrawingStateBlock* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1DrawingStateBlock methods ***/
static FORCEINLINE void ID2D1DrawingStateBlock_GetDescription(ID2D1DrawingStateBlock* This,D2D1_DRAWING_STATE_DESCRIPTION *desc) {
    This->lpVtbl->GetDescription(This,desc);
}
static FORCEINLINE void ID2D1DrawingStateBlock_SetDescription(ID2D1DrawingStateBlock* This,const D2D1_DRAWING_STATE_DESCRIPTION *desc) {
    This->lpVtbl->SetDescription(This,desc);
}
static FORCEINLINE void ID2D1DrawingStateBlock_SetTextRenderingParams(ID2D1DrawingStateBlock* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1DrawingStateBlock_GetTextRenderingParams(ID2D1DrawingStateBlock* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
#endif
#endif

#endif


#endif  /* __ID2D1DrawingStateBlock_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Image interface
 */
#ifndef __ID2D1Image_INTERFACE_DEFINED__
#define __ID2D1Image_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Image, 0x65019f75, 0x8da2, 0x497c, 0xb3,0x2c, 0xdf,0xa3,0x4e,0x48,0xed,0xe6);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("65019f75-8da2-497c-b32c-dfa34e48ede6")
ID2D1Image : public ID2D1Resource
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Image, 0x65019f75, 0x8da2, 0x497c, 0xb3,0x2c, 0xdf,0xa3,0x4e,0x48,0xed,0xe6)
#endif
#else
typedef struct ID2D1ImageVtbl {
    BEGIN_INTERFACE

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

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

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

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

    END_INTERFACE
} ID2D1ImageVtbl;

interface ID2D1Image {
    CONST_VTBL ID2D1ImageVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Image_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Image_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Image_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Image_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Image_QueryInterface(ID2D1Image* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Image_AddRef(ID2D1Image* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Image_Release(ID2D1Image* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Image_GetFactory(ID2D1Image* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
#endif
#endif

#endif


#endif  /* __ID2D1Image_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Bitmap interface
 */
#ifndef __ID2D1Bitmap_INTERFACE_DEFINED__
#define __ID2D1Bitmap_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Bitmap, 0xa2296057, 0xea42, 0x4099, 0x98,0x3b, 0x53,0x9f,0xb6,0x50,0x54,0x26);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("a2296057-ea42-4099-983b-539fb6505426")
ID2D1Bitmap : public ID2D1Image
{
#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_SIZE_F* STDMETHODCALLTYPE GetSize(
        D2D1_SIZE_F *__ret) = 0;
    D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
        )
    {
        D2D1_SIZE_F __ret;
        return *GetSize(&__ret);
    }
#else
    virtual D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
        ) = 0;
#endif

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_SIZE_U* STDMETHODCALLTYPE GetPixelSize(
        D2D1_SIZE_U *__ret) = 0;
    D2D1_SIZE_U STDMETHODCALLTYPE GetPixelSize(
        )
    {
        D2D1_SIZE_U __ret;
        return *GetPixelSize(&__ret);
    }
#else
    virtual D2D1_SIZE_U STDMETHODCALLTYPE GetPixelSize(
        ) = 0;
#endif

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_PIXEL_FORMAT* STDMETHODCALLTYPE GetPixelFormat(
        D2D1_PIXEL_FORMAT *__ret) = 0;
    D2D1_PIXEL_FORMAT STDMETHODCALLTYPE GetPixelFormat(
        )
    {
        D2D1_PIXEL_FORMAT __ret;
        return *GetPixelFormat(&__ret);
    }
#else
    virtual D2D1_PIXEL_FORMAT STDMETHODCALLTYPE GetPixelFormat(
        ) = 0;
#endif

    virtual void STDMETHODCALLTYPE GetDpi(
        float *dpi_x,
        float *dpi_y) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyFromBitmap(
        const D2D1_POINT_2U *dst_point,
        ID2D1Bitmap *bitmap,
        const D2D1_RECT_U *src_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyFromRenderTarget(
        const D2D1_POINT_2U *dst_point,
        ID2D1RenderTarget *render_target,
        const D2D1_RECT_U *src_rect) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyFromMemory(
        const D2D1_RECT_U *dst_rect,
        const void *src_data,
        UINT32 pitch) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Bitmap, 0xa2296057, 0xea42, 0x4099, 0x98,0x3b, 0x53,0x9f,0xb6,0x50,0x54,0x26)
#endif
#else
typedef struct ID2D1BitmapVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1BitmapVtbl;

interface ID2D1Bitmap {
    CONST_VTBL ID2D1BitmapVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Bitmap_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Bitmap_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Bitmap_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Bitmap_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Bitmap methods ***/
#define ID2D1Bitmap_GetSize(This) ID2D1Bitmap_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Bitmap_GetPixelSize(This) ID2D1Bitmap_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Bitmap_GetPixelFormat(This) ID2D1Bitmap_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1Bitmap_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1Bitmap_CopyFromBitmap(This,dst_point,bitmap,src_rect) (This)->lpVtbl->CopyFromBitmap(This,dst_point,bitmap,src_rect)
#define ID2D1Bitmap_CopyFromRenderTarget(This,dst_point,render_target,src_rect) (This)->lpVtbl->CopyFromRenderTarget(This,dst_point,render_target,src_rect)
#define ID2D1Bitmap_CopyFromMemory(This,dst_rect,src_data,pitch) (This)->lpVtbl->CopyFromMemory(This,dst_rect,src_data,pitch)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Bitmap_QueryInterface(ID2D1Bitmap* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Bitmap_AddRef(ID2D1Bitmap* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Bitmap_Release(ID2D1Bitmap* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Bitmap_GetFactory(ID2D1Bitmap* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Bitmap methods ***/
static FORCEINLINE D2D1_SIZE_F ID2D1Bitmap_GetSize(ID2D1Bitmap* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static FORCEINLINE D2D1_SIZE_U ID2D1Bitmap_GetPixelSize(ID2D1Bitmap* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static FORCEINLINE D2D1_PIXEL_FORMAT ID2D1Bitmap_GetPixelFormat(ID2D1Bitmap* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static FORCEINLINE void ID2D1Bitmap_GetDpi(ID2D1Bitmap* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE HRESULT ID2D1Bitmap_CopyFromBitmap(ID2D1Bitmap* 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 FORCEINLINE HRESULT ID2D1Bitmap_CopyFromRenderTarget(ID2D1Bitmap* 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 FORCEINLINE HRESULT ID2D1Bitmap_CopyFromMemory(ID2D1Bitmap* This,const D2D1_RECT_U *dst_rect,const void *src_data,UINT32 pitch) {
    return This->lpVtbl->CopyFromMemory(This,dst_rect,src_data,pitch);
}
#endif
#endif

#endif


#endif  /* __ID2D1Bitmap_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Brush interface
 */
#ifndef __ID2D1Brush_INTERFACE_DEFINED__
#define __ID2D1Brush_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Brush, 0x2cd906a8, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a8-12e2-11dc-9fed-001143a055f9")
ID2D1Brush : public ID2D1Resource
{
    virtual void STDMETHODCALLTYPE SetOpacity(
        float opacity) = 0;

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

    virtual float STDMETHODCALLTYPE GetOpacity(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetTransform(
        D2D1_MATRIX_3X2_F *transform) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Brush, 0x2cd906a8, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1BrushVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1BrushVtbl;

interface ID2D1Brush {
    CONST_VTBL ID2D1BrushVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Brush_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Brush_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Brush_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Brush_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1Brush_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1Brush_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1Brush_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1Brush_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Brush_QueryInterface(ID2D1Brush* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Brush_AddRef(ID2D1Brush* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Brush_Release(ID2D1Brush* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Brush_GetFactory(ID2D1Brush* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static FORCEINLINE void ID2D1Brush_SetOpacity(ID2D1Brush* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static FORCEINLINE void ID2D1Brush_SetTransform(ID2D1Brush* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE float ID2D1Brush_GetOpacity(ID2D1Brush* This) {
    return This->lpVtbl->GetOpacity(This);
}
static FORCEINLINE void ID2D1Brush_GetTransform(ID2D1Brush* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
#endif
#endif

#endif


#endif  /* __ID2D1Brush_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1BitmapBrush interface
 */
#ifndef __ID2D1BitmapBrush_INTERFACE_DEFINED__
#define __ID2D1BitmapBrush_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1BitmapBrush, 0x2cd906aa, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906aa-12e2-11dc-9fed-001143a055f9")
ID2D1BitmapBrush : public ID2D1Brush
{
    virtual void STDMETHODCALLTYPE SetExtendModeX(
        D2D1_EXTEND_MODE mode) = 0;

    virtual void STDMETHODCALLTYPE SetExtendModeY(
        D2D1_EXTEND_MODE mode) = 0;

    virtual void STDMETHODCALLTYPE SetInterpolationMode(
        D2D1_BITMAP_INTERPOLATION_MODE mode) = 0;

    virtual void STDMETHODCALLTYPE SetBitmap(
        ID2D1Bitmap *bitmap) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendModeX(
        ) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendModeY(
        ) = 0;

    virtual D2D1_BITMAP_INTERPOLATION_MODE STDMETHODCALLTYPE GetInterpolationMode(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetBitmap(
        ID2D1Bitmap **bitmap) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1BitmapBrush, 0x2cd906aa, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1BitmapBrushVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1BitmapBrushVtbl;

interface ID2D1BitmapBrush {
    CONST_VTBL ID2D1BitmapBrushVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1BitmapBrush_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1BitmapBrush_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1BitmapBrush_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1BitmapBrush_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1BitmapBrush_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1BitmapBrush_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1BitmapBrush_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1BitmapBrush_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
/*** ID2D1BitmapBrush methods ***/
#define ID2D1BitmapBrush_SetExtendModeX(This,mode) (This)->lpVtbl->SetExtendModeX(This,mode)
#define ID2D1BitmapBrush_SetExtendModeY(This,mode) (This)->lpVtbl->SetExtendModeY(This,mode)
#define ID2D1BitmapBrush_SetInterpolationMode(This,mode) (This)->lpVtbl->SetInterpolationMode(This,mode)
#define ID2D1BitmapBrush_SetBitmap(This,bitmap) (This)->lpVtbl->SetBitmap(This,bitmap)
#define ID2D1BitmapBrush_GetExtendModeX(This) (This)->lpVtbl->GetExtendModeX(This)
#define ID2D1BitmapBrush_GetExtendModeY(This) (This)->lpVtbl->GetExtendModeY(This)
#define ID2D1BitmapBrush_GetInterpolationMode(This) (This)->lpVtbl->GetInterpolationMode(This)
#define ID2D1BitmapBrush_GetBitmap(This,bitmap) (This)->lpVtbl->GetBitmap(This,bitmap)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1BitmapBrush_QueryInterface(ID2D1BitmapBrush* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1BitmapBrush_AddRef(ID2D1BitmapBrush* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1BitmapBrush_Release(ID2D1BitmapBrush* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1BitmapBrush_GetFactory(ID2D1BitmapBrush* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static FORCEINLINE void ID2D1BitmapBrush_SetOpacity(ID2D1BitmapBrush* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static FORCEINLINE void ID2D1BitmapBrush_SetTransform(ID2D1BitmapBrush* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE float ID2D1BitmapBrush_GetOpacity(ID2D1BitmapBrush* This) {
    return This->lpVtbl->GetOpacity(This);
}
static FORCEINLINE void ID2D1BitmapBrush_GetTransform(ID2D1BitmapBrush* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
/*** ID2D1BitmapBrush methods ***/
static FORCEINLINE void ID2D1BitmapBrush_SetExtendModeX(ID2D1BitmapBrush* This,D2D1_EXTEND_MODE mode) {
    This->lpVtbl->SetExtendModeX(This,mode);
}
static FORCEINLINE void ID2D1BitmapBrush_SetExtendModeY(ID2D1BitmapBrush* This,D2D1_EXTEND_MODE mode) {
    This->lpVtbl->SetExtendModeY(This,mode);
}
static FORCEINLINE void ID2D1BitmapBrush_SetInterpolationMode(ID2D1BitmapBrush* This,D2D1_BITMAP_INTERPOLATION_MODE mode) {
    This->lpVtbl->SetInterpolationMode(This,mode);
}
static FORCEINLINE void ID2D1BitmapBrush_SetBitmap(ID2D1BitmapBrush* This,ID2D1Bitmap *bitmap) {
    This->lpVtbl->SetBitmap(This,bitmap);
}
static FORCEINLINE D2D1_EXTEND_MODE ID2D1BitmapBrush_GetExtendModeX(ID2D1BitmapBrush* This) {
    return This->lpVtbl->GetExtendModeX(This);
}
static FORCEINLINE D2D1_EXTEND_MODE ID2D1BitmapBrush_GetExtendModeY(ID2D1BitmapBrush* This) {
    return This->lpVtbl->GetExtendModeY(This);
}
static FORCEINLINE D2D1_BITMAP_INTERPOLATION_MODE ID2D1BitmapBrush_GetInterpolationMode(ID2D1BitmapBrush* This) {
    return This->lpVtbl->GetInterpolationMode(This);
}
static FORCEINLINE void ID2D1BitmapBrush_GetBitmap(ID2D1BitmapBrush* This,ID2D1Bitmap **bitmap) {
    This->lpVtbl->GetBitmap(This,bitmap);
}
#endif
#endif

#endif


#endif  /* __ID2D1BitmapBrush_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1SolidColorBrush interface
 */
#ifndef __ID2D1SolidColorBrush_INTERFACE_DEFINED__
#define __ID2D1SolidColorBrush_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1SolidColorBrush, 0x2cd906a9, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a9-12e2-11dc-9fed-001143a055f9")
ID2D1SolidColorBrush : public ID2D1Brush
{
    virtual void STDMETHODCALLTYPE SetColor(
        const D2D1_COLOR_F *color) = 0;

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_COLOR_F* STDMETHODCALLTYPE GetColor(
        D2D1_COLOR_F *__ret) = 0;
    D2D1_COLOR_F STDMETHODCALLTYPE GetColor(
        )
    {
        D2D1_COLOR_F __ret;
        return *GetColor(&__ret);
    }
#else
    virtual D2D1_COLOR_F STDMETHODCALLTYPE GetColor(
        ) = 0;
#endif

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1SolidColorBrush, 0x2cd906a9, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1SolidColorBrushVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** ID2D1SolidColorBrush methods ***/
    void (STDMETHODCALLTYPE *SetColor)(
        ID2D1SolidColorBrush *This,
        const D2D1_COLOR_F *color);

    D2D1_COLOR_F * (STDMETHODCALLTYPE *GetColor)(
        ID2D1SolidColorBrush *This,
        D2D1_COLOR_F *__ret);

    END_INTERFACE
} ID2D1SolidColorBrushVtbl;

interface ID2D1SolidColorBrush {
    CONST_VTBL ID2D1SolidColorBrushVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1SolidColorBrush_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1SolidColorBrush_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1SolidColorBrush_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1SolidColorBrush_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1SolidColorBrush_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1SolidColorBrush_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1SolidColorBrush_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1SolidColorBrush_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
/*** ID2D1SolidColorBrush methods ***/
#define ID2D1SolidColorBrush_SetColor(This,color) (This)->lpVtbl->SetColor(This,color)
#define ID2D1SolidColorBrush_GetColor(This) ID2D1SolidColorBrush_GetColor_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1SolidColorBrush_QueryInterface(ID2D1SolidColorBrush* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1SolidColorBrush_AddRef(ID2D1SolidColorBrush* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1SolidColorBrush_Release(ID2D1SolidColorBrush* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1SolidColorBrush_GetFactory(ID2D1SolidColorBrush* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static FORCEINLINE void ID2D1SolidColorBrush_SetOpacity(ID2D1SolidColorBrush* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static FORCEINLINE void ID2D1SolidColorBrush_SetTransform(ID2D1SolidColorBrush* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE float ID2D1SolidColorBrush_GetOpacity(ID2D1SolidColorBrush* This) {
    return This->lpVtbl->GetOpacity(This);
}
static FORCEINLINE void ID2D1SolidColorBrush_GetTransform(ID2D1SolidColorBrush* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
/*** ID2D1SolidColorBrush methods ***/
static FORCEINLINE void ID2D1SolidColorBrush_SetColor(ID2D1SolidColorBrush* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->SetColor(This,color);
}
static FORCEINLINE D2D1_COLOR_F ID2D1SolidColorBrush_GetColor(ID2D1SolidColorBrush* This) {
    D2D1_COLOR_F __ret;
    return *This->lpVtbl->GetColor(This,&__ret);
}
#endif
#endif

#endif


#endif  /* __ID2D1SolidColorBrush_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GradientStopCollection interface
 */
#ifndef __ID2D1GradientStopCollection_INTERFACE_DEFINED__
#define __ID2D1GradientStopCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GradientStopCollection, 0x2cd906a7, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906a7-12e2-11dc-9fed-001143a055f9")
ID2D1GradientStopCollection : public ID2D1Resource
{
    virtual UINT32 STDMETHODCALLTYPE GetGradientStopCount(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetGradientStops(
        D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count) = 0;

    virtual D2D1_GAMMA STDMETHODCALLTYPE GetColorInterpolationGamma(
        ) = 0;

    virtual D2D1_EXTEND_MODE STDMETHODCALLTYPE GetExtendMode(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GradientStopCollection, 0x2cd906a7, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1GradientStopCollectionVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1GradientStopCollectionVtbl;

interface ID2D1GradientStopCollection {
    CONST_VTBL ID2D1GradientStopCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GradientStopCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GradientStopCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GradientStopCollection_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1GradientStopCollection_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1GradientStopCollection methods ***/
#define ID2D1GradientStopCollection_GetGradientStopCount(This) (This)->lpVtbl->GetGradientStopCount(This)
#define ID2D1GradientStopCollection_GetGradientStops(This,stops,stop_count) (This)->lpVtbl->GetGradientStops(This,stops,stop_count)
#define ID2D1GradientStopCollection_GetColorInterpolationGamma(This) (This)->lpVtbl->GetColorInterpolationGamma(This)
#define ID2D1GradientStopCollection_GetExtendMode(This) (This)->lpVtbl->GetExtendMode(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1GradientStopCollection_QueryInterface(ID2D1GradientStopCollection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1GradientStopCollection_AddRef(ID2D1GradientStopCollection* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1GradientStopCollection_Release(ID2D1GradientStopCollection* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1GradientStopCollection_GetFactory(ID2D1GradientStopCollection* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1GradientStopCollection methods ***/
static FORCEINLINE UINT32 ID2D1GradientStopCollection_GetGradientStopCount(ID2D1GradientStopCollection* This) {
    return This->lpVtbl->GetGradientStopCount(This);
}
static FORCEINLINE void ID2D1GradientStopCollection_GetGradientStops(ID2D1GradientStopCollection* This,D2D1_GRADIENT_STOP *stops,UINT32 stop_count) {
    This->lpVtbl->GetGradientStops(This,stops,stop_count);
}
static FORCEINLINE D2D1_GAMMA ID2D1GradientStopCollection_GetColorInterpolationGamma(ID2D1GradientStopCollection* This) {
    return This->lpVtbl->GetColorInterpolationGamma(This);
}
static FORCEINLINE D2D1_EXTEND_MODE ID2D1GradientStopCollection_GetExtendMode(ID2D1GradientStopCollection* This) {
    return This->lpVtbl->GetExtendMode(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1GradientStopCollection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1LinearGradientBrush interface
 */
#ifndef __ID2D1LinearGradientBrush_INTERFACE_DEFINED__
#define __ID2D1LinearGradientBrush_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1LinearGradientBrush, 0x2cd906ab, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906ab-12e2-11dc-9fed-001143a055f9")
ID2D1LinearGradientBrush : public ID2D1Brush
{
    virtual void STDMETHODCALLTYPE SetStartPoint(
        D2D1_POINT_2F start_point) = 0;

    virtual void STDMETHODCALLTYPE SetEndPoint(
        D2D1_POINT_2F end_point) = 0;

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetStartPoint(
        D2D1_POINT_2F *__ret) = 0;
    D2D1_POINT_2F STDMETHODCALLTYPE GetStartPoint(
        )
    {
        D2D1_POINT_2F __ret;
        return *GetStartPoint(&__ret);
    }
#else
    virtual D2D1_POINT_2F STDMETHODCALLTYPE GetStartPoint(
        ) = 0;
#endif

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetEndPoint(
        D2D1_POINT_2F *__ret) = 0;
    D2D1_POINT_2F STDMETHODCALLTYPE GetEndPoint(
        )
    {
        D2D1_POINT_2F __ret;
        return *GetEndPoint(&__ret);
    }
#else
    virtual D2D1_POINT_2F STDMETHODCALLTYPE GetEndPoint(
        ) = 0;
#endif

    virtual void STDMETHODCALLTYPE GetGradientStopCollection(
        ID2D1GradientStopCollection **gradient) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1LinearGradientBrush, 0x2cd906ab, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1LinearGradientBrushVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** ID2D1LinearGradientBrush methods ***/
    void (STDMETHODCALLTYPE *SetStartPoint)(
        ID2D1LinearGradientBrush *This,
        D2D1_POINT_2F start_point);

    void (STDMETHODCALLTYPE *SetEndPoint)(
        ID2D1LinearGradientBrush *This,
        D2D1_POINT_2F end_point);

    D2D1_POINT_2F * (STDMETHODCALLTYPE *GetStartPoint)(
        ID2D1LinearGradientBrush *This,
        D2D1_POINT_2F *__ret);

    D2D1_POINT_2F * (STDMETHODCALLTYPE *GetEndPoint)(
        ID2D1LinearGradientBrush *This,
        D2D1_POINT_2F *__ret);

    void (STDMETHODCALLTYPE *GetGradientStopCollection)(
        ID2D1LinearGradientBrush *This,
        ID2D1GradientStopCollection **gradient);

    END_INTERFACE
} ID2D1LinearGradientBrushVtbl;

interface ID2D1LinearGradientBrush {
    CONST_VTBL ID2D1LinearGradientBrushVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1LinearGradientBrush_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1LinearGradientBrush_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1LinearGradientBrush_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1LinearGradientBrush_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1LinearGradientBrush_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1LinearGradientBrush_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1LinearGradientBrush_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1LinearGradientBrush_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
/*** ID2D1LinearGradientBrush methods ***/
#define ID2D1LinearGradientBrush_SetStartPoint(This,start_point) (This)->lpVtbl->SetStartPoint(This,start_point)
#define ID2D1LinearGradientBrush_SetEndPoint(This,end_point) (This)->lpVtbl->SetEndPoint(This,end_point)
#define ID2D1LinearGradientBrush_GetStartPoint(This) ID2D1LinearGradientBrush_GetStartPoint_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1LinearGradientBrush_GetEndPoint(This) ID2D1LinearGradientBrush_GetEndPoint_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1LinearGradientBrush_GetGradientStopCollection(This,gradient) (This)->lpVtbl->GetGradientStopCollection(This,gradient)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1LinearGradientBrush_QueryInterface(ID2D1LinearGradientBrush* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1LinearGradientBrush_AddRef(ID2D1LinearGradientBrush* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1LinearGradientBrush_Release(ID2D1LinearGradientBrush* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1LinearGradientBrush_GetFactory(ID2D1LinearGradientBrush* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static FORCEINLINE void ID2D1LinearGradientBrush_SetOpacity(ID2D1LinearGradientBrush* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static FORCEINLINE void ID2D1LinearGradientBrush_SetTransform(ID2D1LinearGradientBrush* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE float ID2D1LinearGradientBrush_GetOpacity(ID2D1LinearGradientBrush* This) {
    return This->lpVtbl->GetOpacity(This);
}
static FORCEINLINE void ID2D1LinearGradientBrush_GetTransform(ID2D1LinearGradientBrush* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
/*** ID2D1LinearGradientBrush methods ***/
static FORCEINLINE void ID2D1LinearGradientBrush_SetStartPoint(ID2D1LinearGradientBrush* This,D2D1_POINT_2F start_point) {
    This->lpVtbl->SetStartPoint(This,start_point);
}
static FORCEINLINE void ID2D1LinearGradientBrush_SetEndPoint(ID2D1LinearGradientBrush* This,D2D1_POINT_2F end_point) {
    This->lpVtbl->SetEndPoint(This,end_point);
}
static FORCEINLINE D2D1_POINT_2F ID2D1LinearGradientBrush_GetStartPoint(ID2D1LinearGradientBrush* This) {
    D2D1_POINT_2F __ret;
    return *This->lpVtbl->GetStartPoint(This,&__ret);
}
static FORCEINLINE D2D1_POINT_2F ID2D1LinearGradientBrush_GetEndPoint(ID2D1LinearGradientBrush* This) {
    D2D1_POINT_2F __ret;
    return *This->lpVtbl->GetEndPoint(This,&__ret);
}
static FORCEINLINE void ID2D1LinearGradientBrush_GetGradientStopCollection(ID2D1LinearGradientBrush* This,ID2D1GradientStopCollection **gradient) {
    This->lpVtbl->GetGradientStopCollection(This,gradient);
}
#endif
#endif

#endif


#endif  /* __ID2D1LinearGradientBrush_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1RadialGradientBrush interface
 */
#ifndef __ID2D1RadialGradientBrush_INTERFACE_DEFINED__
#define __ID2D1RadialGradientBrush_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1RadialGradientBrush, 0x2cd906ac, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906ac-12e2-11dc-9fed-001143a055f9")
ID2D1RadialGradientBrush : public ID2D1Brush
{
    virtual void STDMETHODCALLTYPE SetCenter(
        D2D1_POINT_2F center) = 0;

    virtual void STDMETHODCALLTYPE SetGradientOriginOffset(
        D2D1_POINT_2F offset) = 0;

    virtual void STDMETHODCALLTYPE SetRadiusX(
        float radius) = 0;

    virtual void STDMETHODCALLTYPE SetRadiusY(
        float radius) = 0;

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetCenter(
        D2D1_POINT_2F *__ret) = 0;
    D2D1_POINT_2F STDMETHODCALLTYPE GetCenter(
        )
    {
        D2D1_POINT_2F __ret;
        return *GetCenter(&__ret);
    }
#else
    virtual D2D1_POINT_2F STDMETHODCALLTYPE GetCenter(
        ) = 0;
#endif

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_POINT_2F* STDMETHODCALLTYPE GetGradientOriginOffset(
        D2D1_POINT_2F *__ret) = 0;
    D2D1_POINT_2F STDMETHODCALLTYPE GetGradientOriginOffset(
        )
    {
        D2D1_POINT_2F __ret;
        return *GetGradientOriginOffset(&__ret);
    }
#else
    virtual D2D1_POINT_2F STDMETHODCALLTYPE GetGradientOriginOffset(
        ) = 0;
#endif

    virtual float STDMETHODCALLTYPE GetRadiusX(
        ) = 0;

    virtual float STDMETHODCALLTYPE GetRadiusY(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetGradientStopCollection(
        ID2D1GradientStopCollection **gradient) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1RadialGradientBrush, 0x2cd906ac, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1RadialGradientBrushVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

    /*** ID2D1RadialGradientBrush methods ***/
    void (STDMETHODCALLTYPE *SetCenter)(
        ID2D1RadialGradientBrush *This,
        D2D1_POINT_2F center);

    void (STDMETHODCALLTYPE *SetGradientOriginOffset)(
        ID2D1RadialGradientBrush *This,
        D2D1_POINT_2F offset);

    void (STDMETHODCALLTYPE *SetRadiusX)(
        ID2D1RadialGradientBrush *This,
        float radius);

    void (STDMETHODCALLTYPE *SetRadiusY)(
        ID2D1RadialGradientBrush *This,
        float radius);

    D2D1_POINT_2F * (STDMETHODCALLTYPE *GetCenter)(
        ID2D1RadialGradientBrush *This,
        D2D1_POINT_2F *__ret);

    D2D1_POINT_2F * (STDMETHODCALLTYPE *GetGradientOriginOffset)(
        ID2D1RadialGradientBrush *This,
        D2D1_POINT_2F *__ret);

    float (STDMETHODCALLTYPE *GetRadiusX)(
        ID2D1RadialGradientBrush *This);

    float (STDMETHODCALLTYPE *GetRadiusY)(
        ID2D1RadialGradientBrush *This);

    void (STDMETHODCALLTYPE *GetGradientStopCollection)(
        ID2D1RadialGradientBrush *This,
        ID2D1GradientStopCollection **gradient);

    END_INTERFACE
} ID2D1RadialGradientBrushVtbl;

interface ID2D1RadialGradientBrush {
    CONST_VTBL ID2D1RadialGradientBrushVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1RadialGradientBrush_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1RadialGradientBrush_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1RadialGradientBrush_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1RadialGradientBrush_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Brush methods ***/
#define ID2D1RadialGradientBrush_SetOpacity(This,opacity) (This)->lpVtbl->SetOpacity(This,opacity)
#define ID2D1RadialGradientBrush_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1RadialGradientBrush_GetOpacity(This) (This)->lpVtbl->GetOpacity(This)
#define ID2D1RadialGradientBrush_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
/*** ID2D1RadialGradientBrush methods ***/
#define ID2D1RadialGradientBrush_SetCenter(This,center) (This)->lpVtbl->SetCenter(This,center)
#define ID2D1RadialGradientBrush_SetGradientOriginOffset(This,offset) (This)->lpVtbl->SetGradientOriginOffset(This,offset)
#define ID2D1RadialGradientBrush_SetRadiusX(This,radius) (This)->lpVtbl->SetRadiusX(This,radius)
#define ID2D1RadialGradientBrush_SetRadiusY(This,radius) (This)->lpVtbl->SetRadiusY(This,radius)
#define ID2D1RadialGradientBrush_GetCenter(This) ID2D1RadialGradientBrush_GetCenter_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1RadialGradientBrush_GetGradientOriginOffset(This) ID2D1RadialGradientBrush_GetGradientOriginOffset_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1RadialGradientBrush_GetRadiusX(This) (This)->lpVtbl->GetRadiusX(This)
#define ID2D1RadialGradientBrush_GetRadiusY(This) (This)->lpVtbl->GetRadiusY(This)
#define ID2D1RadialGradientBrush_GetGradientStopCollection(This,gradient) (This)->lpVtbl->GetGradientStopCollection(This,gradient)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1RadialGradientBrush_QueryInterface(ID2D1RadialGradientBrush* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1RadialGradientBrush_AddRef(ID2D1RadialGradientBrush* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1RadialGradientBrush_Release(ID2D1RadialGradientBrush* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1RadialGradientBrush_GetFactory(ID2D1RadialGradientBrush* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Brush methods ***/
static FORCEINLINE void ID2D1RadialGradientBrush_SetOpacity(ID2D1RadialGradientBrush* This,float opacity) {
    This->lpVtbl->SetOpacity(This,opacity);
}
static FORCEINLINE void ID2D1RadialGradientBrush_SetTransform(ID2D1RadialGradientBrush* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE float ID2D1RadialGradientBrush_GetOpacity(ID2D1RadialGradientBrush* This) {
    return This->lpVtbl->GetOpacity(This);
}
static FORCEINLINE void ID2D1RadialGradientBrush_GetTransform(ID2D1RadialGradientBrush* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
/*** ID2D1RadialGradientBrush methods ***/
static FORCEINLINE void ID2D1RadialGradientBrush_SetCenter(ID2D1RadialGradientBrush* This,D2D1_POINT_2F center) {
    This->lpVtbl->SetCenter(This,center);
}
static FORCEINLINE void ID2D1RadialGradientBrush_SetGradientOriginOffset(ID2D1RadialGradientBrush* This,D2D1_POINT_2F offset) {
    This->lpVtbl->SetGradientOriginOffset(This,offset);
}
static FORCEINLINE void ID2D1RadialGradientBrush_SetRadiusX(ID2D1RadialGradientBrush* This,float radius) {
    This->lpVtbl->SetRadiusX(This,radius);
}
static FORCEINLINE void ID2D1RadialGradientBrush_SetRadiusY(ID2D1RadialGradientBrush* This,float radius) {
    This->lpVtbl->SetRadiusY(This,radius);
}
static FORCEINLINE D2D1_POINT_2F ID2D1RadialGradientBrush_GetCenter(ID2D1RadialGradientBrush* This) {
    D2D1_POINT_2F __ret;
    return *This->lpVtbl->GetCenter(This,&__ret);
}
static FORCEINLINE D2D1_POINT_2F ID2D1RadialGradientBrush_GetGradientOriginOffset(ID2D1RadialGradientBrush* This) {
    D2D1_POINT_2F __ret;
    return *This->lpVtbl->GetGradientOriginOffset(This,&__ret);
}
static FORCEINLINE float ID2D1RadialGradientBrush_GetRadiusX(ID2D1RadialGradientBrush* This) {
    return This->lpVtbl->GetRadiusX(This);
}
static FORCEINLINE float ID2D1RadialGradientBrush_GetRadiusY(ID2D1RadialGradientBrush* This) {
    return This->lpVtbl->GetRadiusY(This);
}
static FORCEINLINE void ID2D1RadialGradientBrush_GetGradientStopCollection(ID2D1RadialGradientBrush* This,ID2D1GradientStopCollection **gradient) {
    This->lpVtbl->GetGradientStopCollection(This,gradient);
}
#endif
#endif

#endif


#endif  /* __ID2D1RadialGradientBrush_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Layer interface
 */
#ifndef __ID2D1Layer_INTERFACE_DEFINED__
#define __ID2D1Layer_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Layer, 0x2cd9069b, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd9069b-12e2-11dc-9fed-001143a055f9")
ID2D1Layer : public ID2D1Resource
{
#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_SIZE_F* STDMETHODCALLTYPE GetSize(
        D2D1_SIZE_F *__ret) = 0;
    D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
        )
    {
        D2D1_SIZE_F __ret;
        return *GetSize(&__ret);
    }
#else
    virtual D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
        ) = 0;
#endif

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Layer, 0x2cd9069b, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1LayerVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

    END_INTERFACE
} ID2D1LayerVtbl;

interface ID2D1Layer {
    CONST_VTBL ID2D1LayerVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Layer_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Layer_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Layer_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Layer_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Layer methods ***/
#define ID2D1Layer_GetSize(This) ID2D1Layer_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Layer_QueryInterface(ID2D1Layer* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Layer_AddRef(ID2D1Layer* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Layer_Release(ID2D1Layer* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Layer_GetFactory(ID2D1Layer* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Layer methods ***/
static FORCEINLINE D2D1_SIZE_F ID2D1Layer_GetSize(ID2D1Layer* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
#endif
#endif

#endif


#endif  /* __ID2D1Layer_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Mesh interface
 */
#ifndef __ID2D1Mesh_INTERFACE_DEFINED__
#define __ID2D1Mesh_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Mesh, 0x2cd906c2, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd906c2-12e2-11dc-9fed-001143a055f9")
ID2D1Mesh : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE Open(
        ID2D1TessellationSink **sink) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Mesh, 0x2cd906c2, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1MeshVtbl {
    BEGIN_INTERFACE

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

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

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

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

    /*** ID2D1Mesh methods ***/
    HRESULT (STDMETHODCALLTYPE *Open)(
        ID2D1Mesh *This,
        ID2D1TessellationSink **sink);

    END_INTERFACE
} ID2D1MeshVtbl;

interface ID2D1Mesh {
    CONST_VTBL ID2D1MeshVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Mesh_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Mesh_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Mesh_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1Mesh_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1Mesh methods ***/
#define ID2D1Mesh_Open(This,sink) (This)->lpVtbl->Open(This,sink)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Mesh_QueryInterface(ID2D1Mesh* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Mesh_AddRef(ID2D1Mesh* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Mesh_Release(ID2D1Mesh* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1Mesh_GetFactory(ID2D1Mesh* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1Mesh methods ***/
static FORCEINLINE HRESULT ID2D1Mesh_Open(ID2D1Mesh* This,ID2D1TessellationSink **sink) {
    return This->lpVtbl->Open(This,sink);
}
#endif
#endif

#endif


#endif  /* __ID2D1Mesh_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1RenderTarget interface
 */
#ifndef __ID2D1RenderTarget_INTERFACE_DEFINED__
#define __ID2D1RenderTarget_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1RenderTarget, 0x2cd90694, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd90694-12e2-11dc-9fed-001143a055f9")
ID2D1RenderTarget : public ID2D1Resource
{
    virtual HRESULT STDMETHODCALLTYPE CreateBitmap(
        D2D1_SIZE_U size,
        const void *src_data,
        UINT32 pitch,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap) = 0;

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

    virtual HRESULT STDMETHODCALLTYPE CreateSharedBitmap(
        REFIID iid,
        void *data,
        const D2D1_BITMAP_PROPERTIES *desc,
        ID2D1Bitmap **bitmap) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateBitmapBrush(
        ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1BitmapBrush **brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateSolidColorBrush(
        const D2D1_COLOR_F *color,
        const D2D1_BRUSH_PROPERTIES *desc,
        ID2D1SolidColorBrush **brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGradientStopCollection(
        const D2D1_GRADIENT_STOP *stops,
        UINT32 stop_count,
        D2D1_GAMMA gamma,
        D2D1_EXTEND_MODE extend_mode,
        ID2D1GradientStopCollection **gradient) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateLinearGradientBrush(
        const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1LinearGradientBrush **brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRadialGradientBrush(
        const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *gradient_brush_desc,
        const D2D1_BRUSH_PROPERTIES *brush_desc,
        ID2D1GradientStopCollection *gradient,
        ID2D1RadialGradientBrush **brush) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateCompatibleRenderTarget(
        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) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateLayer(
        const D2D1_SIZE_F *size,
        ID2D1Layer **layer) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateMesh(
        ID2D1Mesh **mesh) = 0;

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

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

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

    virtual void STDMETHODCALLTYPE DrawRoundedRectangle(
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style) = 0;

    virtual void STDMETHODCALLTYPE FillRoundedRectangle(
        const D2D1_ROUNDED_RECT *rect,
        ID2D1Brush *brush) = 0;

    virtual void STDMETHODCALLTYPE DrawEllipse(
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush,
        float stroke_width,
        ID2D1StrokeStyle *stroke_style) = 0;

    virtual void STDMETHODCALLTYPE FillEllipse(
        const D2D1_ELLIPSE *ellipse,
        ID2D1Brush *brush) = 0;

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

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

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

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

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

    virtual void STDMETHODCALLTYPE DrawText(
        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) = 0;

    virtual void STDMETHODCALLTYPE DrawTextLayout(
        D2D1_POINT_2F origin,
        IDWriteTextLayout *layout,
        ID2D1Brush *brush,
        D2D1_DRAW_TEXT_OPTIONS options) = 0;

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

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

    virtual void STDMETHODCALLTYPE GetTransform(
        D2D1_MATRIX_3X2_F *transform) = 0;

    virtual void STDMETHODCALLTYPE SetAntialiasMode(
        D2D1_ANTIALIAS_MODE antialias_mode) = 0;

    virtual D2D1_ANTIALIAS_MODE STDMETHODCALLTYPE GetAntialiasMode(
        ) = 0;

    virtual void STDMETHODCALLTYPE SetTextAntialiasMode(
        D2D1_TEXT_ANTIALIAS_MODE antialias_mode) = 0;

    virtual D2D1_TEXT_ANTIALIAS_MODE STDMETHODCALLTYPE GetTextAntialiasMode(
        ) = 0;

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

    virtual void STDMETHODCALLTYPE GetTextRenderingParams(
        IDWriteRenderingParams **text_rendering_params) = 0;

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

    virtual void STDMETHODCALLTYPE GetTags(
        D2D1_TAG *tag1,
        D2D1_TAG *tag2) = 0;

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

    virtual void STDMETHODCALLTYPE PopLayer(
        ) = 0;

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

    virtual void STDMETHODCALLTYPE SaveDrawingState(
        ID2D1DrawingStateBlock *state_block) = 0;

    virtual void STDMETHODCALLTYPE RestoreDrawingState(
        ID2D1DrawingStateBlock *state_block) = 0;

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

    virtual void STDMETHODCALLTYPE PopAxisAlignedClip(
        ) = 0;

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

    virtual void STDMETHODCALLTYPE BeginDraw(
        ) = 0;

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

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_PIXEL_FORMAT* STDMETHODCALLTYPE GetPixelFormat(
        D2D1_PIXEL_FORMAT *__ret) = 0;
    D2D1_PIXEL_FORMAT STDMETHODCALLTYPE GetPixelFormat(
        )
    {
        D2D1_PIXEL_FORMAT __ret;
        return *GetPixelFormat(&__ret);
    }
#else
    virtual D2D1_PIXEL_FORMAT STDMETHODCALLTYPE GetPixelFormat(
        ) = 0;
#endif

    virtual void STDMETHODCALLTYPE SetDpi(
        float dpi_x,
        float dpi_y) = 0;

    virtual void STDMETHODCALLTYPE GetDpi(
        float *dpi_x,
        float *dpi_y) = 0;

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_SIZE_F* STDMETHODCALLTYPE GetSize(
        D2D1_SIZE_F *__ret) = 0;
    D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
        )
    {
        D2D1_SIZE_F __ret;
        return *GetSize(&__ret);
    }
#else
    virtual D2D1_SIZE_F STDMETHODCALLTYPE GetSize(
        ) = 0;
#endif

#ifdef WIDL_EXPLICIT_AGGREGATE_RETURNS
    virtual D2D1_SIZE_U* STDMETHODCALLTYPE GetPixelSize(
        D2D1_SIZE_U *__ret) = 0;
    D2D1_SIZE_U STDMETHODCALLTYPE GetPixelSize(
        )
    {
        D2D1_SIZE_U __ret;
        return *GetPixelSize(&__ret);
    }
#else
    virtual D2D1_SIZE_U STDMETHODCALLTYPE GetPixelSize(
        ) = 0;
#endif

    virtual UINT32 STDMETHODCALLTYPE GetMaximumBitmapSize(
        ) = 0;

    virtual BOOL STDMETHODCALLTYPE IsSupported(
        const D2D1_RENDER_TARGET_PROPERTIES *desc) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1RenderTarget, 0x2cd90694, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1RenderTargetVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1RenderTargetVtbl;

interface ID2D1RenderTarget {
    CONST_VTBL ID2D1RenderTargetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1RenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1RenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1RenderTarget_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1RenderTarget_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1RenderTarget_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1RenderTarget_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1RenderTarget_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1RenderTarget_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush)
#define ID2D1RenderTarget_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1RenderTarget_CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient) (This)->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient)
#define ID2D1RenderTarget_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1RenderTarget_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1RenderTarget_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1RenderTarget_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1RenderTarget_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1RenderTarget_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1RenderTarget_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1RenderTarget_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1RenderTarget_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1RenderTarget_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1RenderTarget_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1RenderTarget_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1RenderTarget_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1RenderTarget_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1RenderTarget_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1RenderTarget_FillOpacityMask(This,mask,brush,content,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect)
#define ID2D1RenderTarget_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect)
#define ID2D1RenderTarget_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 ID2D1RenderTarget_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1RenderTarget_DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode)
#define ID2D1RenderTarget_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1RenderTarget_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1RenderTarget_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1RenderTarget_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1RenderTarget_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1RenderTarget_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1RenderTarget_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1RenderTarget_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1RenderTarget_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1RenderTarget_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1RenderTarget_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1RenderTarget_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1RenderTarget_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1RenderTarget_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1RenderTarget_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1RenderTarget_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1RenderTarget_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1RenderTarget_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1RenderTarget_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1RenderTarget_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1RenderTarget_GetPixelFormat(This) ID2D1RenderTarget_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1RenderTarget_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1RenderTarget_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1RenderTarget_GetSize(This) ID2D1RenderTarget_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1RenderTarget_GetPixelSize(This) ID2D1RenderTarget_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1RenderTarget_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1RenderTarget_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1RenderTarget_QueryInterface(ID2D1RenderTarget* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1RenderTarget_AddRef(ID2D1RenderTarget* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1RenderTarget_Release(ID2D1RenderTarget* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1RenderTarget_GetFactory(ID2D1RenderTarget* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateBitmap(ID2D1RenderTarget* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateBitmapFromWicBitmap(ID2D1RenderTarget* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateSharedBitmap(ID2D1RenderTarget* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateBitmapBrush(ID2D1RenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush **brush) {
    return This->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateSolidColorBrush(ID2D1RenderTarget* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateGradientStopCollection(ID2D1RenderTarget* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_GAMMA gamma,D2D1_EXTEND_MODE extend_mode,ID2D1GradientStopCollection **gradient) {
    return This->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateLinearGradientBrush(ID2D1RenderTarget* 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 FORCEINLINE HRESULT ID2D1RenderTarget_CreateRadialGradientBrush(ID2D1RenderTarget* 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 FORCEINLINE HRESULT ID2D1RenderTarget_CreateCompatibleRenderTarget(ID2D1RenderTarget* 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 FORCEINLINE HRESULT ID2D1RenderTarget_CreateLayer(ID2D1RenderTarget* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_CreateMesh(ID2D1RenderTarget* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static FORCEINLINE void ID2D1RenderTarget_DrawLine(ID2D1RenderTarget* 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 FORCEINLINE void ID2D1RenderTarget_DrawRectangle(ID2D1RenderTarget* 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 FORCEINLINE void ID2D1RenderTarget_FillRectangle(ID2D1RenderTarget* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1RenderTarget_DrawRoundedRectangle(ID2D1RenderTarget* 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 FORCEINLINE void ID2D1RenderTarget_FillRoundedRectangle(ID2D1RenderTarget* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1RenderTarget_DrawEllipse(ID2D1RenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1RenderTarget_FillEllipse(ID2D1RenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static FORCEINLINE void ID2D1RenderTarget_DrawGeometry(ID2D1RenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1RenderTarget_FillGeometry(ID2D1RenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static FORCEINLINE void ID2D1RenderTarget_FillMesh(ID2D1RenderTarget* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static FORCEINLINE void ID2D1RenderTarget_FillOpacityMask(ID2D1RenderTarget* This,ID2D1Bitmap *mask,ID2D1Brush *brush,D2D1_OPACITY_MASK_CONTENT content,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect);
}
static FORCEINLINE void ID2D1RenderTarget_DrawBitmap(ID2D1RenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect);
}
static FORCEINLINE void ID2D1RenderTarget_DrawText(ID2D1RenderTarget* 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 FORCEINLINE void ID2D1RenderTarget_DrawTextLayout(ID2D1RenderTarget* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static FORCEINLINE void ID2D1RenderTarget_DrawGlyphRun(ID2D1RenderTarget* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode);
}
static FORCEINLINE void ID2D1RenderTarget_SetTransform(ID2D1RenderTarget* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE void ID2D1RenderTarget_GetTransform(ID2D1RenderTarget* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static FORCEINLINE void ID2D1RenderTarget_SetAntialiasMode(ID2D1RenderTarget* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_ANTIALIAS_MODE ID2D1RenderTarget_GetAntialiasMode(ID2D1RenderTarget* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static FORCEINLINE void ID2D1RenderTarget_SetTextAntialiasMode(ID2D1RenderTarget* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_TEXT_ANTIALIAS_MODE ID2D1RenderTarget_GetTextAntialiasMode(ID2D1RenderTarget* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static FORCEINLINE void ID2D1RenderTarget_SetTextRenderingParams(ID2D1RenderTarget* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1RenderTarget_GetTextRenderingParams(ID2D1RenderTarget* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1RenderTarget_SetTags(ID2D1RenderTarget* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1RenderTarget_GetTags(ID2D1RenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1RenderTarget_PushLayer(ID2D1RenderTarget* This,const D2D1_LAYER_PARAMETERS *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static FORCEINLINE void ID2D1RenderTarget_PopLayer(ID2D1RenderTarget* This) {
    This->lpVtbl->PopLayer(This);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_Flush(ID2D1RenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static FORCEINLINE void ID2D1RenderTarget_SaveDrawingState(ID2D1RenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1RenderTarget_RestoreDrawingState(ID2D1RenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1RenderTarget_PushAxisAlignedClip(ID2D1RenderTarget* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static FORCEINLINE void ID2D1RenderTarget_PopAxisAlignedClip(ID2D1RenderTarget* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static FORCEINLINE void ID2D1RenderTarget_Clear(ID2D1RenderTarget* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static FORCEINLINE void ID2D1RenderTarget_BeginDraw(ID2D1RenderTarget* This) {
    This->lpVtbl->BeginDraw(This);
}
static FORCEINLINE HRESULT ID2D1RenderTarget_EndDraw(ID2D1RenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static FORCEINLINE D2D1_PIXEL_FORMAT ID2D1RenderTarget_GetPixelFormat(ID2D1RenderTarget* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static FORCEINLINE void ID2D1RenderTarget_SetDpi(ID2D1RenderTarget* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE void ID2D1RenderTarget_GetDpi(ID2D1RenderTarget* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE D2D1_SIZE_F ID2D1RenderTarget_GetSize(ID2D1RenderTarget* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static FORCEINLINE D2D1_SIZE_U ID2D1RenderTarget_GetPixelSize(ID2D1RenderTarget* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static FORCEINLINE UINT32 ID2D1RenderTarget_GetMaximumBitmapSize(ID2D1RenderTarget* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static FORCEINLINE BOOL ID2D1RenderTarget_IsSupported(ID2D1RenderTarget* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
#endif
#endif

#endif


#endif  /* __ID2D1RenderTarget_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1BitmapRenderTarget interface
 */
#ifndef __ID2D1BitmapRenderTarget_INTERFACE_DEFINED__
#define __ID2D1BitmapRenderTarget_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1BitmapRenderTarget, 0x2cd90695, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd90695-12e2-11dc-9fed-001143a055f9")
ID2D1BitmapRenderTarget : public ID2D1RenderTarget
{
    virtual HRESULT STDMETHODCALLTYPE GetBitmap(
        ID2D1Bitmap **bitmap) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1BitmapRenderTarget, 0x2cd90695, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1BitmapRenderTargetVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1BitmapRenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *GetBitmap)(
        ID2D1BitmapRenderTarget *This,
        ID2D1Bitmap **bitmap);

    END_INTERFACE
} ID2D1BitmapRenderTargetVtbl;

interface ID2D1BitmapRenderTarget {
    CONST_VTBL ID2D1BitmapRenderTargetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1BitmapRenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1BitmapRenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1BitmapRenderTarget_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1BitmapRenderTarget_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1BitmapRenderTarget_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1BitmapRenderTarget_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1BitmapRenderTarget_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1BitmapRenderTarget_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush)
#define ID2D1BitmapRenderTarget_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1BitmapRenderTarget_CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient) (This)->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient)
#define ID2D1BitmapRenderTarget_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1BitmapRenderTarget_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1BitmapRenderTarget_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1BitmapRenderTarget_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1BitmapRenderTarget_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1BitmapRenderTarget_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1BitmapRenderTarget_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1BitmapRenderTarget_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1BitmapRenderTarget_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1BitmapRenderTarget_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1BitmapRenderTarget_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1BitmapRenderTarget_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1BitmapRenderTarget_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1BitmapRenderTarget_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1BitmapRenderTarget_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1BitmapRenderTarget_FillOpacityMask(This,mask,brush,content,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect)
#define ID2D1BitmapRenderTarget_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect)
#define ID2D1BitmapRenderTarget_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 ID2D1BitmapRenderTarget_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1BitmapRenderTarget_DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode)
#define ID2D1BitmapRenderTarget_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1BitmapRenderTarget_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1BitmapRenderTarget_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1BitmapRenderTarget_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1BitmapRenderTarget_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1BitmapRenderTarget_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1BitmapRenderTarget_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1BitmapRenderTarget_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1BitmapRenderTarget_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1BitmapRenderTarget_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1BitmapRenderTarget_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1BitmapRenderTarget_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1BitmapRenderTarget_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1BitmapRenderTarget_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1BitmapRenderTarget_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1BitmapRenderTarget_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1BitmapRenderTarget_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1BitmapRenderTarget_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1BitmapRenderTarget_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1BitmapRenderTarget_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1BitmapRenderTarget_GetPixelFormat(This) ID2D1BitmapRenderTarget_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1BitmapRenderTarget_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1BitmapRenderTarget_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1BitmapRenderTarget_GetSize(This) ID2D1BitmapRenderTarget_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1BitmapRenderTarget_GetPixelSize(This) ID2D1BitmapRenderTarget_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1BitmapRenderTarget_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1BitmapRenderTarget_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1BitmapRenderTarget methods ***/
#define ID2D1BitmapRenderTarget_GetBitmap(This,bitmap) (This)->lpVtbl->GetBitmap(This,bitmap)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_QueryInterface(ID2D1BitmapRenderTarget* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1BitmapRenderTarget_AddRef(ID2D1BitmapRenderTarget* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1BitmapRenderTarget_Release(ID2D1BitmapRenderTarget* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1BitmapRenderTarget_GetFactory(ID2D1BitmapRenderTarget* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateBitmap(ID2D1BitmapRenderTarget* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateBitmapFromWicBitmap(ID2D1BitmapRenderTarget* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateSharedBitmap(ID2D1BitmapRenderTarget* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateBitmapBrush(ID2D1BitmapRenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush **brush) {
    return This->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateSolidColorBrush(ID2D1BitmapRenderTarget* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateGradientStopCollection(ID2D1BitmapRenderTarget* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_GAMMA gamma,D2D1_EXTEND_MODE extend_mode,ID2D1GradientStopCollection **gradient) {
    return This->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateLinearGradientBrush(ID2D1BitmapRenderTarget* 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 FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateRadialGradientBrush(ID2D1BitmapRenderTarget* 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 FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateCompatibleRenderTarget(ID2D1BitmapRenderTarget* 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 FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateLayer(ID2D1BitmapRenderTarget* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_CreateMesh(ID2D1BitmapRenderTarget* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawLine(ID2D1BitmapRenderTarget* 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 FORCEINLINE void ID2D1BitmapRenderTarget_DrawRectangle(ID2D1BitmapRenderTarget* 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 FORCEINLINE void ID2D1BitmapRenderTarget_FillRectangle(ID2D1BitmapRenderTarget* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawRoundedRectangle(ID2D1BitmapRenderTarget* 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 FORCEINLINE void ID2D1BitmapRenderTarget_FillRoundedRectangle(ID2D1BitmapRenderTarget* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawEllipse(ID2D1BitmapRenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_FillEllipse(ID2D1BitmapRenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawGeometry(ID2D1BitmapRenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_FillGeometry(ID2D1BitmapRenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_FillMesh(ID2D1BitmapRenderTarget* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_FillOpacityMask(ID2D1BitmapRenderTarget* This,ID2D1Bitmap *mask,ID2D1Brush *brush,D2D1_OPACITY_MASK_CONTENT content,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawBitmap(ID2D1BitmapRenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawText(ID2D1BitmapRenderTarget* 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 FORCEINLINE void ID2D1BitmapRenderTarget_DrawTextLayout(ID2D1BitmapRenderTarget* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_DrawGlyphRun(ID2D1BitmapRenderTarget* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SetTransform(ID2D1BitmapRenderTarget* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_GetTransform(ID2D1BitmapRenderTarget* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SetAntialiasMode(ID2D1BitmapRenderTarget* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_ANTIALIAS_MODE ID2D1BitmapRenderTarget_GetAntialiasMode(ID2D1BitmapRenderTarget* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SetTextAntialiasMode(ID2D1BitmapRenderTarget* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_TEXT_ANTIALIAS_MODE ID2D1BitmapRenderTarget_GetTextAntialiasMode(ID2D1BitmapRenderTarget* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SetTextRenderingParams(ID2D1BitmapRenderTarget* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_GetTextRenderingParams(ID2D1BitmapRenderTarget* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SetTags(ID2D1BitmapRenderTarget* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_GetTags(ID2D1BitmapRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_PushLayer(ID2D1BitmapRenderTarget* This,const D2D1_LAYER_PARAMETERS *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_PopLayer(ID2D1BitmapRenderTarget* This) {
    This->lpVtbl->PopLayer(This);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_Flush(ID2D1BitmapRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SaveDrawingState(ID2D1BitmapRenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_RestoreDrawingState(ID2D1BitmapRenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_PushAxisAlignedClip(ID2D1BitmapRenderTarget* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_PopAxisAlignedClip(ID2D1BitmapRenderTarget* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_Clear(ID2D1BitmapRenderTarget* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_BeginDraw(ID2D1BitmapRenderTarget* This) {
    This->lpVtbl->BeginDraw(This);
}
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_EndDraw(ID2D1BitmapRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static FORCEINLINE D2D1_PIXEL_FORMAT ID2D1BitmapRenderTarget_GetPixelFormat(ID2D1BitmapRenderTarget* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_SetDpi(ID2D1BitmapRenderTarget* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE void ID2D1BitmapRenderTarget_GetDpi(ID2D1BitmapRenderTarget* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE D2D1_SIZE_F ID2D1BitmapRenderTarget_GetSize(ID2D1BitmapRenderTarget* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static FORCEINLINE D2D1_SIZE_U ID2D1BitmapRenderTarget_GetPixelSize(ID2D1BitmapRenderTarget* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static FORCEINLINE UINT32 ID2D1BitmapRenderTarget_GetMaximumBitmapSize(ID2D1BitmapRenderTarget* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static FORCEINLINE BOOL ID2D1BitmapRenderTarget_IsSupported(ID2D1BitmapRenderTarget* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1BitmapRenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1BitmapRenderTarget_GetBitmap(ID2D1BitmapRenderTarget* This,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->GetBitmap(This,bitmap);
}
#endif
#endif

#endif


#endif  /* __ID2D1BitmapRenderTarget_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1HwndRenderTarget interface
 */
#ifndef __ID2D1HwndRenderTarget_INTERFACE_DEFINED__
#define __ID2D1HwndRenderTarget_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1HwndRenderTarget, 0x2cd90698, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("2cd90698-12e2-11dc-9fed-001143a055f9")
ID2D1HwndRenderTarget : public ID2D1RenderTarget
{
    virtual D2D1_WINDOW_STATE STDMETHODCALLTYPE CheckWindowState(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resize(
        const D2D1_SIZE_U *size) = 0;

    virtual HWND STDMETHODCALLTYPE GetHwnd(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1HwndRenderTarget, 0x2cd90698, 0x12e2, 0x11dc, 0x9f,0xed, 0x00,0x11,0x43,0xa0,0x55,0xf9)
#endif
#else
typedef struct ID2D1HwndRenderTargetVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1HwndRenderTarget methods ***/
    D2D1_WINDOW_STATE (STDMETHODCALLTYPE *CheckWindowState)(
        ID2D1HwndRenderTarget *This);

    HRESULT (STDMETHODCALLTYPE *Resize)(
        ID2D1HwndRenderTarget *This,
        const D2D1_SIZE_U *size);

    HWND (STDMETHODCALLTYPE *GetHwnd)(
        ID2D1HwndRenderTarget *This);

    END_INTERFACE
} ID2D1HwndRenderTargetVtbl;

interface ID2D1HwndRenderTarget {
    CONST_VTBL ID2D1HwndRenderTargetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1HwndRenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1HwndRenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1HwndRenderTarget_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1HwndRenderTarget_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1HwndRenderTarget_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1HwndRenderTarget_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1HwndRenderTarget_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1HwndRenderTarget_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush)
#define ID2D1HwndRenderTarget_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1HwndRenderTarget_CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient) (This)->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient)
#define ID2D1HwndRenderTarget_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1HwndRenderTarget_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1HwndRenderTarget_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1HwndRenderTarget_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1HwndRenderTarget_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1HwndRenderTarget_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1HwndRenderTarget_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1HwndRenderTarget_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1HwndRenderTarget_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1HwndRenderTarget_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1HwndRenderTarget_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1HwndRenderTarget_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1HwndRenderTarget_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1HwndRenderTarget_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1HwndRenderTarget_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1HwndRenderTarget_FillOpacityMask(This,mask,brush,content,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect)
#define ID2D1HwndRenderTarget_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect)
#define ID2D1HwndRenderTarget_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 ID2D1HwndRenderTarget_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1HwndRenderTarget_DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode)
#define ID2D1HwndRenderTarget_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1HwndRenderTarget_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1HwndRenderTarget_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1HwndRenderTarget_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1HwndRenderTarget_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1HwndRenderTarget_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1HwndRenderTarget_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1HwndRenderTarget_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1HwndRenderTarget_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1HwndRenderTarget_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1HwndRenderTarget_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1HwndRenderTarget_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1HwndRenderTarget_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1HwndRenderTarget_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1HwndRenderTarget_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1HwndRenderTarget_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1HwndRenderTarget_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1HwndRenderTarget_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1HwndRenderTarget_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1HwndRenderTarget_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1HwndRenderTarget_GetPixelFormat(This) ID2D1HwndRenderTarget_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1HwndRenderTarget_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1HwndRenderTarget_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1HwndRenderTarget_GetSize(This) ID2D1HwndRenderTarget_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1HwndRenderTarget_GetPixelSize(This) ID2D1HwndRenderTarget_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1HwndRenderTarget_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1HwndRenderTarget_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1HwndRenderTarget methods ***/
#define ID2D1HwndRenderTarget_CheckWindowState(This) (This)->lpVtbl->CheckWindowState(This)
#define ID2D1HwndRenderTarget_Resize(This,size) (This)->lpVtbl->Resize(This,size)
#define ID2D1HwndRenderTarget_GetHwnd(This) (This)->lpVtbl->GetHwnd(This)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_QueryInterface(ID2D1HwndRenderTarget* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1HwndRenderTarget_AddRef(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1HwndRenderTarget_Release(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1HwndRenderTarget_GetFactory(ID2D1HwndRenderTarget* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateBitmap(ID2D1HwndRenderTarget* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateBitmapFromWicBitmap(ID2D1HwndRenderTarget* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateSharedBitmap(ID2D1HwndRenderTarget* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateBitmapBrush(ID2D1HwndRenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush **brush) {
    return This->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateSolidColorBrush(ID2D1HwndRenderTarget* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateGradientStopCollection(ID2D1HwndRenderTarget* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_GAMMA gamma,D2D1_EXTEND_MODE extend_mode,ID2D1GradientStopCollection **gradient) {
    return This->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateLinearGradientBrush(ID2D1HwndRenderTarget* 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 FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateRadialGradientBrush(ID2D1HwndRenderTarget* 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 FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateCompatibleRenderTarget(ID2D1HwndRenderTarget* 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 FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateLayer(ID2D1HwndRenderTarget* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_CreateMesh(ID2D1HwndRenderTarget* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawLine(ID2D1HwndRenderTarget* 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 FORCEINLINE void ID2D1HwndRenderTarget_DrawRectangle(ID2D1HwndRenderTarget* 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 FORCEINLINE void ID2D1HwndRenderTarget_FillRectangle(ID2D1HwndRenderTarget* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawRoundedRectangle(ID2D1HwndRenderTarget* 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 FORCEINLINE void ID2D1HwndRenderTarget_FillRoundedRectangle(ID2D1HwndRenderTarget* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawEllipse(ID2D1HwndRenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1HwndRenderTarget_FillEllipse(ID2D1HwndRenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawGeometry(ID2D1HwndRenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1HwndRenderTarget_FillGeometry(ID2D1HwndRenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static FORCEINLINE void ID2D1HwndRenderTarget_FillMesh(ID2D1HwndRenderTarget* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static FORCEINLINE void ID2D1HwndRenderTarget_FillOpacityMask(ID2D1HwndRenderTarget* This,ID2D1Bitmap *mask,ID2D1Brush *brush,D2D1_OPACITY_MASK_CONTENT content,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawBitmap(ID2D1HwndRenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawText(ID2D1HwndRenderTarget* 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 FORCEINLINE void ID2D1HwndRenderTarget_DrawTextLayout(ID2D1HwndRenderTarget* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static FORCEINLINE void ID2D1HwndRenderTarget_DrawGlyphRun(ID2D1HwndRenderTarget* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SetTransform(ID2D1HwndRenderTarget* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE void ID2D1HwndRenderTarget_GetTransform(ID2D1HwndRenderTarget* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SetAntialiasMode(ID2D1HwndRenderTarget* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_ANTIALIAS_MODE ID2D1HwndRenderTarget_GetAntialiasMode(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SetTextAntialiasMode(ID2D1HwndRenderTarget* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_TEXT_ANTIALIAS_MODE ID2D1HwndRenderTarget_GetTextAntialiasMode(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SetTextRenderingParams(ID2D1HwndRenderTarget* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1HwndRenderTarget_GetTextRenderingParams(ID2D1HwndRenderTarget* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SetTags(ID2D1HwndRenderTarget* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1HwndRenderTarget_GetTags(ID2D1HwndRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1HwndRenderTarget_PushLayer(ID2D1HwndRenderTarget* This,const D2D1_LAYER_PARAMETERS *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static FORCEINLINE void ID2D1HwndRenderTarget_PopLayer(ID2D1HwndRenderTarget* This) {
    This->lpVtbl->PopLayer(This);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_Flush(ID2D1HwndRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SaveDrawingState(ID2D1HwndRenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1HwndRenderTarget_RestoreDrawingState(ID2D1HwndRenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1HwndRenderTarget_PushAxisAlignedClip(ID2D1HwndRenderTarget* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static FORCEINLINE void ID2D1HwndRenderTarget_PopAxisAlignedClip(ID2D1HwndRenderTarget* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static FORCEINLINE void ID2D1HwndRenderTarget_Clear(ID2D1HwndRenderTarget* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static FORCEINLINE void ID2D1HwndRenderTarget_BeginDraw(ID2D1HwndRenderTarget* This) {
    This->lpVtbl->BeginDraw(This);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_EndDraw(ID2D1HwndRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static FORCEINLINE D2D1_PIXEL_FORMAT ID2D1HwndRenderTarget_GetPixelFormat(ID2D1HwndRenderTarget* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static FORCEINLINE void ID2D1HwndRenderTarget_SetDpi(ID2D1HwndRenderTarget* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE void ID2D1HwndRenderTarget_GetDpi(ID2D1HwndRenderTarget* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE D2D1_SIZE_F ID2D1HwndRenderTarget_GetSize(ID2D1HwndRenderTarget* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static FORCEINLINE D2D1_SIZE_U ID2D1HwndRenderTarget_GetPixelSize(ID2D1HwndRenderTarget* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static FORCEINLINE UINT32 ID2D1HwndRenderTarget_GetMaximumBitmapSize(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static FORCEINLINE BOOL ID2D1HwndRenderTarget_IsSupported(ID2D1HwndRenderTarget* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1HwndRenderTarget methods ***/
static FORCEINLINE D2D1_WINDOW_STATE ID2D1HwndRenderTarget_CheckWindowState(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->CheckWindowState(This);
}
static FORCEINLINE HRESULT ID2D1HwndRenderTarget_Resize(ID2D1HwndRenderTarget* This,const D2D1_SIZE_U *size) {
    return This->lpVtbl->Resize(This,size);
}
static FORCEINLINE HWND ID2D1HwndRenderTarget_GetHwnd(ID2D1HwndRenderTarget* This) {
    return This->lpVtbl->GetHwnd(This);
}
#endif
#endif

#endif


#endif  /* __ID2D1HwndRenderTarget_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1DCRenderTarget interface
 */
#ifndef __ID2D1DCRenderTarget_INTERFACE_DEFINED__
#define __ID2D1DCRenderTarget_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1DCRenderTarget, 0x1c51bc64, 0xde61, 0x46fd, 0x98,0x99, 0x63,0xa5,0xd8,0xf0,0x39,0x50);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("1c51bc64-de61-46fd-9899-63a5d8f03950")
ID2D1DCRenderTarget : public ID2D1RenderTarget
{
    virtual HRESULT STDMETHODCALLTYPE BindDC(
        const HDC dc,
        const RECT *rect) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1DCRenderTarget, 0x1c51bc64, 0xde61, 0x46fd, 0x98,0x99, 0x63,0xa5,0xd8,0xf0,0x39,0x50)
#endif
#else
typedef struct ID2D1DCRenderTargetVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    /*** ID2D1DCRenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *BindDC)(
        ID2D1DCRenderTarget *This,
        const HDC dc,
        const RECT *rect);

    END_INTERFACE
} ID2D1DCRenderTargetVtbl;

interface ID2D1DCRenderTarget {
    CONST_VTBL ID2D1DCRenderTargetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1DCRenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1DCRenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1DCRenderTarget_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Resource methods ***/
#define ID2D1DCRenderTarget_GetFactory(This,factory) (This)->lpVtbl->GetFactory(This,factory)
/*** ID2D1RenderTarget methods ***/
#define ID2D1DCRenderTarget_CreateBitmap(This,size,src_data,pitch,desc,bitmap) (This)->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap)
#define ID2D1DCRenderTarget_CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap) (This)->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap)
#define ID2D1DCRenderTarget_CreateSharedBitmap(This,iid,data,desc,bitmap) (This)->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap)
#define ID2D1DCRenderTarget_CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush) (This)->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush)
#define ID2D1DCRenderTarget_CreateSolidColorBrush(This,color,desc,brush) (This)->lpVtbl->CreateSolidColorBrush(This,color,desc,brush)
#define ID2D1DCRenderTarget_CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient) (This)->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient)
#define ID2D1DCRenderTarget_CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateLinearGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DCRenderTarget_CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush) (This)->lpVtbl->CreateRadialGradientBrush(This,gradient_brush_desc,brush_desc,gradient,brush)
#define ID2D1DCRenderTarget_CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target) (This)->lpVtbl->CreateCompatibleRenderTarget(This,size,pixel_size,format,options,render_target)
#define ID2D1DCRenderTarget_CreateLayer(This,size,layer) (This)->lpVtbl->CreateLayer(This,size,layer)
#define ID2D1DCRenderTarget_CreateMesh(This,mesh) (This)->lpVtbl->CreateMesh(This,mesh)
#define ID2D1DCRenderTarget_DrawLine(This,p0,p1,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawLine(This,p0,p1,brush,stroke_width,stroke_style)
#define ID2D1DCRenderTarget_DrawRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DCRenderTarget_FillRectangle(This,rect,brush) (This)->lpVtbl->FillRectangle(This,rect,brush)
#define ID2D1DCRenderTarget_DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawRoundedRectangle(This,rect,brush,stroke_width,stroke_style)
#define ID2D1DCRenderTarget_FillRoundedRectangle(This,rect,brush) (This)->lpVtbl->FillRoundedRectangle(This,rect,brush)
#define ID2D1DCRenderTarget_DrawEllipse(This,ellipse,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style)
#define ID2D1DCRenderTarget_FillEllipse(This,ellipse,brush) (This)->lpVtbl->FillEllipse(This,ellipse,brush)
#define ID2D1DCRenderTarget_DrawGeometry(This,geometry,brush,stroke_width,stroke_style) (This)->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style)
#define ID2D1DCRenderTarget_FillGeometry(This,geometry,brush,opacity_brush) (This)->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush)
#define ID2D1DCRenderTarget_FillMesh(This,mesh,brush) (This)->lpVtbl->FillMesh(This,mesh,brush)
#define ID2D1DCRenderTarget_FillOpacityMask(This,mask,brush,content,dst_rect,src_rect) (This)->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect)
#define ID2D1DCRenderTarget_DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect) (This)->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect)
#define ID2D1DCRenderTarget_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 ID2D1DCRenderTarget_DrawTextLayout(This,origin,layout,brush,options) (This)->lpVtbl->DrawTextLayout(This,origin,layout,brush,options)
#define ID2D1DCRenderTarget_DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode) (This)->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode)
#define ID2D1DCRenderTarget_SetTransform(This,transform) (This)->lpVtbl->SetTransform(This,transform)
#define ID2D1DCRenderTarget_GetTransform(This,transform) (This)->lpVtbl->GetTransform(This,transform)
#define ID2D1DCRenderTarget_SetAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetAntialiasMode(This,antialias_mode)
#define ID2D1DCRenderTarget_GetAntialiasMode(This) (This)->lpVtbl->GetAntialiasMode(This)
#define ID2D1DCRenderTarget_SetTextAntialiasMode(This,antialias_mode) (This)->lpVtbl->SetTextAntialiasMode(This,antialias_mode)
#define ID2D1DCRenderTarget_GetTextAntialiasMode(This) (This)->lpVtbl->GetTextAntialiasMode(This)
#define ID2D1DCRenderTarget_SetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->SetTextRenderingParams(This,text_rendering_params)
#define ID2D1DCRenderTarget_GetTextRenderingParams(This,text_rendering_params) (This)->lpVtbl->GetTextRenderingParams(This,text_rendering_params)
#define ID2D1DCRenderTarget_SetTags(This,tag1,tag2) (This)->lpVtbl->SetTags(This,tag1,tag2)
#define ID2D1DCRenderTarget_GetTags(This,tag1,tag2) (This)->lpVtbl->GetTags(This,tag1,tag2)
#define ID2D1DCRenderTarget_PushLayer(This,layer_parameters,layer) (This)->lpVtbl->PushLayer(This,layer_parameters,layer)
#define ID2D1DCRenderTarget_PopLayer(This) (This)->lpVtbl->PopLayer(This)
#define ID2D1DCRenderTarget_Flush(This,tag1,tag2) (This)->lpVtbl->Flush(This,tag1,tag2)
#define ID2D1DCRenderTarget_SaveDrawingState(This,state_block) (This)->lpVtbl->SaveDrawingState(This,state_block)
#define ID2D1DCRenderTarget_RestoreDrawingState(This,state_block) (This)->lpVtbl->RestoreDrawingState(This,state_block)
#define ID2D1DCRenderTarget_PushAxisAlignedClip(This,clip_rect,antialias_mode) (This)->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode)
#define ID2D1DCRenderTarget_PopAxisAlignedClip(This) (This)->lpVtbl->PopAxisAlignedClip(This)
#define ID2D1DCRenderTarget_Clear(This,color) (This)->lpVtbl->Clear(This,color)
#define ID2D1DCRenderTarget_BeginDraw(This) (This)->lpVtbl->BeginDraw(This)
#define ID2D1DCRenderTarget_EndDraw(This,tag1,tag2) (This)->lpVtbl->EndDraw(This,tag1,tag2)
#define ID2D1DCRenderTarget_GetPixelFormat(This) ID2D1DCRenderTarget_GetPixelFormat_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DCRenderTarget_SetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->SetDpi(This,dpi_x,dpi_y)
#define ID2D1DCRenderTarget_GetDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDpi(This,dpi_x,dpi_y)
#define ID2D1DCRenderTarget_GetSize(This) ID2D1DCRenderTarget_GetSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DCRenderTarget_GetPixelSize(This) ID2D1DCRenderTarget_GetPixelSize_define_WIDL_C_INLINE_WRAPPERS_for_aggregate_return_support
#define ID2D1DCRenderTarget_GetMaximumBitmapSize(This) (This)->lpVtbl->GetMaximumBitmapSize(This)
#define ID2D1DCRenderTarget_IsSupported(This,desc) (This)->lpVtbl->IsSupported(This,desc)
/*** ID2D1DCRenderTarget methods ***/
#define ID2D1DCRenderTarget_BindDC(This,dc,rect) (This)->lpVtbl->BindDC(This,dc,rect)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1DCRenderTarget_QueryInterface(ID2D1DCRenderTarget* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1DCRenderTarget_AddRef(ID2D1DCRenderTarget* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1DCRenderTarget_Release(ID2D1DCRenderTarget* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Resource methods ***/
static FORCEINLINE void ID2D1DCRenderTarget_GetFactory(ID2D1DCRenderTarget* This,ID2D1Factory **factory) {
    This->lpVtbl->GetFactory(This,factory);
}
/*** ID2D1RenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateBitmap(ID2D1DCRenderTarget* This,D2D1_SIZE_U size,const void *src_data,UINT32 pitch,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmap(This,size,src_data,pitch,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateBitmapFromWicBitmap(ID2D1DCRenderTarget* This,IWICBitmapSource *bitmap_source,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateBitmapFromWicBitmap(This,bitmap_source,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateSharedBitmap(ID2D1DCRenderTarget* This,REFIID iid,void *data,const D2D1_BITMAP_PROPERTIES *desc,ID2D1Bitmap **bitmap) {
    return This->lpVtbl->CreateSharedBitmap(This,iid,data,desc,bitmap);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateBitmapBrush(ID2D1DCRenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc,const D2D1_BRUSH_PROPERTIES *brush_desc,ID2D1BitmapBrush **brush) {
    return This->lpVtbl->CreateBitmapBrush(This,bitmap,bitmap_brush_desc,brush_desc,brush);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateSolidColorBrush(ID2D1DCRenderTarget* This,const D2D1_COLOR_F *color,const D2D1_BRUSH_PROPERTIES *desc,ID2D1SolidColorBrush **brush) {
    return This->lpVtbl->CreateSolidColorBrush(This,color,desc,brush);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateGradientStopCollection(ID2D1DCRenderTarget* This,const D2D1_GRADIENT_STOP *stops,UINT32 stop_count,D2D1_GAMMA gamma,D2D1_EXTEND_MODE extend_mode,ID2D1GradientStopCollection **gradient) {
    return This->lpVtbl->CreateGradientStopCollection(This,stops,stop_count,gamma,extend_mode,gradient);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateLinearGradientBrush(ID2D1DCRenderTarget* 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 FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateRadialGradientBrush(ID2D1DCRenderTarget* 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 FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateCompatibleRenderTarget(ID2D1DCRenderTarget* 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 FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateLayer(ID2D1DCRenderTarget* This,const D2D1_SIZE_F *size,ID2D1Layer **layer) {
    return This->lpVtbl->CreateLayer(This,size,layer);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_CreateMesh(ID2D1DCRenderTarget* This,ID2D1Mesh **mesh) {
    return This->lpVtbl->CreateMesh(This,mesh);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawLine(ID2D1DCRenderTarget* 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 FORCEINLINE void ID2D1DCRenderTarget_DrawRectangle(ID2D1DCRenderTarget* 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 FORCEINLINE void ID2D1DCRenderTarget_FillRectangle(ID2D1DCRenderTarget* This,const D2D1_RECT_F *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawRoundedRectangle(ID2D1DCRenderTarget* 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 FORCEINLINE void ID2D1DCRenderTarget_FillRoundedRectangle(ID2D1DCRenderTarget* This,const D2D1_ROUNDED_RECT *rect,ID2D1Brush *brush) {
    This->lpVtbl->FillRoundedRectangle(This,rect,brush);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawEllipse(ID2D1DCRenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawEllipse(This,ellipse,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1DCRenderTarget_FillEllipse(ID2D1DCRenderTarget* This,const D2D1_ELLIPSE *ellipse,ID2D1Brush *brush) {
    This->lpVtbl->FillEllipse(This,ellipse,brush);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawGeometry(ID2D1DCRenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,float stroke_width,ID2D1StrokeStyle *stroke_style) {
    This->lpVtbl->DrawGeometry(This,geometry,brush,stroke_width,stroke_style);
}
static FORCEINLINE void ID2D1DCRenderTarget_FillGeometry(ID2D1DCRenderTarget* This,ID2D1Geometry *geometry,ID2D1Brush *brush,ID2D1Brush *opacity_brush) {
    This->lpVtbl->FillGeometry(This,geometry,brush,opacity_brush);
}
static FORCEINLINE void ID2D1DCRenderTarget_FillMesh(ID2D1DCRenderTarget* This,ID2D1Mesh *mesh,ID2D1Brush *brush) {
    This->lpVtbl->FillMesh(This,mesh,brush);
}
static FORCEINLINE void ID2D1DCRenderTarget_FillOpacityMask(ID2D1DCRenderTarget* This,ID2D1Bitmap *mask,ID2D1Brush *brush,D2D1_OPACITY_MASK_CONTENT content,const D2D1_RECT_F *dst_rect,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->FillOpacityMask(This,mask,brush,content,dst_rect,src_rect);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawBitmap(ID2D1DCRenderTarget* This,ID2D1Bitmap *bitmap,const D2D1_RECT_F *dst_rect,float opacity,D2D1_BITMAP_INTERPOLATION_MODE interpolation_mode,const D2D1_RECT_F *src_rect) {
    This->lpVtbl->DrawBitmap(This,bitmap,dst_rect,opacity,interpolation_mode,src_rect);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawText(ID2D1DCRenderTarget* 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 FORCEINLINE void ID2D1DCRenderTarget_DrawTextLayout(ID2D1DCRenderTarget* This,D2D1_POINT_2F origin,IDWriteTextLayout *layout,ID2D1Brush *brush,D2D1_DRAW_TEXT_OPTIONS options) {
    This->lpVtbl->DrawTextLayout(This,origin,layout,brush,options);
}
static FORCEINLINE void ID2D1DCRenderTarget_DrawGlyphRun(ID2D1DCRenderTarget* This,D2D1_POINT_2F baseline_origin,const DWRITE_GLYPH_RUN *glyph_run,ID2D1Brush *brush,DWRITE_MEASURING_MODE measuring_mode) {
    This->lpVtbl->DrawGlyphRun(This,baseline_origin,glyph_run,brush,measuring_mode);
}
static FORCEINLINE void ID2D1DCRenderTarget_SetTransform(ID2D1DCRenderTarget* This,const D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->SetTransform(This,transform);
}
static FORCEINLINE void ID2D1DCRenderTarget_GetTransform(ID2D1DCRenderTarget* This,D2D1_MATRIX_3X2_F *transform) {
    This->lpVtbl->GetTransform(This,transform);
}
static FORCEINLINE void ID2D1DCRenderTarget_SetAntialiasMode(ID2D1DCRenderTarget* This,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_ANTIALIAS_MODE ID2D1DCRenderTarget_GetAntialiasMode(ID2D1DCRenderTarget* This) {
    return This->lpVtbl->GetAntialiasMode(This);
}
static FORCEINLINE void ID2D1DCRenderTarget_SetTextAntialiasMode(ID2D1DCRenderTarget* This,D2D1_TEXT_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->SetTextAntialiasMode(This,antialias_mode);
}
static FORCEINLINE D2D1_TEXT_ANTIALIAS_MODE ID2D1DCRenderTarget_GetTextAntialiasMode(ID2D1DCRenderTarget* This) {
    return This->lpVtbl->GetTextAntialiasMode(This);
}
static FORCEINLINE void ID2D1DCRenderTarget_SetTextRenderingParams(ID2D1DCRenderTarget* This,IDWriteRenderingParams *text_rendering_params) {
    This->lpVtbl->SetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1DCRenderTarget_GetTextRenderingParams(ID2D1DCRenderTarget* This,IDWriteRenderingParams **text_rendering_params) {
    This->lpVtbl->GetTextRenderingParams(This,text_rendering_params);
}
static FORCEINLINE void ID2D1DCRenderTarget_SetTags(ID2D1DCRenderTarget* This,D2D1_TAG tag1,D2D1_TAG tag2) {
    This->lpVtbl->SetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1DCRenderTarget_GetTags(ID2D1DCRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    This->lpVtbl->GetTags(This,tag1,tag2);
}
static FORCEINLINE void ID2D1DCRenderTarget_PushLayer(ID2D1DCRenderTarget* This,const D2D1_LAYER_PARAMETERS *layer_parameters,ID2D1Layer *layer) {
    This->lpVtbl->PushLayer(This,layer_parameters,layer);
}
static FORCEINLINE void ID2D1DCRenderTarget_PopLayer(ID2D1DCRenderTarget* This) {
    This->lpVtbl->PopLayer(This);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_Flush(ID2D1DCRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->Flush(This,tag1,tag2);
}
static FORCEINLINE void ID2D1DCRenderTarget_SaveDrawingState(ID2D1DCRenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->SaveDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1DCRenderTarget_RestoreDrawingState(ID2D1DCRenderTarget* This,ID2D1DrawingStateBlock *state_block) {
    This->lpVtbl->RestoreDrawingState(This,state_block);
}
static FORCEINLINE void ID2D1DCRenderTarget_PushAxisAlignedClip(ID2D1DCRenderTarget* This,const D2D1_RECT_F *clip_rect,D2D1_ANTIALIAS_MODE antialias_mode) {
    This->lpVtbl->PushAxisAlignedClip(This,clip_rect,antialias_mode);
}
static FORCEINLINE void ID2D1DCRenderTarget_PopAxisAlignedClip(ID2D1DCRenderTarget* This) {
    This->lpVtbl->PopAxisAlignedClip(This);
}
static FORCEINLINE void ID2D1DCRenderTarget_Clear(ID2D1DCRenderTarget* This,const D2D1_COLOR_F *color) {
    This->lpVtbl->Clear(This,color);
}
static FORCEINLINE void ID2D1DCRenderTarget_BeginDraw(ID2D1DCRenderTarget* This) {
    This->lpVtbl->BeginDraw(This);
}
static FORCEINLINE HRESULT ID2D1DCRenderTarget_EndDraw(ID2D1DCRenderTarget* This,D2D1_TAG *tag1,D2D1_TAG *tag2) {
    return This->lpVtbl->EndDraw(This,tag1,tag2);
}
static FORCEINLINE D2D1_PIXEL_FORMAT ID2D1DCRenderTarget_GetPixelFormat(ID2D1DCRenderTarget* This) {
    D2D1_PIXEL_FORMAT __ret;
    return *This->lpVtbl->GetPixelFormat(This,&__ret);
}
static FORCEINLINE void ID2D1DCRenderTarget_SetDpi(ID2D1DCRenderTarget* This,float dpi_x,float dpi_y) {
    This->lpVtbl->SetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE void ID2D1DCRenderTarget_GetDpi(ID2D1DCRenderTarget* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE D2D1_SIZE_F ID2D1DCRenderTarget_GetSize(ID2D1DCRenderTarget* This) {
    D2D1_SIZE_F __ret;
    return *This->lpVtbl->GetSize(This,&__ret);
}
static FORCEINLINE D2D1_SIZE_U ID2D1DCRenderTarget_GetPixelSize(ID2D1DCRenderTarget* This) {
    D2D1_SIZE_U __ret;
    return *This->lpVtbl->GetPixelSize(This,&__ret);
}
static FORCEINLINE UINT32 ID2D1DCRenderTarget_GetMaximumBitmapSize(ID2D1DCRenderTarget* This) {
    return This->lpVtbl->GetMaximumBitmapSize(This);
}
static FORCEINLINE BOOL ID2D1DCRenderTarget_IsSupported(ID2D1DCRenderTarget* This,const D2D1_RENDER_TARGET_PROPERTIES *desc) {
    return This->lpVtbl->IsSupported(This,desc);
}
/*** ID2D1DCRenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1DCRenderTarget_BindDC(ID2D1DCRenderTarget* This,const HDC dc,const RECT *rect) {
    return This->lpVtbl->BindDC(This,dc,rect);
}
#endif
#endif

#endif


#endif  /* __ID2D1DCRenderTarget_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1GdiInteropRenderTarget interface
 */
#ifndef __ID2D1GdiInteropRenderTarget_INTERFACE_DEFINED__
#define __ID2D1GdiInteropRenderTarget_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1GdiInteropRenderTarget, 0xe0db51c3, 0x6f77, 0x4bae, 0xb3,0xd5, 0xe4,0x75,0x09,0xb3,0x58,0x38);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("e0db51c3-6f77-4bae-b3d5-e47509b35838")
ID2D1GdiInteropRenderTarget : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE GetDC(
        D2D1_DC_INITIALIZE_MODE mode,
        HDC *dc) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReleaseDC(
        const RECT *update) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1GdiInteropRenderTarget, 0xe0db51c3, 0x6f77, 0x4bae, 0xb3,0xd5, 0xe4,0x75,0x09,0xb3,0x58,0x38)
#endif
#else
typedef struct ID2D1GdiInteropRenderTargetVtbl {
    BEGIN_INTERFACE

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

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

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

    /*** ID2D1GdiInteropRenderTarget methods ***/
    HRESULT (STDMETHODCALLTYPE *GetDC)(
        ID2D1GdiInteropRenderTarget *This,
        D2D1_DC_INITIALIZE_MODE mode,
        HDC *dc);

    HRESULT (STDMETHODCALLTYPE *ReleaseDC)(
        ID2D1GdiInteropRenderTarget *This,
        const RECT *update);

    END_INTERFACE
} ID2D1GdiInteropRenderTargetVtbl;

interface ID2D1GdiInteropRenderTarget {
    CONST_VTBL ID2D1GdiInteropRenderTargetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1GdiInteropRenderTarget_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1GdiInteropRenderTarget_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1GdiInteropRenderTarget_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1GdiInteropRenderTarget methods ***/
#define ID2D1GdiInteropRenderTarget_GetDC(This,mode,dc) (This)->lpVtbl->GetDC(This,mode,dc)
#define ID2D1GdiInteropRenderTarget_ReleaseDC(This,update) (This)->lpVtbl->ReleaseDC(This,update)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1GdiInteropRenderTarget_QueryInterface(ID2D1GdiInteropRenderTarget* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1GdiInteropRenderTarget_AddRef(ID2D1GdiInteropRenderTarget* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1GdiInteropRenderTarget_Release(ID2D1GdiInteropRenderTarget* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1GdiInteropRenderTarget methods ***/
static FORCEINLINE HRESULT ID2D1GdiInteropRenderTarget_GetDC(ID2D1GdiInteropRenderTarget* This,D2D1_DC_INITIALIZE_MODE mode,HDC *dc) {
    return This->lpVtbl->GetDC(This,mode,dc);
}
static FORCEINLINE HRESULT ID2D1GdiInteropRenderTarget_ReleaseDC(ID2D1GdiInteropRenderTarget* This,const RECT *update) {
    return This->lpVtbl->ReleaseDC(This,update);
}
#endif
#endif

#endif


#endif  /* __ID2D1GdiInteropRenderTarget_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ID2D1Factory interface
 */
#ifndef __ID2D1Factory_INTERFACE_DEFINED__
#define __ID2D1Factory_INTERFACE_DEFINED__

DEFINE_GUID(IID_ID2D1Factory, 0x06152247, 0x6f50, 0x465a, 0x92,0x45, 0x11,0x8b,0xfd,0x3b,0x60,0x07);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("06152247-6f50-465a-9245-118bfd3b6007")
ID2D1Factory : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE ReloadSystemMetrics(
        ) = 0;

    virtual void STDMETHODCALLTYPE GetDesktopDpi(
        float *dpi_x,
        float *dpi_y) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRectangleGeometry(
        const D2D1_RECT_F *rect,
        ID2D1RectangleGeometry **geometry) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateRoundedRectangleGeometry(
        const D2D1_ROUNDED_RECT *rect,
        ID2D1RoundedRectangleGeometry **geometry) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateEllipseGeometry(
        const D2D1_ELLIPSE *ellipse,
        ID2D1EllipseGeometry **geometry) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateGeometryGroup(
        D2D1_FILL_MODE fill_mode,
        ID2D1Geometry **geometries,
        UINT32 geometry_count,
        ID2D1GeometryGroup **group) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateTransformedGeometry(
        ID2D1Geometry *src_geometry,
        const D2D1_MATRIX_3X2_F *transform,
        ID2D1TransformedGeometry **transformed_geometry) = 0;

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

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

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

    virtual HRESULT STDMETHODCALLTYPE CreateWicBitmapRenderTarget(
        IWICBitmap *target,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateHwndRenderTarget(
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwnd_rt_desc,
        ID2D1HwndRenderTarget **render_target) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDxgiSurfaceRenderTarget(
        IDXGISurface *surface,
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1RenderTarget **render_target) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateDCRenderTarget(
        const D2D1_RENDER_TARGET_PROPERTIES *desc,
        ID2D1DCRenderTarget **render_target) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ID2D1Factory, 0x06152247, 0x6f50, 0x465a, 0x92,0x45, 0x11,0x8b,0xfd,0x3b,0x60,0x07)
#endif
#else
typedef struct ID2D1FactoryVtbl {
    BEGIN_INTERFACE

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    END_INTERFACE
} ID2D1FactoryVtbl;

interface ID2D1Factory {
    CONST_VTBL ID2D1FactoryVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ID2D1Factory_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ID2D1Factory_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ID2D1Factory_Release(This) (This)->lpVtbl->Release(This)
/*** ID2D1Factory methods ***/
#define ID2D1Factory_ReloadSystemMetrics(This) (This)->lpVtbl->ReloadSystemMetrics(This)
#define ID2D1Factory_GetDesktopDpi(This,dpi_x,dpi_y) (This)->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y)
#define ID2D1Factory_CreateRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRectangleGeometry(This,rect,geometry)
#define ID2D1Factory_CreateRoundedRectangleGeometry(This,rect,geometry) (This)->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry)
#define ID2D1Factory_CreateEllipseGeometry(This,ellipse,geometry) (This)->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry)
#define ID2D1Factory_CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group) (This)->lpVtbl->CreateGeometryGroup(This,fill_mode,geometries,geometry_count,group)
#define ID2D1Factory_CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry) (This)->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry)
#define ID2D1Factory_CreatePathGeometry(This,geometry) (This)->lpVtbl->CreatePathGeometry(This,geometry)
#define ID2D1Factory_CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style) (This)->lpVtbl->CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style)
#define ID2D1Factory_CreateDrawingStateBlock(This,desc,text_rendering_params,state_block) (This)->lpVtbl->CreateDrawingStateBlock(This,desc,text_rendering_params,state_block)
#define ID2D1Factory_CreateWicBitmapRenderTarget(This,target,desc,render_target) (This)->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target)
#define ID2D1Factory_CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target) (This)->lpVtbl->CreateHwndRenderTarget(This,desc,hwnd_rt_desc,render_target)
#define ID2D1Factory_CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target) (This)->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target)
#define ID2D1Factory_CreateDCRenderTarget(This,desc,render_target) (This)->lpVtbl->CreateDCRenderTarget(This,desc,render_target)
#else
/*** IUnknown methods ***/
static FORCEINLINE HRESULT ID2D1Factory_QueryInterface(ID2D1Factory* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static FORCEINLINE ULONG ID2D1Factory_AddRef(ID2D1Factory* This) {
    return This->lpVtbl->AddRef(This);
}
static FORCEINLINE ULONG ID2D1Factory_Release(ID2D1Factory* This) {
    return This->lpVtbl->Release(This);
}
/*** ID2D1Factory methods ***/
static FORCEINLINE HRESULT ID2D1Factory_ReloadSystemMetrics(ID2D1Factory* This) {
    return This->lpVtbl->ReloadSystemMetrics(This);
}
static FORCEINLINE void ID2D1Factory_GetDesktopDpi(ID2D1Factory* This,float *dpi_x,float *dpi_y) {
    This->lpVtbl->GetDesktopDpi(This,dpi_x,dpi_y);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateRectangleGeometry(ID2D1Factory* This,const D2D1_RECT_F *rect,ID2D1RectangleGeometry **geometry) {
    return This->lpVtbl->CreateRectangleGeometry(This,rect,geometry);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateRoundedRectangleGeometry(ID2D1Factory* This,const D2D1_ROUNDED_RECT *rect,ID2D1RoundedRectangleGeometry **geometry) {
    return This->lpVtbl->CreateRoundedRectangleGeometry(This,rect,geometry);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateEllipseGeometry(ID2D1Factory* This,const D2D1_ELLIPSE *ellipse,ID2D1EllipseGeometry **geometry) {
    return This->lpVtbl->CreateEllipseGeometry(This,ellipse,geometry);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateGeometryGroup(ID2D1Factory* 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 FORCEINLINE HRESULT ID2D1Factory_CreateTransformedGeometry(ID2D1Factory* This,ID2D1Geometry *src_geometry,const D2D1_MATRIX_3X2_F *transform,ID2D1TransformedGeometry **transformed_geometry) {
    return This->lpVtbl->CreateTransformedGeometry(This,src_geometry,transform,transformed_geometry);
}
static FORCEINLINE HRESULT ID2D1Factory_CreatePathGeometry(ID2D1Factory* This,ID2D1PathGeometry **geometry) {
    return This->lpVtbl->CreatePathGeometry(This,geometry);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateStrokeStyle(ID2D1Factory* This,const D2D1_STROKE_STYLE_PROPERTIES *desc,const float *dashes,UINT32 dash_count,ID2D1StrokeStyle **stroke_style) {
    return This->lpVtbl->CreateStrokeStyle(This,desc,dashes,dash_count,stroke_style);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateDrawingStateBlock(ID2D1Factory* This,const D2D1_DRAWING_STATE_DESCRIPTION *desc,IDWriteRenderingParams *text_rendering_params,ID2D1DrawingStateBlock **state_block) {
    return This->lpVtbl->CreateDrawingStateBlock(This,desc,text_rendering_params,state_block);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateWicBitmapRenderTarget(ID2D1Factory* This,IWICBitmap *target,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateWicBitmapRenderTarget(This,target,desc,render_target);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateHwndRenderTarget(ID2D1Factory* 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 FORCEINLINE HRESULT ID2D1Factory_CreateDxgiSurfaceRenderTarget(ID2D1Factory* This,IDXGISurface *surface,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1RenderTarget **render_target) {
    return This->lpVtbl->CreateDxgiSurfaceRenderTarget(This,surface,desc,render_target);
}
static FORCEINLINE HRESULT ID2D1Factory_CreateDCRenderTarget(ID2D1Factory* This,const D2D1_RENDER_TARGET_PROPERTIES *desc,ID2D1DCRenderTarget **render_target) {
    return This->lpVtbl->CreateDCRenderTarget(This,desc,render_target);
}
#endif
#endif

#endif


#endif  /* __ID2D1Factory_INTERFACE_DEFINED__ */

HRESULT __stdcall  D2D1CreateFactory(D2D1_FACTORY_TYPE factory_type,REFIID iid,const D2D1_FACTORY_OPTIONS *factory_options,void **factory);

BOOL __stdcall  D2D1InvertMatrix(D2D1_MATRIX_3X2_F *matrix);

BOOL __stdcall  D2D1IsMatrixInvertible(const D2D1_MATRIX_3X2_F *matrix);

void __stdcall  D2D1MakeRotateMatrix(float angle,D2D1_POINT_2F center,D2D1_MATRIX_3X2_F *matrix);

void __stdcall  D2D1MakeSkewMatrix(float angle_x,float angle_y,D2D1_POINT_2F center,D2D1_MATRIX_3X2_F *matrix);

/* Begin additional prototypes for all interfaces */


/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __d2d1_h__ */
