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_1.h
7 use ctypes::c_void;
8 use shared::basetsd::{UINT32, UINT64};
9 use shared::dxgi::{IDXGIDevice, IDXGISurface};
10 use shared::dxgiformat::DXGI_FORMAT;
11 use shared::guiddef::{CLSID, REFCLSID};
12 use shared::minwindef::{BOOL, BYTE, DWORD, FLOAT};
13 use um::d2d1::{
14     D2D1_ANTIALIAS_MODE, D2D1_BRUSH_PROPERTIES, D2D1_CAP_STYLE, D2D1_COLOR_F,
15     D2D1_DASH_STYLE, D2D1_DEBUG_LEVEL, D2D1_EXTEND_MODE, D2D1_GRADIENT_STOP,
16     D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC, D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC,
17     D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC,
18     D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
19     D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR,
20     D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR, D2D1_LINE_JOIN, D2D1_MATRIX_3X2_F,
21     D2D1_POINT_2F, D2D1_RECT_F, D2D1_SIZE_U, D2D1_TAG, D2D1_TEXT_ANTIALIAS_MODE, ID2D1Bitmap,
22     ID2D1BitmapBrush, ID2D1BitmapBrushVtbl, ID2D1BitmapVtbl, ID2D1Brush, ID2D1BrushVtbl,
23     ID2D1DrawingStateBlock, ID2D1DrawingStateBlockVtbl, ID2D1Factory, ID2D1FactoryVtbl,
24     ID2D1Geometry, ID2D1GradientStopCollection, ID2D1GradientStopCollectionVtbl, ID2D1Image,
25     ID2D1ImageVtbl, ID2D1Layer, ID2D1Mesh, ID2D1PathGeometry, ID2D1PathGeometryVtbl,
26     ID2D1RenderTarget, ID2D1RenderTargetVtbl, ID2D1Resource, ID2D1ResourceVtbl, ID2D1StrokeStyle,
27     ID2D1StrokeStyleVtbl,
28 };
29 use um::d2d1effectauthor::D2D1_PROPERTY_BINDING;
30 use um::d2dbasetypes::D2D_SIZE_F;
31 use um::dcommon::{D2D1_PIXEL_FORMAT, DWRITE_MEASURING_MODE};
32 use um::documenttarget::IPrintDocumentPackageTarget;
33 use um::dwrite::{DWRITE_GLYPH_RUN, DWRITE_GLYPH_RUN_DESCRIPTION, IDWriteRenderingParams};
34 use um::objidlbase::IStream;
35 use um::unknwnbase::{IUnknown, IUnknownVtbl};
36 use um::wincodec::{IWICBitmapSource, IWICColorContext, IWICImagingFactory};
37 use um::winnt::{HRESULT, PCWSTR, PWSTR};
38 FN!{stdcall PD2D1_EFFECT_FACTORY(
39     effectImpl: *mut *mut IUnknown,
40 ) -> HRESULT}
41 pub use um::d2dbasetypes::D2D_RECT_L as D2D1_RECT_L;
42 pub use um::d2dbasetypes::D2D_POINT_2L as D2D1_POINT_2L;
43 ENUM!{enum D2D1_PROPERTY_TYPE {
44     D2D1_PROPERTY_TYPE_UNKNOWN = 0,
45     D2D1_PROPERTY_TYPE_STRING = 1,
46     D2D1_PROPERTY_TYPE_BOOL = 2,
47     D2D1_PROPERTY_TYPE_UINT32 = 3,
48     D2D1_PROPERTY_TYPE_INT32 = 4,
49     D2D1_PROPERTY_TYPE_FLOAT = 5,
50     D2D1_PROPERTY_TYPE_VECTOR2 = 6,
51     D2D1_PROPERTY_TYPE_VECTOR3 = 7,
52     D2D1_PROPERTY_TYPE_VECTOR4 = 8,
53     D2D1_PROPERTY_TYPE_BLOB = 9,
54     D2D1_PROPERTY_TYPE_IUNKNOWN = 10,
55     D2D1_PROPERTY_TYPE_ENUM = 11,
56     D2D1_PROPERTY_TYPE_ARRAY = 12,
57     D2D1_PROPERTY_TYPE_CLSID = 13,
58     D2D1_PROPERTY_TYPE_MATRIX_3X2 = 14,
59     D2D1_PROPERTY_TYPE_MATRIX_4X3 = 15,
60     D2D1_PROPERTY_TYPE_MATRIX_4X4 = 16,
61     D2D1_PROPERTY_TYPE_MATRIX_5X4 = 17,
62     D2D1_PROPERTY_TYPE_COLOR_CONTEXT = 18,
63     D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff,
64 }}
65 ENUM!{enum D2D1_PROPERTY {
66     D2D1_PROPERTY_CLSID = 0x80000000,
67     D2D1_PROPERTY_DISPLAYNAME = 0x80000001,
68     D2D1_PROPERTY_AUTHOR = 0x80000002,
69     D2D1_PROPERTY_CATEGORY = 0x80000003,
70     D2D1_PROPERTY_DESCRIPTION = 0x80000004,
71     D2D1_PROPERTY_INPUTS = 0x80000005,
72     D2D1_PROPERTY_CACHED = 0x80000006,
73     D2D1_PROPERTY_PRECISION = 0x80000007,
74     D2D1_PROPERTY_MIN_INPUTS = 0x80000008,
75     D2D1_PROPERTY_MAX_INPUTS = 0x80000009,
76     D2D1_PROPERTY_FORCE_DWORD = 0xffffffff,
77 }}
78 ENUM!{enum D2D1_SUBPROPERTY {
79     D2D1_SUBPROPERTY_DISPLAYNAME = 0x80000000,
80     D2D1_SUBPROPERTY_ISREADONLY = 0x80000001,
81     D2D1_SUBPROPERTY_MIN = 0x80000002,
82     D2D1_SUBPROPERTY_MAX = 0x80000003,
83     D2D1_SUBPROPERTY_DEFAULT = 0x80000004,
84     D2D1_SUBPROPERTY_FIELDS = 0x80000005,
85     D2D1_SUBPROPERTY_INDEX = 0x80000006,
86     D2D1_SUBPROPERTY_FORCE_DWORD = 0xffffffff,
87 }}
88 ENUM!{enum D2D1_BITMAP_OPTIONS {
89     D2D1_BITMAP_OPTIONS_NONE = 0x00000000,
90     D2D1_BITMAP_OPTIONS_TARGET = 0x00000001,
91     D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x00000002,
92     D2D1_BITMAP_OPTIONS_CPU_READ = 0x00000004,
93     D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x00000008,
94     D2D1_BITMAP_OPTIONS_FORCE_DWORD = 0xffffffff,
95 }}
96 // DEFINE_ENUM_FLAG_OPERATORS(D2D1_BITMAP_OPTIONS);
97 ENUM!{enum D2D1_COMPOSITE_MODE {
98     D2D1_COMPOSITE_MODE_SOURCE_OVER = 0,
99     D2D1_COMPOSITE_MODE_DESTINATION_OVER = 1,
100     D2D1_COMPOSITE_MODE_SOURCE_IN = 2,
101     D2D1_COMPOSITE_MODE_DESTINATION_IN = 3,
102     D2D1_COMPOSITE_MODE_SOURCE_OUT = 4,
103     D2D1_COMPOSITE_MODE_DESTINATION_OUT = 5,
104     D2D1_COMPOSITE_MODE_SOURCE_ATOP = 6,
105     D2D1_COMPOSITE_MODE_DESTINATION_ATOP = 7,
106     D2D1_COMPOSITE_MODE_XOR = 8,
107     D2D1_COMPOSITE_MODE_PLUS = 9,
108     D2D1_COMPOSITE_MODE_SOURCE_COPY = 10,
109     D2D1_COMPOSITE_MODE_BOUNDED_SOURCE_COPY = 11,
110     D2D1_COMPOSITE_MODE_MASK_INVERT = 12,
111     D2D1_COMPOSITE_MODE_FORCE_DWORD = 0xffffffff,
112 }}
113 ENUM!{enum D2D1_BUFFER_PRECISION {
114     D2D1_BUFFER_PRECISION_UNKNOWN = 0,
115     D2D1_BUFFER_PRECISION_8BPC_UNORM = 1,
116     D2D1_BUFFER_PRECISION_8BPC_UNORM_SRGB = 2,
117     D2D1_BUFFER_PRECISION_16BPC_UNORM = 3,
118     D2D1_BUFFER_PRECISION_16BPC_FLOAT = 4,
119     D2D1_BUFFER_PRECISION_32BPC_FLOAT = 5,
120     D2D1_BUFFER_PRECISION_FORCE_DWORD = 0xffffffff,
121 }}
122 ENUM!{enum D2D1_MAP_OPTIONS {
123     D2D1_MAP_OPTIONS_NONE = 0,
124     D2D1_MAP_OPTIONS_READ = 1,
125     D2D1_MAP_OPTIONS_WRITE = 2,
126     D2D1_MAP_OPTIONS_DISCARD = 4,
127     D2D1_MAP_OPTIONS_FORCE_DWORD = 0xffffffff,
128 }}
129 //DEFINE_ENUM_FLAG_OPERATORS(D2D1_MAP_OPTIONS);
130 ENUM!{enum D2D1_INTERPOLATION_MODE {
131     D2D1_INTERPOLATION_MODE_NEAREST_NEIGHBOR = D2D1_INTERPOLATION_MODE_DEFINITION_NEAREST_NEIGHBOR,
132     D2D1_INTERPOLATION_MODE_LINEAR = D2D1_INTERPOLATION_MODE_DEFINITION_LINEAR,
133     D2D1_INTERPOLATION_MODE_CUBIC = D2D1_INTERPOLATION_MODE_DEFINITION_CUBIC,
134     D2D1_INTERPOLATION_MODE_MULTI_SAMPLE_LINEAR
135         = D2D1_INTERPOLATION_MODE_DEFINITION_MULTI_SAMPLE_LINEAR,
136     D2D1_INTERPOLATION_MODE_ANISOTROPIC = D2D1_INTERPOLATION_MODE_DEFINITION_ANISOTROPIC,
137     D2D1_INTERPOLATION_MODE_HIGH_QUALITY_CUBIC
138         = D2D1_INTERPOLATION_MODE_DEFINITION_HIGH_QUALITY_CUBIC,
139     D2D1_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
140 }}
141 ENUM!{enum D2D1_UNIT_MODE {
142     D2D1_UNIT_MODE_DIPS = 0,
143     D2D1_UNIT_MODE_PIXELS = 1,
144     D2D1_UNIT_MODE_FORCE_DWORD = 0xffffffff,
145 }}
146 ENUM!{enum D2D1_COLOR_SPACE {
147     D2D1_COLOR_SPACE_CUSTOM = 0,
148     D2D1_COLOR_SPACE_SRGB = 1,
149     D2D1_COLOR_SPACE_SCRGB = 2,
150     D2D1_COLOR_SPACE_FORCE_DWORD = 0xffffffff,
151 }}
152 ENUM!{enum D2D1_DEVICE_CONTEXT_OPTIONS {
153     D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0,
154     D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 1,
155     D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff,
156 }}
157 //DEFINE_ENUM_FLAG_OPERATORS(D2D1_DEVICE_CONTEXT_OPTIONS);
158 ENUM!{enum D2D1_STROKE_TRANSFORM_TYPE {
159     D2D1_STROKE_TRANSFORM_TYPE_NORMAL = 0,
160     D2D1_STROKE_TRANSFORM_TYPE_FIXED = 1,
161     D2D1_STROKE_TRANSFORM_TYPE_HAIRLINE = 2,
162     D2D1_STROKE_TRANSFORM_TYPE_FORCE_DWORD = 0xffffffff,
163 }}
164 ENUM!{enum D2D1_PRIMITIVE_BLEND {
165     D2D1_PRIMITIVE_BLEND_SOURCE_OVER = 0,
166     D2D1_PRIMITIVE_BLEND_COPY = 1,
167     D2D1_PRIMITIVE_BLEND_MIN = 2,
168     D2D1_PRIMITIVE_BLEND_ADD = 3,
169     D2D1_PRIMITIVE_BLEND_FORCE_DWORD = 0xffffffff,
170 }}
171 ENUM!{enum D2D1_THREADING_MODE {
172     D2D1_THREADING_MODE_SINGLE_THREADED = super::d2d1::D2D1_FACTORY_TYPE_SINGLE_THREADED,
173     D2D1_THREADING_MODE_MULTI_THREADED = super::d2d1::D2D1_FACTORY_TYPE_MULTI_THREADED,
174     D2D1_THREADING_MODE_FORCE_DWORD = 0xffffffff,
175 }}
176 ENUM!{enum D2D1_COLOR_INTERPOLATION_MODE {
177     D2D1_COLOR_INTERPOLATION_MODE_STRAIGHT = 0,
178     D2D1_COLOR_INTERPOLATION_MODE_PREMULTIPLIED = 1,
179     D2D1_COLOR_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff,
180 }}
181 pub use um::d2dbasetypes::D2D_VECTOR_2F as D2D1_VECTOR_2F;
182 pub use um::d2dbasetypes::D2D_VECTOR_3F as D2D1_VECTOR_3F;
183 pub use um::d2dbasetypes::D2D_VECTOR_4F as D2D1_VECTOR_4F;
184 STRUCT!{struct D2D1_BITMAP_PROPERTIES1 {
185     pixelFormat: D2D1_PIXEL_FORMAT,
186     dpiX: FLOAT,
187     dpiY: FLOAT,
188     bitmapOptions: D2D1_BITMAP_OPTIONS,
189     colorContext: *const ID2D1ColorContext,
190 }}
191 STRUCT!{struct D2D1_MAPPED_RECT {
192     pitch: UINT32,
193     bits: *const BYTE,
194 }}
195 STRUCT!{struct D2D1_RENDERING_CONTROLS {
196     bufferPrecision: D2D1_BUFFER_PRECISION,
197     tileSize: D2D1_SIZE_U,
198 }}
199 STRUCT!{struct D2D1_EFFECT_INPUT_DESCRIPTION {
200     effect: *const ID2D1Effect,
201     inputIndex: UINT32,
202     inputRectangle: D2D1_RECT_F,
203 }}
204 pub use um::d2dbasetypes::D2D_MATRIX_4X3_F as D2D1_MATRIX_4X3_F;
205 pub use um::d2dbasetypes::D2D_MATRIX_4X4_F as D2D1_MATRIX_4X4_F;
206 pub use um::d2dbasetypes::D2D_MATRIX_5X4_F as D2D1_MATRIX_5X4_F;
207 STRUCT!{struct D2D1_POINT_DESCRIPTION {
208     point: D2D1_POINT_2F,
209     unitTangentVector: D2D1_POINT_2F,
210     endSegment: UINT32,
211     endFigure: UINT32,
212     lengthToEndSegment: FLOAT,
213 }}
214 STRUCT!{struct D2D1_IMAGE_BRUSH_PROPERTIES {
215     sourceRectangle: D2D1_RECT_F,
216     extendModeX: D2D1_EXTEND_MODE,
217     extendModeY: D2D1_EXTEND_MODE,
218     interpolationMode: D2D1_INTERPOLATION_MODE,
219 }}
220 STRUCT!{struct D2D1_BITMAP_BRUSH_PROPERTIES1 {
221     extendModeX: D2D1_EXTEND_MODE,
222     extendModeY: D2D1_EXTEND_MODE,
223     interpolationMode: D2D1_INTERPOLATION_MODE,
224 }}
225 STRUCT!{struct D2D1_STROKE_STYLE_PROPERTIES1 {
226     startCap: D2D1_CAP_STYLE,
227     endCap: D2D1_CAP_STYLE,
228     dashCap: D2D1_CAP_STYLE,
229     lineJoin: D2D1_LINE_JOIN,
230     miterLimit: FLOAT,
231     dashStyle: D2D1_DASH_STYLE,
232     dashOffset: FLOAT,
233     transformType: D2D1_STROKE_TRANSFORM_TYPE,
234 }}
235 ENUM!{enum D2D1_LAYER_OPTIONS1 {
236     D2D1_LAYER_OPTIONS1_NONE = 0,
237     D2D1_LAYER_OPTIONS1_INITIALIZE_FROM_BACKGROUND = 1,
238     D2D1_LAYER_OPTIONS1_IGNORE_ALPHA = 2,
239     D2D1_LAYER_OPTIONS1_FORCE_DWORD = 0xffffffff,
240 }}
241 //DEFINE_ENUM_FLAG_OPERATORS(D2D1_LAYER_OPTIONS1);
242 STRUCT!{struct D2D1_LAYER_PARAMETERS1 {
243     contentBounds: D2D1_RECT_F,
244     geometricMask: *const ID2D1Geometry,
245     maskAntialiasMode: D2D1_ANTIALIAS_MODE,
246     maskTransform: D2D1_MATRIX_3X2_F,
247     opacity: FLOAT,
248     opacityBrush: *const ID2D1Brush,
249     layerOptions: D2D1_LAYER_OPTIONS1,
250 }}
251 ENUM!{enum D2D1_PRINT_FONT_SUBSET_MODE {
252     D2D1_PRINT_FONT_SUBSET_MODE_DEFAULT = 0,
253     D2D1_PRINT_FONT_SUBSET_MODE_EACHPAGE = 1,
254     D2D1_PRINT_FONT_SUBSET_MODE_NONE = 2,
255     D2D1_PRINT_FONT_SUBSET_MODE_FORCE_DWORD = 0xffffffff,
256 }}
257 STRUCT!{struct D2D1_DRAWING_STATE_DESCRIPTION1 {
258     antialiasMode: D2D1_ANTIALIAS_MODE,
259     textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
260     tag1: D2D1_TAG,
261     tag2: D2D1_TAG,
262     transform: D2D1_MATRIX_3X2_F,
263     primitiveBlend: D2D1_PRIMITIVE_BLEND,
264     unitMode: D2D1_UNIT_MODE,
265 }}
266 STRUCT!{struct D2D1_PRINT_CONTROL_PROPERTIES {
267     fontSubset: D2D1_PRINT_FONT_SUBSET_MODE,
268     rasterDPI: FLOAT,
269     colorSpace: D2D1_COLOR_SPACE,
270 }}
271 STRUCT!{struct D2D1_CREATION_PROPERTIES {
272     threadingMode: D2D1_THREADING_MODE,
273     debugLevel: D2D1_DEBUG_LEVEL,
274     options: D2D1_DEVICE_CONTEXT_OPTIONS,
275 }}
276 RIDL!{#[uuid(0x82237326, 0x8111, 0x4f7c, 0xbc, 0xf4, 0xb5, 0xc1, 0x17, 0x55, 0x64, 0xfe)]
277 interface ID2D1GdiMetafileSink(ID2D1GdiMetafileSinkVtbl): IUnknown(IUnknownVtbl) {
278     fn ProcessRecord(
279         recordType: DWORD,
280         recordData: *const c_void,
281         recordDataSize: DWORD,
282     ) -> HRESULT,
283 }}
284 RIDL!{#[uuid(0x2f543dc3, 0xcfc1, 0x4211, 0x86, 0x4f, 0xcf, 0xd9, 0x1c, 0x6f, 0x33, 0x95)]
285 interface ID2D1GdiMetafile(ID2D1GdiMetafileVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
286     fn Stream(
287         sink: *const ID2D1GdiMetafileSink,
288     ) -> HRESULT,
289     fn GetBounds(
290         bounds: *mut D2D1_RECT_F,
291     ) -> HRESULT,
292 }}
293 RIDL!{#[uuid(0x54d7898a, 0xa061, 0x40a7, 0xbe, 0xc7, 0xe4, 0x65, 0xbc, 0xba, 0x2c, 0x4f)]
294 interface ID2D1CommandSink(ID2D1CommandSinkVtbl): IUnknown(IUnknownVtbl) {
295     fn BeginDraw() -> HRESULT,
296     fn EndDraw() -> HRESULT,
297     fn SetAntialiasMode(
298         antialiasMode: D2D1_ANTIALIAS_MODE,
299     ) -> HRESULT,
300     fn SetTags(
301         tag1: D2D1_TAG,
302         tag2: D2D1_TAG,
303     ) -> HRESULT,
304     fn SetTextAntialiasMode(
305         textAntialiasMode: D2D1_TEXT_ANTIALIAS_MODE,
306     ) -> HRESULT,
307     fn SetTextRenderingParams(
308         textRenderingParams: *const IDWriteRenderingParams,
309     ) -> HRESULT,
310     fn SetTransform(
311         transform: *const D2D1_MATRIX_3X2_F,
312     ) -> HRESULT,
313     fn SetPrimitiveBlend(
314         primitiveBlend: D2D1_PRIMITIVE_BLEND,
315     ) -> HRESULT,
316     fn SetUnitMode(
317         unitMode: D2D1_UNIT_MODE,
318     ) -> HRESULT,
319     fn Clear(
320         color: *const D2D1_COLOR_F,
321     ) -> HRESULT,
322     fn DrawGlyphRun(
323         baselineOrigin: D2D1_POINT_2F,
324         glyphRun: *const DWRITE_GLYPH_RUN,
325         glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
326         foregroundBrush: *const ID2D1Brush,
327         measuringMode: DWRITE_MEASURING_MODE,
328     ) -> HRESULT,
329     fn DrawLine(
330         point0: D2D1_POINT_2F,
331         point1: D2D1_POINT_2F,
332         brush: *const ID2D1Brush,
333         strokeWidth: FLOAT,
334         strokeStyle: *const ID2D1StrokeStyle,
335     ) -> HRESULT,
336     fn DrawGeometry(
337         geometry: *const ID2D1Geometry,
338         brush: *const ID2D1Brush,
339         strokeWidth: FLOAT,
340         strokeStyle: *const ID2D1StrokeStyle,
341     ) -> HRESULT,
342     fn DrawRectangle(
343         rect: *const D2D1_RECT_F,
344         brush: *const ID2D1Brush,
345         strokeWidth: FLOAT,
346         strokeStyle: *const ID2D1StrokeStyle,
347     ) -> HRESULT,
348     fn DrawBitmap(
349         bitmap: *const ID2D1Bitmap,
350         destinationRectangle: *const D2D1_RECT_F,
351         opacity: FLOAT,
352         interpolationMode: D2D1_INTERPOLATION_MODE,
353         sourceRectangle: *const D2D1_RECT_F,
354         perspectiveTransform: *const D2D1_MATRIX_4X4_F,
355     ) -> HRESULT,
356     fn DrawImage(
357         image: *const ID2D1Image,
358         targetOffset: *const D2D1_POINT_2F,
359         imageRectangle: *const D2D1_RECT_F,
360         interpolationMode: D2D1_INTERPOLATION_MODE,
361         compositeMode: D2D1_COMPOSITE_MODE,
362     ) -> HRESULT,
363     fn DrawGdiMetafile(
364         gdiMetafile: *const ID2D1GdiMetafile,
365         targetOffset: *const D2D1_POINT_2F,
366     ) -> HRESULT,
367     fn FillMesh(
368         mesh: *const ID2D1Mesh,
369         brush: *const ID2D1Brush,
370     ) -> HRESULT,
371     fn FillOpacityMask(
372         opacityMask: *const ID2D1Bitmap,
373         brush: *const ID2D1Brush,
374         destinationRectangle: *const D2D1_RECT_F,
375         sourceRectangle: *const D2D1_RECT_F,
376     ) -> HRESULT,
377     fn FillGeometry(
378         geometry: *const ID2D1Geometry,
379         brush: *const ID2D1Brush,
380         opacityBrush: *const ID2D1Brush,
381     ) -> HRESULT,
382     fn FillRectangle(
383         rect: *const D2D1_RECT_F,
384         brush: *const ID2D1Brush,
385     ) -> HRESULT,
386     fn PushAxisAlignedClip(
387         clipRect: *const D2D1_RECT_F,
388         antialiasMode: D2D1_ANTIALIAS_MODE,
389     ) -> HRESULT,
390     fn PushLayer(
391         layerParameters1: *const D2D1_LAYER_PARAMETERS1,
392         layer: *const ID2D1Layer,
393     ) -> HRESULT,
394     fn PopAxisAlignedClip() -> HRESULT,
395     fn PopLayer() -> HRESULT,
396 }}
397 RIDL!{#[uuid(0xb4f34a19, 0x2383, 0x4d76, 0x94, 0xf6, 0xec, 0x34, 0x36, 0x57, 0xc3, 0xdc)]
398 interface ID2D1CommandList(ID2D1CommandListVtbl): ID2D1Image(ID2D1ImageVtbl) {
399     fn Stream(
400         sink: *const ID2D1CommandSink,
401     ) -> HRESULT,
402     fn Close() -> HRESULT,
403 }}
404 RIDL!{#[uuid(0x2c1d867d, 0xc290, 0x41c8, 0xae, 0x7e, 0x34, 0xa9, 0x87, 0x02, 0xe9, 0xa5)]
405 interface ID2D1PrintControl(ID2D1PrintControlVtbl): IUnknown(IUnknownVtbl) {
406     fn AddPage(
407         commandList: *const ID2D1CommandList,
408         pageSize: D2D_SIZE_F,
409         pagePrintTicketStream: *const IStream,
410         tag1: *mut D2D1_TAG,
411         tag2: *mut D2D1_TAG,
412     ) -> HRESULT,
413     fn Close() -> HRESULT,
414 }}
415 RIDL!{#[uuid(0xfe9e984d, 0x3f95, 0x407c, 0xb5, 0xdb, 0xcb, 0x94, 0xd4, 0xe8, 0xf8, 0x7c)]
416 interface ID2D1ImageBrush(ID2D1ImageBrushVtbl): ID2D1Brush(ID2D1BrushVtbl) {
417     fn SetImage(
418         image: *const ID2D1Image,
419     ) -> (),
420     fn SetExtendModeX(
421         extendModeX: D2D1_EXTEND_MODE,
422     ) -> (),
423     fn SetExtendModeY(
424         extendModeY: D2D1_EXTEND_MODE,
425     ) -> (),
426     fn SetInterpolationMode(
427         interpolationMode: D2D1_INTERPOLATION_MODE,
428     ) -> (),
429     fn SetSourceRectangle(
430         sourceRectangle: *const D2D1_RECT_F,
431     ) -> (),
432     fn GetImage(
433         image: *mut *mut ID2D1Image,
434     ) -> (),
435     fn GetExtendModeX() -> D2D1_EXTEND_MODE,
436     fn GetExtendModeY() -> D2D1_EXTEND_MODE,
437     fn GetInterpolationMode() -> D2D1_INTERPOLATION_MODE,
438     fn GetSourceRectangle(
439         sourceRectangle: *mut D2D1_RECT_F,
440     ) -> (),
441 }}
442 RIDL!{#[uuid(0x41343a53, 0xe41a, 0x49a2, 0x91, 0xcd, 0x21, 0x79, 0x3b, 0xbb, 0x62, 0xe5)]
443 interface ID2D1BitmapBrush1(ID2D1BitmapBrush1Vtbl): ID2D1BitmapBrush(ID2D1BitmapBrushVtbl) {
444     fn SetInterpolationMode1(
445         interpolationMode: D2D1_INTERPOLATION_MODE,
446     ) -> (),
447     fn GetInterpolationMode1() -> D2D1_INTERPOLATION_MODE,
448 }}
449 RIDL!{#[uuid(0x10a72a66, 0xe91c, 0x43f4, 0x99, 0x3f, 0xdd, 0xf4, 0xb8, 0x2b, 0x0b, 0x4a)]
450 interface ID2D1StrokeStyle1(ID2D1StrokeStyle1Vtbl): ID2D1StrokeStyle(ID2D1StrokeStyleVtbl) {
451     fn GetStrokeTransformType() -> D2D1_STROKE_TRANSFORM_TYPE,
452 }}
453 RIDL!{#[uuid(0x62baa2d2, 0xab54, 0x41b7, 0xb8, 0x72, 0x78, 0x7e, 0x01, 0x06, 0xa4, 0x21)]
454 interface ID2D1PathGeometry1(ID2D1PathGeometry1Vtbl): ID2D1PathGeometry(ID2D1PathGeometryVtbl) {
455     fn ComputePointAndSegmentAtLength(
456         length: FLOAT,
457         startSegment: UINT32,
458         worldTransform: *const D2D1_MATRIX_3X2_F,
459         flatteningTolerance: FLOAT,
460         pointDescription: *mut D2D1_POINT_DESCRIPTION,
461     ) -> HRESULT,
462 }}
463 RIDL!{#[uuid(0x483473d7, 0xcd46, 0x4f9d, 0x9d, 0x3a, 0x31, 0x12, 0xaa, 0x80, 0x15, 0x9d)]
464 interface ID2D1Properties(ID2D1PropertiesVtbl): IUnknown(IUnknownVtbl) {
465     fn GetPropertyCount() -> UINT32,
466     fn GetPropertyName(
467         index: UINT32,
468         name: PWSTR,
469         nameCount: UINT32,
470     ) -> HRESULT,
471     fn GetPropertyNameLength(
472         index: UINT32,
473     ) -> UINT32,
474     fn GetType(
475         index: UINT32,
476     ) -> D2D1_PROPERTY_TYPE,
477     fn GetPropertyIndex(
478         name: PCWSTR,
479     ) -> UINT32,
480     fn SetValueByName(
481         name: PCWSTR,
482         prop_type: D2D1_PROPERTY_TYPE,
483         data: *const BYTE,
484         dataSize: UINT32,
485     ) -> HRESULT,
486     fn SetValue(
487         index: UINT32,
488         prop_type: D2D1_PROPERTY_TYPE,
489         data: *const BYTE,
490         dataSize: UINT32,
491     ) -> HRESULT,
492     fn GetValueByName(
493         name: PCWSTR,
494         prop_type: D2D1_PROPERTY_TYPE,
495         data: *mut BYTE,
496         dataSize: UINT32,
497     ) -> HRESULT,
498     fn GetValue(
499         index: UINT32,
500         prop_type: D2D1_PROPERTY_TYPE,
501         data: *mut BYTE,
502         dataSize: UINT32,
503     ) -> HRESULT,
504     fn GetValueSize(
505         index: UINT32,
506     ) -> UINT32,
507     fn GetSubProperties(
508         index: UINT32,
509         subProperties: *mut *mut ID2D1Properties,
510     ) -> HRESULT,
511 }}
512 RIDL!{#[uuid(0x28211a43, 0x7d89, 0x476f, 0x81, 0x81, 0x2d, 0x61, 0x59, 0xb2, 0x20, 0xad)]
513 interface ID2D1Effect(ID2D1EffectVtbl): ID2D1Properties(ID2D1PropertiesVtbl) {
514     fn SetInput(
515         index: UINT32,
516         input: *const ID2D1Image,
517         invalidate: BOOL,
518     ) -> (),
519     fn SetInputCount(
520         inputCount: UINT32,
521     ) -> HRESULT,
522     fn GetInput(
523         index: UINT32,
524         input: *mut *mut ID2D1Image,
525     ) -> (),
526     fn GetInputCount() -> UINT32,
527     fn GetOutput(
528         outputImage: *mut *mut ID2D1Image,
529     ) -> (),
530 }}
531 RIDL!{#[uuid(0xa898a84c, 0x3873, 0x4588, 0xb0, 0x8b, 0xeb, 0xbf, 0x97, 0x8d, 0xf0, 0x41)]
532 interface ID2D1Bitmap1(ID2D1Bitmap1Vtbl): ID2D1Bitmap(ID2D1BitmapVtbl) {
533     fn GetColorContext(
534         colorContext: *mut *mut ID2D1ColorContext,
535     ) -> (),
536     fn GetOptions() -> D2D1_BITMAP_OPTIONS,
537     fn GetSurface(
538         dxgiSurface: *mut *mut IDXGISurface,
539     ) -> HRESULT,
540     fn Map(
541         options: D2D1_MAP_OPTIONS,
542         mappedRect: *mut D2D1_MAPPED_RECT,
543     ) -> HRESULT,
544     fn Unmap() -> HRESULT,
545 }}
546 RIDL!{#[uuid(0x1c4820bb, 0x5771, 0x4518, 0xa5, 0x81, 0x2f, 0xe4, 0xdd, 0x0e, 0xc6, 0x57)]
547 interface ID2D1ColorContext(ID2D1ColorContextVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
548     fn GetColorSpace() -> D2D1_COLOR_SPACE,
549     fn GetProfileSize() -> UINT32,
550     fn GetProfile(
551         profile: *mut BYTE,
552         profileSize: UINT32,
553     ) -> HRESULT,
554 }}
555 RIDL!{#[uuid(0xae1572f4, 0x5dd0, 0x4777, 0x99, 0x8b, 0x92, 0x79, 0x47, 0x2a, 0xe6, 0x3b)]
556 interface ID2D1GradientStopCollection1(ID2D1GradientStopCollection1Vtbl):
557     ID2D1GradientStopCollection(ID2D1GradientStopCollectionVtbl) {
558     fn GetGradientStops1(
559         gradientStops: *mut D2D1_GRADIENT_STOP,
560         gradientStopsCount: UINT32,
561     ) -> (),
562     fn GetPreInterpolationSpace() -> D2D1_COLOR_SPACE,
563     fn GetPostInterpolationSpace() -> D2D1_COLOR_SPACE,
564     fn GetBufferPrecision() -> D2D1_BUFFER_PRECISION,
565     fn GetColorInterpolationMode() -> D2D1_COLOR_INTERPOLATION_MODE,
566 }}
567 RIDL!{#[uuid(0x689f1f85, 0xc72e, 0x4e33, 0x8f, 0x19, 0x85, 0x75, 0x4e, 0xfd, 0x5a, 0xce)]
568 interface ID2D1DrawingStateBlock1(ID2D1DrawingStateBlock1Vtbl):
569     ID2D1DrawingStateBlock(ID2D1DrawingStateBlockVtbl) {
570     fn GetDescription(
571         stateDescription: *mut D2D1_DRAWING_STATE_DESCRIPTION1,
572     ) -> (),
573     fn SetDescription(
574         stateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION1,
575     ) -> (),
576 }}
577 RIDL!{#[uuid(0xe8f7fe7a, 0x191c, 0x466d, 0xad, 0x95, 0x97, 0x56, 0x78, 0xbd, 0xa9, 0x98)]
578 interface ID2D1DeviceContext(ID2D1DeviceContextVtbl): ID2D1RenderTarget(ID2D1RenderTargetVtbl) {
579     fn CreateBitmap(
580         size: D2D1_SIZE_U,
581         sourceData: *const c_void,
582         pitch: UINT32,
583         bitmapProperties: *const D2D1_BITMAP_PROPERTIES1,
584         bitmap: *mut *mut ID2D1Bitmap1,
585     ) -> HRESULT,
586     fn CreateBitmapFromWicBitmap(
587         wicBitmapSource: *const IWICBitmapSource,
588         bitmapProperties: *const D2D1_BITMAP_PROPERTIES1,
589         bitmap: *mut *mut ID2D1Bitmap1,
590     ) -> HRESULT,
591     fn CreateColorContext(
592         space: D2D1_COLOR_SPACE,
593         profile: *const BYTE,
594         profileSize: UINT32,
595         colorContext: *mut *mut ID2D1ColorContext,
596     ) -> HRESULT,
597     fn CreateColorContextFromFilename(
598         filename: PCWSTR,
599         colorContext: *mut *mut ID2D1ColorContext,
600     ) -> HRESULT,
601     fn CreateColorContextFromWicColorContext(
602         wicColorContext: *const IWICColorContext,
603         colorContext: *mut *mut ID2D1ColorContext,
604     ) -> HRESULT,
605     fn CreateBitmapFromDxgiSurface(
606         surface: *const IDXGISurface,
607         bitmapProperties: *const D2D1_BITMAP_PROPERTIES1,
608         bitmap: *mut *mut ID2D1Bitmap1,
609     ) -> HRESULT,
610     fn CreateEffect(
611         effectId: REFCLSID,
612         effect: *mut *mut ID2D1Effect,
613     ) -> HRESULT,
614     fn CreateGradientStopCollection(
615         straightAlphaGradientStops: *const D2D1_GRADIENT_STOP,
616         straightAlphaGradientStopsCount: UINT32,
617         preInterpolationSpace: D2D1_COLOR_SPACE,
618         postInterpolationSpace: D2D1_COLOR_SPACE,
619         bufferPrecision: D2D1_BUFFER_PRECISION,
620         extendMode: D2D1_EXTEND_MODE,
621         colorInterpolationMode: D2D1_COLOR_INTERPOLATION_MODE,
622         gradientStopCollection1: *mut *mut ID2D1GradientStopCollection1,
623     ) -> HRESULT,
624     fn CreateImageBrush(
625         image: *const ID2D1Image,
626         imageBrushProperties: *const D2D1_IMAGE_BRUSH_PROPERTIES,
627         brushProperties: *const D2D1_BRUSH_PROPERTIES,
628         imageBrush: *mut *mut ID2D1ImageBrush,
629     ) -> HRESULT,
630     fn CreateBitmapBrush(
631         bitmap: *const ID2D1Bitmap,
632         bitmapBrushProperties: *const D2D1_BITMAP_BRUSH_PROPERTIES1,
633         brushProperties: *const D2D1_BRUSH_PROPERTIES,
634         bitmapBrush: *mut *mut ID2D1BitmapBrush1,
635     ) -> HRESULT,
636     fn CreateCommandList(
637         commandList: *mut *mut ID2D1CommandList,
638     ) -> HRESULT,
639     fn IsDxgiFormatSupported(
640         format: DXGI_FORMAT,
641     ) -> BOOL,
642     fn IsBufferPrecisionSupported(
643         bufferPrecision: D2D1_BUFFER_PRECISION,
644     ) -> BOOL,
645     fn GetImageLocalBounds(
646         image: *const ID2D1Image,
647         localBounds: *mut D2D1_RECT_F,
648     ) -> HRESULT,
649     fn GetImageWorldBounds(
650         image: *const ID2D1Image,
651         worldBounds: *mut D2D1_RECT_F,
652     ) -> HRESULT,
653     fn GetGlyphRunWorldBounds(
654         baselineOrigin: D2D1_POINT_2F,
655         glyphRun: *const DWRITE_GLYPH_RUN,
656         measuringMode: DWRITE_MEASURING_MODE,
657         bounds: *mut D2D1_RECT_F,
658     ) -> HRESULT,
659     fn GetDevice(
660         device: *mut *mut ID2D1Device,
661     ) -> (),
662     fn SetTarget(
663         image: *const ID2D1Image,
664     ) -> (),
665     fn GetTarget(
666         image: *mut *mut ID2D1Image,
667     ) -> (),
668     fn SetRenderingControls(
669         renderingControls: *const D2D1_RENDERING_CONTROLS,
670     ) -> (),
671     fn GetRenderingControls(
672         renderingControls: *mut D2D1_RENDERING_CONTROLS,
673     ) -> (),
674     fn SetPrimitiveBlend(
675         primitiveBlend: D2D1_PRIMITIVE_BLEND,
676     ) -> (),
677     fn GetPrimitiveBlend() -> D2D1_PRIMITIVE_BLEND,
678     fn SetUnitMode(
679         unitMode: D2D1_UNIT_MODE,
680     ) -> (),
681     fn GetUnitMode() -> D2D1_UNIT_MODE,
682     fn DrawGlyphRun(
683         baselineOrigin: D2D1_POINT_2F,
684         glyphRun: *const DWRITE_GLYPH_RUN,
685         glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION,
686         foregroundBrush: *const ID2D1Brush,
687         measuringMode: DWRITE_MEASURING_MODE,
688     ) -> (),
689     fn DrawImage(
690         image: *const ID2D1Image,
691         targetOffset: *const D2D1_POINT_2F,
692         imageRectangle: *const D2D1_RECT_F,
693         interpolationMode: D2D1_INTERPOLATION_MODE,
694         compositeMode: D2D1_COMPOSITE_MODE,
695     ) -> (),
696     fn DrawGdiMetafile(
697         gdiMetafile: *const ID2D1GdiMetafile,
698         targetOffset: *const D2D1_POINT_2F,
699     ) -> (),
700     fn DrawBitmap(
701         bitmap: *const ID2D1Bitmap,
702         destinationRectangle: *const D2D1_RECT_F,
703         opacity: FLOAT,
704         interpolationMode: D2D1_INTERPOLATION_MODE,
705         sourceRectangle: *const D2D1_RECT_F,
706         perspectiveTransform: *const D2D1_MATRIX_4X4_F,
707     ) -> (),
708     fn PushLayer(
709         layerParameters: *const D2D1_LAYER_PARAMETERS1,
710         layer: *const ID2D1Layer,
711     ) -> (),
712     fn InvalidateEffectInputRectangle(
713         effect: *const ID2D1Effect,
714         input: UINT32,
715         inputRectangle: *const D2D1_RECT_F,
716     ) -> HRESULT,
717     fn GetEffectInvalidRectangleCount(
718         effect: *const ID2D1Effect,
719         rectangleCount: *mut UINT32,
720     ) -> HRESULT,
721     fn GetEffectInvalidRectangles(
722         effect: *const ID2D1Effect,
723         rectangles: *mut D2D1_RECT_F,
724         rectanglesCount: UINT32,
725     ) -> HRESULT,
726     fn GetEffectRequiredInputRectangles(
727         renderEffect: *const ID2D1Effect,
728         renderImageRectangle: *const D2D1_RECT_F,
729         inputDescriptions: *const D2D1_EFFECT_INPUT_DESCRIPTION,
730         requiredInputRects: *mut D2D1_RECT_F,
731         inputCount: UINT32,
732     ) -> HRESULT,
733     fn FillOpacityMask(
734         opacityMask: *const ID2D1Bitmap,
735         brush: *const ID2D1Brush,
736         destinationRectangle: *const D2D1_RECT_F,
737         sourceRectangle: *const D2D1_RECT_F,
738     ) -> (),
739 }}
740 RIDL!{#[uuid(0x47dd575d, 0xac05, 0x4cdd, 0x80, 0x49, 0x9b, 0x02, 0xcd, 0x16, 0xf4, 0x4c)]
741 interface ID2D1Device(ID2D1DeviceVtbl): ID2D1Resource(ID2D1ResourceVtbl) {
742     fn CreateDeviceContext(
743         options: D2D1_DEVICE_CONTEXT_OPTIONS,
744         deviceContext: *mut *mut ID2D1DeviceContext,
745     ) -> HRESULT,
746     fn CreatePrintControl(
747         wicFactory: *const IWICImagingFactory,
748         documentTarget: *const IPrintDocumentPackageTarget,
749         printControlProperties: *const D2D1_PRINT_CONTROL_PROPERTIES,
750         printControl: *mut *mut ID2D1PrintControl,
751     ) -> HRESULT,
752     fn SetMaximumTextureMemory(
753         maximumInBytes: UINT64,
754     ) -> (),
755     fn GetMaximumTextureMemory() -> UINT64,
756     fn ClearResources(
757         millisecondsSinceUse: UINT32,
758     ) -> (),
759 }}
760 RIDL!{#[uuid(0xbb12d362, 0xdaee, 0x4b9a, 0xaa, 0x1d, 0x14, 0xba, 0x40, 0x1c, 0xfa, 0x1f)]
761 interface ID2D1Factory1(ID2D1Factory1Vtbl): ID2D1Factory(ID2D1FactoryVtbl) {
762     fn CreateDevice(
763         dxgiDevice: *const IDXGIDevice,
764         d2dDevice: *mut *mut ID2D1Device,
765     ) -> HRESULT,
766     fn CreateStrokeStyle(
767         strokeStyleProperties: *const D2D1_STROKE_STYLE_PROPERTIES1,
768         dashes: *const FLOAT,
769         dashesCount: UINT32,
770         strokeStyle: *mut *mut ID2D1StrokeStyle1,
771     ) -> HRESULT,
772     fn CreatePathGeometry(
773         pathGeometry: *mut *mut ID2D1PathGeometry1,
774     ) -> HRESULT,
775     fn CreateDrawingStateBlock(
776         drawingStateDescription: *const D2D1_DRAWING_STATE_DESCRIPTION1,
777         textRenderingParams: *const IDWriteRenderingParams,
778         drawingStateBlock: *mut *mut ID2D1DrawingStateBlock1,
779     ) -> HRESULT,
780     fn CreateGdiMetafile(
781         metafileStream: *const IStream,
782         metafile: *mut *mut ID2D1GdiMetafile,
783     ) -> HRESULT,
784     fn RegisterEffectFromStream(
785         classId: REFCLSID,
786         propertyXml: *const IStream,
787         bindings: *const D2D1_PROPERTY_BINDING,
788         bindingsCount: UINT32,
789         effectFactory: PD2D1_EFFECT_FACTORY,
790     ) -> HRESULT,
791     fn RegisterEffectFromString(
792         classId: REFCLSID,
793         propertyXml: PCWSTR,
794         bindings: *const D2D1_PROPERTY_BINDING,
795         bindingsCount: UINT32,
796         effectFactory: PD2D1_EFFECT_FACTORY,
797     ) -> HRESULT,
798     fn UnregisterEffect(
799         classId: REFCLSID,
800     ) -> HRESULT,
801     fn GetRegisteredEffects(
802         effects: *mut CLSID,
803         effectsCount: UINT32,
804         effectsReturned: *mut UINT32,
805         effectsRegistered: *mut UINT32,
806     ) -> HRESULT,
807     fn GetEffectProperties(
808         effectId: REFCLSID,
809         properties: *mut *mut ID2D1Properties,
810     ) -> HRESULT,
811 }}
812 RIDL!{#[uuid(0x31e6e7bc, 0xe0ff, 0x4d46, 0x8c, 0x64, 0xa0, 0xa8, 0xc4, 0x1c, 0x15, 0xd3)]
813 interface ID2D1Multithread(ID2D1MultithreadVtbl): IUnknown(IUnknownVtbl) {
814     fn GetMultithreadProtected() -> BOOL,
815     fn Enter() -> (),
816     fn Leave() -> (),
817 }}
818 extern "system" {
D2D1CreateDevice( dxgiDevice: *const IDXGIDevice, creationProperties: *const D2D1_CREATION_PROPERTIES, d2dDevice: *mut *mut ID2D1Device, ) -> HRESULT819     pub fn D2D1CreateDevice(
820         dxgiDevice: *const IDXGIDevice,
821         creationProperties: *const D2D1_CREATION_PROPERTIES,
822         d2dDevice: *mut *mut ID2D1Device,
823     ) -> HRESULT;
D2D1CreateDeviceContext( dxgiSurface: *const IDXGISurface, creationProperties: *const D2D1_CREATION_PROPERTIES, d2dDeviceContext: *mut *mut ID2D1DeviceContext, ) -> HRESULT824     pub fn D2D1CreateDeviceContext(
825         dxgiSurface: *const IDXGISurface,
826         creationProperties: *const D2D1_CREATION_PROPERTIES,
827         d2dDeviceContext: *mut *mut ID2D1DeviceContext,
828     ) -> HRESULT;
D2D1ConvertColorSpace( sourceColorSpace: D2D1_COLOR_SPACE, destinationColorSpace: D2D1_COLOR_SPACE, color: *const D2D1_COLOR_F, ) -> D2D1_COLOR_F829     pub fn D2D1ConvertColorSpace(
830         sourceColorSpace: D2D1_COLOR_SPACE,
831         destinationColorSpace: D2D1_COLOR_SPACE,
832         color: *const D2D1_COLOR_F,
833     ) -> D2D1_COLOR_F;
D2D1SinCos( angle: FLOAT, s: *mut FLOAT, c: *mut FLOAT, ) -> ()834     pub fn D2D1SinCos(
835         angle: FLOAT,
836         s: *mut FLOAT,
837         c: *mut FLOAT,
838     ) -> ();
D2D1Tan( angle: FLOAT, ) -> FLOAT839     pub fn D2D1Tan(
840         angle: FLOAT,
841     ) -> FLOAT;
D2D1Vec3Length( x: FLOAT, y: FLOAT, z: FLOAT, ) -> FLOAT842     pub fn D2D1Vec3Length(
843         x: FLOAT,
844         y: FLOAT,
845         z: FLOAT,
846     ) -> FLOAT;
847 }
848