winapi_ui_automation/um/
dcomp.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 dcomp.h
7use ctypes::{c_float, c_int, c_void};
8use shared::d3d9types::D3DMATRIX;
9use shared::dcomptypes::{
10    DCOMPOSITION_BACKFACE_VISIBILITY, DCOMPOSITION_BITMAP_INTERPOLATION_MODE,
11    DCOMPOSITION_BORDER_MODE, DCOMPOSITION_COMPOSITE_MODE, DCOMPOSITION_DEPTH_MODE,
12    DCOMPOSITION_FRAME_STATISTICS, DCOMPOSITION_OPACITY_MODE
13};
14use shared::dxgi::IDXGIDevice;
15use shared::dxgi1_2::DXGI_ALPHA_MODE;
16use shared::dxgiformat::DXGI_FORMAT;
17use shared::guiddef::REFIID;
18use shared::minwindef::{BOOL, DWORD, UINT};
19use shared::ntdef::{HANDLE, HRESULT};
20use shared::windef::{HWND, POINT, RECT};
21use um::d2d1::{D2D1_COLOR_F, D2D1_MATRIX_3X2_F};
22use um::d2d1_1::{D2D1_COMPOSITE_MODE, D2D1_MATRIX_5X4_F, D2D1_VECTOR_2F, D2D1_VECTOR_4F};
23use um::d2d1effects::{
24    D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE, D2D1_BLEND_MODE, D2D1_BORDER_MODE,
25    D2D1_COLORMATRIX_ALPHA_MODE, D2D1_TURBULENCE_NOISE
26};
27use um::d2dbasetypes::{D2D_MATRIX_3X2_F, D2D_MATRIX_4X4_F, D2D_RECT_F};
28use um::d3dcommon::D3D_FEATURE_LEVEL;
29use um::dcompanimation::IDCompositionAnimation;
30use um::minwinbase::SECURITY_ATTRIBUTES;
31use um::unknwnbase::{IUnknown, IUnknownVtbl};
32extern "system" {
33    pub fn DCompositionCreateDevice(
34        dxgiDevice: *const IDXGIDevice,
35        iid: REFIID,
36        dcompositionDevice: *mut *mut c_void,
37    ) -> HRESULT;
38    pub fn DCompositionCreateDevice2(
39        renderingDevice: *const IUnknown,
40        iid: REFIID,
41        dcompositionDevice: *mut *mut c_void,
42    ) -> HRESULT;
43    pub fn DCompositionCreateDevice3(
44        renderingDevice: *const IUnknown,
45        iid: REFIID,
46        dcompositionDevice: *mut *mut c_void,
47    ) -> HRESULT;
48    pub fn DCompositionGetFrameStatistics(
49        statistics: *const DCOMPOSITION_FRAME_STATISTICS,
50        minSafeFeaturelLevel: *const D3D_FEATURE_LEVEL,
51        maxHardwareFeaturelLevel: *const D3D_FEATURE_LEVEL,
52    ) -> HRESULT;
53    pub fn DCompositionCreateSurfaceHandle(
54        desiredAccess: DWORD,
55        securityAttributes: *const SECURITY_ATTRIBUTES,
56        surfaceHandle: *mut HANDLE,
57    ) -> HRESULT;
58    pub fn DCompositionAttachMouseWheelToHwnd(
59        visual: *const IDCompositionVisual,
60        hwnd: HWND,
61        enable: BOOL,
62    ) -> HRESULT;
63    pub fn DCompositionAttachMouseDragToHwnd(
64        visual: *const IDCompositionVisual,
65        hwnd: HWND,
66        enable: BOOL,
67    ) -> HRESULT;
68}
69RIDL!{#[uuid(0xc37ea93a, 0xe7aa, 0x450d, 0xb1, 0x6f, 0x97, 0x46, 0xcb, 0x04, 0x07, 0xf3)]
70interface IDCompositionDevice(IDCompositionDeviceVtbl): IUnknown(IUnknownVtbl) {
71    fn Commit() -> HRESULT,
72    fn WaitForCommitCompletion() -> HRESULT,
73    fn GetFrameStatistics(
74        statistics: *mut DCOMPOSITION_FRAME_STATISTICS,
75    ) -> HRESULT,
76    fn CreateTargetForHwnd(
77        hwnd: HWND,
78        topmost: BOOL,
79        target: *mut *mut IDCompositionTarget,
80    ) -> HRESULT,
81    fn CreateVisual(
82        visual: *mut *mut IDCompositionVisual,
83    ) -> HRESULT,
84    fn CreateSurface(
85        width: UINT,
86        height: UINT,
87        pixelFormat: DXGI_FORMAT,
88        alphaMode: DXGI_ALPHA_MODE,
89        surface: *mut *mut IDCompositionSurface,
90    ) -> HRESULT,
91    fn CreateVirtualSurface(
92        initialWidth: UINT,
93        initialHeight: UINT,
94        pixelFormat: DXGI_FORMAT,
95        alphaMode: DXGI_ALPHA_MODE,
96        virtualSurface: *mut *mut IDCompositionVirtualSurface,
97    ) -> HRESULT,
98    fn CreateSurfaceFromHandle(
99        handle: HANDLE,
100        mutsurface: *mut *mut IUnknown,
101    ) -> HRESULT,
102    fn CreateSurfaceFromHwnd(
103        hwnd: HWND,
104        mutsurface: *mut *mut IUnknown,
105    ) -> HRESULT,
106    fn CreateTranslateTransform(
107        translateTransform: *mut *mut IDCompositionTranslateTransform,
108    ) -> HRESULT,
109    fn CreateScaleTransform(
110        scaleTransform: *mut *mut IDCompositionScaleTransform,
111    ) -> HRESULT,
112    fn CreateRotateTransform(
113        rotateTransform: *mut *mut IDCompositionRotateTransform,
114    ) -> HRESULT,
115    fn CreateSkewTransform(
116        skewTransform: *mut *mut IDCompositionSkewTransform,
117    ) -> HRESULT,
118    fn CreateMatrixTransform(
119        matrixTransform: *mut *mut IDCompositionMatrixTransform,
120    ) -> HRESULT,
121    fn CreateTransformGroup(
122        transforms: *const *const IDCompositionTransform,
123        elements: UINT,
124        transformGroup: *mut *mut IDCompositionTransform,
125    ) -> HRESULT,
126    fn CreateTranslateTransform3D(
127        translateTransform3D: *mut *mut IDCompositionTranslateTransform3D,
128    ) -> HRESULT,
129    fn CreateScaleTransform3D(
130        scaleTransform3D: *mut *mut IDCompositionScaleTransform3D,
131    ) -> HRESULT,
132    fn CreateRotateTransform3D(
133        rotateTransform3D: *mut *mut IDCompositionRotateTransform3D,
134    ) -> HRESULT,
135    fn CreateMatrixTransform3D(
136        matrixTransform3D: *mut *mut IDCompositionMatrixTransform3D,
137    ) -> HRESULT,
138    fn CreateTransform3DGroup(
139        transforms3D: *const *const IDCompositionTransform3D,
140        elements: UINT,
141        transform3DGroup: *mut *mut IDCompositionTransform3D,
142    ) -> HRESULT,
143    fn CreateEffectGroup(
144        effectGroup: *mut *mut IDCompositionEffectGroup,
145    ) -> HRESULT,
146    fn CreateRectangleClip(
147        clip: *mut *mut IDCompositionRectangleClip,
148    ) -> HRESULT,
149    fn CreateAnimation(
150        animation: *mut *mut IDCompositionAnimation,
151    ) -> HRESULT,
152    fn CheckDeviceState(
153        pfValid: *mut BOOL,
154    ) -> HRESULT,
155}}
156RIDL!{#[uuid(0xeacdd04c, 0x117e, 0x4e17, 0x88, 0xf4, 0xd1, 0xb1, 0x2b, 0x0e, 0x3d, 0x89)]
157interface IDCompositionTarget(IDCompositionTargetVtbl): IUnknown(IUnknownVtbl) {
158    fn SetRoot(
159        visual: *const IDCompositionVisual,
160    ) -> HRESULT,
161}}
162RIDL!{#[uuid(0x4d93059d, 0x097b, 0x4651, 0x9a, 0x60, 0xf0, 0xf2, 0x51, 0x16, 0xe2, 0xf3)]
163interface IDCompositionVisual(IDCompositionVisualVtbl): IUnknown(IUnknownVtbl) {
164    fn SetOffsetX_2(
165        animation: *const IDCompositionAnimation,
166    ) -> HRESULT,
167    fn SetOffsetX_1(
168        offsetX: c_float,
169    ) -> HRESULT,
170    fn SetOffsetY_2(
171        animation: *const IDCompositionAnimation,
172    ) -> HRESULT,
173    fn SetOffsetY_1(
174        offsetY: c_float,
175    ) -> HRESULT,
176    fn SetTransform_2(
177        transform: *const IDCompositionTransform,
178    ) -> HRESULT,
179    fn SetTransform_1(
180        matrix: *const D2D_MATRIX_3X2_F,
181    ) -> HRESULT,
182    fn SetTransformParent(
183        visual: *const IDCompositionVisual,
184    ) -> HRESULT,
185    fn SetEffect(
186        effect: *const IDCompositionEffect,
187    ) -> HRESULT,
188    fn SetBitmapInterpolationMode(
189        interpolationMode: DCOMPOSITION_BITMAP_INTERPOLATION_MODE,
190    ) -> HRESULT,
191    fn SetBorderMode(
192        borderMode: DCOMPOSITION_BORDER_MODE,
193    ) -> HRESULT,
194    fn SetClip_2(
195        clip: *const IDCompositionClip,
196    ) -> HRESULT,
197    fn SetClip_1(
198        rect: *const D2D_RECT_F,
199    ) -> HRESULT,
200    fn SetContent(
201        content: *const IUnknown,
202    ) -> HRESULT,
203    fn AddVisual(
204        visual: *const IDCompositionVisual,
205        insertAbove: BOOL,
206        referenceVisual: *const IDCompositionVisual,
207    ) -> HRESULT,
208    fn RemoveVisual(
209        visual: *const IDCompositionVisual,
210    ) -> HRESULT,
211    fn RemoveAllVisuals() -> HRESULT,
212    fn SetCompositeMode(
213        compositeMode: DCOMPOSITION_COMPOSITE_MODE,
214    ) -> HRESULT,
215}}
216RIDL!{#[uuid(0xec81b08f, 0xbfcb, 0x4e8d, 0xb1, 0x93, 0xa9, 0x15, 0x58, 0x79, 0x99, 0xe8)]
217interface IDCompositionEffect(IDCompositionEffectVtbl): IUnknown(IUnknownVtbl) {}}
218RIDL!{#[uuid(0x71185722, 0x246b, 0x41f2, 0xaa, 0xd1, 0x04, 0x43, 0xf7, 0xf4, 0xbf, 0xc2)]
219interface IDCompositionTransform3D(IDCompositionTransform3DVtbl):
220    IDCompositionEffect(IDCompositionEffectVtbl) {}}
221RIDL!{#[uuid(0xfd55faa7, 0x37e0, 0x4c20, 0x95, 0xd2, 0x9b, 0xe4, 0x5b, 0xc3, 0x3f, 0x55)]
222interface IDCompositionTransform(IDCompositionTransformVtbl):
223    IDCompositionTransform3D(IDCompositionTransform3DVtbl) {}}
224RIDL!{#[uuid(0x06791122, 0xc6f0, 0x417d, 0x83, 0x23, 0x26, 0x9e, 0x98, 0x7f, 0x59, 0x54)]
225interface IDCompositionTranslateTransform(IDCompositionTranslateTransformVtbl):
226    IDCompositionTransform(IDCompositionTransformVtbl) {
227    fn SetOffsetX_2(
228        animation: *const IDCompositionAnimation,
229    ) -> HRESULT,
230    fn SetOffsetX_1(
231        offsetX: c_float,
232    ) -> HRESULT,
233    fn SetOffsetY_2(
234        animation: *const IDCompositionAnimation,
235    ) -> HRESULT,
236    fn SetOffsetY_1(
237        offsetY: c_float,
238    ) -> HRESULT,
239}}
240RIDL!{#[uuid(0x71fde914, 0x40ef, 0x45ef, 0xbd, 0x51, 0x68, 0xb0, 0x37, 0xc3, 0x39, 0xf9)]
241interface IDCompositionScaleTransform(IDCompositionScaleTransformVtbl):
242    IDCompositionTransform(IDCompositionTransformVtbl) {
243    fn SetScaleX_2(
244        animation: *const IDCompositionAnimation,
245    ) -> HRESULT,
246    fn SetScaleX_1(
247        scaleX: c_float,
248    ) -> HRESULT,
249    fn SetScaleY_2(
250        animation: *const IDCompositionAnimation,
251    ) -> HRESULT,
252    fn SetScaleY_1(
253        scaleY: c_float,
254    ) -> HRESULT,
255    fn SetCenterX_2(
256        animation: *const IDCompositionAnimation,
257    ) -> HRESULT,
258    fn SetCenterX_1(
259        centerX: c_float,
260    ) -> HRESULT,
261    fn SetCenterY_2(
262        animation: *const IDCompositionAnimation,
263    ) -> HRESULT,
264    fn SetCenterY_1(
265        centerY: c_float,
266    ) -> HRESULT,
267}}
268RIDL!{#[uuid(0x641ed83c, 0xae96, 0x46c5, 0x90, 0xdc, 0x32, 0x77, 0x4c, 0xc5, 0xc6, 0xd5)]
269interface IDCompositionRotateTransform(IDCompositionRotateTransformVtbl):
270    IDCompositionTransform(IDCompositionTransformVtbl) {
271    fn SetAngle_2(
272        animation: *const IDCompositionAnimation,
273    ) -> HRESULT,
274    fn SetAngle_1(
275        angle: c_float,
276    ) -> HRESULT,
277    fn SetCenterX_2(
278        animation: *const IDCompositionAnimation,
279    ) -> HRESULT,
280    fn SetCenterX_1(
281        centerX: c_float,
282    ) -> HRESULT,
283    fn SetCenterY_2(
284        animation: *const IDCompositionAnimation,
285    ) -> HRESULT,
286    fn SetCenterY_1(
287        centerY: c_float,
288    ) -> HRESULT,
289}}
290RIDL!{#[uuid(0xe57aa735, 0xdcdb, 0x4c72, 0x9c, 0x61, 0x05, 0x91, 0xf5, 0x88, 0x89, 0xee)]
291interface IDCompositionSkewTransform(IDCompositionSkewTransformVtbl):
292    IDCompositionTransform(IDCompositionTransformVtbl) {
293    fn SetAngleX_2(
294        animation: *const IDCompositionAnimation,
295    ) -> HRESULT,
296    fn SetAngleX_1(
297        angleX: c_float,
298    ) -> HRESULT,
299    fn SetAngleY_2(
300        animation: *const IDCompositionAnimation,
301    ) -> HRESULT,
302    fn SetAngleY_1(
303        angleY: c_float,
304    ) -> HRESULT,
305    fn SetCenterX_2(
306        animation: *const IDCompositionAnimation,
307    ) -> HRESULT,
308    fn SetCenterX_1(
309        centerX: c_float,
310    ) -> HRESULT,
311    fn SetCenterY_2(
312        animation: *const IDCompositionAnimation,
313    ) -> HRESULT,
314    fn SetCenterY_1(
315        centerY: c_float,
316    ) -> HRESULT,
317}}
318RIDL!{#[uuid(0x16cdff07, 0xc503, 0x419c, 0x83, 0xf2, 0x09, 0x65, 0xc7, 0xaf, 0x1f, 0xa6)]
319interface IDCompositionMatrixTransform(IDCompositionMatrixTransformVtbl):
320    IDCompositionTransform(IDCompositionTransformVtbl) {
321    fn SetMatrix(
322        matrix: *const D2D_MATRIX_3X2_F,
323    ) -> HRESULT,
324    fn SetMatrixElement_2(
325        row: c_int,
326        column: c_int,
327        animation: *const IDCompositionAnimation,
328    ) -> HRESULT,
329    fn SetMatrixElement_1(
330        row: c_int,
331        column: c_int,
332        value: c_float,
333    ) -> HRESULT,
334}}
335RIDL!{#[uuid(0xa7929a74, 0xe6b2, 0x4bd6, 0x8b, 0x95, 0x40, 0x40, 0x11, 0x9c, 0xa3, 0x4d)]
336interface IDCompositionEffectGroup(IDCompositionEffectGroupVtbl):
337    IDCompositionEffect(IDCompositionEffectVtbl) {
338    fn SetOpacity_2(
339        animation: *const IDCompositionAnimation,
340    ) -> HRESULT,
341    fn SetOpacity_1(
342        opacity: c_float,
343    ) -> HRESULT,
344    fn SetTransform3D(
345        transform3D: *const IDCompositionTransform3D,
346    ) -> HRESULT,
347}}
348RIDL!{#[uuid(0x91636d4b, 0x9ba1, 0x4532, 0xaa, 0xf7, 0xe3, 0x34, 0x49, 0x94, 0xd7, 0x88)]
349interface IDCompositionTranslateTransform3D(IDCompositionTranslateTransform3DVtbl):
350    IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
351    fn SetOffsetX_2(
352        animation: *const IDCompositionAnimation,
353    ) -> HRESULT,
354    fn SetOffsetX_1(
355        offsetX: c_float,
356    ) -> HRESULT,
357    fn SetOffsetY_2(
358        animation: *const IDCompositionAnimation,
359    ) -> HRESULT,
360    fn SetOffsetY_1(
361        offsetY: c_float,
362    ) -> HRESULT,
363    fn SetOffsetZ_2(
364        animation: *const IDCompositionAnimation,
365    ) -> HRESULT,
366    fn SetOffsetZ_1(
367        offsetZ: c_float,
368    ) -> HRESULT,
369}}
370RIDL!{#[uuid(0x2a9e9ead, 0x364b, 0x4b15, 0xa7, 0xc4, 0xa1, 0x99, 0x7f, 0x78, 0xb3, 0x89)]
371interface IDCompositionScaleTransform3D(IDCompositionScaleTransform3DVtbl):
372    IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
373    fn SetScaleX_2(
374        animation: *const IDCompositionAnimation,
375    ) -> HRESULT,
376    fn SetScaleX_1(
377        scaleX: c_float,
378    ) -> HRESULT,
379    fn SetScaleY_2(
380        animation: *const IDCompositionAnimation,
381    ) -> HRESULT,
382    fn SetScaleY_1(
383        scaleY: c_float,
384    ) -> HRESULT,
385    fn SetScaleZ_2(
386        animation: *const IDCompositionAnimation,
387    ) -> HRESULT,
388    fn SetScaleZ_1(
389        scaleZ: c_float,
390    ) -> HRESULT,
391    fn SetCenterX_2(
392        animation: *const IDCompositionAnimation,
393    ) -> HRESULT,
394    fn SetCenterX_1(
395        centerX: c_float,
396    ) -> HRESULT,
397    fn SetCenterY_2(
398        animation: *const IDCompositionAnimation,
399    ) -> HRESULT,
400    fn SetCenterY_1(
401        centerY: c_float,
402    ) -> HRESULT,
403    fn SetCenterZ_2(
404        animation: *const IDCompositionAnimation,
405    ) -> HRESULT,
406    fn SetCenterZ_1(
407        centerZ: c_float,
408    ) -> HRESULT,
409}}
410RIDL!{#[uuid(0xd8f5b23f, 0xd429, 0x4a91, 0xb5, 0x5a, 0xd2, 0xf4, 0x5f, 0xd7, 0x5b, 0x18)]
411interface IDCompositionRotateTransform3D(IDCompositionRotateTransform3DVtbl):
412    IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
413    fn SetAngle_2(
414        animation: *const IDCompositionAnimation,
415    ) -> HRESULT,
416    fn SetAngle_1(
417        angle: c_float,
418    ) -> HRESULT,
419    fn SetAxisX_2(
420        animation: *const IDCompositionAnimation,
421    ) -> HRESULT,
422    fn SetAxisX_1(
423        axisX: c_float,
424    ) -> HRESULT,
425    fn SetAxisY_2(
426        animation: *const IDCompositionAnimation,
427    ) -> HRESULT,
428    fn SetAxisY_1(
429        axisY: c_float,
430    ) -> HRESULT,
431    fn SetAxisZ_2(
432        animation: *const IDCompositionAnimation,
433    ) -> HRESULT,
434    fn SetAxisZ_1(
435        axisZ: c_float,
436    ) -> HRESULT,
437    fn SetCenterX_2(
438        animation: *const IDCompositionAnimation,
439    ) -> HRESULT,
440    fn SetCenterX_1(
441        centerX: c_float,
442    ) -> HRESULT,
443    fn SetCenterY_2(
444        animation: *const IDCompositionAnimation,
445    ) -> HRESULT,
446    fn SetCenterY_1(
447        centerY: c_float,
448    ) -> HRESULT,
449    fn SetCenterZ_2(
450        animation: *const IDCompositionAnimation,
451    ) -> HRESULT,
452    fn SetCenterZ_1(
453        centerZ: c_float,
454    ) -> HRESULT,
455}}
456RIDL!{#[uuid(0x4b3363f0, 0x643b, 0x41b7, 0xb6, 0xe0, 0xcc, 0xf2, 0x2d, 0x34, 0x46, 0x7c)]
457interface IDCompositionMatrixTransform3D(IDCompositionMatrixTransform3DVtbl):
458    IDCompositionTransform3D(IDCompositionTransform3DVtbl) {
459    fn SetMatrix(
460        matrix: *const D3DMATRIX,
461    ) -> HRESULT,
462    fn SetMatrixElement_2(
463        row: c_int,
464        column: c_int,
465        animation: *const IDCompositionAnimation,
466    ) -> HRESULT,
467    fn SetMatrixElement_1(
468        row: c_int,
469        column: c_int,
470        value: c_float,
471    ) -> HRESULT,
472}}
473RIDL!{#[uuid(0x64ac3703, 0x9d3f, 0x45ec, 0xa1, 0x09, 0x7c, 0xac, 0x0e, 0x7a, 0x13, 0xa7)]
474interface IDCompositionClip(IDCompositionClipVtbl): IUnknown(IUnknownVtbl) {}}
475RIDL!{#[uuid(0x9842ad7d, 0xd9cf, 0x4908, 0xae, 0xd7, 0x48, 0xb5, 0x1d, 0xa5, 0xe7, 0xc2)]
476interface IDCompositionRectangleClip(IDCompositionRectangleClipVtbl):
477    IDCompositionClip(IDCompositionClipVtbl) {
478    fn SetLeft_2(
479        animation: *const IDCompositionAnimation,
480    ) -> HRESULT,
481    fn SetLeft_1(
482        left: c_float,
483    ) -> HRESULT,
484    fn SetTop_2(
485        animation: *const IDCompositionAnimation,
486    ) -> HRESULT,
487    fn SetTop_1(
488        top: c_float,
489    ) -> HRESULT,
490    fn SetRight_2(
491        animation: *const IDCompositionAnimation,
492    ) -> HRESULT,
493    fn SetRight_1(
494        right: c_float,
495    ) -> HRESULT,
496    fn SetBottom_2(
497        animation: *const IDCompositionAnimation,
498    ) -> HRESULT,
499    fn SetBottom_1(
500        bottom: c_float,
501    ) -> HRESULT,
502    fn SetTopLeftRadiusX_2(
503        animation: *const IDCompositionAnimation,
504    ) -> HRESULT,
505    fn SetTopLeftRadiusX_1(
506        radius: c_float,
507    ) -> HRESULT,
508    fn SetTopLeftRadiusY_2(
509        animation: *const IDCompositionAnimation,
510    ) -> HRESULT,
511    fn SetTopLeftRadiusY_1(
512        radius: c_float,
513    ) -> HRESULT,
514    fn SetTopRightRadiusX_2(
515        animation: *const IDCompositionAnimation,
516    ) -> HRESULT,
517    fn SetTopRightRadiusX_1(
518        radius: c_float,
519    ) -> HRESULT,
520    fn SetTopRightRadiusY_2(
521        animation: *const IDCompositionAnimation,
522    ) -> HRESULT,
523    fn SetTopRightRadiusY_1(
524        radius: c_float,
525    ) -> HRESULT,
526    fn SetBottomLeftRadiusX_2(
527        animation: *const IDCompositionAnimation,
528    ) -> HRESULT,
529    fn SetBottomLeftRadiusX_1(
530        radius: c_float,
531    ) -> HRESULT,
532    fn SetBottomLeftRadiusY_2(
533        animation: *const IDCompositionAnimation,
534    ) -> HRESULT,
535    fn SetBottomLeftRadiusY_1(
536        radius: c_float,
537    ) -> HRESULT,
538    fn SetBottomRightRadiusX_2(
539        animation: *const IDCompositionAnimation,
540    ) -> HRESULT,
541    fn SetBottomRightRadiusX_1(
542        radius: c_float,
543    ) -> HRESULT,
544    fn SetBottomRightRadiusY_2(
545        animation: *const IDCompositionAnimation,
546    ) -> HRESULT,
547    fn SetBottomRightRadiusY_1(
548        radius: c_float,
549    ) -> HRESULT,
550}}
551RIDL!{#[uuid(0xbb8a4953, 0x2c99, 0x4f5a, 0x96, 0xf5, 0x48, 0x19, 0x02, 0x7f, 0xa3, 0xac)]
552interface IDCompositionSurface(IDCompositionSurfaceVtbl): IUnknown(IUnknownVtbl) {
553    fn BeginDraw(
554        updateRect: *const RECT,
555        iid: REFIID,
556        updateObject: *mut *mut c_void,
557        updateOffset: *mut POINT,
558    ) -> HRESULT,
559    fn EndDraw() -> HRESULT,
560    fn SuspendDraw() -> HRESULT,
561    fn ResumeDraw() -> HRESULT,
562    fn Scroll(
563        scrollRect: *const RECT,
564        clipRect: *const RECT,
565        offsetX: c_int,
566        offsetY: c_int,
567    ) -> HRESULT,
568}}
569RIDL!{#[uuid(0xae471c51, 0x5f53, 0x4a24, 0x8d, 0x3e, 0xd0, 0xc3, 0x9c, 0x30, 0xb3, 0xf0)]
570interface IDCompositionVirtualSurface(IDCompositionVirtualSurfaceVtbl):
571    IDCompositionSurface(IDCompositionSurfaceVtbl) {
572    fn Resize(
573        width: UINT,
574        height: UINT,
575    ) -> HRESULT,
576    fn Trim(
577        rectangles: *const RECT,
578        count: UINT,
579    ) -> HRESULT,
580}}
581RIDL!{#[uuid(0x75f6468d, 0x1b8e, 0x447c, 0x9b, 0xc6, 0x75, 0xfe, 0xa8, 0x0b, 0x5b, 0x25)]
582interface IDCompositionDevice2(IDCompositionDevice2Vtbl): IUnknown(IUnknownVtbl) {
583    fn Commit() -> HRESULT,
584    fn WaitForCommitCompletion() -> HRESULT,
585    fn GetFrameStatistics(
586        statistics: *mut DCOMPOSITION_FRAME_STATISTICS,
587    ) -> HRESULT,
588    fn CreateVisual(
589        visual: *mut *mut IDCompositionVisual2,
590    ) -> HRESULT,
591    fn CreateSurfaceFactory(
592        renderingDevice: *const IUnknown,
593        surfaceFactory: *mut *mut IDCompositionSurfaceFactory,
594    ) -> HRESULT,
595    fn CreateSurface(
596        width: UINT,
597        height: UINT,
598        pixelFormat: DXGI_FORMAT,
599        alphaMode: DXGI_ALPHA_MODE,
600        surface: *mut *mut IDCompositionSurface,
601    ) -> HRESULT,
602    fn CreateVirtualSurface(
603        initialWidth: UINT,
604        initialHeight: UINT,
605        pixelFormat: DXGI_FORMAT,
606        alphaMode: DXGI_ALPHA_MODE,
607        virtualSurface: *mut *mut IDCompositionVirtualSurface,
608    ) -> HRESULT,
609    fn CreateTranslateTransform(
610        translateTransform: *mut *mut IDCompositionTranslateTransform,
611    ) -> HRESULT,
612    fn CreateScaleTransform(
613        scaleTransform: *mut *mut IDCompositionScaleTransform,
614    ) -> HRESULT,
615    fn CreateRotateTransform(
616        rotateTransform: *mut *mut IDCompositionRotateTransform,
617    ) -> HRESULT,
618    fn CreateSkewTransform(
619        skewTransform: *mut *mut IDCompositionSkewTransform,
620    ) -> HRESULT,
621    fn CreateMatrixTransform(
622        matrixTransform: *mut *mut IDCompositionMatrixTransform,
623    ) -> HRESULT,
624    fn CreateTransformGroup(
625        transforms: *const *const IDCompositionTransform,
626        elements: UINT,
627        transformGroup: *mut *mut IDCompositionTransform,
628    ) -> HRESULT,
629    fn CreateTranslateTransform3D(
630        translateTransform3D: *mut *mut IDCompositionTranslateTransform3D,
631    ) -> HRESULT,
632    fn CreateScaleTransform3D(
633        scaleTransform3D: *mut *mut IDCompositionScaleTransform3D,
634    ) -> HRESULT,
635    fn CreateRotateTransform3D(
636        rotateTransform3D: *mut *mut IDCompositionRotateTransform3D,
637    ) -> HRESULT,
638    fn CreateMatrixTransform3D(
639        matrixTransform3D: *mut *mut IDCompositionMatrixTransform3D,
640    ) -> HRESULT,
641    fn CreateTransform3DGroup(
642        transforms3D: *const *const IDCompositionTransform3D,
643        elements: UINT,
644        transform3DGroup: *mut *mut IDCompositionTransform3D,
645    ) -> HRESULT,
646    fn CreateEffectGroup(
647        effectGroup: *mut *mut IDCompositionEffectGroup,
648    ) -> HRESULT,
649    fn CreateRectangleClip(
650        clip: *mut *mut IDCompositionRectangleClip,
651    ) -> HRESULT,
652    fn CreateAnimation(
653        animation: *mut *mut IDCompositionAnimation,
654    ) -> HRESULT,
655}}
656RIDL!{#[uuid(0x5f4633fe, 0x1e08, 0x4cb8, 0x8c, 0x75, 0xce, 0x24, 0x33, 0x3f, 0x56, 0x02)]
657interface IDCompositionDesktopDevice(IDCompositionDesktopDeviceVtbl):
658    IDCompositionDevice2(IDCompositionDevice2Vtbl) {
659    fn CreateTargetForHwnd(
660        hwnd: HWND,
661        topmost: BOOL,
662        target: *mut *mut IDCompositionTarget,
663    ) -> HRESULT,
664    fn CreateSurfaceFromHandle(
665        handle: HANDLE,
666        surface: *mut *mut IUnknown,
667    ) -> HRESULT,
668    fn CreateSurfaceFromHwnd(
669        hwnd: HWND,
670        surface: *mut *mut IUnknown,
671    ) -> HRESULT,
672}}
673RIDL!{#[uuid(0xa1a3c64a, 0x224f, 0x4a81, 0x97, 0x73, 0x4f, 0x03, 0xa8, 0x9d, 0x3c, 0x6c)]
674interface IDCompositionDeviceDebug(IDCompositionDeviceDebugVtbl): IUnknown(IUnknownVtbl) {
675    fn EnableDebugCounters() -> HRESULT,
676    fn DisableDebugCounters() -> HRESULT,
677}}
678RIDL!{#[uuid(0xe334bc12, 0x3937, 0x4e02, 0x85, 0xeb, 0xfc, 0xf4, 0xeb, 0x30, 0xd2, 0xc8)]
679interface IDCompositionSurfaceFactory(IDCompositionSurfaceFactoryVtbl): IUnknown(IUnknownVtbl) {
680    fn CreateSurface(
681        width: UINT,
682        height: UINT,
683        pixelFormat: DXGI_FORMAT,
684        alphaMode: DXGI_ALPHA_MODE,
685        surface: *mut *mut IDCompositionSurface,
686    ) -> HRESULT,
687    fn CreateVirtualSurface(
688        initialWidth: UINT,
689        initialHeight: UINT,
690        pixelFormat: DXGI_FORMAT,
691        alphaMode: DXGI_ALPHA_MODE,
692        virtualSurface: *mut *mut IDCompositionVirtualSurface,
693    ) -> HRESULT,
694}}
695RIDL!{#[uuid(0xe8de1639, 0x4331, 0x4b26, 0xbc, 0x5f, 0x6a, 0x32, 0x1d, 0x34, 0x7a, 0x85)]
696interface IDCompositionVisual2(IDCompositionVisual2Vtbl):
697    IDCompositionVisual(IDCompositionVisualVtbl) {
698    fn SetOpacityMode(
699        mode: DCOMPOSITION_OPACITY_MODE,
700    ) -> HRESULT,
701    fn SetBackFaceVisibility(
702        visibility: DCOMPOSITION_BACKFACE_VISIBILITY,
703    ) -> HRESULT,
704}}
705RIDL!{#[uuid(0xfed2b808, 0x5eb4, 0x43a0, 0xae, 0xa3, 0x35, 0xf6, 0x52, 0x80, 0xf9, 0x1b)]
706interface IDCompositionVisualDebug(IDCompositionVisualDebugVtbl):
707    IDCompositionVisual2(IDCompositionVisual2Vtbl) {
708    fn EnableHeatMap(
709        color: *const D2D1_COLOR_F,
710    ) -> HRESULT,
711    fn DisableHeatMap() -> HRESULT,
712    fn EnableRedrawRegions() -> HRESULT,
713    fn DisableRedrawRegions() -> HRESULT,
714}}
715RIDL!{#[uuid(0x2775f462, 0xb6c1, 0x4015, 0xb0, 0xbe, 0xb3, 0xe7, 0xd6, 0xa4, 0x97, 0x6d)]
716interface IDCompositionVisual3(IDCompositionVisual3Vtbl):
717    IDCompositionVisualDebug(IDCompositionVisualDebugVtbl) {
718    fn SetDepthMode(
719        mode: DCOMPOSITION_DEPTH_MODE,
720    ) -> HRESULT,
721    fn SetOffsetZ_2(
722        animation: *const IDCompositionAnimation,
723    ) -> HRESULT,
724    fn SetOffsetZ_1(
725        offsetZ: c_float,
726    ) -> HRESULT,
727    fn SetOpacity_2(
728        animation: *const IDCompositionAnimation,
729    ) -> HRESULT,
730    fn SetOpacity_1(
731        opacity: c_float,
732    ) -> HRESULT,
733    fn SetTransform_2(
734        transform: *const IDCompositionTransform3D,
735    ) -> HRESULT,
736    fn SetTransform_1(
737        matrix: *const D2D_MATRIX_4X4_F,
738    ) -> HRESULT,
739    fn SetVisible(
740        visible: BOOL,
741    ) -> HRESULT,
742}}
743RIDL!{#[uuid(0x0987cb06, 0xf916, 0x48bf, 0x8d, 0x35, 0xce, 0x76, 0x41, 0x78, 0x1b, 0xd9)]
744interface IDCompositionDevice3(IDCompositionDevice3Vtbl):
745    IDCompositionDevice2(IDCompositionDevice2Vtbl) {
746    fn CreateGaussianBlurEffect(
747        gaussianBlurEffect: *mut *mut IDCompositionGaussianBlurEffect,
748    ) -> HRESULT,
749    fn CreateBrightnessEffect(
750        brightnessEffect: *mut *mut IDCompositionBrightnessEffect,
751    ) -> HRESULT,
752    fn CreateColorMatrixEffect(
753        colorMatrixEffect: *mut *mut IDCompositionColorMatrixEffect,
754    ) -> HRESULT,
755    fn CreateShadowEffect(
756        shadowEffect: *mut *mut IDCompositionShadowEffect,
757    ) -> HRESULT,
758    fn CreateHueRotationEffect(
759        hueRotationEffect: *mut *mut IDCompositionHueRotationEffect,
760    ) -> HRESULT,
761    fn CreateSaturationEffect(
762        saturationEffect: *mut *mut IDCompositionSaturationEffect,
763    ) -> HRESULT,
764    fn CreateTurbulenceEffect(
765        turbulenceEffect: *mut *mut IDCompositionTurbulenceEffect,
766    ) -> HRESULT,
767    fn CreateLinearTransferEffect(
768        linearTransferEffect: *mut *mut IDCompositionLinearTransferEffect,
769    ) -> HRESULT,
770    fn CreateTableTransferEffect(
771        tableTransferEffect: *mut *mut IDCompositionTableTransferEffect,
772    ) -> HRESULT,
773    fn CreateCompositeEffect(
774        compositeEffect: *mut *mut IDCompositionCompositeEffect,
775    ) -> HRESULT,
776    fn CreateBlendEffect(
777        blendEffect: *mut *mut IDCompositionBlendEffect,
778    ) -> HRESULT,
779    fn CreateArithmeticCompositeEffect(
780        arithmeticCompositeEffect: *mut *mut IDCompositionArithmeticCompositeEffect,
781    ) -> HRESULT,
782    fn CreateAffineTransform2DEffect(
783        affineTransform2dEffect: *mut *mut IDCompositionAffineTransform2DEffect,
784    ) -> HRESULT,
785}}
786RIDL!{#[uuid(0x30c421d5, 0x8cb2, 0x4e9f, 0xb1, 0x33, 0x37, 0xbe, 0x27, 0x0d, 0x4a, 0xc2)]
787interface IDCompositionFilterEffect(IDCompositionFilterEffectVtbl):
788    IDCompositionEffect(IDCompositionEffectVtbl) {
789    fn SetInput(
790        index: UINT,
791        input: *const IUnknown,
792        flags: UINT,
793    ) -> HRESULT,
794}}
795RIDL!{#[uuid(0x45d4d0b7, 0x1bd4, 0x454e, 0x88, 0x94, 0x2b, 0xfa, 0x68, 0x44, 0x30, 0x33)]
796interface IDCompositionGaussianBlurEffect(IDCompositionGaussianBlurEffectVtbl):
797    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
798    fn SetStandardDeviation_2(
799        animation: *const IDCompositionAnimation,
800    ) -> HRESULT,
801    fn SetStandardDeviation_1(
802        amount: c_float,
803    ) -> HRESULT,
804    fn SetBorderMode(
805        mode: D2D1_BORDER_MODE,
806    ) -> HRESULT,
807}}
808RIDL!{#[uuid(0x6027496e, 0xcb3a, 0x49ab, 0x93, 0x4f, 0xd7, 0x98, 0xda, 0x4f, 0x7d, 0xa6)]
809interface IDCompositionBrightnessEffect(IDCompositionBrightnessEffectVtbl):
810    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
811    fn SetWhitePoint(
812        whitePoint: *const D2D1_VECTOR_2F,
813    ) -> HRESULT,
814    fn SetBlackPoint(
815        blackPoint: *const D2D1_VECTOR_2F,
816    ) -> HRESULT,
817    fn SetWhitePointX_2(
818        animation: *const IDCompositionAnimation,
819    ) -> HRESULT,
820    fn SetWhitePointX_1(
821        whitePointX: c_float,
822    ) -> HRESULT,
823    fn SetWhitePointY_2(
824        animation: *const IDCompositionAnimation,
825    ) -> HRESULT,
826    fn SetWhitePointY_1(
827        whitePointY: c_float,
828    ) -> HRESULT,
829    fn SetBlackPointX_2(
830        animation: *const IDCompositionAnimation,
831    ) -> HRESULT,
832    fn SetBlackPointX_1(
833        blackPointX: c_float,
834    ) -> HRESULT,
835    fn SetBlackPointY_2(
836        animation: *const IDCompositionAnimation,
837    ) -> HRESULT,
838    fn SetBlackPointY_1(
839        blackPointY: c_float,
840    ) -> HRESULT,
841}}
842RIDL!{#[uuid(0xc1170a22, 0x3ce2, 0x4966, 0x90, 0xd4, 0x55, 0x40, 0x8b, 0xfc, 0x84, 0xc4)]
843interface IDCompositionColorMatrixEffect(IDCompositionColorMatrixEffectVtbl):
844    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
845    fn SetMatrix(
846        matrix: *const D2D1_MATRIX_5X4_F,
847    ) -> HRESULT,
848    fn SetMatrixElement_2(
849        row: c_int,
850        column: c_int,
851        animation: *const IDCompositionAnimation,
852    ) -> HRESULT,
853    fn SetMatrixElement_1(
854        row: c_int,
855        column: c_int,
856        value: c_float,
857    ) -> HRESULT,
858    fn SetAlphaMode(
859        mode: D2D1_COLORMATRIX_ALPHA_MODE,
860    ) -> HRESULT,
861    fn SetClampOutput(
862        clamp: BOOL,
863    ) -> HRESULT,
864}}
865RIDL!{#[uuid(0x4ad18ac0, 0xcfd2, 0x4c2f, 0xbb, 0x62, 0x96, 0xe5, 0x4f, 0xdb, 0x68, 0x79)]
866interface IDCompositionShadowEffect(IDCompositionShadowEffectVtbl):
867    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
868    fn SetStandardDeviation_2(
869        animation: *const IDCompositionAnimation,
870    ) -> HRESULT,
871    fn SetStandardDeviation_1(
872        amount: c_float,
873    ) -> HRESULT,
874    fn SetColor(
875        color: *const D2D1_VECTOR_4F,
876    ) -> HRESULT,
877    fn SetRed_2(
878        animation: *const IDCompositionAnimation,
879    ) -> HRESULT,
880    fn SetRed_1(
881        amount: c_float,
882    ) -> HRESULT,
883    fn SetGreen_2(
884        animation: *const IDCompositionAnimation,
885    ) -> HRESULT,
886    fn SetGreen_1(
887        amount: c_float,
888    ) -> HRESULT,
889    fn SetBlue_2(
890        animation: *const IDCompositionAnimation,
891    ) -> HRESULT,
892    fn SetBlue_1(
893        amount: c_float,
894    ) -> HRESULT,
895    fn SetAlpha_2(
896        animation: *const IDCompositionAnimation,
897    ) -> HRESULT,
898    fn SetAlpha_1(
899        amount: c_float,
900    ) -> HRESULT,
901}}
902RIDL!{#[uuid(0x6db9f920, 0x0770, 0x4781, 0xb0, 0xc6, 0x38, 0x19, 0x12, 0xf9, 0xd1, 0x67)]
903interface IDCompositionHueRotationEffect(IDCompositionHueRotationEffectVtbl):
904    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
905    // Changes the angle of rotation
906    fn SetAngle_2(
907        animation: *const IDCompositionAnimation,
908    ) -> HRESULT,
909    fn SetAngle_1(
910        amountDegrees: c_float,
911    ) -> HRESULT,
912}}
913RIDL!{#[uuid(0xa08debda, 0x3258, 0x4fa4, 0x9f, 0x16, 0x91, 0x74, 0xd3, 0xfe, 0x93, 0xb1)]
914interface IDCompositionSaturationEffect(IDCompositionSaturationEffectVtbl):
915    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
916    // Changes the amount of saturation to be applied.
917    fn SetSaturation_2(
918        animation: *const IDCompositionAnimation,
919    ) -> HRESULT,
920    fn SetSaturation_1(
921        ratio: c_float,
922    ) -> HRESULT,
923}}
924RIDL!{#[uuid(0xa6a55bda, 0xc09c, 0x49f3, 0x91, 0x93, 0xa4, 0x19, 0x22, 0xc8, 0x97, 0x15)]
925interface IDCompositionTurbulenceEffect(IDCompositionTurbulenceEffectVtbl):
926    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
927    fn SetOffset(
928        offset: *const D2D1_VECTOR_2F,
929    ) -> HRESULT,
930    fn SetBaseFrequency(
931        frequency: *const D2D1_VECTOR_2F,
932    ) -> HRESULT,
933    fn SetSize(
934        size: *const D2D1_VECTOR_2F,
935    ) -> HRESULT,
936    fn SetNumOctaves(
937        numOctaves: UINT,
938    ) -> HRESULT,
939    fn SetSeed(
940        seed: UINT,
941    ) -> HRESULT,
942    fn SetNoise(
943        noise: D2D1_TURBULENCE_NOISE,
944    ) -> HRESULT,
945    fn SetStitchable(
946        stitchable: BOOL,
947    ) -> HRESULT,
948}}
949RIDL!{#[uuid(0x4305ee5b, 0xc4a0, 0x4c88, 0x93, 0x85, 0x67, 0x12, 0x4e, 0x01, 0x76, 0x83)]
950interface IDCompositionLinearTransferEffect(IDCompositionLinearTransferEffectVtbl):
951    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
952    fn SetRedYIntercept_2(
953        animation: *const IDCompositionAnimation,
954    ) -> HRESULT,
955    fn SetRedYIntercept_1(
956        redYIntercept: c_float,
957    ) -> HRESULT,
958    fn SetRedSlope_2(
959        animation: *const IDCompositionAnimation,
960    ) -> HRESULT,
961    fn SetRedSlope_1(
962        redSlope: c_float,
963    ) -> HRESULT,
964    fn SetRedDisable(
965        redDisable: BOOL,
966    ) -> HRESULT,
967    fn SetGreenYIntercept_2(
968        animation: *const IDCompositionAnimation,
969    ) -> HRESULT,
970    fn SetGreenYIntercept_1(
971        greenYIntercept: c_float,
972    ) -> HRESULT,
973    fn SetGreenSlope_2(
974        animation: *const IDCompositionAnimation,
975    ) -> HRESULT,
976    fn SetGreenSlope_1(
977        greenSlope: c_float,
978    ) -> HRESULT,
979    fn SetGreenDisable(
980        greenDisable: BOOL,
981    ) -> HRESULT,
982    fn SetBlueYIntercept_2(
983        animation: *const IDCompositionAnimation,
984    ) -> HRESULT,
985    fn SetBlueYIntercept_1(
986        blueYIntercept: c_float,
987    ) -> HRESULT,
988    fn SetBlueSlope_2(
989        animation: *const IDCompositionAnimation,
990    ) -> HRESULT,
991    fn SetBlueSlope_1(
992        blueSlope: c_float,
993    ) -> HRESULT,
994    fn SetBlueDisable(
995        blueDisable: BOOL,
996    ) -> HRESULT,
997    fn SetAlphaYIntercept_2(
998        animation: *const IDCompositionAnimation,
999    ) -> HRESULT,
1000    fn SetAlphaYIntercept_1(
1001        alphaYIntercept: c_float,
1002    ) -> HRESULT,
1003    fn SetAlphaSlope_2(
1004        animation: *const IDCompositionAnimation,
1005    ) -> HRESULT,
1006    fn SetAlphaSlope_1(
1007        alphaSlope: c_float,
1008    ) -> HRESULT,
1009    fn SetAlphaDisable(
1010        alphaDisable: BOOL,
1011    ) -> HRESULT,
1012    fn SetClampOutput(
1013        clampOutput: BOOL,
1014    ) -> HRESULT,
1015}}
1016RIDL!{#[uuid(0x9b7e82e2, 0x69c5, 0x4eb4, 0xa5, 0xf5, 0xa7, 0x03, 0x3f, 0x51, 0x32, 0xcd)]
1017interface IDCompositionTableTransferEffect(IDCompositionTableTransferEffectVtbl):
1018    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
1019    fn SetRedTable(
1020        tableValues: *const c_float,
1021        count: UINT,
1022    ) -> HRESULT,
1023    fn SetGreenTable(
1024        tableValues: *const c_float,
1025        count: UINT,
1026    ) -> HRESULT,
1027    fn SetBlueTable(
1028        tableValues: *const c_float,
1029        count: UINT,
1030    ) -> HRESULT,
1031    fn SetAlphaTable(
1032        tableValues: *const c_float,
1033        count: UINT,
1034    ) -> HRESULT,
1035    fn SetRedDisable(
1036        redDisable: BOOL,
1037    ) -> HRESULT,
1038    fn SetGreenDisable(
1039        greenDisable: BOOL,
1040    ) -> HRESULT,
1041    fn SetBlueDisable(
1042        blueDisable: BOOL,
1043    ) -> HRESULT,
1044    fn SetAlphaDisable(
1045        alphaDisable: BOOL,
1046    ) -> HRESULT,
1047    fn SetClampOutput(
1048        clampOutput: BOOL,
1049    ) -> HRESULT,
1050    fn SetRedTableValue_2(
1051        index: UINT,
1052        animation: *const IDCompositionAnimation,
1053    ) -> HRESULT,
1054    fn SetRedTableValue_1(
1055        index: UINT,
1056        value: c_float,
1057    ) -> HRESULT,
1058    fn SetGreenTableValue_2(
1059        index: UINT,
1060        animation: *const IDCompositionAnimation,
1061    ) -> HRESULT,
1062    fn SetGreenTableValue_1(
1063        index: UINT,
1064        value: c_float,
1065    ) -> HRESULT,
1066    fn SetBlueTableValue_2(
1067        index: UINT,
1068        animation: *const IDCompositionAnimation,
1069    ) -> HRESULT,
1070    fn SetBlueTableValue_1(
1071        index: UINT,
1072        value: c_float,
1073    ) -> HRESULT,
1074    fn SetAlphaTableValue_2(
1075        index: UINT,
1076        animation: *const IDCompositionAnimation,
1077    ) -> HRESULT,
1078    fn SetAlphaTableValue_1(
1079        index: UINT,
1080        value: c_float,
1081    ) -> HRESULT,
1082}}
1083RIDL!{#[uuid(0x576616c0, 0xa231, 0x494d, 0xa3, 0x8d, 0x00, 0xfd, 0x5e, 0xc4, 0xdb, 0x46)]
1084interface IDCompositionCompositeEffect(IDCompositionCompositeEffectVtbl):
1085    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
1086    fn SetMode(
1087        mode: D2D1_COMPOSITE_MODE,
1088    ) -> HRESULT,
1089}}
1090RIDL!{#[uuid(0x33ecdc0a, 0x578a, 0x4a11, 0x9c, 0x14, 0x0c, 0xb9, 0x05, 0x17, 0xf9, 0xc5)]
1091interface IDCompositionBlendEffect(IDCompositionBlendEffectVtbl):
1092    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
1093    fn SetMode(
1094        mode: D2D1_BLEND_MODE,
1095    ) -> HRESULT,
1096}}
1097RIDL!{#[uuid(0x3b67dfa8, 0xe3dd, 0x4e61, 0xb6, 0x40, 0x46, 0xc2, 0xf3, 0xd7, 0x39, 0xdc)]
1098interface IDCompositionArithmeticCompositeEffect(IDCompositionArithmeticCompositeEffectVtbl):
1099    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
1100    fn SetCoefficients(
1101        coefficients: *const D2D1_VECTOR_4F,
1102    ) -> HRESULT,
1103    fn SetClampOutput(
1104        clampoutput: BOOL,
1105    ) -> HRESULT,
1106    fn SetCoefficient1_2(
1107        animation: *const IDCompositionAnimation,
1108    ) -> HRESULT,
1109    fn SetCoefficient1_1(
1110        Coeffcient1: c_float,
1111    ) -> HRESULT,
1112    fn SetCoefficient2_2(
1113        animation: *const IDCompositionAnimation,
1114    ) -> HRESULT,
1115    fn SetCoefficient2_1(
1116        Coefficient2: c_float,
1117    ) -> HRESULT,
1118    fn SetCoefficient3_2(
1119        animation: *const IDCompositionAnimation,
1120    ) -> HRESULT,
1121    fn SetCoefficient3_1(
1122        Coefficient3: c_float,
1123    ) -> HRESULT,
1124    fn SetCoefficient4_2(
1125        animation: *const IDCompositionAnimation,
1126    ) -> HRESULT,
1127    fn SetCoefficient4_1(
1128        Coefficient4: c_float,
1129    ) -> HRESULT,
1130}}
1131RIDL!{#[uuid(0x0b74b9e8, 0xcdd6, 0x492f, 0xbb, 0xbc, 0x5e, 0xd3, 0x21, 0x57, 0x02, 0x6d)]
1132interface IDCompositionAffineTransform2DEffect(IDCompositionAffineTransform2DEffectVtbl):
1133    IDCompositionFilterEffect(IDCompositionFilterEffectVtbl) {
1134    fn SetInterpolationMode(
1135        interpolationMode: D2D1_2DAFFINETRANSFORM_INTERPOLATION_MODE,
1136    ) -> HRESULT,
1137    fn SetBorderMode(
1138        borderMode: D2D1_BORDER_MODE,
1139    ) -> HRESULT,
1140    fn SetTransformMatrix(
1141        transformMatrix: *const D2D1_MATRIX_3X2_F,
1142    ) -> HRESULT,
1143    fn SetTransformMatrixElement_2(
1144        row: c_int,
1145        column: c_int,
1146        animation: *const IDCompositionAnimation,
1147    ) -> HRESULT,
1148    fn SetTransformMatrixElement_1(
1149        row: c_int,
1150        column: c_int,
1151        value: c_float,
1152    ) -> HRESULT,
1153    fn SetSharpness_2(
1154        animation: *const IDCompositionAnimation,
1155    ) -> HRESULT,
1156    fn SetSharpness_1(
1157        sharpness: c_float,
1158    ) -> HRESULT,
1159}}