winapi_ui_automation/um/
d2d1.rs

1// Licensed under the Apache License, Version 2.0
2// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// All files in the project carrying such notice may not be copied, modified, or distributed
5// except according to those terms
6//! Mappings for the contents of d2d1.h
7use ctypes::c_void;
8use shared::basetsd::{UINT32, UINT64};
9use shared::dxgi::IDXGISurface;
10use shared::guiddef::REFIID;
11use shared::minwindef::{BOOL, DWORD, FLOAT};
12use shared::windef::{HDC, HWND, RECT};
13use um::d2dbasetypes::{
14    D2D_COLOR_F, D2D_MATRIX_3X2_F, D2D_POINT_2F, D2D_POINT_2U, D2D_RECT_F, D2D_RECT_U, D2D_SIZE_F,
15    D2D_SIZE_U,
16};
17use um::d3dcommon::{D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_9_1};
18use um::dcommon::{D2D1_PIXEL_FORMAT, DWRITE_MEASURING_MODE};
19use um::dwrite::{DWRITE_GLYPH_RUN, IDWriteRenderingParams, IDWriteTextFormat, IDWriteTextLayout};
20use um::unknwnbase::{IUnknown, IUnknownVtbl};
21use um::wincodec::{IWICBitmap, IWICBitmapSource};
22use um::winnt::{HRESULT, WCHAR};
23// Types confirmed affected by the ABI issue:
24// D2D1_SIZE_F, D2D1_SIZE_U, D2D1_COLOR_F, D2D1_PIXEL_FORMAT, D2D1_POINT_2F
25pub const D2D1_DEFAULT_FLATTENING_TOLERANCE: FLOAT = 0.25;
26pub const D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR: DWORD = 0;
27pub const D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR: DWORD = 1;
28pub const D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC: DWORD = 2;
29pub const D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR: DWORD = 3;
30pub const D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC: DWORD = 4;
31pub const D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC: DWORD = 5;
32pub const D2D1_INTERPOLATION_MODE_DEFINITION_FANT: DWORD = 6;
33pub const D2D1_INTERPOLATION_MODE_DEFINITION_MIPMAP_LINEAR: DWORD = 7;
34ENUM!{enum D2D1_GAMMA {
35    D2D1_GAMMA_2_2 = 0,
36    D2D1_GAMMA_1_0 = 1,
37}}
38ENUM!{enum D2D1_OPACITY_MASK_CONTENT {
39    D2D1_OPACITY_MASK_CONTENT_GRAPHICS = 0,
40    D2D1_OPACITY_MASK_CONTENT_TEXT_NATURAL = 1,
41    D2D1_OPACITY_MASK_CONTENT_TEXT_GDI_COMPATIBLE = 2,
42}}
43ENUM!{enum D2D1_EXTEND_MODE {
44    D2D1_EXTEND_MODE_CLAMP = 0,
45    D2D1_EXTEND_MODE_WRAP = 1,
46    D2D1_EXTEND_MODE_MIRROR = 2,
47}}
48ENUM!{enum D2D1_ANTIALIAS_MODE {
49    D2D1_ANTIALIAS_MODE_PER_PRIMITIVE = 0,
50    D2D1_ANTIALIAS_MODE_ALIASED = 1,
51}}
52ENUM!{enum D2D1_TEXT_ANTIALIAS_MODE {
53    D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0,
54    D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1,
55    D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2,
56    D2D1_TEXT_ANTIALIAS_MODE_ALIASED = 3,
57}}
58ENUM!{enum D2D1_BITMAP_INTERPOLATION_MODE {
59    D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR =
60        D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
61    D2D1_BITMAP_INTERPOLATION_MODE_LINEAR =
62        D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
63}}
64ENUM!{enum D2D1_DRAW_TEXT_OPTIONS {
65    D2D1_DRAW_TEXT_OPTIONS_NO_SNAP = 0x00000001,
66    D2D1_DRAW_TEXT_OPTIONS_CLIP = 0x00000002,
67    D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x00000004,
68    D2D1_DRAW_TEXT_OPTIONS_NONE = 0x00000000,
69}}
70pub type D2D1_POINT_2U = D2D_POINT_2U;
71pub type D2D1_POINT_2F = D2D_POINT_2F;
72pub type D2D1_RECT_F = D2D_RECT_F;
73pub type D2D1_RECT_U = D2D_RECT_U;
74pub type D2D1_SIZE_F = D2D_SIZE_F;
75pub type D2D1_SIZE_U = D2D_SIZE_U;
76pub type D2D1_COLOR_F = D2D_COLOR_F;
77pub type D2D1_MATRIX_3X2_F = D2D_MATRIX_3X2_F;
78pub type D2D1_TAG = UINT64;
79STRUCT!{struct D2D1_BITMAP_PROPERTIES {
80    pixelFormat: D2D1_PIXEL_FORMAT,
81    dpiX: FLOAT,
82    dpiY: FLOAT,
83}}
84STRUCT!{struct D2D1_GRADIENT_STOP {
85    position: FLOAT,
86    color: D2D1_COLOR_F,
87}}
88STRUCT!{struct D2D1_BRUSH_PROPERTIES {
89    opacity: FLOAT,
90    transform: D2D1_MATRIX_3X2_F,
91}}
92STRUCT!{struct D2D1_BITMAP_BRUSH_PROPERTIES {
93    extendModeX: D2D1_EXTEND_MODE,
94    extendModeY: D2D1_EXTEND_MODE,
95    interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
96}}
97STRUCT!{struct D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES {
98    startPoint: D2D1_POINT_2F,
99    endPoint: D2D1_POINT_2F,
100}}
101STRUCT!{struct D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES {
102    center: D2D1_POINT_2F,
103    gradientOriginOffset: D2D1_POINT_2F,
104    radiusX: FLOAT,
105    radiusY: FLOAT,
106}}
107ENUM!{enum D2D1_ARC_SIZE {
108    D2D1_ARC_SIZE_SMALL = 0,
109    D2D1_ARC_SIZE_LARGE = 1,
110}}
111ENUM!{enum D2D1_CAP_STYLE {
112    D2D1_CAP_STYLE_FLAT = 0,
113    D2D1_CAP_STYLE_SQUARE = 1,
114    D2D1_CAP_STYLE_ROUND = 2,
115    D2D1_CAP_STYLE_TRIANGLE = 3,
116}}
117ENUM!{enum D2D1_DASH_STYLE {
118    D2D1_DASH_STYLE_SOLID = 0,
119    D2D1_DASH_STYLE_DASH = 1,
120    D2D1_DASH_STYLE_DOT = 2,
121    D2D1_DASH_STYLE_DASH_DOT = 3,
122    D2D1_DASH_STYLE_DASH_DOT_DOT = 4,
123    D2D1_DASH_STYLE_CUSTOM = 5,
124}}
125ENUM!{enum D2D1_LINE_JOIN {
126    D2D1_LINE_JOIN_MITER = 0,
127    D2D1_LINE_JOIN_BEVEL = 1,
128    D2D1_LINE_JOIN_ROUND = 2,
129    D2D1_LINE_JOIN_MITER_OR_BEVEL = 3,
130}}
131ENUM!{enum D2D1_COMBINE_MODE {
132    D2D1_COMBINE_MODE_UNION = 0,
133    D2D1_COMBINE_MODE_INTERSECT = 1,
134    D2D1_COMBINE_MODE_XOR = 2,
135    D2D1_COMBINE_MODE_EXCLUDE = 3,
136}}
137ENUM!{enum D2D1_GEOMETRY_RELATION {
138    D2D1_GEOMETRY_RELATION_UNKNOWN = 0,
139    D2D1_GEOMETRY_RELATION_DISJOINT = 1,
140    D2D1_GEOMETRY_RELATION_IS_CONTAINED = 2,
141    D2D1_GEOMETRY_RELATION_CONTAINS = 3,
142    D2D1_GEOMETRY_RELATION_OVERLAP = 4,
143}}
144ENUM!{enum D2D1_GEOMETRY_SIMPLIFICATION_OPTION {
145    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_CUBICS_AND_LINES = 0,
146    D2D1_GEOMETRY_SIMPLIFICATION_OPTION_LINES = 1,
147}}
148ENUM!{enum D2D1_FIGURE_BEGIN {
149    D2D1_FIGURE_BEGIN_FILLED = 0,
150    D2D1_FIGURE_BEGIN_HOLLOW = 1,
151}}
152ENUM!{enum D2D1_FIGURE_END {
153    D2D1_FIGURE_END_OPEN = 0,
154    D2D1_FIGURE_END_CLOSED = 1,
155}}
156STRUCT!{struct D2D1_BEZIER_SEGMENT {
157    point1: D2D1_POINT_2F,
158    point2: D2D1_POINT_2F,
159    point3: D2D1_POINT_2F,
160}}
161STRUCT!{struct D2D1_TRIANGLE {
162    point1: D2D1_POINT_2F,
163    point2: D2D1_POINT_2F,
164    point3: D2D1_POINT_2F,
165}}
166ENUM!{enum D2D1_PATH_SEGMENT {
167    D2D1_PATH_SEGMENT_NONE = 0x00000000,
168    D2D1_PATH_SEGMENT_FORCE_UNSTROKED = 0x00000001,
169    D2D1_PATH_SEGMENT_FORCE_ROUND_LINE_JOIN = 0x00000002,
170}}
171ENUM!{enum D2D1_SWEEP_DIRECTION {
172    D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE = 0,
173    D2D1_SWEEP_DIRECTION_CLOCKWISE = 1,
174}}
175ENUM!{enum D2D1_FILL_MODE {
176    D2D1_FILL_MODE_ALTERNATE = 0,
177    D2D1_FILL_MODE_WINDING = 1,
178}}
179STRUCT!{struct D2D1_ARC_SEGMENT {
180    point: D2D1_POINT_2F,
181    size: D2D1_SIZE_F,
182    rotationAngle: FLOAT,
183    sweepDirection: D2D1_SWEEP_DIRECTION,
184    arcSize: D2D1_ARC_SIZE,
185}}
186STRUCT!{struct D2D1_QUADRATIC_BEZIER_SEGMENT {
187    point1: D2D1_POINT_2F,
188    point2: D2D1_POINT_2F,
189}}
190STRUCT!{struct D2D1_ELLIPSE {
191    point: D2D1_POINT_2F,
192    radiusX: FLOAT,
193    radiusY: FLOAT,
194}}
195STRUCT!{struct D2D1_ROUNDED_RECT {
196    rect: D2D1_RECT_F,
197    radiusX: FLOAT,
198    radiusY: FLOAT,
199}}
200STRUCT!{struct D2D1_STROKE_STYLE_PROPERTIES {
201    startCap: D2D1_CAP_STYLE,
202    endCap: D2D1_CAP_STYLE,
203    dashCap: D2D1_CAP_STYLE,
204    lineJoin: D2D1_LINE_JOIN,
205    miterLimit: FLOAT,
206    dashStyle: D2D1_DASH_STYLE,
207    dashOffset: FLOAT,
208}}
209ENUM!{enum D2D1_LAYER_OPTIONS {
210    D2D1_LAYER_OPTIONS_NONE = 0x00000000,
211    D2D1_LAYER_OPTIONS_INITIALIZE_FOR_CLEARTYPE = 0x00000001,
212}}
213STRUCT!{struct D2D1_LAYER_PARAMETERS {
214    contentBounds: D2D1_RECT_F,
215    geometricMask: *mut ID2D1Geometry,
216    maskAntialiasMode: D2D1_ANTIALIAS_MODE,
217    maskTransform: D2D1_MATRIX_3X2_F,
218    opacity: FLOAT,
219    opacityBrush: *mut ID2D1Brush,
220    layerOptions: D2D1_LAYER_OPTIONS,
221}}
222ENUM!{enum D2D1_WINDOW_STATE {
223    D2D1_WINDOW_STATE_NONE = 0x0000000,
224    D2D1_WINDOW_STATE_OCCLUDED = 0x0000001,
225}}
226ENUM!{enum D2D1_RENDER_TARGET_TYPE {
227    D2D1_RENDER_TARGET_TYPE_DEFAULT = 0,
228    D2D1_RENDER_TARGET_TYPE_SOFTWARE = 1,
229    D2D1_RENDER_TARGET_TYPE_HARDWARE = 2,
230}}
231ENUM!{enum D2D1_FEATURE_LEVEL {
232    D2D1_FEATURE_LEVEL_DEFAULT = 0,
233    D2D1_FEATURE_LEVEL_9 = D3D_FEATURE_LEVEL_9_1,
234    D2D1_FEATURE_LEVEL_10 = D3D_FEATURE_LEVEL_10_0,
235}}
236ENUM!{enum D2D1_RENDER_TARGET_USAGE {
237    D2D1_RENDER_TARGET_USAGE_NONE = 0x00000000,
238    D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING = 0x00000001,
239    D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE = 0x00000002,
240}}
241ENUM!{enum D2D1_PRESENT_OPTIONS {
242    D2D1_PRESENT_OPTIONS_NONE = 0x00000000,
243    D2D1_PRESENT_OPTIONS_RETAIN_CONTENTS = 0x00000001,
244    D2D1_PRESENT_OPTIONS_IMMEDIATELY = 0x00000002,
245}}
246STRUCT!{struct D2D1_RENDER_TARGET_PROPERTIES {
247    _type: D2D1_RENDER_TARGET_TYPE,
248    pixelFormat: D2D1_PIXEL_FORMAT,
249    dpiX: FLOAT,
250    dpiY: FLOAT,
251    usage: D2D1_RENDER_TARGET_USAGE,
252    minLevel: D2D1_FEATURE_LEVEL,
253}}
254STRUCT!{struct D2D1_HWND_RENDER_TARGET_PROPERTIES {
255    hwnd: HWND,
256    pixelSize: D2D1_SIZE_U,
257    presentOptions: D2D1_PRESENT_OPTIONS,
258}}
259ENUM!{enum D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS {
260    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_NONE = 0x00000000,
261    D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE = 0x00000001,
262}}
263STRUCT!{struct D2D1_DRAWING_STATE_DESCRIPTION {
264    antialiasMode: D2D1_ANTIALIAS_MODE,
265    textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
266    tag1: D2D1_TAG,
267    tag2: D2D1_TAG,
268    transform: D2D1_MATRIX_3X2_F,
269}}
270ENUM!{enum D2D1_DC_INITIALIZE_MODE {
271    D2D1_DC_INITIALIZE_MODE_COPY = 0,
272    D2D1_DC_INITIALIZE_MODE_CLEAR = 1,
273}}
274ENUM!{enum D2D1_DEBUG_LEVEL {
275    D2D1_DEBUG_LEVEL_NONE = 0,
276    D2D1_DEBUG_LEVEL_ERROR = 1,
277    D2D1_DEBUG_LEVEL_WARNING = 2,
278    D2D1_DEBUG_LEVEL_INFORMATION = 3,
279}}
280ENUM!{enum D2D1_FACTORY_TYPE {
281    D2D1_FACTORY_TYPE_SINGLE_THREADED = 0,
282    D2D1_FACTORY_TYPE_MULTI_THREADED = 1,
283}}
284STRUCT!{struct D2D1_FACTORY_OPTIONS {
285    debugLevel: D2D1_DEBUG_LEVEL,
286}}
287RIDL!{#[uuid(0x2cd90691, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
288interface ID2D1Resource(ID2D1ResourceVtbl): IUnknown(IUnknownVtbl) {
289    fn GetFactory(
290        factory: *mut *mut ID2D1Factory,
291    ) -> (),
292}}
293RIDL!{#[uuid(0x65019f75, 0x8da2, 0x497c, 0xb3, 0x2c, 0xdf, 0xa3, 0x4e, 0x48, 0xed, 0xe6)]
294interface ID2D1Image(ID2D1ImageVtbl): ID2D1Resource(ID2D1ResourceVtbl) {}}
295RIDL!{#[uuid(0xa2296057, 0xea42, 0x4099, 0x98, 0x3b, 0x53, 0x9f, 0xb6, 0x50, 0x54, 0x26)]
296interface ID2D1Bitmap(ID2D1BitmapVtbl): ID2D1Image(ID2D1ImageVtbl) {
297    #[fixme] fn GetSize() -> D2D1_SIZE_F,
298    #[fixme] fn GetPixelSize() -> D2D1_SIZE_U,
299    #[fixme] fn GetPixelFormat() -> D2D1_PIXEL_FORMAT,
300    fn GetDpi(
301        dpiX: *mut FLOAT,
302        dpiY: *mut FLOAT,
303    ) -> (),
304    fn CopyFromBitmap(
305        destPoint: *const D2D1_POINT_2U,
306        bitmap: *mut ID2D1Bitmap,
307        srcRect: *const D2D1_RECT_U,
308    ) -> HRESULT,
309    fn CopyFromRenderTarget(
310        destPoint: *const D2D1_POINT_2U,
311        renderTarget: *mut ID2D1RenderTarget,
312        srcRect: *const D2D1_RECT_U,
313    ) -> HRESULT,
314    fn CopyFromMemory(
315        dstRect: *const D2D1_RECT_U,
316        srcData: *const c_void,
317        pitch: UINT32,
318    ) -> HRESULT,
319}}
320RIDL!{#[uuid(0x2cd906a7, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
321interface ID2D1GradientStopCollection(ID2D1GradientStopCollectionVtbl):
322    ID2D1Resource(ID2D1ResourceVtbl) {
323    fn GetGradientStopCount() -> UINT32,
324    fn GetGradientStops(
325        gradientStops: *mut D2D1_GRADIENT_STOP,
326        gradientStopsCount: UINT32,
327    ) -> (),
328    fn GetColorInterpolationGamma() -> D2D1_GAMMA,
329    fn GetExtendMode() -> D2D1_EXTEND_MODE,
330}}
331RIDL!{#[uuid(0x2cd906a8, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
332interface ID2D1Brush(ID2D1BrushVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
333    fn SetOpacity(
334        opacity: FLOAT,
335    ) -> (),
336    fn SetTransform(
337        transform: *const D2D1_MATRIX_3X2_F,
338    ) -> (),
339    fn GetOpacity() -> FLOAT,
340    fn GetTransform(
341        transform: *mut D2D1_MATRIX_3X2_F,
342    ) -> (),
343}}
344RIDL!{#[uuid(0x2cd906aa, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
345interface ID2D1BitmapBrush(ID2D1BitmapBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
346    fn SetExtendModeX(
347        extendModeX: D2D1_EXTEND_MODE,
348    ) -> (),
349    fn SetExtendModeY(
350        extendModeY: D2D1_EXTEND_MODE,
351    ) -> (),
352    fn SetInterpolationMode(
353        interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
354    ) -> (),
355    fn SetBitmap(
356        bitmap: *mut ID2D1Bitmap,
357    ) -> (),
358    fn GetExtendModeX() -> D2D1_EXTEND_MODE,
359    fn GetExtendModeY() -> D2D1_EXTEND_MODE,
360    fn GetInterpolationMode() -> D2D1_BITMAP_INTERPOLATION_MODE,
361    fn GetBitmap(
362        bitmap: *mut *mut ID2D1Bitmap,
363    ) -> (),
364}}
365RIDL!{#[uuid(0x2cd906a9, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
366interface ID2D1SolidColorBrush(ID2D1SolidColorBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
367    fn SetColor(
368        color: *const D2D1_COLOR_F,
369    ) -> (),
370    #[fixme] fn GetColor() -> D2D1_COLOR_F,
371}}
372RIDL!{#[uuid(0x2cd906ab, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
373interface ID2D1LinearGradientBrush(ID2D1LinearGradientBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
374    fn SetStartPoint(
375        startPoint: D2D1_POINT_2F,
376    ) -> (),
377    fn SetEndPoint(
378        endPoint: D2D1_POINT_2F,
379    ) -> (),
380    #[fixme] fn GetStartPoint() -> D2D1_POINT_2F,
381    #[fixme] fn GetEndPoint() -> D2D1_POINT_2F,
382    fn GetGradientStopCollection(
383        gradientStopCollection: *mut *mut ID2D1GradientStopCollection,
384    ) -> (),
385}}
386RIDL!{#[uuid(0x2cd906ac, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
387interface ID2D1RadialGradientBrush(ID2D1RadialGradientBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
388    fn SetCenter(
389        center: D2D1_POINT_2F,
390    ) -> (),
391    fn SetGradientOriginOffset(
392        gradientOriginOffset: D2D1_POINT_2F,
393    ) -> (),
394    fn SetRadiusX(
395        radiusX: FLOAT,
396    ) -> (),
397    fn SetRadiusY(
398        radiusY: FLOAT,
399    ) -> (),
400    #[fixme] fn GetCenter() -> D2D1_POINT_2F,
401    #[fixme] fn GetGradientOriginOffset() -> D2D1_POINT_2F,
402    fn GetRadiusX() -> FLOAT,
403    fn GetRadiusY() -> FLOAT,
404    fn GetGradientStopCollection(
405        gradientStopCollection: *mut *mut ID2D1GradientStopCollection,
406    ) -> (),
407}}
408RIDL!{#[uuid(0x2cd9069d, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
409interface ID2D1StrokeStyle(ID2D1StrokeStyleVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
410    fn GetStartCap() -> D2D1_CAP_STYLE,
411    fn GetEndCap() -> D2D1_CAP_STYLE,
412    fn GetDashCap() -> D2D1_CAP_STYLE,
413    fn GetMiterLimit() -> FLOAT,
414    fn GetLineJoin() -> D2D1_LINE_JOIN,
415    fn GetDashOffset() -> FLOAT,
416    fn GetDashStyle() -> D2D1_DASH_STYLE,
417    fn GetDashesCount() -> UINT32,
418    fn GetDashes(
419        dashes: *mut FLOAT,
420        dashesCount: UINT32,
421    ) -> (),
422}}
423RIDL!{#[uuid(0x2cd906a1, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
424interface ID2D1Geometry(ID2D1GeometryVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
425    fn GetBounds(
426        worldTransform: *const D2D1_MATRIX_3X2_F,
427        bounds: *mut D2D1_RECT_F,
428    ) -> HRESULT,
429    fn GetWidenedBounds(
430        strokeWidth: FLOAT,
431        strokeStyle: *mut ID2D1StrokeStyle,
432        worldTransform: *const D2D1_MATRIX_3X2_F,
433        flatteningTolerance: FLOAT,
434        bounds: *mut D2D1_RECT_F,
435    ) -> HRESULT,
436    fn StrokeContainsPoint(
437        point: D2D1_POINT_2F,
438        strokeWidth: FLOAT,
439        strokeStyle: *mut ID2D1StrokeStyle,
440        worldTransform: *const D2D1_MATRIX_3X2_F,
441        flatteningTolerance: FLOAT,
442        contains: *mut BOOL,
443    ) -> HRESULT,
444    fn FillContainsPoint(
445        point: D2D1_POINT_2F,
446        worldTransform: *const D2D1_MATRIX_3X2_F,
447        flatteningTolerance: FLOAT,
448        contains: *mut BOOL,
449    ) -> HRESULT,
450    fn CompareWithGeometry(
451        inputGeometry: *mut ID2D1Geometry,
452        inputGeometryTransform: *const D2D1_MATRIX_3X2_F,
453        flatteningTolerance: FLOAT,
454        relation: *mut D2D1_GEOMETRY_RELATION,
455    ) -> HRESULT,
456    fn Simplify(
457        simplificationOption: D2D1_GEOMETRY_SIMPLIFICATION_OPTION,
458        worldTransform: *const D2D1_MATRIX_3X2_F,
459        flatteningTolerance: FLOAT,
460        geometrySink: *mut ID2D1SimplifiedGeometrySink,
461    ) -> HRESULT,
462    fn Tessellate(
463        worldTransform: *const D2D1_MATRIX_3X2_F,
464        flatteningTolerance: FLOAT,
465        tessellationSink: *mut ID2D1TessellationSink,
466    ) -> HRESULT,
467    fn CombineWithGeometry(
468        inputGeometry: *mut ID2D1Geometry,
469        combineMode: D2D1_COMBINE_MODE,
470        inputGeometryTransform: *const D2D1_MATRIX_3X2_F,
471        flatteningTolerance: FLOAT,
472        geometrySink: *mut ID2D1SimplifiedGeometrySink,
473    ) -> HRESULT,
474    fn Outline(
475        worldTransform: *const D2D1_MATRIX_3X2_F,
476        flatteningTolerance: FLOAT,
477        geometrySink: *mut ID2D1SimplifiedGeometrySink,
478    ) -> HRESULT,
479    fn ComputeArea(
480        worldTransform: *const D2D1_MATRIX_3X2_F,
481        flatteningTolerance: FLOAT,
482        area: *mut FLOAT,
483    ) -> HRESULT,
484    fn ComputeLength(
485        worldTransform: *const D2D1_MATRIX_3X2_F,
486        flatteningTolerance: FLOAT,
487        length: *mut FLOAT,
488    ) -> HRESULT,
489    fn ComputePointAtLength(
490        length: FLOAT,
491        worldTransform: *const D2D1_MATRIX_3X2_F,
492        flatteningTolerance: FLOAT,
493        point: *mut D2D1_POINT_2F,
494        unitTangentVector: *mut D2D1_POINT_2F,
495    ) -> HRESULT,
496    fn Widen(
497        strokeWidth: FLOAT,
498        strokeStyle: *mut ID2D1StrokeStyle,
499        worldTransform: *const D2D1_MATRIX_3X2_F,
500        flatteningTolerance: FLOAT,
501        geometrySink: *mut ID2D1SimplifiedGeometrySink,
502    ) -> HRESULT,
503}}
504RIDL!{#[uuid(0x2cd906a2, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
505interface ID2D1RectangleGeometry(ID2D1RectangleGeometryVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
506    fn GetRect(
507        rect: *mut D2D1_RECT_F,
508    ) -> (),
509}}
510RIDL!{#[uuid(0x2cd906a3, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
511interface ID2D1RoundedRectangleGeometry(ID2D1RoundedRectangleGeometryVtbl):
512    ID2D1Geometry(ID2D1GeometryVtbl) {
513    fn GetRoundedRect(
514        roundedRect: *mut D2D1_ROUNDED_RECT,
515    ) -> (),
516}}
517RIDL!{#[uuid(0x2cd906a4, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
518interface ID2D1EllipseGeometry(ID2D1EllipseGeometryVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
519    fn GetEllipse(
520        ellipse: *mut D2D1_ELLIPSE,
521    ) -> (),
522}}
523RIDL!{#[uuid(0x2cd906a6, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
524interface ID2D1GeometryGroup(ID2D1GeometryGroupVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
525    fn GetFillMode() -> D2D1_FILL_MODE,
526    fn GetSourceGeometryCount() -> UINT32,
527    fn GetSourceGeometries(
528        geometries: *mut *mut ID2D1Geometry,
529        geometriesCount: UINT32,
530    ) -> (),
531}}
532RIDL!{#[uuid(0x2cd906bb, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
533interface ID2D1TransformedGeometry(ID2D1TransformedGeometryVtbl):
534    ID2D1Geometry(ID2D1GeometryVtbl) {
535    fn GetSourceGeometry(
536        sourceGeometry: *mut *mut ID2D1Geometry,
537    ) -> (),
538    fn GetTransform(
539        transform: *mut D2D1_MATRIX_3X2_F,
540    ) -> (),
541}}
542RIDL!{#[uuid(0x2cd9069e, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
543interface ID2D1SimplifiedGeometrySink(ID2D1SimplifiedGeometrySinkVtbl): IUnknown(IUnknownVtbl) {
544    fn SetFillMode(
545        fillMode: D2D1_FILL_MODE,
546    ) -> (),
547    fn SetSegmentFlags(
548        vertexFlags: D2D1_PATH_SEGMENT,
549    ) -> (),
550    fn BeginFigure(
551        startPoint: D2D1_POINT_2F,
552        figureBegin: D2D1_FIGURE_BEGIN,
553    ) -> (),
554    fn AddLines(
555        points: *const D2D1_POINT_2F,
556        pointsCount: UINT32,
557    ) -> (),
558    fn AddBeziers(
559        beziers: *const D2D1_BEZIER_SEGMENT,
560        beziersCount: UINT32,
561    ) -> (),
562    fn EndFigure(
563        figureEnd: D2D1_FIGURE_END,
564    ) -> (),
565    fn Close() -> HRESULT,
566}}
567RIDL!{#[uuid(0x2cd9069f, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
568interface ID2D1GeometrySink(ID2D1GeometrySinkVtbl):
569    ID2D1SimplifiedGeometrySink(ID2D1SimplifiedGeometrySinkVtbl) {
570    fn AddLine(
571        point: D2D1_POINT_2F,
572    ) -> (),
573    fn AddBezier(
574        bezier: *const D2D1_BEZIER_SEGMENT,
575    ) -> (),
576    fn AddQuadraticBezier(
577        bezier: *const D2D1_QUADRATIC_BEZIER_SEGMENT,
578    ) -> (),
579    fn AddQuadraticBeziers(
580        beziers: *const D2D1_QUADRATIC_BEZIER_SEGMENT,
581        beziersCount: UINT32,
582    ) -> (),
583    fn AddArc(
584        arc: *const D2D1_ARC_SEGMENT,
585    ) -> (),
586}}
587RIDL!{#[uuid(0x2cd906c1, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
588interface ID2D1TessellationSink(ID2D1TessellationSinkVtbl): IUnknown(IUnknownVtbl) {
589    fn AddTriangles(
590        triangles: *const D2D1_TRIANGLE,
591        triangleCount: UINT32,
592    ) -> (),
593    fn Close() -> HRESULT,
594}}
595RIDL!{#[uuid(0x2cd906a5, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
596interface ID2D1PathGeometry(ID2D1PathGeometryVtbl): ID2D1Geometry(ID2D1GeometryVtbl) {
597    fn Open(
598        geometrySink: *mut *mut ID2D1GeometrySink,
599    ) -> HRESULT,
600    fn Stream(
601        geometrySink: *mut ID2D1GeometrySink,
602    ) -> HRESULT,
603    fn GetSegmentCount(
604        count: *mut UINT32,
605    ) -> HRESULT,
606    fn GetFigureCount(
607        count: *mut UINT32,
608    ) -> HRESULT,
609}}
610RIDL!{#[uuid(0x2cd906c2, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
611interface ID2D1Mesh(ID2D1MeshVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
612    fn Open(
613        tessellationSink: *mut *mut ID2D1TessellationSink,
614    ) -> HRESULT,
615}}
616RIDL!{#[uuid(0x2cd9069b, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
617interface ID2D1Layer(ID2D1LayerVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
618    #[fixme] fn GetSize() -> D2D1_SIZE_F,
619}}
620RIDL!{#[uuid(0x28506e39, 0xebf6, 0x46a1, 0xbb, 0x47, 0xfd, 0x85, 0x56, 0x5a, 0xb9, 0x57)]
621interface ID2D1DrawingStateBlock(ID2D1DrawingStateBlockVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
622    fn GetDescription(
623        stateDescription: *mut D2D1_DRAWING_STATE_DESCRIPTION,
624    ) -> (),
625    fn SetDescription(
626        stateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION,
627    ) -> (),
628    fn SetTextRenderingParams(
629        textRenderingParams: *mut IDWriteRenderingParams,
630    ) -> (),
631    fn GetTextRenderingParams(
632        textRenderingParams: *mut *mut IDWriteRenderingParams,
633    ) -> (),
634}}
635RIDL!{#[uuid(0x2cd90694, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
636interface ID2D1RenderTarget(ID2D1RenderTargetVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
637    fn CreateBitmap(
638        size: D2D1_SIZE_U,
639        srcData: *const c_void,
640        pitch: UINT32,
641        bitmapProperties: *const D2D1_BITMAP_PROPERTIES,
642        bitmap: *mut *mut ID2D1Bitmap,
643    ) -> HRESULT,
644    fn CreateBitmapFromWicBitmap(
645        wicBitmapSource: *mut IWICBitmapSource,
646        bitmapProperties: *const D2D1_BITMAP_PROPERTIES,
647        bitmap: *mut *mut ID2D1Bitmap,
648    ) -> HRESULT,
649    fn CreateSharedBitmap(
650        riid: REFIID,
651        data: *const c_void,
652        bitmapProperties: *const D2D1_BITMAP_PROPERTIES,
653        bitmap: *mut *mut ID2D1Bitmap,
654    ) -> HRESULT,
655    fn CreateBitmapBrush(
656        bitmap: *mut ID2D1Bitmap,
657        bitmapBrushProperties: *const D2D1_BITMAP_BRUSH_PROPERTIES,
658        brushProperties: *const D2D1_BRUSH_PROPERTIES,
659        bitmapBrush: *mut *mut ID2D1BitmapBrush,
660    ) -> HRESULT,
661    fn CreateSolidColorBrush(
662        color: *const D2D1_COLOR_F,
663        brushProperties: *const D2D1_BRUSH_PROPERTIES,
664        solidColorBrush: *mut *mut ID2D1SolidColorBrush,
665    ) -> HRESULT,
666    fn CreateGradientStopCollection(
667        gradientStops: *const D2D1_GRADIENT_STOP,
668        gradientStopsCount: UINT32,
669        colorInterpolationGamma: D2D1_GAMMA,
670        extendMode: D2D1_EXTEND_MODE,
671        gradientStopCollection: *mut *mut ID2D1GradientStopCollection,
672    ) -> HRESULT,
673    fn CreateLinearGradientBrush(
674        linearGradientBrushProperties: *const D2D1_LINEAR_GRADIENT_BRUSH_PROPERTIES,
675        brushProperties: *const D2D1_BRUSH_PROPERTIES,
676        gradientStopCollection: *mut ID2D1GradientStopCollection,
677        linearGradientBrush: *mut *mut ID2D1LinearGradientBrush,
678    ) -> HRESULT,
679    fn CreateRadialGradientBrush(
680        radialGradientBrushProperties: *const D2D1_RADIAL_GRADIENT_BRUSH_PROPERTIES,
681        brushProperties: *const D2D1_BRUSH_PROPERTIES,
682        gradientStopCollection: *mut ID2D1GradientStopCollection,
683        radialGradientBrush: *mut *mut ID2D1RadialGradientBrush,
684    ) -> HRESULT,
685    fn CreateCompatibleRenderTarget(
686        desiredSize: *const D2D1_SIZE_F,
687        desiredPixelSize: *const D2D1_SIZE_U,
688        desiredFormat: *const D2D1_PIXEL_FORMAT,
689        options: D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS,
690        bitmapRenderTarget: *mut *mut ID2D1BitmapRenderTarget,
691    ) -> HRESULT,
692    fn CreateLayer(
693        size: *const D2D1_SIZE_F,
694        layer: *mut *mut ID2D1Layer,
695    ) -> HRESULT,
696    fn CreateMesh(
697        mesh: *mut *mut ID2D1Mesh,
698    ) -> HRESULT,
699    fn DrawLine(
700        point0: D2D1_POINT_2F,
701        point1: D2D1_POINT_2F,
702        brush: *mut ID2D1Brush,
703        strokeWidth: FLOAT,
704        strokeStype: *mut ID2D1StrokeStyle,
705    ) -> (),
706    fn DrawRectangle(
707        rect: *const D2D1_RECT_F,
708        brush: *mut ID2D1Brush,
709        strokeWidth: FLOAT,
710        strokeStyle: *mut ID2D1StrokeStyle,
711    ) -> (),
712    fn FillRectangle(
713        rect: *const D2D1_RECT_F,
714        brush: *mut ID2D1Brush,
715    ) -> (),
716    fn DrawRoundedRectangle(
717        roundedRect: *const D2D1_ROUNDED_RECT,
718        brush: *mut ID2D1Brush,
719        strokeWidth: FLOAT,
720        strokeStyle: *mut ID2D1StrokeStyle,
721    ) -> (),
722    fn FillRoundedRectangle(
723        roundedRect: *const D2D1_ROUNDED_RECT,
724        brush: *mut ID2D1Brush,
725    ) -> (),
726    fn DrawEllipse(
727        ellipse: *const D2D1_ELLIPSE,
728        brush: *mut ID2D1Brush,
729        strokeWidth: FLOAT,
730        strokeStyle: *mut ID2D1StrokeStyle,
731    ) -> (),
732    fn FillEllipse(
733        ellipse: *const D2D1_ELLIPSE,
734        brush: *mut ID2D1Brush,
735    ) -> (),
736    fn DrawGeometry(
737        geometry: *mut ID2D1Geometry,
738        brush: *mut ID2D1Brush,
739        strokeWidth: FLOAT,
740        strokeStyle: *mut ID2D1StrokeStyle,
741    ) -> (),
742    fn FillGeometry(
743        geometry: *mut ID2D1Geometry,
744        brush: *mut ID2D1Brush,
745        opacityBrush: *mut ID2D1Brush,
746    ) -> (),
747    fn FillMesh(
748        mesh: *mut ID2D1Mesh,
749        brush: *const ID2D1Brush,
750    ) -> (),
751    fn FillOpacityMask(
752        opacityMask: *mut ID2D1Bitmap,
753        brush: *mut ID2D1Brush,
754        content: D2D1_OPACITY_MASK_CONTENT,
755        destinationRectangle: *const D2D1_RECT_F,
756        sourceRectangle: *const D2D1_RECT_F,
757    ) -> (),
758    fn DrawBitmap(
759        bitmap: *mut ID2D1Bitmap,
760        destinationRectangle: *const D2D1_RECT_F,
761        opacity: FLOAT,
762        interpolationMode: D2D1_BITMAP_INTERPOLATION_MODE,
763        sourceRectangle: *const D2D1_RECT_F,
764    ) -> (),
765    fn DrawText(
766        string: *const WCHAR,
767        stringLength: UINT32,
768        textFormat: *mut IDWriteTextFormat,
769        layoutRect: *const D2D1_RECT_F,
770        defaultForegroundBrush: *mut ID2D1Brush,
771        options: D2D1_DRAW_TEXT_OPTIONS,
772        measuringMode: DWRITE_MEASURING_MODE,
773    ) -> (),
774    fn DrawTextLayout(
775        origin: D2D1_POINT_2F,
776        textLayout: *mut IDWriteTextLayout,
777        defaultForegroundBrush: *mut ID2D1Brush,
778        options: D2D1_DRAW_TEXT_OPTIONS,
779    ) -> (),
780    fn DrawGlyphRun(
781        baselineOrigin: D2D1_POINT_2F,
782        glyphRun: *const DWRITE_GLYPH_RUN,
783        foregroundBrush: *mut ID2D1Brush,
784        measuringMode: DWRITE_MEASURING_MODE,
785    ) -> (),
786    fn SetTransform(
787        transform: *const D2D1_MATRIX_3X2_F,
788    ) -> (),
789    fn GetTransform(
790        transform: *mut D2D1_MATRIX_3X2_F,
791    ) -> (),
792    fn SetAntialiasMode(
793        antialiasMode: D2D1_ANTIALIAS_MODE,
794    ) -> (),
795    fn GetAntialiasMode() -> D2D1_ANTIALIAS_MODE,
796    fn SetTextAntialiasMode(
797        textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
798    ) -> (),
799    fn GetTextAntialiasMode() -> D2D1_TEXT_ANTIALIAS_MODE,
800    fn SetTextRenderingParams(
801        textRenderingParams: *mut IDWriteRenderingParams,
802    ) -> (),
803    fn GetTextRenderingParams(
804        textRenderingParams: *mut *mut IDWriteRenderingParams,
805    ) -> (),
806    fn SetTags(
807        tag1: D2D1_TAG,
808        tag2: D2D1_TAG,
809    ) -> (),
810    fn GetTags(
811        tag1: *mut D2D1_TAG,
812        tag2: *mut D2D1_TAG,
813    ) -> (),
814    fn PushLayer(
815        layerParameters: *const D2D1_LAYER_PARAMETERS,
816        layer: *mut ID2D1Layer,
817    ) -> (),
818    fn PopLayer() -> (),
819    fn Flush(
820        tag1: *mut D2D1_TAG,
821        tag2: *mut D2D1_TAG,
822    ) -> HRESULT,
823    fn SaveDrawingState(
824        drawingStateBlock: *mut ID2D1DrawingStateBlock,
825    ) -> (),
826    fn RestoreDrawingState(
827        drawingStateBlock: *mut ID2D1DrawingStateBlock,
828    ) -> (),
829    fn PushAxisAlignedClip(
830        clipRect: *const D2D1_RECT_F,
831        antialiasMode: D2D1_ANTIALIAS_MODE,
832    ) -> (),
833    fn PopAxisAlignedClip() -> (),
834    fn Clear(
835        clearColor: *const D2D1_COLOR_F,
836    ) -> (),
837    fn BeginDraw() -> (),
838    fn EndDraw(
839        tag1: *mut D2D1_TAG,
840        tag2: *mut D2D1_TAG,
841    ) -> HRESULT,
842    #[fixme] fn GetPixelFormat() -> D2D1_PIXEL_FORMAT,
843    fn SetDpi(
844        dpiX: FLOAT,
845        dpiY: FLOAT,
846    ) -> (),
847    fn GetDpi(
848        dpiX: *mut FLOAT,
849        dpiY: *mut FLOAT,
850    ) -> (),
851    #[fixme] fn GetSize() -> D2D1_SIZE_F,
852    #[fixme] fn GetPixelSize() -> D2D1_SIZE_U,
853    fn GetMaximumBitmapSize() -> UINT32,
854    fn IsSupported(
855        renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
856    ) -> BOOL,
857}}
858RIDL!{#[uuid(0x2cd90695, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
859interface ID2D1BitmapRenderTarget(ID2D1BitmapRenderTargetVtbl):
860    ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
861    fn GetBitmap(
862        bitmap: *mut *mut ID2D1Bitmap,
863    ) -> HRESULT,
864}}
865RIDL!{#[uuid(0x2cd90698, 0x12e2, 0x11dc, 0x9f, 0xed, 0x00, 0x11, 0x43, 0xa0, 0x55, 0xf9)]
866interface ID2D1HwndRenderTarget(ID2D1HwndRenderTargetVtbl):
867    ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
868    fn CheckWindowState() -> D2D1_WINDOW_STATE,
869    fn Resize(
870        pixelSize: *const D2D1_SIZE_U,
871    ) -> HRESULT,
872    fn GetHwnd() -> HWND,
873}}
874RIDL!{#[uuid(0xe0db51c3, 0x6f77, 0x4bae, 0xb3, 0xd5, 0xe4, 0x75, 0x09, 0xb3, 0x58, 0x38)]
875interface ID2D1GdiInteropRenderTarget(ID2D1GdiInteropRenderTargetVtbl): IUnknown(IUnknownVtbl) {
876    fn GetDC(
877        mode: D2D1_DC_INITIALIZE_MODE,
878        hdc: *mut HDC,
879    ) -> HRESULT,
880    fn ReleaseDC(
881        update: *const RECT,
882    ) -> HRESULT,
883}}
884RIDL!{#[uuid(0x1c51bc64, 0xde61, 0x46fd, 0x98, 0x99, 0x63, 0xa5, 0xd8, 0xf0, 0x39, 0x50)]
885interface ID2D1DCRenderTarget(ID2D1DCRenderTargetVtbl): ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
886    fn BindDC(
887        hDC: HDC,
888        pSubRect: *const RECT,
889    ) -> HRESULT,
890}}
891RIDL!{#[uuid(0x06152247, 0x6f50, 0x465a, 0x92, 0x45, 0x11, 0x8b, 0xfd, 0x3b, 0x60, 0x07)]
892interface ID2D1Factory(ID2D1FactoryVtbl): IUnknown(IUnknownVtbl) {
893    fn ReloadSystemMetrics() -> HRESULT,
894    fn GetDesktopDpi(
895        dpiX: *mut FLOAT,
896        dpiY: *mut FLOAT,
897    ) -> (),
898    fn CreateRectangleGeometry(
899        rectangle: *const D2D1_RECT_F,
900        rectangleGeometry: *mut *mut ID2D1RectangleGeometry,
901    ) -> HRESULT,
902    fn CreateRoundedRectangleGeometry(
903        roundedRectangle: *const D2D1_ROUNDED_RECT,
904        roundedRectangleGeometry: *mut *mut ID2D1RoundedRectangleGeometry,
905    ) -> HRESULT,
906    fn CreateEllipseGeometry(
907        ellipse: *const D2D1_ELLIPSE,
908        ellipseGeometry: *mut *mut ID2D1EllipseGeometry,
909    ) -> HRESULT,
910    fn CreateGeometryGroup(
911        fillMode: D2D1_FILL_MODE,
912        geometries: *mut *mut ID2D1Geometry,
913        geometriesCount: UINT32,
914        geometryGroup: *mut *mut ID2D1GeometryGroup,
915    ) -> HRESULT,
916    fn CreateTransformedGeometry(
917        sourceGeometry: *mut ID2D1Geometry,
918        transform: *const D2D1_MATRIX_3X2_F,
919        transformedGeometry: *mut *mut ID2D1TransformedGeometry,
920    ) -> HRESULT,
921    fn CreatePathGeometry(
922        pathGeometry: *mut *mut ID2D1PathGeometry,
923    ) -> HRESULT,
924    fn CreateStrokeStyle(
925        strokeStyleProperties: *const D2D1_STROKE_STYLE_PROPERTIES,
926        dashes: *const FLOAT,
927        dashesCount: UINT32,
928        strokeStyle: *mut *mut ID2D1StrokeStyle,
929    ) -> HRESULT,
930    fn CreateDrawingStateBlock(
931        drawingStateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION,
932        textRenderingParams: *mut IDWriteRenderingParams,
933        drawingStateBlock: *mut *mut ID2D1DrawingStateBlock,
934    ) -> HRESULT,
935    fn CreateWicBitmapRenderTarget(
936        target: *mut IWICBitmap,
937        renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
938        renderTarget: *mut *mut ID2D1RenderTarget,
939    ) -> HRESULT,
940    fn CreateHwndRenderTarget(
941        renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
942        hwndRenderTargetProperties: *const D2D1_HWND_RENDER_TARGET_PROPERTIES,
943        hwndRenderTarget: *mut *mut ID2D1HwndRenderTarget,
944    ) -> HRESULT,
945    fn CreateDxgiSurfaceRenderTarget(
946        dxgiSurface: *mut IDXGISurface,
947        renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
948        renderTarget: *mut *mut ID2D1RenderTarget,
949    ) -> HRESULT,
950    fn CreateDCRenderTarget(
951        renderTargetProperties: *const D2D1_RENDER_TARGET_PROPERTIES,
952        dcRenderTarget: *mut *mut ID2D1DCRenderTarget,
953    ) -> HRESULT,
954}}
955extern "system" {
956    pub fn D2D1CreateFactory(
957        factoryType: D2D1_FACTORY_TYPE,
958        riid: REFIID,
959        pFactoryOptions: *const D2D1_FACTORY_OPTIONS,
960        ppIFactory: *mut *mut c_void,
961    ) -> HRESULT;
962    pub fn D2D1MakeRotateMatrix(
963        angle: FLOAT,
964        center: D2D1_POINT_2F,
965        matrix: *mut D2D1_MATRIX_3X2_F,
966    );
967    pub fn D2D1MakeSkewMatrix(
968        angleX: FLOAT,
969        angleY: FLOAT,
970        center: D2D1_POINT_2F,
971        matrix: *mut D2D1_MATRIX_3X2_F,
972    );
973    pub fn D2D1IsMatrixInvertible(
974        matrix: *const D2D1_MATRIX_3X2_F,
975    ) -> BOOL;
976    pub fn D2D1InvertMatrix(
977        matrix: *mut D2D1_MATRIX_3X2_F,
978    ) -> BOOL;
979    pub fn D2D1ComputeMaximumScaleFactor(
980        matrix: *const D2D1_MATRIX_3X2_F,
981    ) -> FLOAT;
982}