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