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