1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5
6 * d2d1.h - Header file for the Direct2D API
7 * No original Microsoft headers were used in the creation of this
8 * file.
9 *API docs available at: http://msdn.microsoft.com/en-us/library/dd372349%28v=VS.85%29.aspx
10 */
11
12#ifndef _D2D1_H
13#define _D2D1_H
14
15#include <unknwn.h>
16#include <dcommon.h>
17
18#ifdef __MINGW_HAS_DXSDK
19#include <dxgiformat.h>
20#include <d3d10_1.h>
21#endif
22
23#include <d2dbasetypes.h>
24#include <d2derr.h>
25
26#ifndef _COM_interface
27#define _COM_interface struct
28#endif
29
30typedef UINT64 D2D1_TAG;
31
32#if !defined(D2D_USE_C_DEFINITIONS) && !defined(__cplusplus)
33#define D2D_USE_C_DEFINITIONS
34#endif
35
36#ifndef __IWICBitmapSource_FWD_DEFINED__
37#define __IWICBitmapSource_FWD_DEFINED__
38typedef interface IWICBitmapSource IWICBitmapSource;
39#endif
40
41#ifndef __IWICBitmap_FWD_DEFINED__
42#define __IWICBitmap_FWD_DEFINED__
43typedef interface IWICBitmap IWICBitmap;
44#endif
45
46typedef struct DWRITE_GLYPH_RUN DWRITE_GLYPH_RUN;
47
48#define D2D1_INVALID_TAG ULONGLONG_MAX
49#define D2D1_DEFAULT_FLATTENING_TOLERANCE (0.25f)
50
51/* enumerations */
52
53#ifndef __MINGW_HAS_DXSDK
54typedef enum D3D10_FEATURE_LEVEL1 {
55  D3D10_FEATURE_LEVEL_10_0   = 0xa000,
56  D3D10_FEATURE_LEVEL_10_1   = 0xa100,
57  D3D10_FEATURE_LEVEL_9_1    = 0x9100,
58  D3D10_FEATURE_LEVEL_9_2    = 0x9200,
59  D3D10_FEATURE_LEVEL_9_3    = 0x9300
60} D3D10_FEATURE_LEVEL1;
61
62typedef enum DXGI_FORMAT {
63  DXGI_FORMAT_UNKNOWN                      = 0,
64  DXGI_FORMAT_R32G32B32A32_TYPELESS        = 1,
65  DXGI_FORMAT_R32G32B32A32_FLOAT           = 2,
66  DXGI_FORMAT_R32G32B32A32_UINT            = 3,
67  DXGI_FORMAT_R32G32B32A32_SINT            = 4,
68  DXGI_FORMAT_R32G32B32_TYPELESS           = 5,
69  DXGI_FORMAT_R32G32B32_FLOAT              = 6,
70  DXGI_FORMAT_R32G32B32_UINT               = 7,
71  DXGI_FORMAT_R32G32B32_SINT               = 8,
72  DXGI_FORMAT_R16G16B16A16_TYPELESS        = 9,
73  DXGI_FORMAT_R16G16B16A16_FLOAT           = 10,
74  DXGI_FORMAT_R16G16B16A16_UNORM           = 11,
75  DXGI_FORMAT_R16G16B16A16_UINT            = 12,
76  DXGI_FORMAT_R16G16B16A16_SNORM           = 13,
77  DXGI_FORMAT_R16G16B16A16_SINT            = 14,
78  DXGI_FORMAT_R32G32_TYPELESS              = 15,
79  DXGI_FORMAT_R32G32_FLOAT                 = 16,
80  DXGI_FORMAT_R32G32_UINT                  = 17,
81  DXGI_FORMAT_R32G32_SINT                  = 18,
82  DXGI_FORMAT_R32G8X24_TYPELESS            = 19,
83  DXGI_FORMAT_D32_FLOAT_S8X24_UINT         = 20,
84  DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS     = 21,
85  DXGI_FORMAT_X32_TYPELESS_G8X24_UINT      = 22,
86  DXGI_FORMAT_R10G10B10A2_TYPELESS         = 23,
87  DXGI_FORMAT_R10G10B10A2_UNORM            = 24,
88  DXGI_FORMAT_R10G10B10A2_UINT             = 25,
89  DXGI_FORMAT_R11G11B10_FLOAT              = 26,
90  DXGI_FORMAT_R8G8B8A8_TYPELESS            = 27,
91  DXGI_FORMAT_R8G8B8A8_UNORM               = 28,
92  DXGI_FORMAT_R8G8B8A8_UNORM_SRGB          = 29,
93  DXGI_FORMAT_R8G8B8A8_UINT                = 30,
94  DXGI_FORMAT_R8G8B8A8_SNORM               = 31,
95  DXGI_FORMAT_R8G8B8A8_SINT                = 32,
96  DXGI_FORMAT_R16G16_TYPELESS              = 33,
97  DXGI_FORMAT_R16G16_FLOAT                 = 34,
98  DXGI_FORMAT_R16G16_UNORM                 = 35,
99  DXGI_FORMAT_R16G16_UINT                  = 36,
100  DXGI_FORMAT_R16G16_SNORM                 = 37,
101  DXGI_FORMAT_R16G16_SINT                  = 38,
102  DXGI_FORMAT_R32_TYPELESS                 = 39,
103  DXGI_FORMAT_D32_FLOAT                    = 40,
104  DXGI_FORMAT_R32_FLOAT                    = 41,
105  DXGI_FORMAT_R32_UINT                     = 42,
106  DXGI_FORMAT_R32_SINT                     = 43,
107  DXGI_FORMAT_R24G8_TYPELESS               = 44,
108  DXGI_FORMAT_D24_UNORM_S8_UINT            = 45,
109  DXGI_FORMAT_R24_UNORM_X8_TYPELESS        = 46,
110  DXGI_FORMAT_X24_TYPELESS_G8_UINT         = 47,
111  DXGI_FORMAT_R8G8_TYPELESS                = 48,
112  DXGI_FORMAT_R8G8_UNORM                   = 49,
113  DXGI_FORMAT_R8G8_UINT                    = 50,
114  DXGI_FORMAT_R8G8_SNORM                   = 51,
115  DXGI_FORMAT_R8G8_SINT                    = 52,
116  DXGI_FORMAT_R16_TYPELESS                 = 53,
117  DXGI_FORMAT_R16_FLOAT                    = 54,
118  DXGI_FORMAT_D16_UNORM                    = 55,
119  DXGI_FORMAT_R16_UNORM                    = 56,
120  DXGI_FORMAT_R16_UINT                     = 57,
121  DXGI_FORMAT_R16_SNORM                    = 58,
122  DXGI_FORMAT_R16_SINT                     = 59,
123  DXGI_FORMAT_R8_TYPELESS                  = 60,
124  DXGI_FORMAT_R8_UNORM                     = 61,
125  DXGI_FORMAT_R8_UINT                      = 62,
126  DXGI_FORMAT_R8_SNORM                     = 63,
127  DXGI_FORMAT_R8_SINT                      = 64,
128  DXGI_FORMAT_A8_UNORM                     = 65,
129  DXGI_FORMAT_R1_UNORM                     = 66,
130  DXGI_FORMAT_R9G9B9E5_SHAREDEXP           = 67,
131  DXGI_FORMAT_R8G8_B8G8_UNORM              = 68,
132  DXGI_FORMAT_G8R8_G8B8_UNORM              = 69,
133  DXGI_FORMAT_BC1_TYPELESS                 = 70,
134  DXGI_FORMAT_BC1_UNORM                    = 71,
135  DXGI_FORMAT_BC1_UNORM_SRGB               = 72,
136  DXGI_FORMAT_BC2_TYPELESS                 = 73,
137  DXGI_FORMAT_BC2_UNORM                    = 74,
138  DXGI_FORMAT_BC2_UNORM_SRGB               = 75,
139  DXGI_FORMAT_BC3_TYPELESS                 = 76,
140  DXGI_FORMAT_BC3_UNORM                    = 77,
141  DXGI_FORMAT_BC3_UNORM_SRGB               = 78,
142  DXGI_FORMAT_BC4_TYPELESS                 = 79,
143  DXGI_FORMAT_BC4_UNORM                    = 80,
144  DXGI_FORMAT_BC4_SNORM                    = 81,
145  DXGI_FORMAT_BC5_TYPELESS                 = 82,
146  DXGI_FORMAT_BC5_UNORM                    = 83,
147  DXGI_FORMAT_BC5_SNORM                    = 84,
148  DXGI_FORMAT_B5G6R5_UNORM                 = 85,
149  DXGI_FORMAT_B5G5R5A1_UNORM               = 86,
150  DXGI_FORMAT_B8G8R8A8_UNORM               = 87,
151  DXGI_FORMAT_B8G8R8X8_UNORM               = 88,
152  DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM   = 89,
153  DXGI_FORMAT_B8G8R8A8_TYPELESS            = 90,
154  DXGI_FORMAT_B8G8R8A8_UNORM_SRGB          = 91,
155  DXGI_FORMAT_B8G8R8X8_TYPELESS            = 92,
156  DXGI_FORMAT_B8G8R8X8_UNORM_SRGB          = 93,
157  DXGI_FORMAT_BC6H_TYPELESS                = 94,
158  DXGI_FORMAT_BC6H_UF16                    = 95,
159  DXGI_FORMAT_BC6H_SF16                    = 96,
160  DXGI_FORMAT_BC7_TYPELESS                 = 97,
161  DXGI_FORMAT_BC7_UNORM                    = 98,
162  DXGI_FORMAT_BC7_UNORM_SRGB               = 99,
163  DXGI_FORMAT_FORCE_UINT                   = 0xffffffff
164} DXGI_FORMAT, *LPDXGI_FORMAT;
165
166#endif /*__MINGW_HAS_DXSDK*/
167
168#ifndef __IDWriteRenderingParams_FWD_DEFINED__
169#define __IDWriteRenderingParams_FWD_DEFINED__
170typedef struct IDWriteRenderingParams IDWriteRenderingParams;
171#endif
172
173#ifndef __IDXGISurface_FWD_DEFINED__
174#define __IDXGISurface_FWD_DEFINED__
175typedef struct IDXGISurface IDXGISurface;
176#endif
177
178#ifndef __IDWriteTextFormat_FWD_DEFINED__
179#define __IDWriteTextFormat_FWD_DEFINED__
180typedef struct IDWriteTextFormat IDWriteTextFormat;
181#endif
182
183#ifndef __IDWriteTextLayout_FWD_DEFINED__
184#define __IDWriteTextLayout_FWD_DEFINED__
185typedef struct IDWriteTextLayout IDWriteTextLayout;
186#endif
187
188#ifndef __IDWriteFontFace_FWD_DEFINED__
189#define __IDWriteFontFace_FWD_DEFINED__
190typedef struct IDWriteFontFace IDWriteFontFace;
191#endif
192
193typedef enum _D2D1_ALPHA_MODE {
194  D2D1_ALPHA_MODE_UNKNOWN         = 0,
195  D2D1_ALPHA_MODE_PREMULTIPLIED   = 1,
196  D2D1_ALPHA_MODE_STRAIGHT        = 2,
197  D2D1_ALPHA_MODE_IGNORE          = 3
198} D2D1_ALPHA_MODE;
199
200typedef enum _D2D1_ANTIALIAS_MODE {
201  D2D1_ANTIALIAS_MODE_PER_PRIMITIVE   = 0,
202  D2D1_ANTIALIAS_MODE_ALIASED         = 1
203} D2D1_ANTIALIAS_MODE;
204
205typedef enum _D2D1_ARC_SIZE {
206  D2D1_ARC_SIZE_SMALL   = 0,
207  D2D1_ARC_SIZE_LARGE   = 1
208} D2D1_ARC_SIZE;
209
210typedef enum _D2D1_BITMAP_INTERPOLATION_MODE {
211  D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR   = 0,
212  D2D1_BITMAP_INTERPOLATION_MODE_LINEAR             = 1
213} D2D1_BITMAP_INTERPOLATION_MODE;
214
215typedef enum _D2D1_CAP_STYLE {
216  D2D1_CAP_STYLE_FLAT       = 0,
217  D2D1_CAP_STYLE_SQUARE     = 1,
218  D2D1_CAP_STYLE_ROUND      = 2,
219  D2D1_CAP_STYLE_TRIANGLE   = 3
220} D2D1_CAP_STYLE;
221
222typedef enum _D2D1_COMBINE_MODE {
223  D2D1_COMBINE_MODE_UNION       = 0,
224  D2D1_COMBINE_MODE_INTERSECT   = 1,
225  D2D1_COMBINE_MODE_XOR         = 2,
226  D2D1_COMBINE_MODE_EXCLUDE     = 3
227} D2D1_COMBINE_MODE;
228
229typedef enum _D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS {
230  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE             = 0x00000000,
231  D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE   = 0x00000001
232} D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS;
233
234typedef enum _D2D1_DASH_STYLE {
235  D2D1_DASH_STYLE_SOLID          = 0,
236  D2D1_DASH_STYLE_DASH           = 1,
237  D2D1_DASH_STYLE_DOT            = 2,
238  D2D1_DASH_STYLE_DASH_DOT       = 3,
239  D2D1_DASH_STYLE_DASH_DOT_DOT   = 4,
240  D2D1_DASH_STYLE_CUSTOM         = 5
241} D2D1_DASH_STYLE;
242
243typedef enum _D2D1_DC_INITIALIZE_MODE {
244  D2D1_DC_INITIALIZE_MODE_COPY    = 0,
245  D2D1_DC_INITIALIZE_MODE_CLEAR   = 1
246} D2D1_DC_INITIALIZE_MODE;
247
248typedef enum _D2D1_DEBUG_LEVEL {
249  D2D1_DEBUG_LEVEL_NONE          = 0,
250  D2D1_DEBUG_LEVEL_ERROR         = 1,
251  D2D1_DEBUG_LEVEL_WARNING       = 2,
252  D2D1_DEBUG_LEVEL_INFORMATION   = 3
253} D2D1_DEBUG_LEVEL;
254
255typedef enum _D2D1_DRAW_TEXT_OPTIONS {
256  D2D1_DRAW_TEXT_OPTIONS_NO_SNAP   = 0x00000001,
257  D2D1_DRAW_TEXT_OPTIONS_CLIP      = 0x00000002,
258  D2D1_DRAW_TEXT_OPTIONS_NONE      = 0x00000000
259} D2D1_DRAW_TEXT_OPTIONS;
260
261typedef enum _D2D1_EXTEND_MODE {
262  D2D1_EXTEND_MODE_CLAMP    = 0,
263  D2D1_EXTEND_MODE_WRAP     = 1,
264  D2D1_EXTEND_MODE_MIRROR   = 2
265} D2D1_EXTEND_MODE;
266
267typedef enum _D2D1_FACTORY_TYPE {
268  D2D1_FACTORY_TYPE_SINGLE_THREADED   = 0,
269  D2D1_FACTORY_TYPE_MULTI_THREADED    = 1
270} D2D1_FACTORY_TYPE;
271
272typedef enum _D2D1_FEATURE_LEVEL {
273  D2D1_FEATURE_LEVEL_DEFAULT   = 0,
274  D2D1_FEATURE_LEVEL_9         = D3D10_FEATURE_LEVEL_9_1,
275  D2D1_FEATURE_LEVEL_10        = D3D10_FEATURE_LEVEL_10_0
276} D2D1_FEATURE_LEVEL;
277
278typedef enum _D2D1_FIGURE_BEGIN {
279  D2D1_FIGURE_BEGIN_FILLED   = 0,
280  D2D1_FIGURE_BEGIN_HOLLOW   = 1
281} D2D1_FIGURE_BEGIN;
282
283typedef enum _D2D1_FIGURE_END {
284  D2D1_FIGURE_END_OPEN     = 0,
285  D2D1_FIGURE_END_CLOSED   = 1
286} D2D1_FIGURE_END;
287
288typedef enum _D2D1_FILL_MODE {
289  D2D1_FILL_MODE_ALTERNATE   = 0,
290  D2D1_FILL_MODE_WINDING     = 1
291} D2D1_FILL_MODE;
292
293typedef enum _D2D1_GAMMA {
294  D2D1_GAMMA_2_2   = 0,
295  D2D1_GAMMA_1_0   = 1
296} D2D1_GAMMA;
297
298typedef enum _D2D1_GEOMETRY_RELATION {
299  D2D1_GEOMETRY_RELATION_UNKNOWN        = 0,
300  D2D1_GEOMETRY_RELATION_DISJOINT       = 1,
301  D2D1_GEOMETRY_RELATION_IS_CONTAINED   = 2,
302  D2D1_GEOMETRY_RELATION_CONTAINS       = 3,
303  D2D1_GEOMETRY_RELATION_OVERLAP        = 4
304} D2D1_GEOMETRY_RELATION;
305
306typedef enum _D2D1_GEOMETRY_SIMPLIFICATION_OPTION {
307  D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES   = 0,
308  D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES              = 1
309} D2D1_GEOMETRY_SIMPLIFICATION_OPTION;
310
311typedef enum _D2D1_LAYER_OPTIONS {
312  D2D1_LAYER_OPTIONS_NONE                       = 0x00000000,
313  D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE   = 0x00000001
314} D2D1_LAYER_OPTIONS;
315
316typedef enum _D2D1_LINE_JOIN {
317  D2D1_LINE_JOIN_MITER            = 0,
318  D2D1_LINE_JOIN_BEVEL            = 1,
319  D2D1_LINE_JOIN_ROUND            = 2,
320  D2D1_LINE_JOIN_MITER_OR_BEVEL   = 3
321} D2D1_LINE_JOIN;
322
323typedef enum _D2D1_OPACITY_MASK_CONTENT {
324  D2D1_OPACITY_MASK_CONTENT_GRAPHICS              = 0,
325  D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL          = 1,
326  D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE   = 2
327} D2D1_OPACITY_MASK_CONTENT;
328
329typedef enum _D2D1_PATH_SEGMENT {
330  D2D1_PATH_SEGMENT_NONE                    = 0x00000000,
331  D2D1_PATH_SEGMENT_FORCE_UNSTROKED         = 0x00000001,
332  D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN   = 0x00000002
333} D2D1_PATH_SEGMENT;
334
335typedef enum _D2D1_PRESENT_OPTIONS {
336  D2D1_PRESENT_OPTIONS_NONE              = 0x00000000,
337  D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS   = 0x00000001,
338  D2D1_PRESENT_OPTIONS_IMMEDIATELY       = 0x00000002
339} D2D1_PRESENT_OPTIONS;
340
341typedef enum _D2D1_RENDER_TARGET_TYPE {
342  D2D1_RENDER_TARGET_TYPE_DEFAULT     = 0,
343  D2D1_RENDER_TARGET_TYPE_SOFTWARE    = 1,
344  D2D1_RENDER_TARGET_TYPE_HARDWARE    = 2
345} D2D1_RENDER_TARGET_TYPE;
346
347typedef enum _D2D1_RENDER_TARGET_USAGE {
348  D2D1_RENDER_TARGET_USAGE_NONE                    = 0x00000000,
349  D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING   = 0x00000001,
350  D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE          = 0x00000002
351} D2D1_RENDER_TARGET_USAGE;
352
353typedef enum _D2D1_SWEEP_DIRECTION {
354  D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE   = 0,
355  D2D1_SWEEP_DIRECTION_CLOCKWISE           = 1
356} D2D1_SWEEP_DIRECTION;
357
358typedef enum _D2D1_TEXT_ANTIALIAS_MODE {
359  D2D1_TEXT_ANTIALIAS_MODE_DEFAULT     = 0,
360  D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE   = 1,
361  D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE   = 2,
362  D2D1_TEXT_ANTIALIAS_MODE_ALIASED     = 3
363} D2D1_TEXT_ANTIALIAS_MODE;
364
365typedef enum _D2D1_WINDOW_STATE {
366  D2D1_WINDOW_STATE_NONE       = 0x0000000,
367  D2D1_WINDOW_STATE_OCCLUDED   = 0x0000001
368} D2D1_WINDOW_STATE;
369
370/* this is a hack so we can use forward declares in C (easier than reordering interfaces) */
371#if !defined(__cplusplus)
372#undef DECLARE_INTERFACE
373#define DECLARE_INTERFACE(iface) struct iface { struct iface##Vtbl *lpVtbl; }; typedef struct iface##Vtbl iface##Vtbl; struct iface##Vtbl
374#endif
375
376/* interface forward declares */
377
378typedef _COM_interface ID2D1Bitmap ID2D1Bitmap;
379typedef _COM_interface ID2D1BitmapBrush ID2D1BitmapBrush;
380typedef _COM_interface ID2D1BitmapRenderTarget ID2D1BitmapRenderTarget;
381typedef _COM_interface ID2D1Brush ID2D1Brush;
382typedef _COM_interface ID2D1DCRenderTarget ID2D1DCRenderTarget;
383typedef _COM_interface ID2D1DrawingStateBlock ID2D1DrawingStateBlock;
384typedef _COM_interface ID2D1EllipseGeometry ID2D1EllipseGeometry;
385typedef _COM_interface ID2D1Factory ID2D1Factory;
386typedef _COM_interface ID2D1GdiInteropRenderTarget ID2D1GdiInteropRenderTarget;
387typedef _COM_interface ID2D1Geometry ID2D1Geometry;
388typedef _COM_interface ID2D1GeometryGroup ID2D1GeometryGroup;
389typedef _COM_interface ID2D1GeometrySink ID2D1GeometrySink;
390typedef _COM_interface ID2D1GradientStopCollection ID2D1GradientStopCollection;
391typedef _COM_interface ID2D1HwndRenderTarget ID2D1HwndRenderTarget;
392typedef _COM_interface ID2D1Layer ID2D1Layer;
393typedef _COM_interface ID2D1LinearGradientBrush ID2D1LinearGradientBrush;
394typedef _COM_interface ID2D1Mesh ID2D1Mesh;
395typedef _COM_interface ID2D1PathGeometry ID2D1PathGeometry;
396typedef _COM_interface ID2D1RadialGradientBrush ID2D1RadialGradientBrush;
397typedef _COM_interface ID2D1RectangleGeometry ID2D1RectangleGeometry;
398typedef _COM_interface ID2D1RenderTarget ID2D1RenderTarget;
399typedef _COM_interface ID2D1Resource ID2D1Resource;
400typedef _COM_interface ID2D1RoundedRectangleGeometry ID2D1RoundedRectangleGeometry;
401typedef _COM_interface ID2D1SimplifiedGeometrySink ID2D1SimplifiedGeometrySink;
402typedef _COM_interface ID2D1SolidColorBrush ID2D1SolidColorBrush;
403typedef _COM_interface ID2D1StrokeStyle ID2D1StrokeStyle;
404typedef _COM_interface ID2D1TessellationSink ID2D1TessellationSink;
405typedef _COM_interface ID2D1TransformedGeometry ID2D1TransformedGeometry;
406
407/* structures */
408
409typedef struct D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F;
410
411typedef struct D2D1_ARC_SEGMENT D2D1_ARC_SEGMENT;
412typedef struct D2D1_BEZIER_SEGMENT D2D1_BEZIER_SEGMENT;
413typedef struct D2D1_BITMAP_BRUSH_PROPERTIES D2D1_BITMAP_BRUSH_PROPERTIES;
414typedef struct D2D1_BITMAP_PROPERTIES D2D1_BITMAP_PROPERTIES;
415typedef struct D2D1_BRUSH_PROPERTIES D2D1_BRUSH_PROPERTIES;
416typedef struct D2D1_DRAWING_STATE_DESCRIPTION D2D1_DRAWING_STATE_DESCRIPTION;
417typedef struct D2D1_ELLIPSE D2D1_ELLIPSE;
418typedef struct D2D1_FACTORY_OPTIONS D2D1_FACTORY_OPTIONS;
419typedef struct D2D1_GRADIENT_STOP D2D1_GRADIENT_STOP;
420typedef struct D2D1_HWND_RENDER_TARGET_PROPERTIES D2D1_HWND_RENDER_TARGET_PROPERTIES;
421typedef struct D2D1_LAYER_PARAMETERS D2D1_LAYER_PARAMETERS;
422typedef struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES;
423typedef struct D2D1_PIXEL_FORMAT D2D1_PIXEL_FORMAT;
424typedef struct D2D1_QUADRATIC_BEZIER_SEGMENT D2D1_QUADRATIC_BEZIER_SEGMENT;
425typedef struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES;
426typedef struct D2D1_RENDER_TARGET_PROPERTIES D2D1_RENDER_TARGET_PROPERTIES;
427typedef struct D2D1_ROUNDED_RECT D2D1_ROUNDED_RECT;
428typedef struct D2D1_STROKE_STYLE_PROPERTIES D2D1_STROKE_STYLE_PROPERTIES;
429typedef struct D2D1_TRIANGLE D2D1_TRIANGLE;
430
431struct D2D1_ARC_SEGMENT {
432  D2D1_POINT_2F        point;
433  D2D1_SIZE_F          size;
434  FLOAT                rotationAngle;
435  D2D1_SWEEP_DIRECTION sweepDirection;
436  D2D1_ARC_SIZE        arcSize;
437};
438
439struct D2D1_BEZIER_SEGMENT {
440  D2D1_POINT_2F point1;
441  D2D1_POINT_2F point2;
442  D2D1_POINT_2F point3;
443};
444
445struct D2D1_BITMAP_BRUSH_PROPERTIES {
446  D2D1_EXTEND_MODE               extendModeX;
447  D2D1_EXTEND_MODE               extendModeY;
448  D2D1_BITMAP_INTERPOLATION_MODE interpolationMode;
449};
450
451struct D2D1_PIXEL_FORMAT {
452  DXGI_FORMAT     format;
453  D2D1_ALPHA_MODE alphaMode;
454};
455
456struct D2D1_BITMAP_PROPERTIES {
457  D2D1_PIXEL_FORMAT pixelFormat;
458  FLOAT             dpiX;
459  FLOAT             dpiY;
460};
461
462struct D2D1_BRUSH_PROPERTIES {
463  FLOAT             opacity;
464  D2D1_MATRIX_3X2_F transform;
465};
466
467struct D2D1_DRAWING_STATE_DESCRIPTION {
468  D2D1_ANTIALIAS_MODE      antialiasMode;
469  D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;
470  D2D1_TAG                 tag1;
471  D2D1_TAG                 tag2;
472  D2D1_MATRIX_3X2_F        transform;
473};
474
475struct D2D1_ELLIPSE {
476  D2D1_POINT_2F point;
477  FLOAT         radiusX;
478  FLOAT         radiusY;
479};
480
481struct D2D1_FACTORY_OPTIONS {
482  D2D1_DEBUG_LEVEL debugLevel;
483};
484
485struct D2D1_GRADIENT_STOP {
486  FLOAT        position;
487  D2D1_COLOR_F color;
488};
489
490struct D2D1_HWND_RENDER_TARGET_PROPERTIES {
491  HWND                 hwnd;
492  D2D1_SIZE_U          pixelSize;
493  D2D1_PRESENT_OPTIONS presentOptions;
494};
495
496struct D2D1_LAYER_PARAMETERS {
497  D2D1_RECT_F         contentBounds;
498  ID2D1Geometry       *geometricMask;
499  D2D1_ANTIALIAS_MODE maskAntialiasMode;
500  D2D1_MATRIX_3X2_F   maskTransform;
501  FLOAT               opacity;
502  ID2D1Brush          *opacityBrush;
503  D2D1_LAYER_OPTIONS  layerOptions;
504};
505
506struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES {
507  D2D1_POINT_2F startPoint;
508  D2D1_POINT_2F endPoint;
509};
510
511struct D2D1_QUADRATIC_BEZIER_SEGMENT {
512  D2D1_POINT_2F point1;
513  D2D1_POINT_2F point2;
514};
515
516struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES {
517  D2D1_POINT_2F center;
518  D2D1_POINT_2F gradientOriginOffset;
519  FLOAT         radiusX;
520  FLOAT         radiusY;
521};
522
523struct D2D1_RENDER_TARGET_PROPERTIES {
524  D2D1_RENDER_TARGET_TYPE  type;
525  D2D1_PIXEL_FORMAT        pixelFormat;
526  FLOAT                    dpiX;
527  FLOAT                    dpiY;
528  D2D1_RENDER_TARGET_USAGE usage;
529  D2D1_FEATURE_LEVEL       minLevel;
530};
531
532struct D2D1_ROUNDED_RECT {
533  D2D1_RECT_F rect;
534  FLOAT       radiusX;
535  FLOAT       radiusY;
536};
537
538struct D2D1_STROKE_STYLE_PROPERTIES {
539  D2D1_CAP_STYLE  startCap;
540  D2D1_CAP_STYLE  endCap;
541  D2D1_CAP_STYLE  dashCap;
542  D2D1_LINE_JOIN  lineJoin;
543  FLOAT           miterLimit;
544  D2D1_DASH_STYLE dashStyle;
545  FLOAT           dashOffset;
546};
547
548struct D2D1_TRIANGLE {
549  D2D1_POINT_2F point1;
550  D2D1_POINT_2F point2;
551  D2D1_POINT_2F point3;
552};
553
554/* interfaces */
555
556/**
557 * Header generated from msdn for the purposes of allowing
558 * 3rd party compiler compatibility with the Microsoft API
559 */
560DEFINE_GUID(IID_ID2D1Resource, 0x2cd90691,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
561
562#ifndef D2D_USE_C_DEFINITIONS
563
564interface ID2D1Resource : public IUnknown {
565    STDMETHOD_(void, GetFactory)(ID2D1Factory **factory) const PURE;
566};
567
568#else
569
570typedef struct ID2D1ResourceVtbl {
571    IUnknownVtbl Base;
572
573    STDMETHOD_(void, GetFactory)(ID2D1Resource *This, ID2D1Factory **factory) PURE;
574} ID2D1ResourceVtbl;
575
576interface ID2D1Resource {
577    const ID2D1ResourceVtbl *lpVtbl;
578};
579
580#define ID2D1Resource_QueryInterface(this,A,B) (this)->lpVtbl->Base.QueryInterface((IUnknown*)this,A,B)
581#define ID2D1Resource_AddRef(this) (this)->lpVtbl->Base.AddRef((IUnknown*)this)
582#define ID2D1Resource_Release(this) (this)->lpVtbl->Base.Release((IUnknown*)this)
583#define ID2D1Resource_GetFactory(this,A) (this)->lpVtbl->GetFactory(this,A)
584
585#endif
586
587DEFINE_GUID(IID_ID2D1Brush, 0x2cd906a8,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
588
589#ifndef D2D_USE_C_DEFINITIONS
590
591interface ID2D1Brush : public ID2D1Resource {
592    STDMETHOD_(void, SetOpacity)(FLOAT opacity) PURE;
593    STDMETHOD_(void, SetTransform)(const D2D1_MATRIX_3X2_F *transform) PURE;
594    STDMETHOD_(FLOAT, GetOpacity)(void) const PURE;
595    STDMETHOD_(void, GetTransform)(D2D1_MATRIX_3X2_F *transform) const PURE;
596
597    void SetTransform(const D2D1_MATRIX_3X2_F &transform) {
598        SetTransform(&transform);
599    }
600};
601
602#else
603
604typedef struct ID2D1BrushVtbl {
605    ID2D1ResourceVtbl Base;
606
607    STDMETHOD_(void, SetOpacity)(ID2D1Brush *This, FLOAT opacity) PURE;
608    STDMETHOD_(void, SetTransform)(ID2D1Brush *This, const D2D1_MATRIX_3X2_F *transform) PURE;
609    STDMETHOD_(FLOAT, GetOpacity)(ID2D1Brush *This) PURE;
610    STDMETHOD_(void, GetTransform)(ID2D1Brush *This, D2D1_MATRIX_3X2_F *transform) PURE;
611} ID2D1BrushVtbl;
612
613interface ID2D1Brush {
614    const ID2D1BrushVtbl *lpVtbl;
615};
616
617#define ID2D1Brush_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
618#define ID2D1Brush_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
619#define ID2D1Brush_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
620#define ID2D1Brush_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
621#define ID2D1Brush_SetOpacity(this,A) (this)->lpVtbl->SetOpacity(this,A)
622#define ID2D1Brush_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
623#define ID2D1Brush_GetOpacity(this) (this)->lpVtbl->GetOpacity(this)
624#define ID2D1Brush_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
625
626#endif
627
628DEFINE_GUID(IID_ID2D1Bitmap, 0xa2296057,0xea42,0x4099,0x98,0x3b,0x53,0x9f,0xb6,0x50,0x54,0x26);
629
630#ifndef D2D_USE_C_DEFINITIONS
631
632interface ID2D1Bitmap : public ID2D1Resource {
633    STDMETHOD_(D2D1_SIZE_F, GetSize)(void) const PURE;
634    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(void) const PURE;
635    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(void) const PURE;
636    STDMETHOD_(void, GetDpi)(FLOAT *dpiX, FLOAT *dpiY) const PURE;
637    STDMETHOD(CopyFromBitmap)(const D2D1_POINT_2U *destPoint, ID2D1Bitmap *bitmap, const D2D1_RECT_U *srcRect) PURE;
638    STDMETHOD(CopyFromRenderTarget)(const D2D1_POINT_2U *destPoint, ID2D1RenderTarget *renderTarget, const D2D1_RECT_U *srcRect) PURE;
639    STDMETHOD(CopyFromMemory)(const D2D1_RECT_U *dstRect, const void *srcData, UINT32 pitch) PURE;
640};
641
642#else
643
644typedef struct ID2D1BitmapVtbl {
645    ID2D1ResourceVtbl Base;
646
647    STDMETHOD_(D2D1_SIZE_F, GetSize)(ID2D1Bitmap *This) PURE;
648    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(ID2D1Bitmap *This) PURE;
649    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(ID2D1Bitmap *This) PURE;
650    STDMETHOD_(void, GetDpi)(ID2D1Bitmap *This, FLOAT *dpiX, FLOAT *dpiY) PURE;
651    STDMETHOD(CopyFromBitmap)(ID2D1Bitmap *This, const D2D1_POINT_2U *destPoint, ID2D1Bitmap *bitmap, const D2D1_RECT_U *srcRect) PURE;
652    STDMETHOD(CopyFromRenderTarget)(ID2D1Bitmap *This, const D2D1_POINT_2U *destPoint, ID2D1RenderTarget *renderTarget, const D2D1_RECT_U *srcRect) PURE;
653    STDMETHOD(CopyFromMemory)(ID2D1Bitmap *This, const D2D1_RECT_U *dstRect, const void *srcData, UINT32 pitch) PURE;
654} ID2D1BitmapVtbl;
655
656interface ID2D1Bitmap {
657    const ID2D1BitmapVtbl *lpVtbl;
658};
659
660#define ID2D1Bitmap_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnkwnown*)this,A,B)
661#define ID2D1Bitmap_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
662#define ID2D1Bitmap_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
663#define ID2D1Bitmap_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
664#define ID2D1Bitmap_GetSize(this) (this)->lpVtbl->GetSize(this)
665#define ID2D1Bitmap_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
666#define ID2D1Bitmap_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
667#define ID2D1Bitmap_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
668#define ID2D1Bitmap_CopyFromBitmap(this,A,B,C) (this)->lpVtbl->CopyFromBitmap(this,A,B,C)
669#define ID2D1Bitmap_CopyFromRenderTarget(this,A,B,C) (this)->lpVtbl->CopyFromRenderTarget(this,A,B,C)
670#define ID2D1Bitmap_CopyFromMemory(this,A,B,C) (this)->lpVtbl->CopyFromMemory(this,A,B,C)
671
672#endif
673
674DEFINE_GUID(IID_ID2D1BitmapBrush, 0x2cd906aa,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
675
676#ifndef D2D_USE_C_DEFINITIONS
677
678interface ID2D1BitmapBrush : public ID2D1Brush {
679    STDMETHOD_(void, SetExtendModeX)(D2D1_EXTEND_MODE extendModeX) PURE;
680    STDMETHOD_(void, SetExtendModeY)(D2D1_EXTEND_MODE extendModeY) PURE;
681    STDMETHOD_(void, SetInterpolationMode)(D2D1_BITMAP_INTERPOLATION_MODE interpolationMode) PURE;
682    STDMETHOD_(void, SetBitmap)(ID2D1Bitmap *bitmap) PURE;
683    STDMETHOD_(D2D1_EXTEND_MODE, GetExtendModeX)(void) const PURE;
684    STDMETHOD_(D2D1_EXTEND_MODE, GetExtendModeY)(void) const PURE;
685    STDMETHOD_(D2D1_BITMAP_INTERPOLATION_MODE, GetInterpolationMode)(void) const PURE;
686    STDMETHOD_(void, GetBitmap)(ID2D1Bitmap **bitmap) const PURE;
687};
688
689#else
690
691typedef struct ID2D1BitmapBrushVtbl {
692    ID2D1BrushVtbl Base;
693
694    STDMETHOD_(void, SetExtendModeX)(ID2D1BitmapBrush *This, D2D1_EXTEND_MODE extendModeX) PURE;
695    STDMETHOD_(void, SetExtendModeY)(ID2D1BitmapBrush *This, D2D1_EXTEND_MODE extendModeY) PURE;
696    STDMETHOD_(void, SetInterpolationMode)(ID2D1BitmapBrush *This, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode) PURE;
697    STDMETHOD_(void, SetBitmap)(ID2D1BitmapBrush *This, ID2D1Bitmap *bitmap) PURE;
698    STDMETHOD_(D2D1_EXTEND_MODE, GetExtendModeX)(ID2D1BitmapBrush *This) PURE;
699    STDMETHOD_(D2D1_EXTEND_MODE, GetExtendModeY)(ID2D1BitmapBrush *This) PURE;
700    STDMETHOD_(D2D1_BITMAP_INTERPOLATION_MODE, GetInterpolationMode)(ID2D1BitmapBrush *This) PURE;
701    STDMETHOD_(void, GetBitmap)(ID2D1BitmapBrush *This, ID2D1Bitmap **bitmap) PURE;
702} ID2D1BitmapBrushVtbl;
703
704interface ID2D1BitmapBrush {
705    const ID2D1BitmapBrushVtbl *lpVtbl;
706};
707
708#define ID2D1BitmapBrush_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnkwnown*)this,A,B)
709#define ID2D1BitmapBrush_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
710#define ID2D1BitmapBrush_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
711#define ID2D1BitmapBrush_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
712#define ID2D1BitmapBrush_SetOpacity(this,A) (this)->lpVtbl->Base.SetOpacity((ID2D1Brush*)this,A)
713#define ID2D1BitmapBrush_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform((ID2D1Brush*)this,A)
714#define ID2D1BitmapBrush_GetOpacity(this) (this)->lpVtbl->Base.GetOpacity((ID2D1Brush*)this)
715#define ID2D1BitmapBrush_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform((ID2D1Brush*)this,A)
716#define ID2D1BitmapBrush_SetExtendModeX(this,A) (this)->lpVtbl->SetExtendModeX(this,A)
717#define ID2D1BitmapBrush_SetExtendModeY(this,A) (this)->lpVtbl->SetExtendModeY(this,A)
718#define ID2D1BitmapBrush_SetInterpolationMode(this,A) (this)->lpVtbl->SetInterpolationMode(this,A)
719#define ID2D1BitmapBrush_SetBitmap(this,A) (this)->lpVtbl->SetBitmap(this,A)
720#define ID2D1BitmapBrush_GetExtendModeX(this) (this)->lpVtbl->GetExtendModeX(this)
721#define ID2D1BitmapBrush_GetExtendModeY(this) (this)->lpVtbl->GetExtendModeY(this)
722#define ID2D1BitmapBrush_GetInterpolationMode(this) (this)->lpVtbl->GetInterpolationMode(this)
723#define ID2D1BitmapBrush_GetBitmap(this,A) (this)->lpVtbl->GetBitmap(this,A)
724
725#endif
726
727DEFINE_GUID(IID_ID2D1RenderTarget, 0x2cd90694,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
728
729#ifndef D2D_USE_C_DEFINITIONS
730
731interface ID2D1RenderTarget : public ID2D1Resource {
732    STDMETHOD(CreateBitmap)(D2D1_SIZE_U size, const void *srcData, UINT32 pitch, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
733    STDMETHOD(CreateBitmapFromWicBitmap)(IWICBitmapSource *wicBitmapSource, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
734    STDMETHOD(CreateSharedBitmap)(REFIID riid, void *data, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
735    STDMETHOD(CreateBitmapBrush)(ID2D1Bitmap *bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES *bitmapBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1BitmapBrush **bitmapBrush) PURE;
736    STDMETHOD(CreateSolidColorBrush)(const D2D1_COLOR_F *color, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush **solidColorBrush) PURE;
737    STDMETHOD(CreateGradientStopCollection)(const D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, D2D1_GAMMA colorInterpolationGamma, D2D1_EXTEND_MODE extendMode, ID2D1GradientStopCollection **gradientStopCollection) PURE;
738    STDMETHOD(CreateLinearGradientBrush)(const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) PURE;
739    STDMETHOD(CreateRadialGradientBrush)(const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) PURE;
740    STDMETHOD(CreateCompatibleRenderTarget)(const D2D1_SIZE_F *desiredSize, const D2D1_SIZE_U *desiredPixelSize, const D2D1_PIXEL_FORMAT *desiredFormat, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, ID2D1BitmapRenderTarget **bitmapRenderTarget) PURE;
741    STDMETHOD(CreateLayer)(const D2D1_SIZE_F *size, ID2D1Layer **layer) PURE;
742    STDMETHOD(CreateMesh)(ID2D1Mesh **mesh) PURE;
743    STDMETHOD_(void, DrawLine)(D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) PURE;
744    STDMETHOD_(void, DrawRectangle)(const D2D1_RECT_F *rect, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) PURE;
745    STDMETHOD_(void, FillRectangle)(const D2D1_RECT_F *rect, ID2D1Brush *brush) PURE;
746    STDMETHOD_(void, DrawRoundedRectangle)(const D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) PURE;
747    STDMETHOD_(void, FillRoundedRectangle)(const D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush) PURE;
748    STDMETHOD_(void, DrawEllipse)(const D2D1_ELLIPSE *ellipse, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) PURE;
749    STDMETHOD_(void, FillEllipse)(const D2D1_ELLIPSE *ellipse, ID2D1Brush *brush) PURE;
750    STDMETHOD_(void, DrawGeometry)(ID2D1Geometry *geometry, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) PURE;
751    STDMETHOD_(void, FillGeometry)(ID2D1Geometry *geometry, ID2D1Brush *brush, ID2D1Brush *opacityBrush = NULL) PURE;
752    STDMETHOD_(void, FillMesh)(ID2D1Mesh *mesh, ID2D1Brush *brush) PURE;
753    STDMETHOD_(void, FillOpacityMask)(ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, const D2D1_RECT_F *destinationRectangle = NULL, const D2D1_RECT_F *sourceRectangle = NULL) PURE;
754    STDMETHOD_(void, DrawBitmap)(ID2D1Bitmap *bitmap, const D2D1_RECT_F *destinationRectangle = NULL, FLOAT opacity = 1.0f, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode = D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, const D2D1_RECT_F *sourceRectangle = NULL) PURE;
755    STDMETHOD_(void, DrawText)(const WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, const D2D1_RECT_F *layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options = D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE measuringMode = DWRITE_MEASURING_MODE_NATURAL) PURE;
756    STDMETHOD_(void, DrawTextLayout)(D2D1_POINT_2F origin, IDWriteTextLayout *textLayout, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options = D2D1_DRAW_TEXT_OPTIONS_NONE) PURE;
757    STDMETHOD_(void, DrawGlyphRun)(D2D1_POINT_2F baselineOrigin, CONST DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush *foregroundBrush, DWRITE_MEASURING_MODE measuringMode = DWRITE_MEASURING_MODE_NATURAL) PURE;
758    STDMETHOD_(void, SetTransform)(const D2D1_MATRIX_3X2_F *transform) PURE;
759    STDMETHOD_(void, GetTransform)(D2D1_MATRIX_3X2_F *transform) const PURE;
760    STDMETHOD_(void, SetAntialiasMode)(D2D1_ANTIALIAS_MODE antialiasMode) PURE;
761    STDMETHOD_(D2D1_ANTIALIAS_MODE, GetAntialiasMode)(void) const PURE;
762    STDMETHOD_(void, SetTextAntialiasMode)(D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) PURE;
763    STDMETHOD_(D2D1_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(void) const PURE;
764    STDMETHOD_(void, SetTextRenderingParams)(IDWriteRenderingParams *textRenderingParams = NULL) PURE;
765    STDMETHOD_(void, GetTextRenderingParams)(IDWriteRenderingParams **textRenderingParams) const PURE;
766    STDMETHOD_(void, SetTags)(D2D1_TAG tag1, D2D1_TAG tag2) PURE;
767    STDMETHOD_(void, GetTags)(D2D1_TAG *tag1 = NULL, D2D1_TAG *tag2 = NULL) const PURE;
768    STDMETHOD_(void, PushLayer)(const D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer *layer) PURE;
769    STDMETHOD_(void, PopLayer)(void) PURE;
770    STDMETHOD(Flush)(D2D1_TAG *tag1 = NULL, D2D1_TAG *tag2 = NULL) PURE;
771    STDMETHOD_(void, SaveDrawingState)(ID2D1DrawingStateBlock *drawingStateBlock) const PURE;
772    STDMETHOD_(void, RestoreDrawingState)(ID2D1DrawingStateBlock *drawingStateBlock) PURE;
773    STDMETHOD_(void, PushAxisAlignedClip)(const D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
774    STDMETHOD_(void, PopAxisAlignedClip)(void) PURE;
775    STDMETHOD_(void, Clear)(const D2D1_COLOR_F *clearColor = NULL) PURE;
776    STDMETHOD_(void, BeginDraw)(void) PURE;
777    STDMETHOD(EndDraw)(D2D1_TAG *tag1 = NULL, D2D1_TAG *tag2 = NULL) PURE;
778    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(void) const PURE;
779    STDMETHOD_(void, SetDpi)(FLOAT dpiX, FLOAT dpiY) PURE;
780    STDMETHOD_(void, GetDpi)(FLOAT *dpiX, FLOAT *dpiY) const PURE;
781    STDMETHOD_(D2D1_SIZE_F, GetSize)(void) const PURE;
782    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(void) const PURE;
783    STDMETHOD_(UINT32, GetMaximumBitmapSize)(void) const PURE;
784    STDMETHOD_(BOOL, IsSupported)(const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) const PURE;
785
786    HRESULT CreateBitmap(D2D1_SIZE_U size, const void *srcData, UINT32 pitch, const D2D1_BITMAP_PROPERTIES &bitmapProperties, ID2D1Bitmap **bitmap) {
787        return CreateBitmap(size, srcData, pitch, &bitmapProperties, bitmap);
788    }
789
790    HRESULT CreateBitmap(D2D1_SIZE_U size, const D2D1_BITMAP_PROPERTIES &bitmapProperties, ID2D1Bitmap **bitmap) {
791        return CreateBitmap(size, NULL, 0, &bitmapProperties, bitmap);
792    }
793
794    HRESULT CreateBitmapFromWicBitmap(IWICBitmapSource *wicBitmapSource, const D2D1_BITMAP_PROPERTIES &bitmapProperties, ID2D1Bitmap **bitmap) {
795        return CreateBitmapFromWicBitmap(wicBitmapSource, &bitmapProperties, bitmap);
796    }
797
798    HRESULT CreateBitmapFromWicBitmap(IWICBitmapSource *wicBitmapSource, ID2D1Bitmap **bitmap) {
799        return CreateBitmapFromWicBitmap(wicBitmapSource, NULL, bitmap);
800    }
801
802    HRESULT CreateBitmapBrush(ID2D1Bitmap *bitmap, ID2D1BitmapBrush **bitmapBrush) {
803        return CreateBitmapBrush(bitmap, NULL, NULL, bitmapBrush);
804    }
805
806    HRESULT CreateBitmapBrush(ID2D1Bitmap *bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES &bitmapBrushProperties, ID2D1BitmapBrush **bitmapBrush) {
807        return CreateBitmapBrush(bitmap, &bitmapBrushProperties, NULL, bitmapBrush);
808    }
809
810    HRESULT CreateBitmapBrush(ID2D1Bitmap *bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES &bitmapBrushProperties, const D2D1_BRUSH_PROPERTIES &brushProperties, ID2D1BitmapBrush **bitmapBrush) {
811        return CreateBitmapBrush(bitmap, &bitmapBrushProperties, &brushProperties, bitmapBrush);
812    }
813
814    HRESULT CreateSolidColorBrush(const D2D1_COLOR_F &color, ID2D1SolidColorBrush **solidColorBrush) {
815        return CreateSolidColorBrush(&color, NULL, solidColorBrush);
816    }
817
818    HRESULT CreateSolidColorBrush(const D2D1_COLOR_F &color, const D2D1_BRUSH_PROPERTIES &brushProperties, ID2D1SolidColorBrush **solidColorBrush) {
819        return CreateSolidColorBrush(&color, &brushProperties, solidColorBrush);
820    }
821
822    HRESULT CreateGradientStopCollection(const D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, ID2D1GradientStopCollection **gradientStopCollection) {
823        return CreateGradientStopCollection(gradientStops, gradientStopsCount, D2D1_GAMMA_2_2, D2D1_EXTEND_MODE_CLAMP, gradientStopCollection);
824    }
825
826    HRESULT CreateLinearGradientBrush(const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES &linearGradientBrushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) {
827        return CreateLinearGradientBrush(&linearGradientBrushProperties, NULL, gradientStopCollection, linearGradientBrush);
828    }
829
830    HRESULT CreateLinearGradientBrush(const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES &linearGradientBrushProperties, const D2D1_BRUSH_PROPERTIES &brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) {
831        return CreateLinearGradientBrush(&linearGradientBrushProperties, &brushProperties, gradientStopCollection, linearGradientBrush);
832    }
833
834    HRESULT CreateRadialGradientBrush(const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES &radialGradientBrushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) {
835        return CreateRadialGradientBrush(&radialGradientBrushProperties, NULL, gradientStopCollection, radialGradientBrush);
836    }
837
838    HRESULT CreateRadialGradientBrush(const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES &radialGradientBrushProperties, const D2D1_BRUSH_PROPERTIES &brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) {
839        return CreateRadialGradientBrush(&radialGradientBrushProperties, &brushProperties, gradientStopCollection, radialGradientBrush);
840    }
841
842    HRESULT CreateCompatibleRenderTarget(ID2D1BitmapRenderTarget **bitmapRenderTarget) {
843        return CreateCompatibleRenderTarget(NULL, NULL, NULL, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, bitmapRenderTarget);
844    }
845
846    HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, ID2D1BitmapRenderTarget **bitmapRenderTarget) {
847        return CreateCompatibleRenderTarget(&desiredSize, NULL, NULL, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, bitmapRenderTarget);
848    }
849
850    HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, D2D1_SIZE_U desiredPixelSize, ID2D1BitmapRenderTarget **bitmapRenderTarget){
851        return CreateCompatibleRenderTarget(&desiredSize, &desiredPixelSize, NULL, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, bitmapRenderTarget);
852    }
853
854    HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, D2D1_SIZE_U desiredPixelSize, D2D1_PIXEL_FORMAT desiredFormat, ID2D1BitmapRenderTarget **bitmapRenderTarget) {
855        return CreateCompatibleRenderTarget(&desiredSize, &desiredPixelSize, &desiredFormat, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE, bitmapRenderTarget);
856    }
857
858    HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, D2D1_SIZE_U desiredPixelSize, D2D1_PIXEL_FORMAT desiredFormat, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, ID2D1BitmapRenderTarget **bitmapRenderTarget) {
859        return CreateCompatibleRenderTarget(&desiredSize, &desiredPixelSize, &desiredFormat, options, bitmapRenderTarget);
860    }
861
862    HRESULT CreateLayer(D2D1_SIZE_F size, ID2D1Layer **layer) {
863        return CreateLayer(&size, layer);
864    }
865
866    HRESULT CreateLayer(ID2D1Layer **layer) {
867        return CreateLayer(NULL, layer);
868    }
869
870    void DrawRectangle(const D2D1_RECT_F &rect, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) {
871        DrawRectangle(&rect, brush, strokeWidth, strokeStyle);
872    }
873
874    void FillRectangle(const D2D1_RECT_F &rect, ID2D1Brush *brush) {
875        FillRectangle(&rect, brush);
876    }
877
878    void DrawRoundedRectangle(const D2D1_ROUNDED_RECT &roundedRect, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) {
879        DrawRoundedRectangle(&roundedRect, brush, strokeWidth, strokeStyle);
880    }
881
882    void FillRoundedRectangle(const D2D1_ROUNDED_RECT &roundedRect, ID2D1Brush *brush) {
883        FillRoundedRectangle(&roundedRect, brush);
884    }
885
886    void DrawEllipse(const D2D1_ELLIPSE &ellipse, ID2D1Brush *brush, FLOAT strokeWidth = 1.0f, ID2D1StrokeStyle *strokeStyle = NULL) {
887        DrawEllipse(&ellipse, brush, strokeWidth, strokeStyle);
888    }
889
890    void FillEllipse(const D2D1_ELLIPSE &ellipse, ID2D1Brush *brush) {
891        FillEllipse(&ellipse, brush);
892    }
893
894    void FillOpacityMask(ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, const D2D1_RECT_F &destinationRectangle, const D2D1_RECT_F &sourceRectangle) {
895        FillOpacityMask(opacityMask, brush, content, &destinationRectangle, &sourceRectangle);
896    }
897
898    void DrawBitmap(ID2D1Bitmap *bitmap, const D2D1_RECT_F &destinationRectangle, FLOAT opacity = 1.0f, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode = D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, const D2D1_RECT_F *sourceRectangle = NULL) {
899        DrawBitmap(bitmap, &destinationRectangle, opacity, interpolationMode, sourceRectangle);
900    }
901
902    void DrawBitmap(ID2D1Bitmap *bitmap, const D2D1_RECT_F &destinationRectangle, FLOAT opacity, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode, const D2D1_RECT_F &sourceRectangle) {
903        DrawBitmap(bitmap, &destinationRectangle, opacity, interpolationMode, &sourceRectangle);
904    }
905
906    void SetTransform(const D2D1_MATRIX_3X2_F &transform) {
907        SetTransform(&transform);
908    }
909
910    void PushLayer(const D2D1_LAYER_PARAMETERS &layerParameters, ID2D1Layer *layer) {
911        PushLayer(&layerParameters, layer);
912    }
913
914    void PushAxisAlignedClip(const D2D1_RECT_F &clipRect, D2D1_ANTIALIAS_MODE antialiasMode) {
915        return PushAxisAlignedClip(&clipRect, antialiasMode);
916    }
917
918    void Clear(const D2D1_COLOR_F &clearColor) {
919        return Clear(&clearColor);
920    }
921
922    void DrawText(const WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, const D2D1_RECT_F &layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options = D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE measuringMode = DWRITE_MEASURING_MODE_NATURAL) {
923        return DrawText(string, stringLength, textFormat, &layoutRect, defaultForegroundBrush, options, measuringMode);
924    }
925
926    BOOL IsSupported(const D2D1_RENDER_TARGET_PROPERTIES &renderTargetProperties) const {
927        return IsSupported(&renderTargetProperties);
928    }
929};
930
931#else
932
933typedef struct ID2D1RenderTargetVtbl {
934    ID2D1ResourceVtbl Base;
935
936    STDMETHOD(CreateBitmap)(ID2D1RenderTarget *This, D2D1_SIZE_U size, const void *srcData, UINT32 pitch, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
937    STDMETHOD(CreateBitmapFromWicBitmap)(ID2D1RenderTarget *This, IWICBitmapSource *wicBitmapSource, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
938    STDMETHOD(CreateSharedBitmap)(ID2D1RenderTarget *This, REFIID riid, void *data, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap **bitmap) PURE;
939    STDMETHOD(CreateBitmapBrush)(ID2D1RenderTarget *This, ID2D1Bitmap *bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES *bitmapBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1BitmapBrush **bitmapBrush) PURE;
940    STDMETHOD(CreateSolidColorBrush)(ID2D1RenderTarget *This, const D2D1_COLOR_F *color, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush **solidColorBrush) PURE;
941    STDMETHOD(CreateGradientStopCollection)(ID2D1RenderTarget *This, const D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount, D2D1_GAMMA colorInterpolationGamma, D2D1_EXTEND_MODE extendMode, ID2D1GradientStopCollection **gradientStopCollection) PURE;
942    STDMETHOD(CreateLinearGradientBrush)(ID2D1RenderTarget *This, const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1LinearGradientBrush **linearGradientBrush) PURE;
943    STDMETHOD(CreateRadialGradientBrush)(ID2D1RenderTarget *This, const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection *gradientStopCollection, ID2D1RadialGradientBrush **radialGradientBrush) PURE;
944    STDMETHOD(CreateCompatibleRenderTarget)(ID2D1RenderTarget *This, const D2D1_SIZE_F *desiredSize, const D2D1_SIZE_U *desiredPixelSize, const D2D1_PIXEL_FORMAT *desiredFormat, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, ID2D1BitmapRenderTarget **bitmapRenderTarget) PURE;
945    STDMETHOD(CreateLayer)(ID2D1RenderTarget *This, const D2D1_SIZE_F *size, ID2D1Layer **layer) PURE;
946    STDMETHOD(CreateMesh)(ID2D1RenderTarget *This, ID2D1Mesh **mesh) PURE;
947    STDMETHOD_(void, DrawLine)(ID2D1RenderTarget *This, D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
948    STDMETHOD_(void, DrawRectangle)(ID2D1RenderTarget *This, const D2D1_RECT_F *rect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
949    STDMETHOD_(void, FillRectangle)(ID2D1RenderTarget *This, const D2D1_RECT_F *rect, ID2D1Brush *brush) PURE;
950    STDMETHOD_(void, DrawRoundedRectangle)(ID2D1RenderTarget *This, const D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
951    STDMETHOD_(void, FillRoundedRectangle)(ID2D1RenderTarget *This, const D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush *brush) PURE;
952    STDMETHOD_(void, DrawEllipse)(ID2D1RenderTarget *This, const D2D1_ELLIPSE *ellipse, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
953    STDMETHOD_(void, FillEllipse)(ID2D1RenderTarget *This, const D2D1_ELLIPSE *ellipse, ID2D1Brush *brush) PURE;
954    STDMETHOD_(void, DrawGeometry)(ID2D1RenderTarget *This, ID2D1Geometry *geometry, ID2D1Brush *brush, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle) PURE;
955    STDMETHOD_(void, FillGeometry)(ID2D1RenderTarget *This, ID2D1Geometry *geometry, ID2D1Brush *brush, ID2D1Brush *opacityBrush) PURE;
956    STDMETHOD_(void, FillMesh)(ID2D1RenderTarget *This, ID2D1Mesh *mesh, ID2D1Brush *brush) PURE;
957    STDMETHOD_(void, FillOpacityMask)(ID2D1RenderTarget *This, ID2D1Bitmap *opacityMask, ID2D1Brush *brush, D2D1_OPACITY_MASK_CONTENT content, const D2D1_RECT_F *destinationRectangle, const D2D1_RECT_F *sourceRectangle) PURE;
958    STDMETHOD_(void, DrawBitmap)(ID2D1RenderTarget *This, ID2D1Bitmap *bitmap, const D2D1_RECT_F *destinationRectangle, FLOAT opacity, D2D1_BITMAP_INTERPOLATION_MODE interpolationMode, const D2D1_RECT_F *sourceRectangle) PURE;
959    STDMETHOD_(void, DrawText)(ID2D1RenderTarget *This, const WCHAR *string, UINT stringLength, IDWriteTextFormat *textFormat, const D2D1_RECT_F *layoutRect, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options, DWRITE_MEASURING_MODE measuringMode) PURE;
960    STDMETHOD_(void, DrawTextLayout)(ID2D1RenderTarget *This, D2D1_POINT_2F origin, IDWriteTextLayout *textLayout, ID2D1Brush *defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options) PURE;
961    STDMETHOD_(void, DrawGlyphRun)(ID2D1RenderTarget *This, D2D1_POINT_2F baselineOrigin, const DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush *foregroundBrush, DWRITE_MEASURING_MODE measuringMode) PURE;
962    STDMETHOD_(void, SetTransform)(ID2D1RenderTarget *This, const D2D1_MATRIX_3X2_F *transform) PURE;
963    STDMETHOD_(void, GetTransform)(ID2D1RenderTarget *This, D2D1_MATRIX_3X2_F *transform) PURE;
964    STDMETHOD_(void, SetAntialiasMode)(ID2D1RenderTarget *This, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
965    STDMETHOD_(D2D1_ANTIALIAS_MODE, GetAntialiasMode)(ID2D1RenderTarget *This) PURE;
966    STDMETHOD_(void, SetTextAntialiasMode)(ID2D1RenderTarget *This, D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode) PURE;
967    STDMETHOD_(D2D1_TEXT_ANTIALIAS_MODE, GetTextAntialiasMode)(ID2D1RenderTarget *This) PURE;
968    STDMETHOD_(void, SetTextRenderingParams)(ID2D1RenderTarget *This, IDWriteRenderingParams *textRenderingParams) PURE;
969    STDMETHOD_(void, GetTextRenderingParams)(ID2D1RenderTarget *This, IDWriteRenderingParams **textRenderingParams) PURE;
970    STDMETHOD_(void, SetTags)(ID2D1RenderTarget *This, D2D1_TAG tag1, D2D1_TAG tag2) PURE;
971    STDMETHOD_(void, GetTags)(ID2D1RenderTarget *This, D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
972    STDMETHOD_(void, PushLayer)(ID2D1RenderTarget *This, const D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer *layer) PURE;
973    STDMETHOD_(void, PopLayer)(ID2D1RenderTarget *This) PURE;
974    STDMETHOD(Flush)(ID2D1RenderTarget *This, D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
975    STDMETHOD_(void, SaveDrawingState)(ID2D1RenderTarget *This, ID2D1DrawingStateBlock *drawingStateBlock) PURE;
976    STDMETHOD_(void, RestoreDrawingState)(ID2D1RenderTarget *This, ID2D1DrawingStateBlock *drawingStateBlock) PURE;
977    STDMETHOD_(void, PushAxisAlignedClip)(ID2D1RenderTarget *This, const D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode) PURE;
978    STDMETHOD_(void, PopAxisAlignedClip)(ID2D1RenderTarget *This) PURE;
979    STDMETHOD_(void, Clear)(ID2D1RenderTarget *This, const D2D1_COLOR_F *clearColor) PURE;
980    STDMETHOD_(void, BeginDraw)(ID2D1RenderTarget *This) PURE;
981    STDMETHOD(EndDraw)(ID2D1RenderTarget *This, D2D1_TAG *tag1, D2D1_TAG *tag2) PURE;
982    STDMETHOD_(D2D1_PIXEL_FORMAT, GetPixelFormat)(ID2D1RenderTarget *This) PURE;
983    STDMETHOD_(void, SetDpi)(ID2D1RenderTarget *This, FLOAT dpiX, FLOAT dpiY) PURE;
984    STDMETHOD_(void, GetDpi)(ID2D1RenderTarget *This, FLOAT *dpiX, FLOAT *dpiY) PURE;
985    STDMETHOD_(D2D1_SIZE_F, GetSize)(ID2D1RenderTarget *This) PURE;
986    STDMETHOD_(D2D1_SIZE_U, GetPixelSize)(ID2D1RenderTarget *This) PURE;
987    STDMETHOD_(UINT32, GetMaximumBitmapSize)(ID2D1RenderTarget *This) PURE;
988    STDMETHOD_(BOOL, IsSupported)(ID2D1RenderTarget *This, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties) PURE;
989} ID2D1RenderTargetVtbl;
990
991interface ID2D1RenderTarget {
992    const ID2D1RenderTargetVtbl *lpVtbl;
993};
994
995#define ID2D1RenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
996#define ID2D1RenderTarget_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
997#define ID2D1RenderTarget_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
998#define ID2D1RenderTarget_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
999#define ID2D1RenderTarget_BeginDraw(this) (this)->lpVtbl->BeginDraw(this)
1000#define ID2D1RenderTarget_Clear(this,A) (this)->lpVtbl->Clear(this,A)
1001#define ID2D1RenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->CreateBitmap(this,A,B,C,D,E)
1002#define ID2D1RenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->CreateBitmapBrush(this,A,B)
1003#define ID2D1RenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->CreateBitmapFromWicBitmap(this,A,B)
1004#define ID2D1RenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->CreateCompatibleRenderTarget(this,A)
1005#define ID2D1RenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->CreateGradientStopCollection(this,A,B,C)
1006#define ID2D1RenderTarget_CreateLayer(this,A) (this)->lpVtbl->CreateLayer(this,A)
1007#define ID2D1RenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateLinearGradientBrush(this,A,B,C,D)
1008#define ID2D1RenderTarget_CreateMesh(this,A) (this)->lpVtbl->CreateMesh(this,A)
1009#define ID2D1RenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->CreateRadialGradientBrush(this,A,B,C,D)
1010#define ID2D1RenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->CreateSharedBitmap(this,A,B,C,D)
1011#define ID2D1RenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->CreateSolidColorBrush(this,A,B,C)
1012#define ID2D1RenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->DrawBitmap(this,A,B,C,D,E)
1013#define ID2D1RenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->DrawEllipse(this,A,B,C,D)
1014#define ID2D1RenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->DrawGeometry(this,A,B,C,D)
1015#define ID2D1RenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->DrawGlyphRun(this,A,B,C,D)
1016#define ID2D1RenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->DrawLine(this,A,B,C,D,E)
1017#define ID2D1RenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRectangle(this,A,B,C,D)
1018#define ID2D1RenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->DrawRoundedRectangle(this,A,B,C,D)
1019#define ID2D1RenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->DrawText(this,A,B,C,D,E,F,G)
1020#define ID2D1RenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->DrawTextLayout(this,A,B,C,D)
1021#define ID2D1RenderTarget_EndDraw(this,A,B) (this)->lpVtbl->EndDraw(this,A,B)
1022#define ID2D1RenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->FillEllipse(this,A,B)
1023#define ID2D1RenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->FillGeometry(this,A,B,C)
1024#define ID2D1RenderTarget_FillMesh(this,A,B) (this)->lpVtbl->FillMesh(this,A,B)
1025#define ID2D1RenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->FillOpacityMask(this,A,B,C,D,E)
1026#define ID2D1RenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->FillRectangle(this,A,B)
1027#define ID2D1RenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->FillRoundedRectangle(this,A,B)
1028#define ID2D1RenderTarget_Flush(this,A,B) (this)->lpVtbl->Flush(this,A,B)
1029#define ID2D1RenderTarget_GetAntialiasMode(this) (this)->lpVtbl->GetAntialiasMode(this)
1030#define ID2D1RenderTarget_GetDpi(this,A,B) (this)->lpVtbl->GetDpi(this,A,B)
1031#define ID2D1RenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->GetMaximumBitmapSize(this)
1032#define ID2D1RenderTarget_GetPixelFormat(this) (this)->lpVtbl->GetPixelFormat(this)
1033#define ID2D1RenderTarget_GetPixelSize(this) (this)->lpVtbl->GetPixelSize(this)
1034#define ID2D1RenderTarget_GetSize(this) (this)->lpVtbl->GetSize(this)
1035#define ID2D1RenderTarget_GetTags(this,A,B) (this)->lpVtbl->GetTags(this,A,B)
1036#define ID2D1RenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->GetTextAntialiasMode(this)
1037#define ID2D1RenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
1038#define ID2D1RenderTarget_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
1039#define ID2D1RenderTarget_IsSupported(this,A) (this)->lpVtbl->IsSupported(this,A)
1040#define ID2D1RenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->PopAxisAlignedClip(this)
1041#define ID2D1RenderTarget_PopLayer(this) (this)->lpVtbl->PopLayer(this)
1042#define ID2D1RenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->PushAxisAlignedClip(this,A,B)
1043#define ID2D1RenderTarget_PushLayer(this,A,B) (this)->lpVtbl->PushLayer(this,A,B)
1044#define ID2D1RenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->RestoreDrawingState(this,A)
1045#define ID2D1RenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->SaveDrawingState(this,A)
1046#define ID2D1RenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->SetAntialiasMode(this,A)
1047#define ID2D1RenderTarget_SetDpi(this,A,B) (this)->lpVtbl->SetDpi(this,A,B)
1048#define ID2D1RenderTarget_SetTags(this,A,B) (this)->lpVtbl->SetTags(this,A,B)
1049#define ID2D1RenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->SetTextAntialiasMode(this,A)
1050#define ID2D1RenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
1051#define ID2D1RenderTarget_SetTransform(this,A) (this)->lpVtbl->SetTransform(this,A)
1052
1053#endif
1054
1055DEFINE_GUID(IID_ID2D1Geometry, 0x2cd906a1,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1056
1057#ifndef D2D_USE_C_DEFINITIONS
1058
1059interface ID2D1Geometry : public ID2D1Resource {
1060    STDMETHOD(GetBounds)(const D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) const PURE;
1061    STDMETHOD(GetWidenedBounds)(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, D2D1_RECT_F *bounds) const PURE;
1062    STDMETHOD(StrokeContainsPoint)(D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, BOOL *contains) const PURE;
1063    STDMETHOD(FillContainsPoint)(D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, BOOL *contains) const PURE;
1064    STDMETHOD(CompareWithGeometry)(ID2D1Geometry *inputGeometry, const D2D1_MATRIX_3X2_F *inputGeometryTransform, FLOAT flatteningTolerance, D2D1_GEOMETRY_RELATION *relation) const PURE;
1065    STDMETHOD(Simplify)(D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const PURE;
1066    STDMETHOD(Tessellate)(const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1TessellationSink *tessellationSink) const PURE;
1067    STDMETHOD(CombineWithGeometry)(ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, const D2D1_MATRIX_3X2_F *inputGeometryTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const PURE;
1068    STDMETHOD(Outline)(const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const PURE;
1069    STDMETHOD(ComputeArea)(const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, FLOAT *area) const PURE;
1070    STDMETHOD(ComputeLength)(const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, FLOAT *length) const PURE;
1071    STDMETHOD(ComputePointAtLength)(FLOAT length, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) const PURE;
1072    STDMETHOD(Widen)(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const PURE;
1073
1074    HRESULT GetBounds(const D2D1_MATRIX_3X2_F &worldTransform, D2D1_RECT_F *bounds) const {
1075        return GetBounds(&worldTransform, bounds);
1076    }
1077
1078    HRESULT GetWidenedBounds(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, D2D1_RECT_F *bounds) const {
1079        return GetWidenedBounds(strokeWidth, strokeStyle, &worldTransform, flatteningTolerance, bounds);
1080    }
1081
1082    HRESULT GetWidenedBounds(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) const {
1083        return GetWidenedBounds(strokeWidth, strokeStyle, worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, bounds);
1084    }
1085
1086    HRESULT GetWidenedBounds(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F &worldTransform, D2D1_RECT_F *bounds) const {
1087        return GetWidenedBounds(strokeWidth, strokeStyle, &worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, bounds);
1088    }
1089
1090    HRESULT StrokeContainsPoint(D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, BOOL *contains) const {
1091        return StrokeContainsPoint(point, strokeWidth, strokeStyle, &worldTransform, flatteningTolerance, contains);
1092    }
1093
1094    HRESULT StrokeContainsPoint(D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) const {
1095        return StrokeContainsPoint(point, strokeWidth, strokeStyle, worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, contains);
1096    }
1097
1098    HRESULT StrokeContainsPoint(D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F &worldTransform, BOOL *contains) const {
1099        return StrokeContainsPoint(point, strokeWidth, strokeStyle, &worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, contains);
1100    }
1101
1102    HRESULT FillContainsPoint(D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, BOOL *contains) const {
1103        return FillContainsPoint(point, &worldTransform, flatteningTolerance, contains);
1104    }
1105
1106    HRESULT FillContainsPoint(D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains) const {
1107        return FillContainsPoint(point, worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, contains);
1108    }
1109
1110    HRESULT FillContainsPoint(D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F &worldTransform, BOOL *contains) const {
1111        return FillContainsPoint(point, &worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, contains);
1112    }
1113
1114    HRESULT CompareWithGeometry(ID2D1Geometry *inputGeometry, const D2D1_MATRIX_3X2_F &inputGeometryTransform, FLOAT flatteningTolerance, D2D1_GEOMETRY_RELATION *relation) const {
1115        return CompareWithGeometry(inputGeometry, &inputGeometryTransform, flatteningTolerance, relation);
1116    }
1117
1118    HRESULT CompareWithGeometry(ID2D1Geometry *inputGeometry, const D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) const {
1119        return CompareWithGeometry(inputGeometry, inputGeometryTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, relation);
1120    }
1121
1122    HRESULT CompareWithGeometry(ID2D1Geometry *inputGeometry, const D2D1_MATRIX_3X2_F &inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation) const {
1123        return CompareWithGeometry(inputGeometry, &inputGeometryTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, relation);
1124    }
1125
1126    HRESULT Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const {
1127        return Simplify(simplificationOption, &worldTransform, flatteningTolerance, geometrySink);
1128    }
1129
1130    HRESULT Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1131        return Simplify(simplificationOption, worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1132    }
1133
1134    HRESULT Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F &worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1135        return Simplify(simplificationOption, &worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1136    }
1137
1138    HRESULT Tessellate(const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, ID2D1TessellationSink *tessellationSink) const {
1139        return Tessellate(&worldTransform, flatteningTolerance, tessellationSink);
1140    }
1141
1142    HRESULT Tessellate(const D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink *tessellationSink) const {
1143        return Tessellate(worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, tessellationSink);
1144    }
1145
1146    HRESULT Tessellate(const D2D1_MATRIX_3X2_F &worldTransform, ID2D1TessellationSink *tessellationSink) const {
1147        return Tessellate(&worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, tessellationSink);
1148    }
1149
1150    HRESULT CombineWithGeometry(ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, const D2D1_MATRIX_3X2_F &inputGeometryTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const {
1151        return CombineWithGeometry(inputGeometry, combineMode, &inputGeometryTransform, flatteningTolerance, geometrySink);
1152    }
1153
1154    HRESULT CombineWithGeometry(ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, CONST D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1155        return CombineWithGeometry(inputGeometry, combineMode, inputGeometryTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1156    }
1157
1158    HRESULT CombineWithGeometry(ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, const D2D1_MATRIX_3X2_F &inputGeometryTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1159        return CombineWithGeometry(inputGeometry, combineMode, &inputGeometryTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1160    }
1161
1162    HRESULT Outline(const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const {
1163        return Outline(&worldTransform, flatteningTolerance, geometrySink);
1164    }
1165
1166    HRESULT Outline(const D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1167        return Outline(worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1168    }
1169
1170    HRESULT Outline(const D2D1_MATRIX_3X2_F &worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1171        return Outline(&worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1172    }
1173
1174    HRESULT ComputeArea(const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, FLOAT *area) const {
1175        return ComputeArea(&worldTransform, flatteningTolerance, area);
1176    }
1177
1178    HRESULT ComputeArea(const D2D1_MATRIX_3X2_F *worldTransform, FLOAT *area) const {
1179        return ComputeArea(worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, area);
1180    }
1181
1182    HRESULT ComputeArea(const D2D1_MATRIX_3X2_F &worldTransform, FLOAT *area) const {
1183        return ComputeArea(&worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, area);
1184    }
1185
1186    HRESULT ComputeLength(const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, FLOAT *length) const {
1187        return ComputeLength(&worldTransform, flatteningTolerance, length);
1188    }
1189
1190    HRESULT ComputeLength(const D2D1_MATRIX_3X2_F *worldTransform, FLOAT *length) const {
1191        return ComputeLength(worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, length);
1192    }
1193
1194    HRESULT  ComputeLength(const D2D1_MATRIX_3X2_F &worldTransform, FLOAT *length) const {
1195        return ComputeLength(&worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, length);
1196    }
1197
1198    HRESULT ComputePointAtLength(FLOAT length, const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) const {
1199        return ComputePointAtLength(length, &worldTransform, flatteningTolerance, point, unitTangentVector);
1200    }
1201
1202    HRESULT ComputePointAtLength(FLOAT length, const D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) const {
1203        return ComputePointAtLength(length, worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, point, unitTangentVector);
1204    }
1205
1206    HRESULT ComputePointAtLength(FLOAT length, const D2D1_MATRIX_3X2_F &worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) const {
1207        return ComputePointAtLength(length, &worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, point, unitTangentVector);
1208    }
1209
1210    HRESULT Widen(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F &worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) const {
1211        return Widen(strokeWidth, strokeStyle, &worldTransform, flatteningTolerance, geometrySink);
1212    }
1213
1214    HRESULT Widen(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1215        return Widen(strokeWidth, strokeStyle, worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1216    }
1217
1218    HRESULT Widen(FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F &worldTransform, ID2D1SimplifiedGeometrySink *geometrySink) const {
1219        return Widen(strokeWidth, strokeStyle, &worldTransform, D2D1_DEFAULT_FLATTENING_TOLERANCE, geometrySink);
1220    }
1221};
1222
1223#else
1224
1225typedef struct ID2D1GeometryVtbl {
1226    ID2D1ResourceVtbl Base;
1227
1228    STDMETHOD(GetBounds)(ID2D1Geometry *This, const D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds) PURE;
1229    STDMETHOD(GetWidenedBounds)(ID2D1Geometry *This, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, D2D1_RECT_F *bounds) PURE;
1230    STDMETHOD(StrokeContainsPoint)(ID2D1Geometry *This, D2D1_POINT_2F point, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, BOOL *contains) PURE;
1231    STDMETHOD(FillContainsPoint)(ID2D1Geometry *This, D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, BOOL *contains) PURE;
1232    STDMETHOD(CompareWithGeometry)(ID2D1Geometry *This, ID2D1Geometry *inputGeometry, const D2D1_MATRIX_3X2_F *inputGeometryTransform, FLOAT flatteningTolerance, D2D1_GEOMETRY_RELATION *relation) PURE;
1233    STDMETHOD(Simplify)(ID2D1Geometry *This, D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
1234    STDMETHOD(Tessellate)(ID2D1Geometry *This, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1TessellationSink *tessellationSink) PURE;
1235    STDMETHOD(CombineWithGeometry)(ID2D1Geometry *This, ID2D1Geometry *inputGeometry, D2D1_COMBINE_MODE combineMode, const D2D1_MATRIX_3X2_F *inputGeometryTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
1236    STDMETHOD(Outline)(ID2D1Geometry *This, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
1237    STDMETHOD(ComputeArea)(ID2D1Geometry *This, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, FLOAT *area) PURE;
1238    STDMETHOD(ComputeLength)(ID2D1Geometry *This, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, FLOAT *length) PURE;
1239    STDMETHOD(ComputePointAtLength)(ID2D1Geometry *This, FLOAT length, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector) PURE;
1240    STDMETHOD(Widen)(ID2D1Geometry *This, FLOAT strokeWidth, ID2D1StrokeStyle *strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, FLOAT flatteningTolerance, ID2D1SimplifiedGeometrySink *geometrySink) PURE;
1241} ID2D1GeometryVtbl;
1242
1243interface ID2D1Geometry {
1244    const ID2D1GeometryVtbl *lpVtbl;
1245};
1246
1247#define ID2D1Geometry_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
1248#define ID2D1Geometry_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
1249#define ID2D1Geometry_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
1250#define ID2D1Geometry_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
1251#define ID2D1Geometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->CombineWithGeometry(this,A,B,C,D)
1252#define ID2D1Geometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->CompareWithGeometry(this,A,B,C)
1253#define ID2D1Geometry_ComputeArea(this,A,B) (this)->lpVtbl->ComputeArea(this,A,B)
1254#define ID2D1Geometry_ComputeLength(this,A,B) (this)->lpVtbl->ComputeLength(this,A,B)
1255#define ID2D1Geometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->ComputePointAtLength(this,A,B,C,D)
1256#define ID2D1Geometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->FillContainsPoint(this,A,B,C)
1257#define ID2D1Geometry_GetBounds(this,A,B) (this)->lpVtbl->GetBounds(this,A,B)
1258#define ID2D1Geometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->GetWidenedBounds(this,A,B,C,D)
1259#define ID2D1Geometry_Outline(this,A,B) (this)->lpVtbl->Outline(this,A,B)
1260#define ID2D1Geometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->StrokeContainsPoint(this,A,B,C,D,E)
1261#define ID2D1Geometry_Simplify(this,A,B,C) (this)->lpVtbl->Simplify(this,A,B,C)
1262#define ID2D1Geometry_Tessellate(this,A,B) (this)->lpVtbl->Tessellate(this,A,B)
1263#define ID2D1Geometry_Widen(this,A,B,C,D) (this)->lpVtbl->Widen(this,A,B,C,D)
1264
1265#endif
1266
1267DEFINE_GUID(IID_ID2D1BitmapRenderTarget, 0x2cd90695,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1268
1269#ifndef D2D_USE_C_DEFINITIONS
1270
1271interface ID2D1BitmapRenderTarget : public ID2D1RenderTarget {
1272    STDMETHOD(GetBitmap)(ID2D1Bitmap **bitmap) PURE;
1273};
1274
1275#else
1276
1277typedef struct ID2D1BitmapRenderTargetVtbl {
1278    ID2D1RenderTargetVtbl Base;
1279
1280    STDMETHOD(GetBitmap)(ID2D1BitmapRenderTarget *This, ID2D1Bitmap **bitmap) PURE;
1281} ID2D1BitmapRenderTargetVtbl;
1282
1283interface ID2D1BitmapRenderTarget {
1284    const ID2D1BitmapRenderTargetVtbl *lpVtbl;
1285};
1286
1287#define ID2D1BitmapRenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
1288#define ID2D1BitmapRenderTarget_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
1289#define ID2D1BitmapRenderTarget_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
1290#define ID2D1BitmapRenderTarget_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
1291#define ID2D1BitmapRenderTarget_BeginDraw(this) (this)->lpVtbl->Base.BeginDraw(this)
1292#define ID2D1BitmapRenderTarget_Clear(this,A) (this)->lpVtbl->Base.Clear(this,A)
1293#define ID2D1BitmapRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateBitmap(this,A,B,C,D,E)
1294#define ID2D1BitmapRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->Base.CreateBitmapBrush(this,A,B)
1295#define ID2D1BitmapRenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->Base.CreateBitmapFromWicBitmap(this,A,B)
1296#define ID2D1BitmapRenderTarget_CreateCompatibleBitmapRenderTarget(this,A) (this)->lpVtbl->Base.CreateCompatibleBitmapRenderTarget(this,A)
1297#define ID2D1BitmapRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->Base.CreateGradientStopCollection(this,A,B,C)
1298#define ID2D1BitmapRenderTarget_CreateLayer(this,A) (this)->lpVtbl->Base.CreateLayer(this,A)
1299#define ID2D1BitmapRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateLinearGradientBrush(this,A,B,C,D)
1300#define ID2D1BitmapRenderTarget_CreateMesh(this,A) (this)->lpVtbl->Base.CreateMesh(this,A)
1301#define ID2D1BitmapRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateRadialGradientBrush(this,A,B,C,D)
1302#define ID2D1BitmapRenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->Base.CreateSharedBitmap(this,A,B,C,D)
1303#define ID2D1BitmapRenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->Base.CreateSolidColorBrush(this,A,B,C)
1304#define ID2D1BitmapRenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.DrawBitmap(this,A,B,C,D,E)
1305#define ID2D1BitmapRenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->Base.DrawEllipse(this,A,B,C,D)
1306#define ID2D1BitmapRenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->Base.DrawGeometry(this,A,B,C,D)
1307#define ID2D1BitmapRenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->Base.DrawGlyphRun(this,A,B,C,D)
1308#define ID2D1BitmapRenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->Base.DrawLine(this,A,B,C,D,E)
1309#define ID2D1BitmapRenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->Base.DrawRectangle(this,A,B,C,D)
1310#define ID2D1BitmapRenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->Base.DrawRoundedRectangle(this,A,B,C,D)
1311#define ID2D1BitmapRenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->Base.DrawText(this,A,B,C,D,E,F,G)
1312#define ID2D1BitmapRenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->Base.DrawTextLayout(this,A,B,C,D)
1313#define ID2D1BitmapRenderTarget_EndDraw(this,A,B) (this)->lpVtbl->Base.EndDraw(this,A,B)
1314#define ID2D1BitmapRenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->Base.FillEllipse(this,A,B)
1315#define ID2D1BitmapRenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->Base.FillGeometry(this,A,B,C)
1316#define ID2D1BitmapRenderTarget_FillMesh(this,A,B) (this)->lpVtbl->Base.FillMesh(this,A,B)
1317#define ID2D1BitmapRenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->Base.FillOpacityMask(this,A,B,C,D,E)
1318#define ID2D1BitmapRenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->Base.FillRectangle(this,A,B)
1319#define ID2D1BitmapRenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->Base.FillRoundedRectangle(this,A,B)
1320#define ID2D1BitmapRenderTarget_Flush(this,A,B) (this)->lpVtbl->Base.Flush(this,A,B)
1321#define ID2D1BitmapRenderTarget_GetAntialiasMode(this) (this)->lpVtbl->Base.GetAntialiasMode(this)
1322#define ID2D1BitmapRenderTarget_GetDpi(this,A,B) (this)->lpVtbl->Base.GetDpi(this,A,B)
1323#define ID2D1BitmapRenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->Base.GetMaximumBitmapSize(this)
1324#define ID2D1BitmapRenderTarget_GetPixelFormat(this) (this)->lpVtbl->Base.GetPixelFormat(this)
1325#define ID2D1BitmapRenderTarget_GetPixelSize(this) (this)->lpVtbl->Base.GetPixelSize(this)
1326#define ID2D1BitmapRenderTarget_GetSize(this) (this)->lpVtbl->Base.GetSize(this)
1327#define ID2D1BitmapRenderTarget_GetTags(this,A,B) (this)->lpVtbl->Base.GetTags(this,A,B)
1328#define ID2D1BitmapRenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->Base.GetTextAntialiasMode(this)
1329#define ID2D1BitmapRenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->Base.GetTextRenderingParams(this,A)
1330#define ID2D1BitmapRenderTarget_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform(this,A)
1331#define ID2D1BitmapRenderTarget_IsSupported(this,A) (this)->lpVtbl->Base.IsSupported(this,A)
1332#define ID2D1BitmapRenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->Base.PopAxisAlignedClip(this)
1333#define ID2D1BitmapRenderTarget_PopLayer(this) (this)->lpVtbl->Base.PopLayer(this)
1334#define ID2D1BitmapRenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->Base.PushAxisAlignedClip(this,A,B)
1335#define ID2D1BitmapRenderTarget_PushLayer(this,A,B) (this)->lpVtbl->Base.PushLayer(this,A,B)
1336#define ID2D1BitmapRenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->Base.RestoreDrawingState(this,A)
1337#define ID2D1BitmapRenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->Base.SaveDrawingState(this,A)
1338#define ID2D1BitmapRenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->Base.SetAntialiasMode(this,A)
1339#define ID2D1BitmapRenderTarget_SetDpi(this,A,B) (this)->lpVtbl->Base.SetDpi(this,A,B)
1340#define ID2D1BitmapRenderTarget_SetTags(this,A,B) (this)->lpVtbl->Base.SetTags(this,A,B)
1341#define ID2D1BitmapRenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->Base.SetTextAntialiasMode(this,A)
1342#define ID2D1BitmapRenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->Base.SetTextRenderingParams(this,A)
1343#define ID2D1BitmapRenderTarget_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform(this,A)
1344#define ID2D1BitmapRenderTarget_GetBitmap(this,A) (this)->lpVtbl->GetBitmap(this,A)
1345
1346#endif
1347
1348DEFINE_GUID(IID_ID2D1DCRenderTarget, 0x1c51bc64,0xde61,0x46fd,0x98,0x99,0x63,0xa5,0xd8,0xf0,0x39,0x50);
1349
1350#ifndef D2D_USE_C_DEFINITIONS
1351
1352interface ID2D1DCRenderTarget : public ID2D1RenderTarget {
1353    STDMETHOD(BindDC)(const HDC hDC, const RECT *pSubRect) PURE;
1354};
1355
1356#else
1357
1358typedef struct ID2D1DCRenderTargetVtbl {
1359    ID2D1RenderTargetVtbl Base;
1360
1361    STDMETHOD(BindDC)(ID2D1DCRenderTarget *This, const HDC hDC, const RECT *pSubRect) PURE;
1362} ID2D1DCRenderTargetVtbl;
1363
1364interface ID2D1DCRenderTarget
1365{
1366    const ID2D1DCRenderTargetVtbl *lpVtbl;
1367};
1368
1369#define ID2D1DCRenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
1370#define ID2D1DCRenderTarget_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
1371#define ID2D1DCRenderTarget_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
1372#define ID2D1DCRenderTarget_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
1373#define ID2D1DCRenderTarget_BeginDraw(this) (this)->lpVtbl->Base.BeginDraw(this)
1374#define ID2D1DCRenderTarget_Clear(this,A) (this)->lpVtbl->Base.Clear(this,A)
1375#define ID2D1DCRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateBitmap(this,A,B,C,D,E)
1376#define ID2D1DCRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->Base.CreateBitmapBrush(this,A,B)
1377#define ID2D1DCRenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->Base.CreateBitmapFromWicBitmap(this,A,B)
1378#define ID2D1DCRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->Base.CreateCompatibleRenderTarget(this,A)
1379#define ID2D1DCRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->Base.CreateGradientStopCollection(this,A,B,C)
1380#define ID2D1DCRenderTarget_CreateLayer(this,A) (this)->lpVtbl->Base.CreateLayer(this,A)
1381#define ID2D1DCRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateLinearGradientBrush(this,A,B,C,D)
1382#define ID2D1DCRenderTarget_CreateMesh(this,A) (this)->lpVtbl->Base.CreateMesh(this,A)
1383#define ID2D1DCRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateRadialGradientBrush(this,A,B,C,D)
1384#define ID2D1DCRenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->Base.CreateSharedBitmap(this,A,B,C,D)
1385#define ID2D1DCRenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->Base.CreateSolidColorBrush(this,A,B,C)
1386#define ID2D1DCRenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.DrawBitmap(this,A,B,C,D,E)
1387#define ID2D1DCRenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->Base.DrawEllipse(this,A,B,C,D)
1388#define ID2D1DCRenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->Base.DrawGeometry(this,A,B,C,D)
1389#define ID2D1DCRenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->Base.DrawGlyphRun(this,A,B,C,D)
1390#define ID2D1DCRenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->Base.DrawLine(this,A,B,C,D,E)
1391#define ID2D1DCRenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->Base.DrawRectangle(this,A,B,C,D)
1392#define ID2D1DCRenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->Base.DrawRoundedRectangle(this,A,B,C,D)
1393#define ID2D1DCRenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->Base.DrawText(this,A,B,C,D,E,F,G)
1394#define ID2D1DCRenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->Base.DrawTextLayout(this,A,B,C,D)
1395#define ID2D1DCRenderTarget_EndDraw(this,A,B) (this)->lpVtbl->Base.EndDraw(this,A,B)
1396#define ID2D1DCRenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->Base.FillEllipse(this,A,B)
1397#define ID2D1DCRenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->Base.FillGeometry(this,A,B,C)
1398#define ID2D1DCRenderTarget_FillMesh(this,A,B) (this)->lpVtbl->Base.FillMesh(this,A,B)
1399#define ID2D1DCRenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->Base.FillOpacityMask(this,A,B,C,D,E)
1400#define ID2D1DCRenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->Base.FillRectangle(this,A,B)
1401#define ID2D1DCRenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->Base.FillRoundedRectangle(this,A,B)
1402#define ID2D1DCRenderTarget_Flush(this,A,B) (this)->lpVtbl->Base.Flush(this,A,B)
1403#define ID2D1DCRenderTarget_GetAntialiasMode(this) (this)->lpVtbl->Base.GetAntialiasMode(this)
1404#define ID2D1DCRenderTarget_GetDpi(this,A,B) (this)->lpVtbl->Base.GetDpi(this,A,B)
1405#define ID2D1DCRenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->Base.GetMaximumBitmapSize(this)
1406#define ID2D1DCRenderTarget_GetPixelFormat(this) (this)->lpVtbl->Base.GetPixelFormat(this)
1407#define ID2D1DCRenderTarget_GetPixelSize(this) (this)->lpVtbl->Base.GetPixelSize(this)
1408#define ID2D1DCRenderTarget_GetSize(this) (this)->lpVtbl->Base.GetSize(this)
1409#define ID2D1DCRenderTarget_GetTags(this,A,B) (this)->lpVtbl->Base.GetTags(this,A,B)
1410#define ID2D1DCRenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->Base.GetTextAntialiasMode(this)
1411#define ID2D1DCRenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->Base.GetTextRenderingParams(this,A)
1412#define ID2D1DCRenderTarget_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform(this,A)
1413#define ID2D1DCRenderTarget_IsSupported(this,A) (this)->lpVtbl->Base.IsSupported(this,A)
1414#define ID2D1DCRenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->Base.PopAxisAlignedClip(this)
1415#define ID2D1DCRenderTarget_PopLayer(this) (this)->lpVtbl->Base.PopLayer(this)
1416#define ID2D1DCRenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->Base.PushAxisAlignedClip(this,A,B)
1417#define ID2D1DCRenderTarget_PushLayer(this,A,B) (this)->lpVtbl->Base.PushLayer(this,A,B)
1418#define ID2D1DCRenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->Base.RestoreDrawingState(this,A)
1419#define ID2D1DCRenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->Base.SaveDrawingState(this,A)
1420#define ID2D1DCRenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->Base.SetAntialiasMode(this,A)
1421#define ID2D1DCRenderTarget_SetDpi(this,A,B) (this)->lpVtbl->Base.SetDpi(this,A,B)
1422#define ID2D1DCRenderTarget_SetTags(this,A,B) (this)->lpVtbl->Base.SetTags(this,A,B)
1423#define ID2D1DCRenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->Base.SetTextAntialiasMode(this,A)
1424#define ID2D1DCRenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->Base.SetTextRenderingParams(this,A)
1425#define ID2D1DCRenderTarget_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform(this,A)
1426#define ID2D1DCRenderTarget_BindDC(this,A,B) (this)->lpVtbl->BindDC(this,A,B)
1427
1428#endif
1429
1430DEFINE_GUID(IID_ID2D1DrawingStateBlock, 0x28506e39,0xebf6,0x46a1,0xbb,0x47,0xfd,0x85,0x56,0x5a,0xb9,0x57);
1431
1432#ifndef D2D_USE_C_DEFINITIONS
1433
1434interface ID2D1DrawingStateBlock : public ID2D1Resource {
1435    STDMETHOD_(void, GetDescription)(D2D1_DRAWING_STATE_DESCRIPTION *stateDescription) const PURE;
1436    STDMETHOD_(void, SetDescription)(const D2D1_DRAWING_STATE_DESCRIPTION *stateDescription) PURE;
1437    STDMETHOD_(void, SetTextRenderingParams)(IDWriteRenderingParams *textRenderingParams = NULL) PURE;
1438    STDMETHOD_(void, GetTextRenderingParams)(IDWriteRenderingParams **textRenderingParams) const PURE;
1439
1440    void SetDescription(const D2D1_DRAWING_STATE_DESCRIPTION &stateDescription) {
1441        SetDescription(&stateDescription);
1442    }
1443};
1444
1445#else
1446
1447typedef struct ID2D1DrawingStateBlockVtbl {
1448    ID2D1ResourceVtbl Base;
1449
1450    STDMETHOD_(void, GetDescription)(ID2D1DrawingStateBlock *This, D2D1_DRAWING_STATE_DESCRIPTION *stateDescription) PURE;
1451    STDMETHOD_(void, SetDescription)(ID2D1DrawingStateBlock *This, const D2D1_DRAWING_STATE_DESCRIPTION *stateDescription) PURE;
1452    STDMETHOD_(void, SetTextRenderingParams)(ID2D1DrawingStateBlock *This, IDWriteRenderingParams *textRenderingParams) PURE;
1453    STDMETHOD_(void, GetTextRenderingParams)(ID2D1DrawingStateBlock *This, IDWriteRenderingParams **textRenderingParams) PURE;
1454} ID2D1DrawingStateBlockVtbl;
1455
1456interface ID2D1DrawingStateBlock {
1457    const struct ID2D1DrawingStateBlockVtbl *lpVtbl;
1458};
1459
1460#define ID2D1DrawingStateBlock_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
1461#define ID2D1DrawingStateBlock_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
1462#define ID2D1DrawingStateBlock_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
1463#define ID2D1DrawingStateBlock_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
1464#define ID2D1DrawingStateBlock_GetDescription(this,A) (this)->lpVtbl->GetDescription(this,A)
1465#define ID2D1DrawingStateBlock_GetTextRenderingParams(this,A) (this)->lpVtbl->GetTextRenderingParams(this,A)
1466#define ID2D1DrawingStateBlock_SetDescription(this,A) (this)->lpVtbl->SetDescription(this,A)
1467#define ID2D1DrawingStateBlock_SetTextRenderingParams(this,A) (this)->lpVtbl->SetTextRenderingParams(this,A)
1468
1469#endif
1470
1471DEFINE_GUID(IID_ID2D1SimplifiedGeometrySink, 0x2cd9069e,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1472
1473#ifndef D2D_USE_C_DEFINITIONS
1474
1475interface ID2D1SimplifiedGeometrySink : public IUnknown {
1476    STDMETHOD_(void, SetFillMode)(D2D1_FILL_MODE fillMode) PURE;
1477    STDMETHOD_(void, SetSegmentFlags)(D2D1_PATH_SEGMENT vertexFlags) PURE;
1478    STDMETHOD_(void, BeginFigure)(D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin) PURE;
1479    STDMETHOD_(void, AddLines)(const D2D1_POINT_2F *points, UINT pointsCount) PURE;
1480    STDMETHOD_(void, AddBeziers)(const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) PURE;
1481    STDMETHOD_(void, EndFigure)(D2D1_FIGURE_END figureEnd) PURE;
1482    STDMETHOD(Close)(void) PURE;
1483};
1484
1485#else
1486
1487typedef struct ID2D1SimplifiedGeometrySinkVtbl {
1488    IUnknownVtbl Base;
1489
1490    STDMETHOD_(void, SetFillMode)(ID2D1SimplifiedGeometrySink *This, D2D1_FILL_MODE fillMode) PURE;
1491    STDMETHOD_(void, SetSegmentFlags)(ID2D1SimplifiedGeometrySink *This, D2D1_PATH_SEGMENT vertexFlags) PURE;
1492    STDMETHOD_(void, BeginFigure)(ID2D1SimplifiedGeometrySink *This, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin) PURE;
1493    STDMETHOD_(void, AddLines)(ID2D1SimplifiedGeometrySink *This, const D2D1_POINT_2F *points, UINT pointsCount) PURE;
1494    STDMETHOD_(void, AddBeziers)(ID2D1SimplifiedGeometrySink *This, const D2D1_BEZIER_SEGMENT *beziers, UINT beziersCount) PURE;
1495    STDMETHOD_(void, EndFigure)(ID2D1SimplifiedGeometrySink *This, D2D1_FIGURE_END figureEnd) PURE;
1496    STDMETHOD(Close)(ID2D1SimplifiedGeometrySink *This) PURE;
1497} ID2D1SimplifiedGeometrySinkVtbl;
1498
1499interface ID2D1SimplifiedGeometrySink {
1500    const ID2D1SimplifiedGeometrySinkVtbl *lpVtbl;
1501};
1502
1503#define ID2D1SimplifiedGeometrySink_QueryInterface(this,A,B) (this)->lpVtbl->Base.QueryInterface((IUnknown*)this,A,B)
1504#define ID2D1SimplifiedGeometrySink_AddRef(this) (this)->lpVtbl->Base.AddRef((IUnknown*)this)
1505#define ID2D1SimplifiedGeometrySink_Release(this) (this)->lpVtbl->Base.Release((IUnknown*)this)
1506#define ID2D1SimplifiedGeometrySink_SetFillMode(this,A) (this)->lpVtbl->SetFillMode(this,A)
1507#define ID2D1SimplifiedGeometrySink_SetSegmentFlags(this,A) (this)->lpVtbl->SetSegmentFlags(this,A)
1508#define ID2D1SimplifiedGeometrySink_BeginFigure(this,A,B) (this)->lpVtbl->BeginFigure(this,A,B)
1509#define ID2D1SimplifiedGeometrySink_AddLines(this,A,B) (this)->lpVtbl->AddLines(this,A,B)
1510#define ID2D1SimplifiedGeometrySink_AddBeziers(this,A,B) (this)->lpVtbl->AddBeziers(this,A,B)
1511#define ID2D1SimplifiedGeometrySink_EndFigure(this,A) (this)->lpVtbl->EndFigure(this,A)
1512#define ID2D1SimplifiedGeometrySink_Close(this) (this)->lpVtbl->Close(this)
1513
1514#endif
1515
1516DEFINE_GUID(IID_ID2D1EllipseGeometry, 0x2cd906a4,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1517
1518#ifndef D2D_USE_C_DEFINITIONS
1519
1520interface ID2D1EllipseGeometry : public ID2D1Geometry {
1521    STDMETHOD_(void, GetEllipse)(D2D1_ELLIPSE *ellipse) const PURE;
1522};
1523
1524#else
1525
1526typedef struct ID2D1EllipseGeometryVtbl {
1527    ID2D1GeometryVtbl Base;
1528
1529    STDMETHOD_(void, GetEllipse)(ID2D1EllipseGeometry *This, D2D1_ELLIPSE *ellipse) PURE;
1530} ID2D1EllipseGeometryVtbl;
1531
1532interface ID2D1EllipseGeometry {
1533    const struct ID2D1EllipseGeometryVtbl *lpVtbl;
1534};
1535
1536#define ID2D1EllipseGeometry_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
1537#define ID2D1EllipseGeometry_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
1538#define ID2D1EllipseGeometry_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
1539#define ID2D1EllipseGeometry_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
1540#define ID2D1EllipseGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->Base.CombineWithGeometry(this,A,B,C,D)
1541#define ID2D1EllipseGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->Base.CompareWithGeometry(this,A,B,C)
1542#define ID2D1EllipseGeometry_ComputeArea(this,A,B) (this)->lpVtbl->Base.ComputeArea(this,A,B)
1543#define ID2D1EllipseGeometry_ComputeLength(this,A,B) (this)->lpVtbl->Base.ComputeLength(this,A,B)
1544#define ID2D1EllipseGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->Base.ComputePointAtLength(this,A,B,C,D)
1545#define ID2D1EllipseGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->Base.FillContainsPoint(this,A,B,C)
1546#define ID2D1EllipseGeometry_GetBounds(this,A,B) (this)->lpVtbl->Base.GetBounds(this,A,B)
1547#define ID2D1EllipseGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->Base.GetWidenedBounds(this,A,B,C,D)
1548#define ID2D1EllipseGeometry_Outline(this,A,B) (this)->lpVtbl->Base.Outline(this,A,B)
1549#define ID2D1EllipseGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->Base.StrokeContainsPoint(this,A,B,C,D,E)
1550#define ID2D1EllipseGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Base.Simplify(this,A,B,C)
1551#define ID2D1EllipseGeometry_Tessellate(this,A,B) (this)->lpVtbl->Base.Tessellate(this,A,B)
1552#define ID2D1EllipseGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Base.Widen(this,A,B,C,D)
1553#define ID2D1EllipseGeometry_GetEllipse(this,A) (this)->lpVtbl->GetEllipse(this,A)
1554
1555#endif
1556
1557DEFINE_GUID(IID_ID2D1Factory, 0x06152247,0x6f50,0x465a,0x92,0x45,0x11,0x8b,0xfd,0x3b,0x60,0x07);
1558
1559#ifndef D2D_USE_C_DEFINITIONS
1560
1561interface ID2D1Factory : public IUnknown {
1562    STDMETHOD(ReloadSystemMetrics)(void) PURE;
1563    STDMETHOD_(void, GetDesktopDpi)(FLOAT *dpiX, FLOAT *dpiY) PURE;
1564    STDMETHOD(CreateRectangleGeometry)(const D2D1_RECT_F *rectangle, ID2D1RectangleGeometry **rectangleGeometry) PURE;
1565    STDMETHOD(CreateRoundedRectangleGeometry)(const D2D1_ROUNDED_RECT *roundedRectangle, ID2D1RoundedRectangleGeometry **roundedRectangleGeometry) PURE;
1566    STDMETHOD(CreateEllipseGeometry)(const D2D1_ELLIPSE *ellipse, ID2D1EllipseGeometry **ellipseGeometry) PURE;
1567    STDMETHOD(CreateGeometryGroup)(D2D1_FILL_MODE fillMode, ID2D1Geometry **geometries, UINT geometriesCount, ID2D1GeometryGroup **geometryGroup) PURE;
1568    STDMETHOD(CreateTransformedGeometry)(ID2D1Geometry *sourceGeometry, const D2D1_MATRIX_3X2_F *transform, ID2D1TransformedGeometry **transformedGeometry) PURE;
1569    STDMETHOD(CreatePathGeometry)(ID2D1PathGeometry **pathGeometry) PURE;
1570    STDMETHOD(CreateStrokeStyle)(const D2D1_STROKE_STYLE_PROPERTIES *strokeStyleProperties, const FLOAT *dashes, UINT dashesCount, ID2D1StrokeStyle **strokeStyle) PURE;
1571    STDMETHOD(CreateDrawingStateBlock)(const D2D1_DRAWING_STATE_DESCRIPTION *drawingStateDescription, IDWriteRenderingParams *textRenderingParams, ID2D1DrawingStateBlock **drawingStateBlock) PURE;
1572    STDMETHOD(CreateWicBitmapRenderTarget)(IWICBitmap *target, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget **renderTarget) PURE;
1573    STDMETHOD(CreateHwndRenderTarget)(const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwndRenderTargetProperties, ID2D1HwndRenderTarget **hwndRenderTarget) PURE;
1574    STDMETHOD(CreateDxgiSurfaceRenderTarget)(IDXGISurface *dxgiSurface, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget **renderTarget) PURE;
1575    STDMETHOD(CreateDCRenderTarget)(const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1DCRenderTarget **dcRenderTarget) PURE;
1576
1577    HRESULT CreateRectangleGeometry(const D2D1_RECT_F &rectangle, ID2D1RectangleGeometry **rectangleGeometry) {
1578        return CreateRectangleGeometry(&rectangle, rectangleGeometry);
1579    }
1580
1581    HRESULT CreateRoundedRectangleGeometry(const D2D1_ROUNDED_RECT &roundedRectangle, ID2D1RoundedRectangleGeometry **roundedRectangleGeometry) {
1582        return CreateRoundedRectangleGeometry(&roundedRectangle, roundedRectangleGeometry);
1583    }
1584
1585    HRESULT CreateEllipseGeometry(const D2D1_ELLIPSE &ellipse, ID2D1EllipseGeometry **ellipseGeometry) {
1586        return CreateEllipseGeometry(&ellipse, ellipseGeometry);
1587    }
1588
1589    HRESULT CreateTransformedGeometry(ID2D1Geometry *sourceGeometry, const D2D1_MATRIX_3X2_F &transform, ID2D1TransformedGeometry **transformedGeometry) {
1590        return CreateTransformedGeometry(sourceGeometry, &transform, transformedGeometry);
1591    }
1592
1593    HRESULT CreateStrokeStyle(const D2D1_STROKE_STYLE_PROPERTIES &strokeStyleProperties, const FLOAT *dashes, UINT dashesCount, ID2D1StrokeStyle **strokeStyle) {
1594        return CreateStrokeStyle(&strokeStyleProperties, dashes, dashesCount, strokeStyle);
1595    }
1596
1597    HRESULT CreateDrawingStateBlock(const D2D1_DRAWING_STATE_DESCRIPTION &drawingStateDescription, ID2D1DrawingStateBlock **drawingStateBlock) {
1598        return CreateDrawingStateBlock(&drawingStateDescription, NULL, drawingStateBlock);
1599    }
1600
1601    HRESULT CreateDrawingStateBlock(ID2D1DrawingStateBlock **drawingStateBlock) {
1602        return CreateDrawingStateBlock(NULL, NULL, drawingStateBlock);
1603    }
1604
1605    HRESULT CreateWicBitmapRenderTarget(IWICBitmap *target, const D2D1_RENDER_TARGET_PROPERTIES &renderTargetProperties, ID2D1RenderTarget **renderTarget) {
1606        return CreateWicBitmapRenderTarget(target, &renderTargetProperties, renderTarget);
1607    }
1608
1609    HRESULT CreateHwndRenderTarget(const D2D1_RENDER_TARGET_PROPERTIES &renderTargetProperties, const D2D1_HWND_RENDER_TARGET_PROPERTIES &hwndRenderTargetProperties, ID2D1HwndRenderTarget **hwndRenderTarget) {
1610        return CreateHwndRenderTarget(&renderTargetProperties, &hwndRenderTargetProperties, hwndRenderTarget);
1611    }
1612
1613    HRESULT CreateDxgiSurfaceRenderTarget(IDXGISurface *dxgiSurface, const D2D1_RENDER_TARGET_PROPERTIES &renderTargetProperties, ID2D1RenderTarget **renderTarget) {
1614        return CreateDxgiSurfaceRenderTarget(dxgiSurface, &renderTargetProperties, renderTarget);
1615    }
1616};
1617
1618#else
1619
1620typedef struct ID2D1FactoryVtbl {
1621    IUnknownVtbl Base;
1622
1623    STDMETHOD(ReloadSystemMetrics)(ID2D1Factory *This) PURE;
1624    STDMETHOD_(void, GetDesktopDpi)(ID2D1Factory *This, FLOAT *dpiX, FLOAT *dpiY) PURE;
1625    STDMETHOD(CreateRectangleGeometry)(ID2D1Factory *This, const D2D1_RECT_F *rectangle, ID2D1RectangleGeometry **rectangleGeometry) PURE;
1626    STDMETHOD(CreateRoundedRectangleGeometry)(ID2D1Factory *This, const D2D1_ROUNDED_RECT *roundedRectangle, ID2D1RoundedRectangleGeometry **roundedRectangleGeometry) PURE;
1627    STDMETHOD(CreateEllipseGeometry)(ID2D1Factory *This, const D2D1_ELLIPSE *ellipse, ID2D1EllipseGeometry **ellipseGeometry) PURE;
1628    STDMETHOD(CreateGeometryGroup)(ID2D1Factory *This, D2D1_FILL_MODE fillMode, ID2D1Geometry **geometries, UINT geometriesCount, ID2D1GeometryGroup **geometryGroup) PURE;
1629    STDMETHOD(CreateTransformedGeometry)(ID2D1Factory *This, ID2D1Geometry *sourceGeometry, const D2D1_MATRIX_3X2_F *transform, ID2D1TransformedGeometry **transformedGeometry) PURE;
1630    STDMETHOD(CreatePathGeometry)(ID2D1Factory *This, ID2D1PathGeometry **pathGeometry) PURE;
1631    STDMETHOD(CreateStrokeStyle)(ID2D1Factory *This, const D2D1_STROKE_STYLE_PROPERTIES *strokeStyleProperties, const FLOAT *dashes, UINT dashesCount, ID2D1StrokeStyle **strokeStyle) PURE;
1632    STDMETHOD(CreateDrawingStateBlock)(ID2D1Factory *This, const D2D1_DRAWING_STATE_DESCRIPTION *drawingStateDescription, IDWriteRenderingParams *textRenderingParams, ID2D1DrawingStateBlock **drawingStateBlock) PURE;
1633    STDMETHOD(CreateWicBitmapRenderTarget)(ID2D1Factory *This, IWICBitmap *target, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget **renderTarget) PURE;
1634    STDMETHOD(CreateHwndRenderTarget)(ID2D1Factory *This, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, const D2D1_HWND_RENDER_TARGET_PROPERTIES *hwndRenderTargetProperties, ID2D1HwndRenderTarget **hwndRenderTarget) PURE;
1635    STDMETHOD(CreateDxgiSurfaceRenderTarget)(ID2D1Factory *This, IDXGISurface *dxgiSurface, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget **renderTarget) PURE;
1636    STDMETHOD(CreateDCRenderTarget)(ID2D1Factory *This, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1DCRenderTarget **dcRenderTarget) PURE;
1637} ID2D1FactoryVtbl;
1638
1639interface ID2D1Factory {
1640    const ID2D1FactoryVtbl *lpVtbl;
1641};
1642
1643#define ID2D1Factory_QueryInterface(this,A,B) (this)->lpVtbl->Base.QueryInterface((IUnknown*)this,A,B)
1644#define ID2D1Factory_AddRef(this) (this)->lpVtbl->Base.AddRef((IUnknown*)this)
1645#define ID2D1Factory_Release(this) (this)->lpVtbl->Base.Release((IUnknown*)this)
1646#define ID2D1Factory_CreateDCRenderTarget(this,A,B) (this)->lpVtbl->CreateDCRenderTarget(this,A,B)
1647#define ID2D1Factory_CreateDrawingStateBlock(this,A,B,C) (this)->lpVtbl->CreateDrawingStateBlock(this,A,B,C)
1648#define ID2D1Factory_CreateDxgiSurfaceRenderTarget(this,A,B,C) (this)->lpVtbl->CreateDxgiSurfaceRenderTarget(this,A,B,C)
1649#define ID2D1Factory_CreateEllipseGeometry(this,A,B) (this)->lpVtbl->CreateEllipseGeometry(this,A,B)
1650#define ID2D1Factory_CreateGeometryGroup(this,A,B,C,D) (this)->lpVtbl->CreateGeometryGroup(this,A,B,C,D)
1651#define ID2D1Factory_CreateHwndRenderTarget(this,A,B,C) (this)->lpVtbl->CreateHwndRenderTarget(this,A,B,C)
1652#define ID2D1Factory_CreatePathGeometry(this,A) (this)->lpVtbl->CreatePathGeometry(this,A)
1653#define ID2D1Factory_CreateRectangleGeometry(this,A,B) (this)->lpVtbl->CreateRectangleGeometry(this,A,B)
1654#define ID2D1Factory_CreateRoundedRectangleGeometry(this,A,B) (this)->lpVtbl->CreateRoundedRectangleGeometry(this,A,B)
1655#define ID2D1Factory_CreateStrokeStyle(this,A,B,C,D) (this)->lpVtbl->CreateStrokeStyle(this,A,B,C,D)
1656#define ID2D1Factory_CreateTransformedGeometry(this,A,B,C) (this)->lpVtbl->CreateTransformedGeometry(this,A,B,C)
1657#define ID2D1Factory_CreateWicBitmapRenderTarget(this,A,B,C) (this)->lpVtbl->CreateWicBitmapRenderTarget(this,A,B,C)
1658#define ID2D1Factory_GetDesktopDpi(this,A,B) (this)->lpVtbl->GetDesktopDpi(this,A,B)
1659#define ID2D1Factory_ReloadSystemMetrics(this) (this)->lpVtbl->ReloadSystemMetrics(this)
1660
1661#endif
1662
1663DEFINE_GUID(IID_ID2D1GdiInteropRenderTarget, 0xe0db51c3,0x6f77,0x4bae,0xb3,0xd5,0xe4,0x75,0x09,0xb3,0x58,0x38);
1664
1665#ifndef D2D_USE_C_DEFINITIONS
1666
1667interface ID2D1GdiInteropRenderTarget : public IUnknown {
1668    STDMETHOD(GetDC)(D2D1_DC_INITIALIZE_MODE mode, HDC *hdc) PURE;
1669    STDMETHOD(ReleaseDC)(const RECT *update) PURE;
1670};
1671
1672#else
1673
1674typedef struct ID2D1GdiInteropRenderTargetVtbl {
1675    IUnknownVtbl Base;
1676
1677    STDMETHOD(GetDC)(ID2D1GdiInteropRenderTarget *This, D2D1_DC_INITIALIZE_MODE mode, HDC *hdc) PURE;
1678    STDMETHOD(ReleaseDC)(ID2D1GdiInteropRenderTarget *This, const RECT *update) PURE;
1679} ID2D1GdiInteropRenderTargetVtbl;
1680
1681interface ID2D1GdiInteropRenderTarget {
1682    const ID2D1GdiInteropRenderTargetVtbl *lpVtbl;
1683};
1684
1685#define ID2D1GdiInteropRenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->Base.QueryInterface((IUnknown*)this,A,B)
1686#define ID2D1GdiInteropRenderTarget_AddRef(this) (this)->lpVtbl->Base.AddRef((IUnknown*)this)
1687#define ID2D1GdiInteropRenderTarget_Release(this) (this)->lpVtbl->Base.Release((IUnknown*)this)
1688#define ID2D1GdiInteropRenderTarget_GetDC(this,A,B) (this)->lpVtbl->GetDC(this,A,B)
1689#define ID2D1GdiInteropRenderTarget_ReleaseDC(this,A) (this)->lpVtbl->ReleaseDC(this,A)
1690
1691#endif
1692
1693DEFINE_GUID(IID_ID2D1GeometryGroup, 0x2cd906a6,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1694
1695#ifndef D2D_USE_C_DEFINITIONS
1696
1697interface ID2D1GeometryGroup : public ID2D1Geometry {
1698    STDMETHOD_(D2D1_FILL_MODE, GetFillMode)() const PURE;
1699    STDMETHOD_(UINT32, GetSourceGeometryCount)() const PURE;
1700    STDMETHOD_(void, GetSourceGeometries)(ID2D1Geometry **geometries, UINT geometriesCount) const PURE;
1701};
1702
1703#else
1704
1705typedef struct ID2D1GeometryGroupVtbl {
1706    ID2D1GeometryVtbl Base;
1707
1708    STDMETHOD_(D2D1_FILL_MODE, GetFillMode)(ID2D1GeometryGroup *This) PURE;
1709    STDMETHOD_(UINT32, GetSourceGeometryCount)(ID2D1GeometryGroup *This) PURE;
1710    STDMETHOD_(void, GetSourceGeometries)(ID2D1GeometryGroup *This, ID2D1Geometry **geometries, UINT geometriesCount) PURE;
1711} ID2D1GeometryGroupVtbl;
1712
1713interface ID2D1GeometryGroup {
1714    const struct ID2D1GeometryGroupVtbl *lpVtbl;
1715};
1716
1717#define ID2D1GeometryGroup_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
1718#define ID2D1GeometryGroup_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
1719#define ID2D1GeometryGroup_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
1720#define ID2D1GeometryGroup_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
1721#define ID2D1GeometryGroup_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->Base.CombineWithGeometry(this,A,B,C,D)
1722#define ID2D1GeometryGroup_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->Base.CompareWithGeometry(this,A,B,C)
1723#define ID2D1GeometryGroup_ComputeArea(this,A,B) (this)->lpVtbl->Base.ComputeArea(this,A,B)
1724#define ID2D1GeometryGroup_ComputeLength(this,A,B) (this)->lpVtbl->Base.ComputeLength(this,A,B)
1725#define ID2D1GeometryGroup_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->Base.ComputePointAtLength(this,A,B,C,D)
1726#define ID2D1GeometryGroup_FillContainsPoint(this,A,B,C) (this)->lpVtbl->Base.FillContainsPoint(this,A,B,C)
1727#define ID2D1GeometryGroup_GetBounds(this,A,B) (this)->lpVtbl->Base.GetBounds(this,A,B)
1728#define ID2D1GeometryGroup_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->Base.GetWidenedBounds(this,A,B,C,D)
1729#define ID2D1GeometryGroup_Outline(this,A,B) (this)->lpVtbl->Base.Outline(this,A,B)
1730#define ID2D1GeometryGroup_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->Base.StrokeContainsPoint(this,A,B,C,D,E)
1731#define ID2D1GeometryGroup_Simplify(this,A,B,C) (this)->lpVtbl->Base.Simplify(this,A,B,C)
1732#define ID2D1GeometryGroup_Tessellate(this,A,B) (this)->lpVtbl->Base.Tessellate(this,A,B)
1733#define ID2D1GeometryGroup_Widen(this,A,B,C,D) (this)->lpVtbl->Base.Widen(this,A,B,C,D)
1734#define ID2D1GeometryGroup_GetFillMode(this) (this)->lpVtbl->GetFillMode(this)
1735#define ID2D1GeometryGroup_GetSourceGeometries(this,A,B) (this)->lpVtbl->GetSourceGeometries(this,A,B)
1736#define ID2D1GeometryGroup_GetSourceGeometryCount(this) (this)->lpVtbl->GetSourceGeometryCount(this)
1737
1738#endif
1739
1740DEFINE_GUID(IID_ID2D1GeometrySink, 0x2cd9069f,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1741
1742#ifndef D2D_USE_C_DEFINITIONS
1743
1744interface ID2D1GeometrySink : public ID2D1SimplifiedGeometrySink {
1745    STDMETHOD_(void, AddLine)(D2D1_POINT_2F point) PURE;
1746    STDMETHOD_(void, AddBezier)(const D2D1_BEZIER_SEGMENT *bezier) PURE;
1747    STDMETHOD_(void, AddQuadraticBezier)(const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier) PURE;
1748    STDMETHOD_(void, AddQuadraticBeziers)(const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, UINT beziersCount) PURE;
1749    STDMETHOD_(void, AddArc)(const D2D1_ARC_SEGMENT *arc) PURE;
1750
1751    void AddBezier(const D2D1_BEZIER_SEGMENT &bezier) {
1752        AddBezier(&bezier);
1753    }
1754
1755    void AddQuadraticBezier(const D2D1_QUADRATIC_BEZIER_SEGMENT &bezier) {
1756        AddQuadraticBezier(&bezier);
1757    }
1758
1759    void  AddArc(const D2D1_ARC_SEGMENT &arc) {
1760        AddArc(&arc);
1761    }
1762};
1763
1764#else
1765
1766typedef struct ID2D1GeometrySinkVtbl {
1767    ID2D1SimplifiedGeometrySinkVtbl Base;
1768
1769    STDMETHOD_(void, AddLine)(ID2D1GeometrySink *This, D2D1_POINT_2F point) PURE;
1770    STDMETHOD_(void, AddBezier)(ID2D1GeometrySink *This, const D2D1_BEZIER_SEGMENT *bezier) PURE;
1771    STDMETHOD_(void, AddQuadraticBezier)(ID2D1GeometrySink *This, const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier) PURE;
1772    STDMETHOD_(void, AddQuadraticBeziers)(ID2D1GeometrySink *This, const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, UINT beziersCount) PURE;
1773    STDMETHOD_(void, AddArc)(ID2D1GeometrySink *This, const D2D1_ARC_SEGMENT *arc) PURE;
1774} ID2D1GeometrySinkVtbl;
1775
1776interface ID2D1GeometrySink {
1777    const ID2D1GeometrySinkVtbl *lpVtbl;
1778};
1779
1780#define ID2D1GeometrySink_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
1781#define ID2D1GeometrySink_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
1782#define ID2D1GeometrySink_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
1783#define ID2D1GeometrySink_SetFillMode(this,A) (this)->lpVtbl->Base.SetFillMode(this,A)
1784#define ID2D1GeometrySink_SetSegmentFlags(this,A) (this)->lpVtbl->Base.SetSegmentFlags(this,A)
1785#define ID2D1GeometrySink_BeginFigure(this,A,B) (this)->lpVtbl->Base.BeginFigure(this,A,B)
1786#define ID2D1GeometrySink_AddLines(this,A,B) (this)->lpVtbl->Base.AddLines(this,A,B)
1787#define ID2D1GeometrySink_AddBeziers(this,A,B) (this)->lpVtbl->Base.AddBeziers(this,A,B)
1788#define ID2D1GeometrySink_EndFigure(this,A) (this)->lpVtbl->Base.EndFigure(this,A)
1789#define ID2D1GeometrySink_Close(this) (this)->lpVtbl->Base.Close(this)
1790#define ID2D1GeometrySink_AddArc(this,A) (this)->lpVtbl->AddArc(this,A)
1791#define ID2D1GeometrySink_AddBezier(this,A) (this)->lpVtbl->AddBezier(this,A)
1792#define ID2D1GeometrySink_AddLine(this,A) (this)->lpVtbl->AddLine(this,A)
1793#define ID2D1GeometrySink_AddQuadraticBezier(this,A) (this)->lpVtbl->AddQuadraticBezier(this,A)
1794#define ID2D1GeometrySink_AddQuadraticBeziers(this,A,B) (this)->lpVtbl->AddQuadraticBeziers(this,A,B)
1795
1796#endif
1797
1798DEFINE_GUID(IID_ID2D1GradientStopCollection, 0x2cd906a7,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1799
1800#ifndef D2D_USE_C_DEFINITIONS
1801
1802interface ID2D1GradientStopCollection : public ID2D1Resource {
1803    STDMETHOD_(UINT32, GetGradientStopCount)(void) const PURE;
1804    STDMETHOD_(void, GetGradientStops)(D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount) const PURE;
1805    STDMETHOD_(D2D1_GAMMA, GetColorInterpolationGamma)(void) const PURE;
1806    STDMETHOD_(D2D1_EXTEND_MODE, GetExtendMode)(void) const PURE;
1807};
1808
1809#else
1810
1811typedef struct ID2D1GradientStopCollectionVtbl {
1812    ID2D1ResourceVtbl Base;
1813
1814    STDMETHOD_(UINT32, GetGradientStopCount)(ID2D1GradientStopCollection *This) PURE;
1815    STDMETHOD_(void, GetGradientStops)(ID2D1GradientStopCollection *This, D2D1_GRADIENT_STOP *gradientStops, UINT gradientStopsCount) PURE;
1816    STDMETHOD_(D2D1_GAMMA, GetColorInterpolationGamma)(ID2D1GradientStopCollection *This) PURE;
1817    STDMETHOD_(D2D1_EXTEND_MODE, GetExtendMode)(ID2D1GradientStopCollection *This) PURE;
1818} ID2D1GradientStopCollectionVtbl;
1819
1820interface ID2D1GradientStopCollection {
1821    const ID2D1GradientStopCollectionVtbl *lpVtbl;
1822};
1823
1824#define ID2D1GradientStopCollection_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
1825#define ID2D1GradientStopCollection_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
1826#define ID2D1GradientStopCollection_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
1827#define ID2D1GradientStopCollection_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
1828#define ID2D1GradientStopCollection_GetColorInterpolationGamma(this) (this)->lpVtbl->GetColorInterpolationGamma(this)
1829#define ID2D1GradientStopCollection_GetExtendMode(this) (this)->lpVtbl->GetExtendMode(this)
1830#define ID2D1GradientStopCollection_GetGradientStopCount(this) (this)->lpVtbl->GetGradientStopCount(this)
1831#define ID2D1GradientStopCollection_GetGradientStops(this,A,B) (this)->lpVtbl->GetGradientStops(this,A,B)
1832
1833#endif
1834
1835#ifndef D2D_USE_C_DEFINITIONS
1836
1837interface ID2D1HwndRenderTarget : public ID2D1RenderTarget {
1838    STDMETHOD_(D2D1_WINDOW_STATE, CheckWindowState)() PURE;
1839    STDMETHOD(Resize)(const D2D1_SIZE_U *pixelSize) PURE;
1840    STDMETHOD_(HWND, GetHwnd)() const PURE;
1841
1842    HRESULT Resize(const D2D1_SIZE_U &pixelSize) {
1843        return Resize(&pixelSize);
1844    }
1845};
1846
1847#else
1848
1849typedef interface ID2D1HwndRenderTarget ID2D1HwndRenderTarget;
1850
1851typedef struct ID2D1HwndRenderTargetVtbl {
1852    ID2D1RenderTargetVtbl Base;
1853
1854    STDMETHOD_(D2D1_WINDOW_STATE, CheckWindowState)(ID2D1HwndRenderTarget *This) PURE;
1855    STDMETHOD(Resize)(ID2D1HwndRenderTarget *This, const D2D1_SIZE_U *pixelSize) PURE;
1856    STDMETHOD_(HWND, GetHwnd)(ID2D1HwndRenderTarget *This) PURE;
1857} ID2D1HwndRenderTargetVtbl;
1858
1859interface ID2D1HwndRenderTarget {
1860    const struct ID2D1HwndRenderTargetVtbl *lpVtbl;
1861};
1862
1863#define ID2D1HwndRenderTarget_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
1864#define ID2D1HwndRenderTarget_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
1865#define ID2D1HwndRenderTarget_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
1866#define ID2D1HwndRenderTarget_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
1867#define ID2D1HwndRenderTarget_BeginDraw(this) (this)->lpVtbl->Base.BeginDraw(this)
1868#define ID2D1HwndRenderTarget_Clear(this,A) (this)->lpVtbl->Base.Clear(this,A)
1869#define ID2D1HwndRenderTarget_CreateBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.CreateBitmap(this,A,B,C,D,E)
1870#define ID2D1HwndRenderTarget_CreateBitmapBrush(this,A,B) (this)->lpVtbl->Base.CreateBitmapBrush(this,A,B)
1871#define ID2D1HwndRenderTarget_CreateBitmapFromWicBitmap(this,A,B) (this)->lpVtbl->Base.CreateBitmapFromWicBitmap(this,A,B)
1872#define ID2D1HwndRenderTarget_CreateCompatibleRenderTarget(this,A) (this)->lpVtbl->Base.CreateCompatibleRenderTarget(this,A)
1873#define ID2D1HwndRenderTarget_CreateGradientStopCollection(this,A,B,C) (this)->lpVtbl->Base.CreateGradientStopCollection(this,A,B,C)
1874#define ID2D1HwndRenderTarget_CreateLayer(this,A) (this)->lpVtbl->Base.CreateLayer(this,A)
1875#define ID2D1HwndRenderTarget_CreateLinearGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateLinearGradientBrush(this,A,B,C,D)
1876#define ID2D1HwndRenderTarget_CreateMesh(this,A) (this)->lpVtbl->Base.CreateMesh(this,A)
1877#define ID2D1HwndRenderTarget_CreateRadialGradientBrush(this,A,B,C,D) (this)->lpVtbl->Base.CreateRadialGradientBrush(this,A,B,C,D)
1878#define ID2D1HwndRenderTarget_CreateSharedBitmap(this,A,B,C,D) (this)->lpVtbl->Base.CreateSharedBitmap(this,A,B,C,D)
1879#define ID2D1HwndRenderTarget_CreateSolidColorBrush(this,A,B,C) (this)->lpVtbl->Base.CreateSolidColorBrush(this,A,B,C)
1880#define ID2D1HwndRenderTarget_DrawBitmap(this,A,B,C,D,E) (this)->lpVtbl->Base.DrawBitmap(this,A,B,C,D,E)
1881#define ID2D1HwndRenderTarget_DrawEllipse(this,A,B,C,D) (this)->lpVtbl->Base.DrawEllipse(this,A,B,C,D)
1882#define ID2D1HwndRenderTarget_DrawGeometry(this,A,B,C,D) (this)->lpVtbl->Base.DrawGeometry(this,A,B,C,D)
1883#define ID2D1HwndRenderTarget_DrawGlyphRun(this,A,B,C,D) (this)->lpVtbl->Base.DrawGlyphRun(this,A,B,C,D)
1884#define ID2D1HwndRenderTarget_DrawLine(this,A,B,C,D,E) (this)->lpVtbl->Base.DrawLine(this,A,B,C,D,E)
1885#define ID2D1HwndRenderTarget_DrawRectangle(this,A,B,C,D) (this)->lpVtbl->Base.DrawRectangle(this,A,B,C,D)
1886#define ID2D1HwndRenderTarget_DrawRoundedRectangle(this,A,B,C,D) (this)->lpVtbl->Base.DrawRoundedRectangle(this,A,B,C,D)
1887#define ID2D1HwndRenderTarget_DrawText(this,A,B,C,D,E,F,G) (this)->lpVtbl->Base.DrawText(this,A,B,C,D,E,F,G)
1888#define ID2D1HwndRenderTarget_DrawTextLayout(this,A,B,C,D) (this)->lpVtbl->Base.DrawTextLayout(this,A,B,C,D)
1889#define ID2D1HwndRenderTarget_EndDraw(this,A,B) (this)->lpVtbl->Base.EndDraw(this,A,B)
1890#define ID2D1HwndRenderTarget_FillEllipse(this,A,B) (this)->lpVtbl->Base.FillEllipse(this,A,B)
1891#define ID2D1HwndRenderTarget_FillGeometry(this,A,B,C) (this)->lpVtbl->Base.FillGeometry(this,A,B,C)
1892#define ID2D1HwndRenderTarget_FillMesh(this,A,B) (this)->lpVtbl->Base.FillMesh(this,A,B)
1893#define ID2D1HwndRenderTarget_FillOpacityMask(this,A,B,C,D,E) (this)->lpVtbl->Base.FillOpacityMask(this,A,B,C,D,E)
1894#define ID2D1HwndRenderTarget_FillRectangle(this,A,B) (this)->lpVtbl->Base.FillRectangle(this,A,B)
1895#define ID2D1HwndRenderTarget_FillRoundedRectangle(this,A,B) (this)->lpVtbl->Base.FillRoundedRectangle(this,A,B)
1896#define ID2D1HwndRenderTarget_Flush(this,A,B) (this)->lpVtbl->Base.Flush(this,A,B)
1897#define ID2D1HwndRenderTarget_GetAntialiasMode(this) (this)->lpVtbl->Base.GetAntialiasMode(this)
1898#define ID2D1HwndRenderTarget_GetDpi(this,A,B) (this)->lpVtbl->Base.GetDpi(this,A,B)
1899#define ID2D1HwndRenderTarget_GetMaximumBitmapSize(this) (this)->lpVtbl->Base.GetMaximumBitmapSize(this)
1900#define ID2D1HwndRenderTarget_GetPixelFormat(this) (this)->lpVtbl->Base.GetPixelFormat(this)
1901#define ID2D1HwndRenderTarget_GetPixelSize(this) (this)->lpVtbl->Base.GetPixelSize(this)
1902#define ID2D1HwndRenderTarget_GetSize(this) (this)->lpVtbl->Base.GetSize(this)
1903#define ID2D1HwndRenderTarget_GetTags(this,A,B) (this)->lpVtbl->Base.GetTags(this,A,B)
1904#define ID2D1HwndRenderTarget_GetTextAntialiasMode(this) (this)->lpVtbl->Base.GetTextAntialiasMode(this)
1905#define ID2D1HwndRenderTarget_GetTextRenderingParams(this,A) (this)->lpVtbl->Base.GetTextRenderingParams(this,A)
1906#define ID2D1HwndRenderTarget_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform(this,A)
1907#define ID2D1HwndRenderTarget_IsSupported(this,A) (this)->lpVtbl->Base.IsSupported(this,A)
1908#define ID2D1HwndRenderTarget_PopAxisAlignedClip(this) (this)->lpVtbl->Base.PopAxisAlignedClip(this)
1909#define ID2D1HwndRenderTarget_PopLayer(this) (this)->lpVtbl->Base.PopLayer(this)
1910#define ID2D1HwndRenderTarget_PushAxisAlignedClip(this,A,B) (this)->lpVtbl->Base.PushAxisAlignedClip(this,A,B)
1911#define ID2D1HwndRenderTarget_PushLayer(this,A,B) (this)->lpVtbl->Base.PushLayer(this,A,B)
1912#define ID2D1HwndRenderTarget_RestoreDrawingState(this,A) (this)->lpVtbl->Base.RestoreDrawingState(this,A)
1913#define ID2D1HwndRenderTarget_SaveDrawingState(this,A) (this)->lpVtbl->Base.SaveDrawingState(this,A)
1914#define ID2D1HwndRenderTarget_SetAntialiasMode(this,A) (this)->lpVtbl->Base.SetAntialiasMode(this,A)
1915#define ID2D1HwndRenderTarget_SetDpi(this,A,B) (this)->lpVtbl->Base.SetDpi(this,A,B)
1916#define ID2D1HwndRenderTarget_SetTags(this,A,B) (this)->lpVtbl->Base.SetTags(this,A,B)
1917#define ID2D1HwndRenderTarget_SetTextAntialiasMode(this,A) (this)->lpVtbl->Base.SetTextAntialiasMode(this,A)
1918#define ID2D1HwndRenderTarget_SetTextRenderingParams(this,A) (this)->lpVtbl->Base.SetTextRenderingParams(this,A)
1919#define ID2D1HwndRenderTarget_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform(this,A)
1920#define ID2D1HwndRenderTarget_CheckWindowState(this) (this)->lpVtbl->CheckWindowState(this)
1921#define ID2D1HwndRenderTarget_GetHwnd(this) (this)->lpVtbl->GetHwnd(this)
1922#define ID2D1HwndRenderTarget_Resize(this,A) (this)->lpVtbl->Resize(this,A)
1923
1924#endif
1925
1926DEFINE_GUID(IID_ID2D1Layer, 0x2cd9069b,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1927
1928#ifndef D2D_USE_C_DEFINITIONS
1929
1930interface ID2D1Layer : public ID2D1Resource {
1931    STDMETHOD_(D2D1_SIZE_F, GetSize)(void) const PURE;
1932};
1933
1934#else
1935
1936typedef struct ID2D1LayerVtbl {
1937    ID2D1ResourceVtbl Base;
1938
1939    STDMETHOD_(D2D1_SIZE_F, GetSize)(ID2D1Layer *This) PURE;
1940} ID2D1LayerVtbl;
1941
1942interface ID2D1Layer {
1943    const ID2D1LayerVtbl *lpVtbl;
1944};
1945
1946#define ID2D1Layer_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
1947#define ID2D1Layer_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
1948#define ID2D1Layer_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
1949#define ID2D1Layer_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
1950#define ID2D1Layer_GetSize(this) (this)->lpVtbl->GetSize(this)
1951
1952#endif
1953
1954DEFINE_GUID(IID_ID2D1LinearGradientBrush, 0x2cd906ab,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1955
1956#ifndef D2D_USE_C_DEFINITIONS
1957
1958interface ID2D1LinearGradientBrush : public ID2D1Brush {
1959    STDMETHOD_(void, SetStartPoint)(D2D1_POINT_2F startPoint) PURE;
1960    STDMETHOD_(void, SetEndPoint)(D2D1_POINT_2F endPoint) PURE;
1961    STDMETHOD_(D2D1_POINT_2F, GetStartPoint)(void) const PURE;
1962    STDMETHOD_(D2D1_POINT_2F, GetEndPoint)(void) const PURE;
1963    STDMETHOD_(void, GetGradientStopCollection)(ID2D1GradientStopCollection **gradientStopCollection) const PURE;
1964};
1965
1966#else
1967
1968typedef struct ID2D1LinearGradientBrushVtbl {
1969    ID2D1BrushVtbl Base;
1970
1971    STDMETHOD_(void, SetStartPoint)(ID2D1LinearGradientBrush *This, D2D1_POINT_2F startPoint) PURE;
1972    STDMETHOD_(void, SetEndPoint)(ID2D1LinearGradientBrush *This, D2D1_POINT_2F endPoint) PURE;
1973    STDMETHOD_(D2D1_POINT_2F, GetStartPoint)(ID2D1LinearGradientBrush *This) PURE;
1974    STDMETHOD_(D2D1_POINT_2F, GetEndPoint)(ID2D1LinearGradientBrush *This) PURE;
1975    STDMETHOD_(void, GetGradientStopCollection)(ID2D1LinearGradientBrush *This, ID2D1GradientStopCollection **gradientStopCollection) PURE;
1976} ID2D1LinearGradientBrushVtbl;
1977
1978interface ID2D1LinearGradientBrush {
1979    const ID2D1LinearGradientBrushVtbl *lpVtbl;
1980};
1981
1982#define ID2D1LinearGradientBrush_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
1983#define ID2D1LinearGradientBrush_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
1984#define ID2D1LinearGradientBrush_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
1985#define ID2D1LinearGradientBrush_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
1986#define ID2D1LinearGradientBrush_SetOpacity(this,A) (this)->lpVtbl->Base.SetOpacity(this,A)
1987#define ID2D1LinearGradientBrush_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform(this,A)
1988#define ID2D1LinearGradientBrush_GetOpacity(this) (this)->lpVtbl->Base.GetOpacity(this)
1989#define ID2D1LinearGradientBrush_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform(this,A)
1990#define ID2D1LinearGradientBrush_GetEndPoint(this) (this)->lpVtbl->GetEndPoint(this)
1991#define ID2D1LinearGradientBrush_GetGradientStopCollection(this,A) (this)->lpVtbl->GetGradientStopCollection(this,A)
1992#define ID2D1LinearGradientBrush_GetStartPoint(this) (this)->lpVtbl->GetStartPoint(this)
1993#define ID2D1LinearGradientBrush_SetEndPoint(this,A) (this)->lpVtbl->SetEndPoint(this,A)
1994#define ID2D1LinearGradientBrush_SetStartPoint(this,A) (this)->lpVtbl->SetStartPoint(this,A)
1995
1996#endif
1997
1998DEFINE_GUID(IID_ID2D1Mesh,0x2cd906c2,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
1999
2000#ifndef D2D_USE_C_DEFINITIONS
2001
2002interface ID2D1Mesh : public ID2D1Resource {
2003    STDMETHOD(Open)(ID2D1TessellationSink **tessellationSink) PURE;
2004};
2005
2006#else
2007
2008typedef struct ID2D1MeshVtbl{
2009    ID2D1ResourceVtbl Base;
2010
2011    STDMETHOD(Open)(ID2D1Mesh *This, ID2D1TessellationSink **tessellationSink) PURE;
2012} ID2D1MeshVtbl;
2013
2014interface ID2D1Mesh {
2015    const struct ID2D1MeshVtbl *lpVtbl;
2016};
2017
2018#define ID2D1Mesh_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
2019#define ID2D1Mesh_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
2020#define ID2D1Mesh_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
2021#define ID2D1Mesh_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
2022#define ID2D1Mesh_Open(this,A) (this)->lpVtbl->Open(this,A)
2023
2024#endif
2025
2026DEFINE_GUID(IID_ID2D1PathGeometry, 0x2cd906a5,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2027
2028#ifndef D2D_USE_C_DEFINITIONS
2029
2030interface ID2D1PathGeometry : public ID2D1Geometry {
2031    STDMETHOD(Open)(ID2D1GeometrySink **geometrySink) PURE;
2032    STDMETHOD(Stream)(ID2D1GeometrySink *geometrySink) const PURE;
2033    STDMETHOD(GetSegmentCount)(UINT32 *count) const PURE;
2034    STDMETHOD(GetFigureCount)(UINT32 *count) const PURE;
2035};
2036
2037#else
2038
2039typedef struct ID2D1PathGeometryVtbl {
2040    ID2D1GeometryVtbl Base;
2041
2042    STDMETHOD(Open)(ID2D1PathGeometry *This, ID2D1GeometrySink **geometrySink) PURE;
2043    STDMETHOD(Stream)(ID2D1PathGeometry *This, ID2D1GeometrySink *geometrySink) PURE;
2044    STDMETHOD(GetSegmentCount)(ID2D1PathGeometry *This, UINT32 *count) PURE;
2045    STDMETHOD(GetFigureCount)(ID2D1PathGeometry *This, UINT32 *count) PURE;
2046} ID2D1PathGeometryVtbl;
2047
2048interface ID2D1PathGeometry {
2049    const ID2D1PathGeometryVtbl *lpVtbl;
2050};
2051
2052#define ID2D1PathGeometry_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
2053#define ID2D1PathGeometry_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
2054#define ID2D1PathGeometry_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
2055#define ID2D1PathGeometry_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
2056#define ID2D1PathGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->Base.CombineWithGeometry(this,A,B,C,D)
2057#define ID2D1PathGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->Base.CompareWithGeometry(this,A,B,C)
2058#define ID2D1PathGeometry_ComputeArea(this,A,B) (this)->lpVtbl->Base.ComputeArea(this,A,B)
2059#define ID2D1PathGeometry_ComputeLength(this,A,B) (this)->lpVtbl->Base.ComputeLength(this,A,B)
2060#define ID2D1PathGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->Base.ComputePointAtLength(this,A,B,C,D)
2061#define ID2D1PathGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->Base.FillContainsPoint(this,A,B,C)
2062#define ID2D1PathGeometry_GetBounds(this,A,B) (this)->lpVtbl->Base.GetBounds(this,A,B)
2063#define ID2D1PathGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->Base.GetWidenedBounds(this,A,B,C,D)
2064#define ID2D1PathGeometry_Outline(this,A,B) (this)->lpVtbl->Base.Outline(this,A,B)
2065#define ID2D1PathGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->Base.StrokeContainsPoint(this,A,B,C,D,E)
2066#define ID2D1PathGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Base.Simplify(this,A,B,C)
2067#define ID2D1PathGeometry_Tessellate(this,A,B) (this)->lpVtbl->Base.Tessellate(this,A,B)
2068#define ID2D1PathGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Base.Widen(this,A,B,C,D)
2069#define ID2D1PathGeometry_Open(this,A) (this)->lpVtbl->Open(this,A)
2070#define ID2D1PathGeometry_Stream(this,A) (this)->lpVtbl->Stream(this,A)
2071#define ID2D1PathGeometry_GetSegmentCount(this,A) (this)->lpVtbl->GetSegmentCount(this,A)
2072#define ID2D1PathGeometry_GetFigureCount(this,A) (this)->lpVtbl->GetFigureCount(this,A)
2073
2074#endif
2075
2076DEFINE_GUID(IID_ID2D1RadialGradientBrush, 0x2cd906ac,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2077
2078#ifndef D2D_USE_C_DEFINITIONS
2079
2080interface ID2D1RadialGradientBrush : public ID2D1Brush {
2081    STDMETHOD_(void, SetCenter)(D2D1_POINT_2F center) PURE;
2082    STDMETHOD_(void, SetGradientOriginOffset)(D2D1_POINT_2F gradientOriginOffset) PURE;
2083    STDMETHOD_(void, SetRadiusX)(FLOAT radiusX) PURE;
2084    STDMETHOD_(void, SetRadiusY)(FLOAT radiusY) PURE;
2085    STDMETHOD_(D2D1_POINT_2F, GetCenter)(void) const PURE;
2086    STDMETHOD_(D2D1_POINT_2F, GetGradientOriginOffset)(void) const PURE;
2087    STDMETHOD_(FLOAT, GetRadiusX)(void) const PURE;
2088    STDMETHOD_(FLOAT, GetRadiusY)(void) const PURE;
2089    STDMETHOD_(void, GetGradientStopCollection)(ID2D1GradientStopCollection **gradientStopCollection) const PURE;
2090};
2091
2092#else
2093
2094typedef struct ID2D1RadialGradientBrushVtbl {
2095    ID2D1BrushVtbl Base;
2096
2097    STDMETHOD_(void, SetCenter)(ID2D1RadialGradientBrush *This, D2D1_POINT_2F center) PURE;
2098    STDMETHOD_(void, SetGradientOriginOffset)(ID2D1RadialGradientBrush *This, D2D1_POINT_2F gradientOriginOffset) PURE;
2099    STDMETHOD_(void, SetRadiusX)(ID2D1RadialGradientBrush *This, FLOAT radiusX) PURE;
2100    STDMETHOD_(void, SetRadiusY)(ID2D1RadialGradientBrush *This, FLOAT radiusY) PURE;
2101    STDMETHOD_(D2D1_POINT_2F, GetCenter)(ID2D1RadialGradientBrush *This) PURE;
2102    STDMETHOD_(D2D1_POINT_2F, GetGradientOriginOffset)(ID2D1RadialGradientBrush *This) PURE;
2103    STDMETHOD_(FLOAT, GetRadiusX)(ID2D1RadialGradientBrush *This) PURE;
2104    STDMETHOD_(FLOAT, GetRadiusY)(ID2D1RadialGradientBrush *This) PURE;
2105    STDMETHOD_(void, GetGradientStopCollection)(ID2D1RadialGradientBrush *This, ID2D1GradientStopCollection **gradientStopCollection) PURE;
2106} ID2D1RadialGradientBrushVtbl;
2107
2108interface ID2D1RadialGradientBrush {
2109    const ID2D1RadialGradientBrushVtbl *lpVtbl;
2110};
2111
2112#define ID2D1RadialGradientBrush_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
2113#define ID2D1RadialGradientBrush_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
2114#define ID2D1RadialGradientBrush_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
2115#define ID2D1RadialGradientBrush_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
2116#define ID2D1RadialGradientBrush_SetOpacity(this,A) (this)->lpVtbl->Base.SetOpacity(this,A)
2117#define ID2D1RadialGradientBrush_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform(this,A)
2118#define ID2D1RadialGradientBrush_GetOpacity(this) (this)->lpVtbl->Base.GetOpacity(this)
2119#define ID2D1RadialGradientBrush_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform(this,A)
2120#define ID2D1RadialGradientBrush_GetCenter(this) (this)->lpVtbl->GetCenter(this)
2121#define ID2D1RadialGradientBrush_GetGradientOriginOffset(this) (this)->lpVtbl->GetGradientOriginOffset(this)
2122#define ID2D1RadialGradientBrush_GetGradientStopCollection(this,A) (this)->lpVtbl->GetGradientStopCollection(this,A)
2123#define ID2D1RadialGradientBrush_GetRadiusX(this) (this)->lpVtbl->GetRadiusX(this)
2124#define ID2D1RadialGradientBrush_GetRadiusY(this) (this)->lpVtbl->GetRadiusY(this)
2125#define ID2D1RadialGradientBrush_SetCenter(this,A) (this)->lpVtbl->SetCenter(this,A)
2126#define ID2D1RadialGradientBrush_SetGradientOriginOffset(this,A) (this)->lpVtbl->SetGradientOriginOffset(this,A)
2127#define ID2D1RadialGradientBrush_SetRadiusX(this,A) (this)->lpVtbl->SetRadiusX(this,A)
2128#define ID2D1RadialGradientBrush_SetRadiusY(this,A) (this)->lpVtbl->SetRadiusY(this,A)
2129
2130#endif
2131
2132DEFINE_GUID(IID_ID2D1RectangleGeometry, 0x2cd906a2,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2133
2134#ifndef D2D_USE_C_DEFINITIONS
2135
2136interface ID2D1RectangleGeometry : public ID2D1Geometry {
2137    STDMETHOD_(void, GetRect)(D2D1_RECT_F *rect) const PURE;
2138};
2139
2140#else
2141
2142typedef struct ID2D1RectangleGeometryVtbl {
2143    ID2D1GeometryVtbl Base;
2144
2145    STDMETHOD_(void, GetRect)(ID2D1RectangleGeometry *This, D2D1_RECT_F *rect) PURE;
2146} ID2D1RectangleGeometryVtbl;
2147
2148interface ID2D1RectangleGeometry {
2149    const ID2D1RectangleGeometryVtbl *lpVtbl;
2150};
2151
2152#define ID2D1RectangleGeometry_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
2153#define ID2D1RectangleGeometry_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
2154#define ID2D1RectangleGeometry_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
2155#define ID2D1RectangleGeometry_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
2156#define ID2D1RectangleGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->Base.CombineWithGeometry(this,A,B,C,D)
2157#define ID2D1RectangleGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->Base.CompareWithGeometry(this,A,B,C)
2158#define ID2D1RectangleGeometry_ComputeArea(this,A,B) (this)->lpVtbl->Base.ComputeArea(this,A,B)
2159#define ID2D1RectangleGeometry_ComputeLength(this,A,B) (this)->lpVtbl->Base.ComputeLength(this,A,B)
2160#define ID2D1RectangleGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->Base.ComputePointAtLength(this,A,B,C,D)
2161#define ID2D1RectangleGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->Base.FillContainsPoint(this,A,B,C)
2162#define ID2D1RectangleGeometry_GetBounds(this,A,B) (this)->lpVtbl->Base.GetBounds(this,A,B)
2163#define ID2D1RectangleGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->Base.GetWidenedBounds(this,A,B,C,D)
2164#define ID2D1RectangleGeometry_Outline(this,A,B) (this)->lpVtbl->Base.Outline(this,A,B)
2165#define ID2D1RectangleGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->Base.StrokeContainsPoint(this,A,B,C,D,E)
2166#define ID2D1RectangleGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Base.Simplify(this,A,B,C)
2167#define ID2D1RectangleGeometry_Tessellate(this,A,B) (this)->lpVtbl->Base.Tessellate(this,A,B)
2168#define ID2D1RectangleGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Base.Widen(this,A,B,C,D)
2169#define ID2D1RectangleGeometry_GetRect(this,A) (this)->lpVtbl->GetRect(this,A)
2170
2171#endif
2172
2173DEFINE_GUID(IID_ID2D1RoundedRectangleGeometry, 0x2cd906a3,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2174
2175#ifndef D2D_USE_C_DEFINITIONS
2176
2177interface ID2D1RoundedRectangleGeometry : public ID2D1Geometry {
2178    STDMETHOD_(void, GetRoundedRect)(D2D1_ROUNDED_RECT *roundedRect) const PURE;
2179};
2180
2181#else
2182
2183typedef struct ID2D1RoundedRectangleGeometryVtbl {
2184    ID2D1GeometryVtbl Base;
2185
2186    STDMETHOD_(void, GetRoundedRect)(ID2D1RoundedRectangleGeometry *This, D2D1_ROUNDED_RECT *roundedRect) PURE;
2187} ID2D1RoundedRectangleGeometryVtbl;
2188
2189interface ID2D1RoundedRectangleGeometry {
2190    const struct ID2D1RoundedRectangleGeometryVtbl *lpVtbl;
2191};
2192
2193#define ID2D1RoundedRectangleGeometry_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
2194#define ID2D1RoundedRectangleGeometry_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
2195#define ID2D1RoundedRectangleGeometry_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
2196#define ID2D1RoundedRectangleGeometry_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
2197#define ID2D1RoundedRectangleGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->Base.CombineWithGeometry(this,A,B,C,D)
2198#define ID2D1RoundedRectangleGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->Base.CompareWithGeometry(this,A,B,C)
2199#define ID2D1RoundedRectangleGeometry_ComputeArea(this,A,B) (this)->lpVtbl->Base.ComputeArea(this,A,B)
2200#define ID2D1RoundedRectangleGeometry_ComputeLength(this,A,B) (this)->lpVtbl->Base.ComputeLength(this,A,B)
2201#define ID2D1RoundedRectangleGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->Base.ComputePointAtLength(this,A,B,C,D)
2202#define ID2D1RoundedRectangleGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->Base.FillContainsPoint(this,A,B,C)
2203#define ID2D1RoundedRectangleGeometry_GetBounds(this,A,B) (this)->lpVtbl->Base.GetBounds(this,A,B)
2204#define ID2D1RoundedRectangleGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->Base.GetWidenedBounds(this,A,B,C,D)
2205#define ID2D1RoundedRectangleGeometry_Outline(this,A,B) (this)->lpVtbl->Base.Outline(this,A,B)
2206#define ID2D1RoundedRectangleGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->Base.StrokeContainsPoint(this,A,B,C,D,E)
2207#define ID2D1RoundedRectangleGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Base.Simplify(this,A,B,C)
2208#define ID2D1RoundedRectangleGeometry_Tessellate(this,A,B) (this)->lpVtbl->Base.Tessellate(this,A,B)
2209#define ID2D1RoundedRectangleGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Base.Widen(this,A,B,C,D)
2210#define ID2D1RoundedRectangleGeometry_GetRoundedRect(this,A) (this)->lpVtbl->GetRoundedRect(this,A)
2211
2212#endif
2213
2214DEFINE_GUID(IID_ID2D1SolidColorBrush, 0x2cd906a9,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2215
2216#ifndef D2D_USE_C_DEFINITIONS
2217
2218interface ID2D1SolidColorBrush : public ID2D1Brush {
2219    STDMETHOD_(void, SetColor)(const D2D1_COLOR_F *color) PURE;
2220    STDMETHOD_(D2D1_COLOR_F, GetColor)(void) const PURE;
2221
2222    void SetColor(const D2D1_COLOR_F &color) {
2223        SetColor(&color);
2224    }
2225};
2226
2227#else
2228
2229typedef struct ID2D1SolidColorBrushVtbl {
2230    ID2D1BrushVtbl Base;
2231
2232    STDMETHOD_(void, SetColor)(ID2D1SolidColorBrush *This, const D2D1_COLOR_F *color) PURE;
2233    STDMETHOD_(D2D1_COLOR_F, GetColor)(ID2D1SolidColorBrush *This) PURE;
2234} ID2D1SolidColorBrushVtbl;
2235
2236interface ID2D1SolidColorBrush {
2237    const ID2D1SolidColorBrushVtbl *lpVtbl;
2238};
2239
2240#define ID2D1SolidColorBrush_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
2241#define ID2D1SolidColorBrush_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
2242#define ID2D1SolidColorBrush_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
2243#define ID2D1SolidColorBrush_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
2244#define ID2D1SolidColorBrush_SetOpacity(this,A) (this)->lpVtbl->Base.SetOpacity(this,A)
2245#define ID2D1SolidColorBrush_SetTransform(this,A) (this)->lpVtbl->Base.SetTransform(this,A)
2246#define ID2D1SolidColorBrush_GetOpacity(this) (this)->lpVtbl->Base.GetOpacity(this)
2247#define ID2D1SolidColorBrush_GetTransform(this,A) (this)->lpVtbl->Base.GetTransform(this,A)
2248#define ID2D1SolidColorBrush_GetColor(this) (this)->lpVtbl->GetColor(this)
2249#define ID2D1SolidColorBrush_SetColor(this,A) (this)->lpVtbl->SetColor(this,A)
2250
2251#endif
2252
2253DEFINE_GUID(IID_ID2D1StrokeStyle, 0x2cd9069d,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2254
2255#ifndef D2D_USE_C_DEFINITIONS
2256
2257interface ID2D1StrokeStyle : public ID2D1Resource {
2258    STDMETHOD_(D2D1_CAP_STYLE, GetStartCap)(void) const PURE;
2259    STDMETHOD_(D2D1_CAP_STYLE, GetEndCap)(void) const PURE;
2260    STDMETHOD_(D2D1_CAP_STYLE, GetDashCap)(void) const PURE;
2261    STDMETHOD_(FLOAT, GetMiterLimit)(void) const PURE;
2262    STDMETHOD_(D2D1_LINE_JOIN, GetLineJoin)(void) const PURE;
2263    STDMETHOD_(FLOAT, GetDashOffset)(void) const PURE;
2264    STDMETHOD_(D2D1_DASH_STYLE, GetDashStyle)(void) const PURE;
2265    STDMETHOD_(UINT32, GetDashesCount)(void) const PURE;
2266    STDMETHOD_(void, GetDashes)(FLOAT *dashes, UINT dashesCount) const PURE;
2267};
2268
2269#else
2270
2271typedef struct ID2D1StrokeStyleVtbl {
2272    ID2D1ResourceVtbl Base;
2273
2274    STDMETHOD_(D2D1_CAP_STYLE, GetStartCap)(ID2D1StrokeStyle *This) PURE;
2275    STDMETHOD_(D2D1_CAP_STYLE, GetEndCap)(ID2D1StrokeStyle *This) PURE;
2276    STDMETHOD_(D2D1_CAP_STYLE, GetDashCap)(ID2D1StrokeStyle *This) PURE;
2277    STDMETHOD_(FLOAT, GetMiterLimit)(ID2D1StrokeStyle *This) PURE;
2278    STDMETHOD_(D2D1_LINE_JOIN, GetLineJoin)(ID2D1StrokeStyle *This) PURE;
2279    STDMETHOD_(FLOAT, GetDashOffset)(ID2D1StrokeStyle *This) PURE;
2280    STDMETHOD_(D2D1_DASH_STYLE, GetDashStyle)(ID2D1StrokeStyle *This) PURE;
2281    STDMETHOD_(UINT32, GetDashesCount)(ID2D1StrokeStyle *This) PURE;
2282    STDMETHOD_(void, GetDashes)(ID2D1StrokeStyle *This, FLOAT *dashes, UINT dashesCount) PURE;
2283} ID2D1StrokeStyleVtbl;
2284
2285interface ID2D1StrokeStyle {
2286    const ID2D1StrokeStyleVtbl *lpVtbl;
2287};
2288
2289#define ID2D1StrokeStyle_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.QueryInterface((IUnknown*)this,A,B)
2290#define ID2D1StrokeStyle_AddRef(this) (this)->lpVtbl->Base.Base.AddRef((IUnknown*)this)
2291#define ID2D1StrokeStyle_Release(this) (this)->lpVtbl->Base.Base.Release((IUnknown*)this)
2292#define ID2D1StrokeStyle_GetFactory(this,A) (this)->lpVtbl->Base.GetFactory((ID2D1Resource*)this,A)
2293#define ID2D1StrokeStyle_GetDashCap(this) (this)->lpVtbl->GetDashCap(this)
2294#define ID2D1StrokeStyle_GetDashes(this,A,B) (this)->lpVtbl->GetDashes(this,A,B)
2295#define ID2D1StrokeStyle_GetDashesCount(this) (this)->lpVtbl->GetDashesCount(this)
2296#define ID2D1StrokeStyle_GetDashOffset(this) (this)->lpVtbl->GetDashOffset(this)
2297#define ID2D1StrokeStyle_GetDashStyle(this) (this)->lpVtbl->GetDashStyle(this)
2298#define ID2D1StrokeStyle_GetEndCap(this) (this)->lpVtbl->GetEndCap(this)
2299#define ID2D1StrokeStyle_GetLineJoin(this) (this)->lpVtbl->GetLineJoin(this)
2300#define ID2D1StrokeStyle_GetMiterLimit(this) (this)->lpVtbl->GetMiterLimit(this)
2301#define ID2D1StrokeStyle_GetStartCap(this) (this)->lpVtbl->GetStartCap(this)
2302
2303#endif
2304
2305DEFINE_GUID(IID_ID2D1TessellationSink, 0x2cd906c1,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2306
2307#ifndef D2D_USE_C_DEFINITIONS
2308
2309interface ID2D1TessellationSink : public IUnknown {
2310    STDMETHOD_(void, AddTriangles)(const D2D1_TRIANGLE *triangles, UINT trianglesCount) PURE;
2311    STDMETHOD(Close)() PURE;
2312};
2313
2314#else
2315
2316typedef struct ID2D1TessellationSinkVtbl {
2317    IUnknownVtbl Base;
2318
2319    STDMETHOD_(void, AddTriangles)(ID2D1TessellationSink *This, const D2D1_TRIANGLE *triangles, UINT trianglesCount) PURE;
2320    STDMETHOD(Close)(ID2D1TessellationSink *This) PURE;
2321} ID2D1TessellationSinkVtbl;
2322
2323interface ID2D1TessellationSink {
2324    const struct ID2D1TessellationSinkVtbl *lpVtbl;
2325};
2326
2327#define ID2D1TessellationSink_QueryInterface(this,A,B) (this)->lpVtbl->Base.QueryInterface((IUnknown*)this,A,B)
2328#define ID2D1TessellationSink_AddRef(this) (this)->lpVtbl->Base.AddRef((IUnknown*)this)
2329#define ID2D1TessellationSink_Release(this) (this)->lpVtbl->Base.Release((IUnknown*)this)
2330#define ID2D1TessellationSink_AddTriangles(this,A,B) (this)->lpVtbl->AddTriangles(this,A,B)
2331#define ID2D1TessellationSink_Close(this) (this)->lpVtbl->Close(this)
2332
2333#endif
2334
2335DEFINE_GUID(IID_ID2D1TransformedGeometry, 0x2cd906bb,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2336
2337#ifndef D2D_USE_C_DEFINITIONS
2338
2339interface ID2D1TransformedGeometry : public ID2D1Geometry {
2340    STDMETHOD_(void, GetSourceGeometry)(ID2D1Geometry **sourceGeometry) const PURE;
2341    STDMETHOD_(void, GetTransform)(D2D1_MATRIX_3X2_F *transform) const PURE;
2342};
2343
2344#else
2345
2346typedef struct ID2D1TransformedGeometryVtbl {
2347    ID2D1GeometryVtbl Base;
2348
2349    STDMETHOD_(void, GetSourceGeometry)(ID2D1TransformedGeometry *This, ID2D1Geometry **sourceGeometry) PURE;
2350    STDMETHOD_(void, GetTransform)(ID2D1TransformedGeometry *This, D2D1_MATRIX_3X2_F *transform) PURE;
2351} ID2D1TransformedGeometryVtbl;
2352
2353interface ID2D1TransformedGeometry {
2354    const ID2D1TransformedGeometryVtbl *lpVtbl;
2355};
2356
2357#define ID2D1TransformedGeometry_QueryInterface(this,A,B) (this)->lpVtbl->Base.Base.Base.QueryInterface((IUnknown*)this,A,B)
2358#define ID2D1TransformedGeometry_AddRef(this) (this)->lpVtbl->Base.Base.Base.AddRef((IUnknown*)this)
2359#define ID2D1TransformedGeometry_Release(this) (this)->lpVtbl->Base.Base.Base.Release((IUnknown*)this)
2360#define ID2D1TransformedGeometry_GetFactory(this,A) (this)->lpVtbl->Base.Base.GetFactory((ID2D1Resource*)this,A)
2361#define ID2D1TransformedGeometry_CombineWithGeometry(this,A,B,C,D) (this)->lpVtbl->Base.CombineWithGeometry(this,A,B,C,D)
2362#define ID2D1TransformedGeometry_CompareWithGeometry(this,A,B,C) (this)->lpVtbl->Base.CompareWithGeometry(this,A,B,C)
2363#define ID2D1TransformedGeometry_ComputeArea(this,A,B) (this)->lpVtbl->Base.ComputeArea(this,A,B)
2364#define ID2D1TransformedGeometry_ComputeLength(this,A,B) (this)->lpVtbl->Base.ComputeLength(this,A,B)
2365#define ID2D1TransformedGeometry_ComputePointAtLength(this,A,B,C,D) (this)->lpVtbl->Base.ComputePointAtLength(this,A,B,C,D)
2366#define ID2D1TransformedGeometry_FillContainsPoint(this,A,B,C) (this)->lpVtbl->Base.FillContainsPoint(this,A,B,C)
2367#define ID2D1TransformedGeometry_GetBounds(this,A,B) (this)->lpVtbl->Base.GetBounds(this,A,B)
2368#define ID2D1TransformedGeometry_GetWidenedBounds(this,A,B,C,D) (this)->lpVtbl->Base.GetWidenedBounds(this,A,B,C,D)
2369#define ID2D1TransformedGeometry_Outline(this,A,B) (this)->lpVtbl->Base.Outline(this,A,B)
2370#define ID2D1TransformedGeometry_StrokeContainsPoint(this,A,B,C,D,E) (this)->lpVtbl->Base.StrokeContainsPoint(this,A,B,C,D,E)
2371#define ID2D1TransformedGeometry_Simplify(this,A,B,C) (this)->lpVtbl->Base.Simplify(this,A,B,C)
2372#define ID2D1TransformedGeometry_Tessellate(this,A,B) (this)->lpVtbl->Base.Tessellate(this,A,B)
2373#define ID2D1TransformedGeometry_Widen(this,A,B,C,D) (this)->lpVtbl->Base.Widen(this,A,B,C,D)
2374#define ID2D1TransformedGeometry_GetSourceGeometry(this,A) (this)->lpVtbl->GetSourceGeometry(this,A)
2375#define ID2D1TransformedGeometry_GetTransform(this,A) (this)->lpVtbl->GetTransform(this,A)
2376
2377#endif
2378
2379__CRT_UUID_DECL(ID2D1Resource, 0x2cd90691,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2380__CRT_UUID_DECL(ID2D1Brush, 0x2cd906a8,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2381__CRT_UUID_DECL(ID2D1Bitmap, 0xa2296057,0xea42,0x4099,0x98,0x3b,0x53,0x9f,0xb6,0x50,0x54,0x26)
2382__CRT_UUID_DECL(ID2D1BitmapBrush, 0x2cd906aa,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2383__CRT_UUID_DECL(ID2D1RenderTarget, 0x2cd90694,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2384__CRT_UUID_DECL(ID2D1Geometry, 0x2cd906a1,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2385__CRT_UUID_DECL(ID2D1BitmapRenderTarget, 0x2cd90695,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2386__CRT_UUID_DECL(ID2D1DCRenderTarget, 0x1c51bc64,0xde61,0x46fd,0x98,0x99,0x63,0xa5,0xd8,0xf0,0x39,0x50)
2387__CRT_UUID_DECL(ID2D1SimplifiedGeometrySink, 0x2cd9069e,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2388__CRT_UUID_DECL(ID2D1Factory, 0x06152247,0x6f50,0x465a,0x92,0x45,0x11,0x8b,0xfd,0x3b,0x60,0x07)
2389__CRT_UUID_DECL(ID2D1GdiInteropRenderTarget, 0xe0db51c3,0x6f77,0x4bae,0xb3,0xd5,0xe4,0x75,0x09,0xb3,0x58,0x38)
2390__CRT_UUID_DECL(ID2D1GeometrySink, 0x2cd9069f,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2391__CRT_UUID_DECL(ID2D1GradientStopCollection, 0x2cd906a7,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2392__CRT_UUID_DECL(ID2D1Layer, 0x2cd9069b,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2393__CRT_UUID_DECL(ID2D1LinearGradientBrush, 0x2cd906ab,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2394__CRT_UUID_DECL(ID2D1PathGeometry, 0x2cd906a5,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2395__CRT_UUID_DECL(ID2D1RadialGradientBrush, 0x2cd906ac,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2396__CRT_UUID_DECL(ID2D1RectangleGeometry, 0x2cd906a2,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2397__CRT_UUID_DECL(ID2D1SolidColorBrush, 0x2cd906a9,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2398__CRT_UUID_DECL(ID2D1StrokeStyle, 0x2cd9069d,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2399__CRT_UUID_DECL(ID2D1TransformedGeometry, 0x2cd906bb,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9)
2400__CRT_UUID_DECL(ID2D1Mesh,0x2cd906c2,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2401__CRT_UUID_DECL(ID2D1DrawingStateBlock, 0x28506e39,0xebf6,0x46a1,0xbb,0x47,0xfd,0x85,0x56,0x5a,0xb9,0x57);
2402__CRT_UUID_DECL(ID2D1EllipseGeometry, 0x2cd906a4,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2403__CRT_UUID_DECL(ID2D1GeometryGroup, 0x2cd906a6,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2404__CRT_UUID_DECL(ID2D1RoundedRectangleGeometry, 0x2cd906a3,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2405__CRT_UUID_DECL(ID2D1TessellationSink, 0x2cd906c1,0x12e2,0x11dc,0x9f,0xed,0x00,0x11,0x43,0xa0,0x55,0xf9);
2406
2407#ifdef __cplusplus
2408extern "C" {
2409#endif
2410
2411HRESULT WINAPI D2D1CreateFactory(
2412  D2D1_FACTORY_TYPE factoryType,
2413  REFIID riid,
2414  const D2D1_FACTORY_OPTIONS *pFactoryOptions,
2415  void **ppIFactory
2416);
2417
2418WINBOOL WINAPI D2D1InvertMatrix(
2419  D2D1_MATRIX_3X2_F *matrix
2420);
2421
2422WINBOOL WINAPI D2D1IsMatrixInvertible(
2423  const D2D1_MATRIX_3X2_F *matrix
2424);
2425
2426void WINAPI D2D1MakeRotateMatrix(
2427  FLOAT angle,
2428  D2D1_POINT_2F center,
2429  D2D1_MATRIX_3X2_F *matrix
2430);
2431
2432void WINAPI D2D1MakeSkewMatrix(
2433  FLOAT angleX,
2434  FLOAT angleY,
2435  D2D1_POINT_2F center,
2436  D2D1_MATRIX_3X2_F *matrix
2437);
2438#ifdef __cplusplus
2439}
2440#endif
2441
2442#ifndef D2D1FORCEINLINE
2443#define D2D1FORCEINLINE FORCEINLINE
2444#endif
2445
2446#include <d2d1helper.h>
2447
2448#ifndef D2D_USE_C_DEFINITIONS
2449
2450inline HRESULT D2D1CreateFactory(D2D1_FACTORY_TYPE factoryType, REFIID riid, void **ppv) {
2451    return D2D1CreateFactory(factoryType, riid, NULL, ppv);
2452}
2453
2454template<class Factory>
2455HRESULT D2D1CreateFactory(D2D1_FACTORY_TYPE factoryType, Factory **factory) {
2456    return D2D1CreateFactory(factoryType, __uuidof(Factory), reinterpret_cast<void**>(factory));
2457}
2458
2459template<class Factory>
2460HRESULT D2D1CreateFactory(D2D1_FACTORY_TYPE factoryType, const D2D1_FACTORY_OPTIONS &factoryOptions, Factory **factory) {
2461    return D2D1CreateFactory(factoryType, __uuidof(Factory), &factoryOptions, reinterpret_cast<void **>(factory));
2462}
2463
2464#endif
2465
2466#endif /* _D2D1_H */
2467