1 module aurora.directx.d2d1.d2d1_0;
2 
3 version(Windows):
4 
5 public import aurora.directx.com;
6 public import aurora.directx.dwrite;
7 public import aurora.directx.dxgi;
8 public import aurora.directx.wic;
9 
10 public: 
11 
12 //
13 //	Constants
14 //
15 
16 alias ulong D2D1_TAG;
17 enum D2D1_DEFAULT_FLATTENING_TOLERANCE = 0.25f;
18 enum D2D1_INVALID_TAG = ulong.max;
19 enum D2D1_INVALID_PROPERTY_INDEX = uint.max;
20 enum D2D1_APPEND_ALLIGNED_ELEMENT = -1;
21 
22 //D2DERR
23 enum D2DERR_BAD_NUMBER = 0x88990011;
24 enum D2DERR_BITMAP_BOUND_AS_TARGET = 0x88990025L;
25 enum D2DERR_BITMAP_CANNOT_DRAW = 0x88990021L;
26 enum D2DERR_CYCLIC_GRAPH = 0x88990020L;
27 enum D2DERR_DISPLAY_FORMAT_NOT_SUPPORTED = 0x88990009;
28 enum D2DERR_DISPLAY_STATE_INVALID = 0x88990006;
29 enum D2DERR_EFFECT_IS_NOT_REGISTERED = 0x88990028L;
30 enum D2DERR_EXCEEDS_MAX_BITMAP_SIZE = 0x8899001D;
31 enum D2DERR_INCOMPATIBLE_BRUSH_TYPES = 0x88990018;
32 enum D2DERR_INSUFFICIENT_BUFFER = 0x7A;
33 enum D2DERR_INSUFFICIENT_DEVICE_CAPABILITIES = 0x88990026L;
34 enum D2DERR_INTERMEDIATE_TOO_LARGE = 0x88990027L;
35 enum D2DERR_INTERNAL_ERROR = 0x88990008;
36 enum D2DERR_INVALID_CALL = 0x8899000A;
37 enum D2DERR_INVALID_GRAPH_CONFIGURATION = 0x8899001EL;
38 enum D2DERR_INVALID_INTERNAL_GRAPH_CONFIGURATION = 0x8899001FL;
39 enum D2DERR_INVALID_PROPERTY = 0x88990029L;
40 enum D2DERR_INVALID_TARGET = 0x88990024L;
41 enum D2DERR_LAYER_ALREADY_IN_USE = 0x88990013;
42 enum D2DERR_MAX_TEXTURE_SIZE_EXCEEDED = 0x8899000F;
43 enum D2DERR_NO_HARDWARE_DEVICE = 0x8899000B;
44 enum D2DERR_NO_SUBPROPERTIES = 0x8899002AL;
45 enum D2DERR_NOT_INITIALIZED = 0x88990002;
46 enum D2DERR_ORIGINAL_TARGET_NOT_BOUND = 0x88990023L;
47 enum D2DERR_OUTSTANDING_BITMAP_REFERENCES = 0x88990022L;
48 enum D2DERR_POP_CALL_DID_NOT_MATCH_PUSH = 0x88990014;
49 enum D2DERR_PRINT_FORMAT_NOT_SUPPORTED = 0x8899002CL;
50 enum D2DERR_PRINT_JOB_CLOSED = 0x8899002BL;
51 enum D2DERR_PUSH_POP_UNBALANCED = 0x88990016;
52 enum D2DERR_RECREATE_TARGET = 0x8899000C;
53 enum D2DERR_RENDER_TARGET_HAS_LAYER_OR_CLIPRECT = 0x88990017;
54 enum D2DERR_SCANNER_FAILED = 0x88990004;
55 enum D2DERR_SCREEN_ACCESS_DENIED = 0x88990005;
56 enum D2DERR_SHADER_COMPILE_FAILED = 0x8899000E;
57 enum D2DERR_TARGET_NOT_GDI_COMPATIBLE = 0x8899001A;
58 enum D2DERR_TEXT_EFFECT_IS_WRONG_TYPE = 0x8899001B;
59 enum D2DERR_TEXT_RENDERER_NOT_RELEASED = 0x8899001C;
60 enum D2DERR_TOO_MANY_SHADER_ELEMENTS = 0x8899000D;
61 enum D2DERR_TOO_MANY_TRANSFORM_INPUTS = 0x8899002DL;
62 enum D2DERR_UNSUPPORTED_OPERATION = 0x88990003;
63 enum D2DERR_UNSUPPORTED_PIXEL_FORMAT = 0x88982F80;
64 enum D2DERR_UNSUPPORTED_VERSION = 0x88990010;
65 enum D2DERR_WIN32_ERROR = 0x88990019;
66 enum D2DERR_WRONG_FACTORY = 0x88990012;
67 enum D2DERR_WRONG_RESOURCE_DOMAIN = 0x88990015;
68 enum D2DERR_WRONG_STATE = 0x88990001;
69 enum D2DERR_ZERO_VECTOR = 0x88990007;
70 
71 enum int D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR = 0;
72 enum int D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR = 1;
73 enum int D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC = 2;
74 enum int D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR = 3;
75 enum int D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC = 4;
76 enum int D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC = 5;
77 enum int D2D1_INTERPOLATION_MODE_DEFINITION_FANT = 6;
78 enum int D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR = 7;
79 
80 //
81 //	Enumerations
82 //
83 
84 public enum D2D1_ALPHA_MODE : int { 
85 	UNKNOWN        = 0,
86 	PREMULTIPLIED  = 1,
87 	STRAIGHT       = 2,
88 	IGNORE         = 3
89 } 
90 
91 public enum D2D1_ANTIALIAS_MODE : int { 
92 	PER_PRIMITIVE  = 0,
93 	ALIASED        = 1
94 } 
95 
96 public enum D2D1_ARC_SIZE { 
97 	SMALL  = 0,
98 	LARGE  = 1
99 } 
100 
101 public enum D2D1_CAP_STYLE : int { 
102 	FLAT      = 0,
103 	SQUARE    = 1,
104 	ROUND     = 2,
105 	TRIANGLE  = 3
106 } 
107 
108 public enum D2D1_COMBINE_MODE : int { 
109 	UNION      = 0,
110 	INTERSECT  = 1,
111 	XOR        = 2,
112 	EXCLUDE    = 3
113 } 
114 
115 public enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS : int { 
116 	NONE            = 0x00000000,
117 	GDI_COMPATIBLE  = 0x00000001
118 }
119 
120 public enum D2D1_DASH_STYLE : int { 
121 	SOLID         = 0,
122 	DASH          = 1,
123 	DOT           = 2,
124 	DASH_DOT      = 3,
125 	DASH_DOT_DOT  = 4,
126 	CUSTOM        = 5
127 } 
128 
129 public enum D2D1_DC_INITIALIZE_MODE : int { 
130 	COPY   = 0,
131 	CLEAR  = 1
132 } 
133 
134 public enum D2D1_DEBUG_LEVEL : int { 
135 	NONE         = 0,
136 	ERROR        = 1,
137 	WARNING      = 2,
138 	INFORMATION  = 3
139 } 
140 
141 enum D2D1_BITMAP_INTERPOLATION_MODE
142 {
143     NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
144     LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
145     FORCE_DWORD = 0xffffffff
146 }
147 
148 public enum D2D1_DRAW_TEXT_OPTIONS : int { 
149 	NO_SNAP            = 0x00000001,
150 	CLIP               = 0x00000002,
151 	NONE               = 0x00000000,
152 	ENABLE_COLOR_FONT  = 0x00000004
153 } 
154 
155 public enum D2D1_EXTEND_MODE : int { 
156 	CLAMP   = 0,
157 	WRAP    = 1,
158 	MIRROR  = 2
159 } 
160 
161 public enum D2D1_FEATURE_LEVEL : int { 
162 	LEVEL_DEFAULT  = 0,
163 	LEVEL_9        = 0x9100,
164 	LEVEL_10       = 0xa000
165 } 
166 
167 public enum D2D1_FIGURE_BEGIN : int { 
168 	FILLED  = 0,
169 	HOLLOW  = 1
170 }
171 
172 public enum D2D1_FIGURE_END : int { 
173 	OPEN    = 0,
174 	CLOSED  = 1
175 } 
176 
177 public enum D2D1_FILL_MODE : int { 
178 	ALTERNATE  = 0,
179 	WINDING    = 1
180 } 
181 
182 public enum D2D1_FACTORY_TYPE : int { 
183 	SINGLE_THREADED  = 0,
184 	MULTI_THREADED   = 1
185 } 
186 
187 public enum D2D1_GAMMA : int { 
188 	GAMMA_2_2  = 0,
189 	GAMMA_1_0  = 1
190 } 
191 
192 public enum D2D1_GEOMETRY_RELATION : int { 
193 	UNKNOWN       = 0,
194 	DISJOINT      = 1,
195 	IS_CONTAINED  = 2,
196 	CONTAINS      = 3,
197 	OVERLAP       = 4
198 } 
199 
200 public enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION : int { 
201 	CUBICS_AND_LINES  = 0,
202 	LINES             = 1
203 } 
204 
205 public enum D2D1_LAYER_OPTIONS : int { 
206 	NONE                      = 0x00000000,
207 	INITIALIZE_FOR_CLEARTYPE  = 0x00000001
208 } 
209 
210 public enum D2D1_LINE_JOIN : int { 
211 	MITER           = 0,
212 	BEVEL           = 1,
213 	ROUND           = 2,
214 	MITER_OR_BEVEL  = 3
215 } 
216 
217 public enum D2D1_OPACITY_MASK_CONTENT : int { 
218 	GRAPHICS             = 0,
219 	TEXT_NATURAL         = 1,
220 	TEXT_GDI_COMPATIBLE  = 2
221 } 
222 
223 public enum D2D1_PATH_SEGMENT : int { 
224 	NONE                   = 0x00000000,
225 	FORCE_UNSTROKED        = 0x00000001,
226 	FORCE_ROUND_LINE_JOIN  = 0x00000002
227 } 
228 
229 public enum D2D1_PRESENT_OPTIONS : int { 
230 	NONE             = 0x00000000,
231 	RETAIN_CONTENTS  = 0x00000001,
232 	IMMEDIATELY      = 0x00000002
233 } 
234 
235 public enum D2D1_RENDER_TARGET_TYPE : int { 
236 	DEFAULT    = 0,
237 	SOFTWARE   = 1,
238 	HARDWARE   = 2
239 } 
240 
241 public enum D2D1_RENDER_TARGET_USAGE : int { 
242 	NONE                   = 0x00000000,
243 	FORCE_BITMAP_REMOTING  = 0x00000001,
244 	GDI_COMPATIBLE         = 0x00000002
245 } 
246 
247 public enum D2D1_SWEEP_DIRECTION : int { 
248 	COUNTER_CLOCKWISE  = 0,
249 	CLOCKWISE          = 1
250 } 
251 
252 public enum D2D1_TEXT_ANTIALIAS_MODE : int { 
253 	DEFAULT    = 0,
254 	CLEARTYPE  = 1,
255 	GRAYSCALE  = 2,
256 	ALIASED    = 3
257 } 
258 
259 public enum D2D1_WINDOW_STATE : int { 
260 	NONE      = 0x0000000,
261 	OCCLUDED  = 0x0000001
262 } 
263 
264 //
265 //	Structures
266 //
267 alias D3DCOLORVALUE D2D_COLOR_F;
268 alias D2D_COLOR_F D2D1_COLOR_F;
269 
270 public struct D2D_MATRIX_3X2_F {
271 	float _11;
272 	float _12;
273 	float _21;
274 	float _22;
275 	float _31;
276 	float _32;
277 }
278 alias D2D_MATRIX_3X2_F D2D1_MATRIX_3X2_F;
279 
280 public struct D2D_MATRIX_4X3_F {
281 	union {
282 		struct {
283 			float _11, _12, _13;
284 			float _21, _22, _23;
285 			float _31, _32, _33;
286 			float _41, _42, _43;
287 		}
288 		float[4][3] m;
289 	}
290 }
291 alias D2D_MATRIX_4X3_F D2D1_MATRIX_4X3_F;
292 
293 public struct D2D_MATRIX_4X4_F {
294 	union {
295 		struct {
296 			float _11, _12, _13, _14;
297 			float _21, _22, _23, _24;
298 			float _31, _32, _33, _34;
299 			float _41, _42, _43, _44;
300 		}
301 		float[4][4] m;
302 	}
303 }
304 alias D2D_MATRIX_4X4_F D2D1_MATRIX_4X4_F;
305 
306 public struct D2D_MATRIX_5X4_F {
307 	union {
308 		struct {
309 			float _11, _12, _13, _14;
310 			float _21, _22, _23, _24;
311 			float _31, _32, _33, _34;
312 			float _41, _42, _43, _44;
313 			float _51, _52, _53, _54;
314 		}
315 		float[5][4] m;
316 	}
317 }
318 alias D2D_MATRIX_5X4_F D2D1_MATRIX_5X4_F;
319 
320 public struct D2D_POINT_2F {
321 	float x;
322 	float y;
323 }
324 alias D2D_POINT_2F D2D1_POINT_2F;
325 
326 public struct POINT {
327 	long x;
328 	long y;
329 } 
330 alias POINT D2D_POINT_2L;
331 
332 public struct D2D_POINT_2U {
333 	uint x;
334 	uint y;
335 }
336 alias D2D_POINT_2U D2D1_POINT_2U;
337 
338 public struct D2D_RECT_F {
339 	float left;
340 	float top;
341 	float right;
342 	float bottom;
343 }
344 alias D2D_RECT_F D2D1_RECT_F;
345 
346 alias RECT D2D_RECT_L;
347 
348 public struct D2D_RECT_U {
349 	uint left;
350 	uint top;
351 	uint right;
352 	uint bottom;
353 }
354 alias D2D_RECT_U D2D1_RECT_U;
355 
356 public struct D2D_SIZE_F {
357 	float width;
358 	float height;
359 }
360 alias D2D_SIZE_F D2D1_SIZE_F;
361 
362 public struct D2D_SIZE_U {
363 	uint width;
364 	uint height;
365 }
366 alias D2D_SIZE_U D2D1_SIZE_U;
367 
368 public struct D2D_VECTOR_2F {
369 	float x;
370 	float y;
371 }
372 
373 public struct D2D_VECTOR_3F {
374 	float x;
375 	float y;
376 	float z;
377 }
378 
379 public struct D2D_VECTOR_4F {
380 	float x;
381 	float y;
382 	float z;
383 	float w;
384 }
385 
386 public struct D2D1_ARC_SEGMENT {
387 	D2D1_POINT_2F        point;
388 	D2D1_SIZE_F          size;
389 	float                rotationAngle;
390 	D2D1_SWEEP_DIRECTION sweepDirection;
391 	D2D1_ARC_SIZE        arcSize;
392 }
393 
394 public struct D2D1_BEZIER_SEGMENT {
395 	D2D1_POINT_2F point1;
396 	D2D1_POINT_2F point2;
397 	D2D1_POINT_2F point3;
398 }
399 
400 public struct D2D1_BITMAP_BRUSH_PROPERTIES {
401 	D2D1_EXTEND_MODE               extendModeX;
402 	D2D1_EXTEND_MODE               extendModeY;
403 	D2D1_BITMAP_INTERPOLATION_MODE interpolationMode;
404 }
405 
406 public struct D2D1_BITMAP_PROPERTIES {
407 	D2D1_PIXEL_FORMAT pixelFormat;
408 	float             dpiX;
409 	float             dpiY;
410 }
411 
412 public struct D2D1_BRUSH_PROPERTIES {
413 	float             opacity;
414 	D2D1_MATRIX_3X2_F transform;
415 }
416 
417 public struct D2D1_DRAWING_STATE_DESCRIPTION {
418 	D2D1_ANTIALIAS_MODE      antialiasMode;
419 	D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode;
420 	D2D1_TAG                 tag1;
421 	D2D1_TAG                 tag2;
422 	D2D1_MATRIX_3X2_F        transform;
423 }
424 
425 public struct D2D1_ELLIPSE {
426 	D2D1_POINT_2F point;
427 	float         radiusX;
428 	float         radiusY;
429 }
430 
431 public struct D2D1_FACTORY_OPTIONS {
432 	D2D1_DEBUG_LEVEL debugLevel;
433 }
434 
435 public struct D2D1_GRADIENT_STOP {
436 	FLOAT        position;
437 	D2D1_COLOR_F color;
438 }
439 
440 public struct D2D1_HWND_RENDER_TARGET_PROPERTIES {
441 	HWND                 hwnd;
442 	D2D1_SIZE_U          pixelSize;
443 	D2D1_PRESENT_OPTIONS presentOptions;
444 }
445 
446 public struct D2D1_LAYER_PARAMETERS {
447 	D2D1_RECT_F         contentBounds;
448 	ID2D1Geometry       geometricMask;
449 	D2D1_ANTIALIAS_MODE maskAntialiasMode;
450 	D2D1_MATRIX_3X2_F   maskTransform;
451 	FLOAT               opacity;
452 	ID2D1Brush          opacityBrush;
453 	D2D1_LAYER_OPTIONS  layerOptions;
454 }
455 
456 public struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES {
457 	D2D1_POINT_2F startPoint;
458 	D2D1_POINT_2F endPoint;
459 }
460 
461 public struct D2D1_PIXEL_FORMAT {
462 	DXGI_FORMAT     format;
463 	D2D1_ALPHA_MODE alphaMode;
464 }
465 
466 public struct D2D1_QUADRATIC_BEZIER_SEGMENT {
467 	D2D1_POINT_2F point1;
468 	D2D1_POINT_2F point2;
469 }
470 
471 public struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES {
472 	D2D1_POINT_2F center;
473 	D2D1_POINT_2F gradientOriginOffset;
474 	float         radiusX;
475 	float         radiusY;
476 }
477 
478 public struct D2D1_RENDER_TARGET_PROPERTIES {
479 	D2D1_RENDER_TARGET_TYPE  type;
480 	D2D1_PIXEL_FORMAT        pixelFormat;
481 	float                    dpiX;
482 	float                    dpiY;
483 	D2D1_RENDER_TARGET_USAGE usage;
484 	D2D1_FEATURE_LEVEL       minLevel;
485 }
486 
487 public struct D2D1_ROUNDED_RECT {
488 	D2D1_RECT_F rect;
489 	float       radiusX;
490 	float       radiusY;
491 }
492 
493 public struct D2D1_STROKE_STYLE_PROPERTIES {
494 	D2D1_CAP_STYLE  startCap;
495 	D2D1_CAP_STYLE  endCap;
496 	D2D1_CAP_STYLE  dashCap;
497 	D2D1_LINE_JOIN  lineJoin;
498 	float           miterLimit;
499 	D2D1_DASH_STYLE dashStyle;
500 	float           dashOffset;
501 }
502 
503 public struct D2D1_TRIANGLE {
504 	D2D1_POINT_2F point1;
505 	D2D1_POINT_2F point2;
506 	D2D1_POINT_2F point3;
507 }
508 
509 //
510 //	Interfaces
511 //
512 
513 mixin(uuid!(ID2D1Bitmap, "a2296057-ea42-4099-983b-539fb6505426"));
514 public interface ID2D1Bitmap : ID2D1Image
515 {
516 extern(Windows):
517 	HRESULT CopyFromBitmap(const D2D1_POINT_2U *destPoint, ID2D1Bitmap bitmap, const D2D1_RECT_U *srcRect);
518 	HRESULT CopyFromMemory(const D2D1_RECT_U *dstRect, const void *srcData, uint pitch);
519 	HRESULT CopyFromRenderTarget(const D2D1_POINT_2U *destPoint, ID2D1RenderTarget renderTarget, const D2D1_RECT_U *srcRect);
520 	void GetDpi(float *dpiX, float *dpiY);
521 	D2D1_PIXEL_FORMAT GetPixelFormat();
522 	D2D1_SIZE_U GetPixelSize();
523 	D2D1_SIZE_F GetSize();
524 }
525 
526 mixin(uuid!(ID2D1BitmapBrush, "2cd906aa-12e2-11dc-9fed-001143a055f9"));
527 public interface ID2D1BitmapBrush : ID2D1Brush
528 {
529 extern(Windows):
530 	void GetBitmap(ID2D1Bitmap *bitmap);
531 	D2D1_EXTEND_MODE GetExtendModeX();
532 	D2D1_EXTEND_MODE GetExtendModeY();
533 	D2D1_BITMAP_INTERPOLATION_MODE GetInterpolationMode();
534 	void SetBitmap(ID2D1Bitmap bitmap);
535 	void SetExtendModeX(D2D1_EXTEND_MODE extendModeX);
536 	void SetExtendModeY(D2D1_EXTEND_MODE extendModeY);
537 	void SetInterpolationMode(D2D1_BITMAP_INTERPOLATION_MODE interpolationMode);
538 }
539 
540 mixin(uuid!(ID2D1BitmapRenderTarget, "2cd90695-12e2-11dc-9fed-001143a055f9"));
541 public interface ID2D1BitmapRenderTarget : ID2D1RenderTarget
542 {
543 extern(Windows):
544 	HRESULT GetBitmap(ID2D1Bitmap *bitmap);
545 }
546 
547 mixin(uuid!(ID2D1Brush, "2cd906a8-12e2-11dc-9fed-001143a055f9"));
548 public interface ID2D1Brush : ID2D1Resource
549 {
550 extern(Windows):
551 	float GetOpacity();
552 	void GetTransform(D2D1_MATRIX_3X2_F *transform);
553 	void SetOpacity(float opacity);
554 	void SetTransform(const D2D1_MATRIX_3X2_F *transform);
555 }
556 
557 mixin(uuid!(ID2D1DCRenderTarget, "1c51bc64-de61-46fd-9899-63a5d8f03950"));
558 public interface ID2D1DCRenderTarget : ID2D1RenderTarget
559 {
560 extern(Windows):
561 	HRESULT BindDC(const HDC hDC, const RECT *pSubRect);
562 }
563 
564 mixin(uuid!(ID2D1DrawingStateBlock, "28506e39-ebf6-46a1-bb47-fd85565ab957"));
565 public interface ID2D1DrawingStateBlock : ID2D1Resource
566 {
567 extern(Windows):
568 	void GetDescription(D2D1_DRAWING_STATE_DESCRIPTION *stateDescription);
569 	void GetTextRenderingParams(IDWriteRenderingParams *textRenderingParams);
570 	void SetDescription(D2D1_DRAWING_STATE_DESCRIPTION *stateDescription);
571 	void SetTextRenderingParams(IDWriteRenderingParams textRenderingParams = null);
572 }
573 
574 mixin(uuid!(ID2D1EllipseGeometry, "2cd906a4-12e2-11dc-9fed-001143a055f9"));
575 public interface ID2D1EllipseGeometry : ID2D1Geometry
576 {
577 extern(Windows):
578 	void GetEllipse(D2D1_ELLIPSE *ellipse);
579 }
580 
581 mixin(uuid!(ID2D1Factory, "2cd906a4-12e2-11dc-9fed-001143a055f9"));
582 public interface ID2D1Factory : IUnknown
583 {
584 extern(Windows):
585 	HRESULT CreateDCRenderTarget(const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1DCRenderTarget *dcRenderTarget);
586 	HRESULT CreateDrawingStateBlock(const D2D1_DRAWING_STATE_DESCRIPTION *drawingStateDescription, IDWriteRenderingParams textRenderingParams, ID2D1DrawingStateBlock *drawingStateBlock);
587 	HRESULT CreateDrawingStateBlock(ID2D1DrawingStateBlock *drawingStateBlock);
588 	HRESULT CreateDrawingStateBlock(const D2D1_DRAWING_STATE_DESCRIPTION *drawingStateDescription, ID2D1DrawingStateBlock *drawingStateBlock);
589 	HRESULT CreateDxgiSurfaceRenderTarget(IDXGISurface dxgiSurface, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget *renderTarget);
590 	HRESULT CreateEllipseGeometry(const D2D1_ELLIPSE *ellipse, ID2D1EllipseGeometry *ellipseGeometry);
591 	HRESULT CreateGeometryGroup(D2D1_FILL_MODE fillMode, ID2D1Geometry *geometries, uint geometriesCount, ID2D1GeometryGroup *geometryGroup);
592 	HRESULT CreateHwndRenderTarget(D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, D2D1_HWND_RENDER_TARGET_PROPERTIES *hwndRenderTargetProperties, ID2D1HwndRenderTarget *hwndRenderTarget);
593 	HRESULT CreatePathGeometry(ID2D1PathGeometry *pathGeometry);
594 	HRESULT CreateRectangleGeometry(const D2D1_RECT_F *rectangle, ID2D1RectangleGeometry *rectangleGeometry);
595 	HRESULT CreateRoundedRectangleGeometry(const D2D1_ROUNDED_RECT *roundedRectangle, ID2D1RoundedRectangleGeometry *roundedRectangleGeometry);
596 	HRESULT CreateStrokeStyle(const D2D1_STROKE_STYLE_PROPERTIES *strokeStyleProperties, const(float) *dashes, uint dashesCount, ID2D1StrokeStyle *strokeStyle);
597 	HRESULT CreateTransformedGeometry(ID2D1Geometry sourceGeometry, const D2D1_MATRIX_3X2_F *transform, ID2D1TransformedGeometry *transformedGeometry);
598 	HRESULT CreateWicBitmapRenderTarget(IWICBitmap target, const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties, ID2D1RenderTarget *renderTarget);
599 	void GetDesktopDpi(float *dpiX, float *dpiY);
600 	HRESULT ReloadSystemMetrics();
601 }
602 
603 mixin(uuid!(ID2D1GdiInteropRenderTarget, "e0db51c3-6f77-4bae-b3d5-e47509b35838"));
604 public interface ID2D1GdiInteropRenderTarget : IUnknown
605 {
606 extern(Windows):
607 	HRESULT GetDC(D2D1_DC_INITIALIZE_MODE mode, HDC *hdc);
608 	HRESULT ReleaseDC(RECT *update);
609 }
610 
611 mixin(uuid!(ID2D1Geometry, "2cd906a1-12e2-11dc-9fed-001143a055f9"));
612 public interface ID2D1Geometry : ID2D1Resource
613 {
614 extern(Windows):
615 	HRESULT CombineWithGeometry(ID2D1Geometry inputGeometry, D2D1_COMBINE_MODE combineMode, D2D1_MATRIX_3X2_F *inputGeometryTransform, ID2D1SimplifiedGeometrySink geometrySink);
616 	HRESULT CombineWithGeometry(ID2D1Geometry inputGeometry, D2D1_COMBINE_MODE combineMode, const D2D1_MATRIX_3X2_F *inputGeometryTransform, float flatteningTolerance, ID2D1SimplifiedGeometrySink geometrySink);
617 	HRESULT CompareWithGeometry(ID2D1Geometry inputGeometry, const D2D1_MATRIX_3X2_F *inputGeometryTransform, D2D1_GEOMETRY_RELATION *relation);
618 	HRESULT CompareWithGeometry(ID2D1Geometry inputGeometry, const D2D1_MATRIX_3X2_F *inputGeometryTransform, float flatteningTolerance, D2D1_GEOMETRY_RELATION *relation);
619 	HRESULT ComputeArea(const D2D1_MATRIX_3X2_F *worldTransform, float *area);
620 	HRESULT ComputeArea(const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, float *area);
621 	HRESULT ComputeLength(const D2D1_MATRIX_3X2_F *worldTransform, float *length);
622 	HRESULT ComputeLength(const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, float *length);
623 	HRESULT ComputePointAtLength(float length, const D2D1_MATRIX_3X2_F *worldTransform, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector);
624 	HRESULT ComputePointAtLength(float length, const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, D2D1_POINT_2F *point, D2D1_POINT_2F *unitTangentVector);
625 	HRESULT FillContainsPoint(D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains);
626 	HRESULT FillContainsPoint(D2D1_POINT_2F point, const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, BOOL *contains);
627 	HRESULT GetBounds(const D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds);
628 	HRESULT GetWidenedBounds(float strokeWidth, ID2D1StrokeStyle strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, D2D1_RECT_F *bounds);
629 	HRESULT GetWidenedBounds(float strokeWidth, ID2D1StrokeStyle strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, D2D1_RECT_F *bounds);
630 	HRESULT Outline(const D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink geometrySink);
631 	HRESULT Outline(const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, ID2D1SimplifiedGeometrySink geometrySink);
632 	HRESULT Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink geometrySink);
633 	HRESULT Simplify(D2D1_GEOMETRY_SIMPLIFICATION_OPTION simplificationOption, const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, ID2D1SimplifiedGeometrySink geometrySink);
634 	HRESULT StrokeContainsPoint(D2D1_POINT_2F point, float strokeWidth, ID2D1StrokeStyle strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, BOOL *contains);
635 	HRESULT StrokeContainsPoint(D2D1_POINT_2F point, float strokeWidth, ID2D1StrokeStyle strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, BOOL *contains);
636 	HRESULT Tessellate(const D2D1_MATRIX_3X2_F *worldTransform, ID2D1TessellationSink tessellationSink);
637 	HRESULT Tessellate(const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, ID2D1TessellationSink tessellationSink);
638 	HRESULT Widen(float strokeWidth, ID2D1StrokeStyle strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, ID2D1SimplifiedGeometrySink geometrySink);
639 	HRESULT Widen(float strokeWidth, ID2D1StrokeStyle strokeStyle, const D2D1_MATRIX_3X2_F *worldTransform, float flatteningTolerance, ID2D1SimplifiedGeometrySink geometrySink);
640 }
641 
642 mixin(uuid!(ID2D1GeometryGroup, "2cd906a6-12e2-11dc-9fed-001143a055f9"));
643 public interface ID2D1GeometryGroup : ID2D1Geometry
644 {
645 extern(Windows):
646 	void GetSourceGeometries(const ID2D1Geometry *geometries, uint geometriesCount);
647 	D2D1_FILL_MODE GetFillMode();
648 	uint GetSourceGeometryCount();
649 }
650 
651 mixin(uuid!(ID2D1GeometrySink, "2cd9069f-12e2-11dc-9fed-001143a055f9"));
652 public interface ID2D1GeometrySink : ID2D1SimplifiedGeometrySink
653 {
654 extern(Windows):
655 	void AddArc(D2D1_ARC_SEGMENT *arc);
656 	void AddBezier(const D2D1_BEZIER_SEGMENT *bezier);
657 	void AddLine(D2D1_POINT_2F point);
658 	void AddQuadraticBezier(const D2D1_QUADRATIC_BEZIER_SEGMENT *bezier);
659 	void AddQuadraticBeziers(const D2D1_QUADRATIC_BEZIER_SEGMENT *beziers, uint bezierCount);
660 }
661 
662 mixin(uuid!(ID2D1GradientStopCollection, "2cd906a7-12e2-11dc-9fed-001143a055f9"));
663 public interface ID2D1GradientStopCollection : ID2D1Resource
664 {
665 extern(Windows):
666 	D2D1_GAMMA GetColorInterpolationGamma();
667 	D2D1_EXTEND_MODE GetExtendMode();
668 	uint GetGradientStopCount();
669 	void GetGradientStops(D2D1_GRADIENT_STOP *gradientStops, uint gradientStopsCount);
670 }
671 
672 mixin(uuid!(ID2D1HwndRenderTarget, "2cd90698-12e2-11dc-9fed-001143a055f9"));
673 public interface ID2D1HwndRenderTarget : ID2D1RenderTarget
674 {
675 extern(Windows):
676 	D2D1_WINDOW_STATE CheckWindowState();
677 	HWND GetHwnd();
678 	HRESULT Resize(D2D1_SIZE_U *pixelSize);
679 }
680 
681 mixin(uuid!(ID2D1Image, "65019f75-8da2-497c-b32c-dfa34e48ede6"));
682 public interface ID2D1Image : ID2D1Resource
683 {
684 extern(Windows):
685 }
686 
687 mixin(uuid!(ID2D1Layer, "2cd9069b-12e2-11dc-9fed-001143a055f9"));
688 public interface ID2D1Layer : ID2D1Resource
689 {
690 extern(Windows):
691 	D2D1_SIZE_F GetSize();
692 }
693 
694 mixin(uuid!(ID2D1LinearGradientBrush, "2cd906ab-12e2-11dc-9fed-001143a055f9"));
695 public interface ID2D1LinearGradientBrush : ID2D1Brush
696 {
697 extern(Windows):
698 	D2D1_POINT_2F GetEndPoint();
699 	void GetGradientStopCollection(ID2D1GradientStopCollection *gradientStopCollection);
700 	D2D1_POINT_2F GetStartPoint();
701 	void SetEndPoint(D2D1_POINT_2F endPoint);
702 	void SetStartPoint(D2D1_POINT_2F startPoint);
703 }
704 
705 mixin(uuid!(ID2D1Mesh, "2cd906c2-12e2-11dc-9fed-001143a055f9"));
706 public interface ID2D1Mesh : ID2D1Resource
707 {
708 extern(Windows):
709 	HRESULT Open(ID2D1TessellationSink *tessellationSink);
710 }
711 
712 mixin(uuid!(ID2D1PathGeometry, "2cd906a5-12e2-11dc-9fed-001143a055f9"));
713 public interface ID2D1PathGeometry : ID2D1Geometry
714 {
715 extern(Windows):
716 	HRESULT GetFigureCount(uint *count);
717 	HRESULT GetSegmentCount(uint *count);
718 	HRESULT Open(ID2D1GeometrySink *geometrySink);
719 	HRESULT Stream(ID2D1GeometrySink geometrySink);
720 }
721 
722 mixin(uuid!(ID2D1RadialGradientBrush, "2cd906ac-12e2-11dc-9fed-001143a055f9"));
723 public interface ID2D1RadialGradientBrush : ID2D1Brush
724 {
725 extern(Windows):
726 	D2D1_POINT_2F GetCenter();
727 	D2D1_POINT_2F GetGradientOriginOffset();
728 	void GetGradientStopCollection(ID2D1GradientStopCollection *gradientStopCollection);
729 	float GetRadiusX();
730 	float GetRadiusY();
731 	void SetCenter(D2D1_POINT_2F center);
732 	void SetGradientOriginOffset(D2D1_POINT_2F gradientOriginOffset);
733 	void SetRadiusX(float radiusX);
734 	void SetRadiusY(float radiusY);
735 }
736 
737 mixin(uuid!(ID2D1RectangleGeometry, "2cd906a2-12e2-11dc-9fed-001143a055f9"));
738 public interface ID2D1RectangleGeometry : ID2D1Geometry
739 {
740 extern(Windows):
741 	void GetRect(D2D1_RECT_F *rect);
742 }
743 
744 mixin(uuid!(ID2D1RenderTarget, "2cd90694-12e2-11dc-9fed-001143a055f9"));
745 public interface ID2D1RenderTarget : ID2D1Resource
746 {
747 extern(Windows):
748 	void BeginDraw();
749 	void Clear(const D2D1_COLOR_F *clearColor = null);
750 	HRESULT CreateBitmap(D2D1_SIZE_U size, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap *bitmap);
751 	HRESULT CreateBitmap(D2D1_SIZE_U size, void *srcData, uint pitch, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap *bitmap);
752 	HRESULT CreateBitmapBrush(ID2D1Bitmap bitmap, D2D1_BITMAP_BRUSH_PROPERTIES *bitmapBrushProperties, D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1BitmapBrush *bitmapBrush);
753 	HRESULT CreateBitmapBrush(ID2D1Bitmap bitmap, ID2D1BitmapBrush *bitmapBrush);
754 	HRESULT CreateBitmapBrush(ID2D1Bitmap bitmap, const D2D1_BITMAP_BRUSH_PROPERTIES *bitmapBrushProperties, ID2D1BitmapBrush *bitmapBrush);
755 	HRESULT CreateBitmapFromWicBitmap(IWICBitmapSource wicBitmapSource, ID2D1Bitmap *bitmap);
756 	HRESULT CreateBitmapFromWicBitmap(IWICBitmapSource wicBitmapSource, const D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap *bitmap);
757 	HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, D2D1_SIZE_U desiredPixelSize, D2D1_PIXEL_FORMAT desiredFormat, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, ID2D1BitmapRenderTarget *bitmapRenderTarget);
758 	HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F *desiredSize, D2D1_SIZE_U *desiredPixelSize, D2D1_PIXEL_FORMAT *desiredFormat, D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS options, ID2D1BitmapRenderTarget *bitmapRenderTarget);
759 	HRESULT CreateCompatibleRenderTarget(ID2D1BitmapRenderTarget *bitmapRenderTarget);
760 	HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, ID2D1BitmapRenderTarget *bitmapRenderTarget);
761 	HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, D2D1_SIZE_U desiredPixelSize, ID2D1BitmapRenderTarget *bitmapRenderTarget);
762 	HRESULT CreateCompatibleRenderTarget(D2D1_SIZE_F desiredSize, D2D1_SIZE_U desiredPixelSize, D2D1_PIXEL_FORMAT desiredFormat, ID2D1BitmapRenderTarget *bitmapRenderTarget);
763 	HRESULT CreateGradientStopCollection(const D2D1_GRADIENT_STOP *gradientStops, uint gradientStopsCount, D2D1_GAMMA colorInterpolationGamma, D2D1_EXTEND_MODE extendMode, ID2D1GradientStopCollection *gradientStopCollection);
764 	HRESULT CreateGradientStopCollection(D2D1_GRADIENT_STOP *gradientStops, uint gradientStopsCount, ID2D1GradientStopCollection *gradientStopCollection);
765 	HRESULT CreateLayer(ID2D1Layer *layer);
766 	HRESULT CreateLayer(D2D1_SIZE_F size, ID2D1Layer *layer);
767 	HRESULT CreateLayer(D2D1_SIZE_F *size, ID2D1Layer *layer);
768 	HRESULT CreateLinearGradientBrush(const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, ID2D1GradientStopCollection gradientStopCollection, ID2D1LinearGradientBrush *linearGradientBrush);
769 	HRESULT CreateLinearGradientBrush(const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES *linearGradientBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection gradientStopCollection, ID2D1LinearGradientBrush *linearGradientBrush);
770 	HRESULT CreateMesh(ID2D1Mesh *mesh);
771 	HRESULT CreateRadialGradientBrush(const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1GradientStopCollection gradientStopCollection, ID2D1RadialGradientBrush *radialGradientBrush);
772 	HRESULT CreateRadialGradientBrush(const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES *radialGradientBrushProperties, ID2D1GradientStopCollection gradientStopCollection, ID2D1RadialGradientBrush *radialGradientBrush);
773 	HRESULT CreateSharedBitmap(IID* riid, void *data, D2D1_BITMAP_PROPERTIES *bitmapProperties, ID2D1Bitmap *bitmap);
774 	HRESULT CreateSolidColorBrush(const D2D1_COLOR_F *color, ID2D1SolidColorBrush *solidColorBrush);
775 	HRESULT CreateSolidColorBrush(const D2D1_COLOR_F *color, const D2D1_BRUSH_PROPERTIES *brushProperties, ID2D1SolidColorBrush *solidColorBrush);
776 	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);
777 	void DrawEllipse(const D2D1_ELLIPSE *ellipse, ID2D1Brush brush, float strokeWidth = 1.0f, ID2D1StrokeStyle strokeStyle = null);
778 	void DrawGeometry(ID2D1Geometry geometry, ID2D1Brush brush, float strokeWidth = 1.0f, ID2D1StrokeStyle strokeStyle = null);
779 	void DrawGlyphRun(D2D1_POINT_2F baselineOrigin, const DWRITE_GLYPH_RUN *glyphRun, ID2D1Brush foregroundBrush, DWRITE_MEASURING_MODE measuringMode = DWRITE_MEASURING_MODE.NATURAL);
780 	void DrawLine(D2D1_POINT_2F point0, D2D1_POINT_2F point1, ID2D1Brush brush, float strokeWidth = 1.0f, ID2D1StrokeStyle strokeStyle = null);
781 	void DrawRectangle(const D2D1_RECT_F *rect, ID2D1Brush brush, float strokeWidth = 1.0f, ID2D1StrokeStyle strokeStyle = null);
782 	void DrawRoundedRectangle(const D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush brush, float strokeWidth = 1.0f, ID2D1StrokeStyle strokeStyle = null);
783 	void DrawText(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);
784 	void DrawTextLayout(D2D1_POINT_2F origin, IDWriteTextLayout textLayout, ID2D1Brush defaultForegroundBrush, D2D1_DRAW_TEXT_OPTIONS options = D2D1_DRAW_TEXT_OPTIONS.NONE);
785 	HRESULT EndDraw(D2D1_TAG *tag1 = null, D2D1_TAG *tag2 = null);
786 	void FillEllipse(const D2D1_ELLIPSE *ellipse, ID2D1Brush brush);
787 	void FillGeometry(ID2D1Geometry geometry, ID2D1Brush brush, ID2D1Brush opacityBrush = null);
788 	void FillMesh(ID2D1Mesh mesh, ID2D1Brush brush);
789 	void FillOpacityMask(ID2D1Bitmap opacityMask, ID2D1Brush brush, D2D1_OPACITY_MASK_CONTENT content, const D2D1_RECT_F *destinationRectangle = null, const D2D1_RECT_F *sourceRectangle = null);
790 	void FillRectangle(const D2D1_RECT_F *rect, ID2D1Brush brush);
791 	void FillRoundedRectangle(const D2D1_ROUNDED_RECT *roundedRect, ID2D1Brush brush);
792 	HRESULT Flush(D2D1_TAG *tag1 = null, D2D1_TAG *tag2 = null);
793 	D2D1_ANTIALIAS_MODE GetAntialiasMode();
794 	void GetDpi(float *dpiX, float *dpiY);
795 	uint GetMaximumBitmapSize();
796 	D2D1_PIXEL_FORMAT GetPixelFormat();
797 	D2D1_SIZE_U GetPixelSize();
798 	D2D1_SIZE_F GetSize();
799 	void GetTags(D2D1_TAG *tag1 = null, D2D1_TAG *tag2 = null);
800 	D2D1_TEXT_ANTIALIAS_MODE GetTextAntialiasMode();
801 	void GetTextRenderingParams(IDWriteRenderingParams *textRenderingParams);
802 	void GetTransform(D2D1_MATRIX_3X2_F *transform);
803 	BOOL IsSupported(const D2D1_RENDER_TARGET_PROPERTIES *renderTargetProperties);
804 	void PopAxisAlignedClip();
805 	void PopLayer();
806 	void PushAxisAlignedClip(const D2D1_RECT_F *clipRect, D2D1_ANTIALIAS_MODE antialiasMode);
807 	void PushLayer(const D2D1_LAYER_PARAMETERS *layerParameters, ID2D1Layer layer);
808 	void RestoreDrawingState(ID2D1DrawingStateBlock drawingStateBlock);
809 	void SaveDrawingState(ID2D1DrawingStateBlock *drawingStateBlock);
810 	void SetAntialiasMode(D2D1_ANTIALIAS_MODE antialiasMode);
811 	void SetDpi(float dpiX, float dpiY);
812 	void SetTags(D2D1_TAG tag1, D2D1_TAG tag2);
813 	void SetTextAntialiasMode(D2D1_TEXT_ANTIALIAS_MODE textAntialiasMode);
814 	void SetTextRenderingParams(IDWriteRenderingParams textRenderingParams = null);
815 	void SetTransform(const D2D1_MATRIX_3X2_F *transform);
816 }
817 
818 mixin(uuid!(ID2D1Resource, "2cd90691-12e2-11dc-9fed-001143a055f9"));
819 public interface ID2D1Resource : IUnknown
820 {
821 extern(Windows):
822 	void GetFactory(ID2D1Factory *factory);
823 }
824 
825 mixin(uuid!(ID2D1RoundedRectangleGeometry, "2cd906a3-12e2-11dc-9fed-001143a055f9"));
826 public interface ID2D1RoundedRectangleGeometry : ID2D1Geometry
827 {
828 extern(Windows):
829 	void GetRoundedRect(D2D1_ROUNDED_RECT *roundedRect);
830 }
831 
832 mixin(uuid!(ID2D1SimplifiedGeometrySink, "2cd9069e-12e2-11dc-9fed-001143a055f9"));
833 public interface ID2D1SimplifiedGeometrySink : IUnknown
834 {
835 extern(Windows):
836 	void AddBeziers(const D2D1_BEZIER_SEGMENT* Beziers, uint Count);
837 	void AddLines(const D2D_POINT_2F* Points, uint Count);
838 	void BeginFigure(D2D1_POINT_2F StartPoint, D2D1_FIGURE_BEGIN FigureBegin);
839 	HRESULT Close();
840 	void EndFigure(D2D1_FIGURE_END FigureEnd);
841 	void SetFillMode(D2D1_FILL_MODE FillMode);
842 	void SetSegmentFlags(D2D1_PATH_SEGMENT VertexFlags);
843 }
844 
845 mixin(uuid!(ID2D1SolidColorBrush, "2cd906a9-12e2-11dc-9fed-001143a055f9"));
846 public interface ID2D1SolidColorBrush : ID2D1Brush
847 {
848 extern(Windows):
849 	D2D1_COLOR_F GetColor();
850 	void SetColor(const D2D1_COLOR_F *color);
851 }
852 
853 mixin(uuid!(ID2D1StrokeStyle, "2cd9069d-12e2-11dc-9fed-001143a055f9"));
854 public interface ID2D1StrokeStyle : ID2D1Resource
855 {
856 extern(Windows):
857 	D2D1_CAP_STYLE GetDashCap();
858 	void GetDashes(float *dashes, uint dashesCount);
859 	uint GetDashesCount();
860 	float GetDashOffset();
861 	D2D1_DASH_STYLE GetDashStyle();
862 	D2D1_CAP_STYLE GetEndCap();
863 	D2D1_LINE_JOIN GetLineJoin();
864 	float GetMiterLimit();
865 	D2D1_CAP_STYLE GetStartCap();
866 }
867 
868 mixin(uuid!(ID2D1TessellationSink, "2cd906c1-12e2-11dc-9fed-001143a055f9"));
869 public interface ID2D1TessellationSink : IUnknown
870 {
871 extern(Windows):
872 	void AddTriangles(const D2D1_TRIANGLE *triangles, uint trianglesCount);
873 	HRESULT Close();
874 }
875 
876 mixin(uuid!(ID2D1TransformedGeometry, "2cd906bb-12e2-11dc-9fed-001143a055f9"));
877 public interface ID2D1TransformedGeometry : ID2D1Geometry
878 {
879 extern(Windows):
880 	void GetSourceGeometry(ID2D1Geometry *sourceGeometry);
881 	void GetTransform(D2D1_MATRIX_3X2_F *transform);
882 }
883 
884 //
885 //	Functions
886 //
887 
888 extern(Windows)
889 {
890 	HRESULT D2D1CreateFactory(D2D1_FACTORY_TYPE factoryType, GUID* riid, void **ppIFactory);
891 	HRESULT D2D1CreateFactory(D2D1_FACTORY_TYPE factoryType, GUID* riid, const D2D1_FACTORY_OPTIONS *pFactoryOptions, void **ppIFactory);
892 	BOOL D2D1InvertMatrix(D2D1_MATRIX_3X2_F *matrix);
893 	BOOL D2D1IsMatrixInvertible(const D2D1_MATRIX_3X2_F *matrix);
894 	void D2D1MakeRotateMatrix(float angle, D2D1_POINT_2F center, D2D1_MATRIX_3X2_F *matrix);
895 	void D2D1MakeSkewMatrix(float angleX, float angleY, D2D1_POINT_2F center, D2D1_MATRIX_3X2_F *matrix);
896 }