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