1use 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};
23pub 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}