diff --git a/include/Makefile.in b/include/Makefile.in index 2284a902b5f..921ea4307cd 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -182,6 +182,7 @@ SOURCES = \ dciddi.h \ dciman.h \ dcommon.idl \ + dcomp.idl \ dcompanimation.idl \ dcomptypes.idl \ dde.h \ diff --git a/include/dcomp.idl b/include/dcomp.idl new file mode 100644 index 00000000000..d5a9c362024 --- /dev/null +++ b/include/dcomp.idl @@ -0,0 +1,442 @@ +/* + * Copyright 2023 Zhiyi Zhang for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +import "objidl.idl"; +import "d2dbasetypes.h"; +import "dcommon.idl"; +import "dcompanimation.idl"; +import "dcomptypes.idl"; +import "unknwn.idl"; + +typedef struct _D3DMATRIX +{ + float m[4][4]; +} D3DMATRIX; + +[ + local, + object, + pointer_default(unique), + uuid(bb8a4953-2c99-4f5a-96f5-4819027fa3ac) +] +interface IDCompositionSurface : IUnknown +{ + HRESULT BeginDraw([in, optional] const RECT *rect, [in] REFIID iid, [out] void **object, [out] POINT *offset); + HRESULT EndDraw(); + HRESULT SuspendDraw(); + HRESULT ResumeDraw(); + HRESULT Scroll([in, optional] const RECT *scroll, [in, optional] const RECT *clip, [in] int offset_x, [in] int offset_y); +} + +[ + local, + object, + pointer_default(unique), + uuid(ae471c51-5f53-4a24-8d3e-d0c39c30b3f0) +] +interface IDCompositionVirtualSurface : IDCompositionSurface +{ + HRESULT Resize([in] UINT width, [in] UINT height); + HRESULT Trim([in, optional, size_is(count)] const RECT *rectangles, [in] UINT count); +} + +[ + local, + object, + pointer_default(unique), + uuid(e334bc12-3937-4e02-85eb-fcf4eb30d2c8) +] +interface IDCompositionSurfaceFactory : IUnknown +{ + HRESULT CreateSurface([in] UINT width, [in] UINT height, [in] DXGI_FORMAT pixel_format, [in] DXGI_ALPHA_MODE alpha_mode, [out] IDCompositionSurface **surface); + HRESULT CreateVirtualSurface([in] UINT width, [in] UINT height, [in] DXGI_FORMAT pixel_format, [in] DXGI_ALPHA_MODE alpha_mode, [out] IDCompositionVirtualSurface **surface); +} + +[ + local, + object, + pointer_default(unique), + uuid(64ac3703-9d3f-45ec-a109-7cac0e7a13a7) +] +interface IDCompositionClip : IUnknown +{ +} + +[ + local, + object, + pointer_default(unique), + uuid(9842ad7d-d9cf-4908-aed7-48b51da5e7c2) +] +interface IDCompositionRectangleClip : IDCompositionClip +{ + HRESULT SetLeft([in] float left); + HRESULT SetLeftAnimation([in] IDCompositionAnimation *animation); + HRESULT SetTop([in] float top); + HRESULT SetTopAnimation([in] IDCompositionAnimation *animation); + HRESULT SetRight([in] float right); + HRESULT SetRightAnimation([in] IDCompositionAnimation *animation); + HRESULT SetBottom([in] float bottom); + HRESULT SetBottomAnimation([in] IDCompositionAnimation *animation); + HRESULT SetTopLeftRadiusX([in] float radius); + HRESULT SetTopLeftRadiusXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetTopLeftRadiusY([in] float radius); + HRESULT SetTopLeftRadiusYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetTopRightRadiusX([in] float radius); + HRESULT SetTopRightRadiusXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetTopRightRadiusY([in] float radius); + HRESULT SetTopRightRadiusYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetBottomLeftRadiusX([in] float radius); + HRESULT SetBottomLeftRadiusXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetBottomLeftRadiusY([in] float radius); + HRESULT SetBottomLeftRadiusYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetBottomRightRadiusX([in] float radius); + HRESULT SetBottomRightRadiusXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetBottomRightRadiusY([in] float radius); + HRESULT SetBottomRightRadiusYAnimation([in] IDCompositionAnimation *animation); +} + +[ + local, + object, + pointer_default(unique), + uuid(ec81b08f-bfcb-4e8d-b193-a915587999e8) +] +interface IDCompositionEffect : IUnknown +{ +} + +[ + local, + object, + pointer_default(unique), + uuid(71185722-246b-41f2-aad1-0443f7f4bfc2) +] +interface IDCompositionTransform3D : IDCompositionEffect +{ +} + +[ + local, + object, + pointer_default(unique), + uuid(a7929a74-e6b2-4bd6-8b95-4040119ca34d) +] +interface IDCompositionEffectGroup : IDCompositionEffect +{ + HRESULT SetOpacity([in] float opacity); + HRESULT SetOpacityAnimation([in] IDCompositionAnimation *animation); + HRESULT SetTransform3D([in, optional] IDCompositionTransform3D *transform); +}; + +[ + local, + object, + pointer_default(unique), + uuid(91636d4b-9ba1-4532-aaf7-e3344994d788) +] +interface IDCompositionTranslateTransform3D : IDCompositionTransform3D +{ + HRESULT SetOffsetX([in] float offset); + HRESULT SetOffsetXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetOffsetY([in] float offset); + HRESULT SetOffsetYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetOffsetZ([in] float offset); + HRESULT SetOffsetZAnimation([in] IDCompositionAnimation *animation); +}; + +[ + local, + object, + pointer_default(unique), + uuid(2a9e9ead-364b-4b15-a7c4-a1997f78b389) +] +interface IDCompositionScaleTransform3D : IDCompositionTransform3D +{ + HRESULT SetScaleX([in] float scale); + HRESULT SetScaleXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetScaleY([in] float scale); + HRESULT SetScaleYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetScaleZ([in] float scale); + HRESULT SetScaleZAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterX([in] float center); + HRESULT SetCenterXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterY([in] float center); + HRESULT SetCenterYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterZ([in] float center); + HRESULT SetCenterZAnimation([in] IDCompositionAnimation *animation); +} + +[ + local, + object, + pointer_default(unique), + uuid(d8f5b23f-d429-4a91-b55a-d2f45fd75b18) +] +interface IDCompositionRotateTransform3D : IDCompositionTransform3D +{ + HRESULT SetScaleX([in] float scale); + HRESULT SetScaleXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetScaleY([in] float scale); + HRESULT SetScaleYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetScaleZ([in] float scale); + HRESULT SetScaleZAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterX([in] float center); + HRESULT SetCenterXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterY([in] float center); + HRESULT SetCenterYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterZ([in] float center); + HRESULT SetCenterZAnimation([in] IDCompositionAnimation *animation); +} + +[ + local, + object, + pointer_default(unique), + uuid(4b3363f0-643b-41b7-b6e0-ccf22d34467c) +] +interface IDCompositionMatrixTransform3D : IDCompositionTransform3D +{ + /* C++ method: HRESULT SetMatrix(const D3DMATRIX &matrix); Use pointer instead of reference */ + HRESULT SetMatrix([in] const D3DMATRIX *matrix); + HRESULT SetMatrixElement([in] int row, [in] int column, [in] float value); + HRESULT SetMatrixElementAnimation([in] int row, [in] int column, [in] IDCompositionAnimation *animation); +}; + +[ + local, + object, + pointer_default(unique), + uuid(fd55faa7-37e0-4c20-95d2-9be45bc33f55) +] +interface IDCompositionTransform : IDCompositionTransform3D +{ +} + +[ + local, + object, + pointer_default(unique), + uuid(71fde914-40ef-45ef-bd51-68b037c339f9) +] +interface IDCompositionScaleTransform : IDCompositionTransform +{ + HRESULT SetScaleX([in] float scale); + HRESULT SetScaleXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetScaleY([in] float scale); + HRESULT SetScaleYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterX([in] float center); + HRESULT SetCenterXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterY([in] float center); + HRESULT SetCenterYAnimation([in] IDCompositionAnimation *animation); +}; + +[ + local, + object, + pointer_default(unique), + uuid(641ed83c-ae96-46c5-90dc-32774cc5c6d5) +] +interface IDCompositionRotateTransform : IDCompositionTransform +{ + HRESULT SetAngle([in] float angle); + HRESULT SetAngleAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterX([in] float center_x); + HRESULT SetCenterXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterY([in] float center_y); + HRESULT SetCenterYAnimation([in] IDCompositionAnimation *animation); +}; + +[ + local, + object, + pointer_default(unique), + uuid(e57aa735-dcdb-4c72-9c61-0591f58889ee) +] +interface IDCompositionSkewTransform : IDCompositionTransform +{ + HRESULT SetAngleX([in] float angle); + HRESULT SetAngleXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetAngleY([in] float angle); + HRESULT SetAngleYAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterX([in] float center); + HRESULT SetCenterXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetCenterY([in] float center); + HRESULT SetCenterYAnimation([in] IDCompositionAnimation *animation); +}; + +[ + local, + object, + pointer_default(unique), + uuid(16cdff07-c503-419c-83f2-0965c7af1fa6) +] +interface IDCompositionMatrixTransform : IDCompositionTransform +{ + /* C++ method: HRESULT SetMatrix(const D2D_MATRIX_3X2_F &matrix); Use pointer instead of reference */ + HRESULT SetMatrix([in] const D2D_MATRIX_3X2_F *matrix); + HRESULT SetMatrixElement([in] int row, [in] int column, [in] float value); + HRESULT SetMatrixElementAnimation([in] int row, [in] int column, [in] IDCompositionAnimation *animation); +}; + +[ + local, + object, + pointer_default(unique), + uuid(06791122-c6f0-417d-8323-269e987f5954) +] +interface IDCompositionTranslateTransform : IDCompositionTransform +{ + HRESULT SetOffsetX([in] float offset); + HRESULT SetOffsetXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetOffsetY([in] float offset); + HRESULT SetOffsetYAnimation([in] IDCompositionAnimation *animation); +}; + +[ + object, + uuid(4d93059d-097b-4651-9a60-f0f25116e2f3), + local, + pointer_default(unique) +] +interface IDCompositionVisual : IUnknown +{ + HRESULT SetOffsetX([in] float offset_x); + HRESULT SetOffsetXAnimation([in] IDCompositionAnimation *animation); + HRESULT SetOffsetY([in] float offset_y); + HRESULT SetOffsetYAnimation([in] IDCompositionAnimation *animation); + /* C++ method: HRESULT SetTransform(const D2D_MATRIX_3X2_F &matrix); Use pointer instead of reference */ + HRESULT SetTransform([in] const D2D_MATRIX_3X2_F *matrix); + HRESULT SetTransformObject([in] IDCompositionTransform *transform); + HRESULT SetTransformParent([in] IDCompositionVisual *visual); + HRESULT SetEffect([in] IDCompositionEffect *effect); + HRESULT SetBitmapInterpolationMode([in] enum DCOMPOSITION_BITMAP_INTERPOLATION_MODE interpolation_mode); + HRESULT SetBorderMode([in] enum DCOMPOSITION_BORDER_MODE border_mode); + /* C++ method: HRESULT SetClip(const D2D_RECT_F &rect); Use pointer instead of reference */ + HRESULT SetClip([in] const D2D_RECT_F *rect); + HRESULT SetClipObject([in] IDCompositionClip *clip); + HRESULT SetContent([in] IUnknown *content); + HRESULT AddVisual([in] IDCompositionVisual *visual, [in] BOOL insert_above, [in] IDCompositionVisual *reference_visual); + HRESULT RemoveVisual([in] IDCompositionVisual *visual); + HRESULT RemoveAllVisuals(); + HRESULT SetCompositeMode([in] enum DCOMPOSITION_COMPOSITE_MODE composite_mode); +} + +[ + object, + uuid(e8de1639-4331-4b26-bc5f-6a321d347a85), + local, + pointer_default(unique) +] +interface IDCompositionVisual2 : IDCompositionVisual +{ + HRESULT SetOpacityMode([in] enum DCOMPOSITION_OPACITY_MODE opacity_mode); + HRESULT SetBackFaceVisibility([in] enum DCOMPOSITION_BACKFACE_VISIBILITY visibility); +} + +[ + object, + uuid(eacdd04c-117e-4e17-88f4-d1b12b0e3d89), + local, + pointer_default(unique) +] +interface IDCompositionTarget : IUnknown +{ + HRESULT SetRoot([in] IDCompositionVisual *visual); +} + +[ + object, + uuid(c37ea93a-e7aa-450d-b16f-9746cb0407f3), + local, + pointer_default(unique) +] +interface IDCompositionDevice : IUnknown +{ + HRESULT Commit(); + HRESULT WaitForCommitCompletion(); + HRESULT GetFrameStatistics([out] DCOMPOSITION_FRAME_STATISTICS *statistics); + HRESULT CreateTargetForHwnd([in] HWND hwnd, [in] BOOL topmost, [out] IDCompositionTarget **target); + HRESULT CreateVisual([out] IDCompositionVisual **visual); + HRESULT CreateSurface([in] UINT width, [in] UINT height, [in] DXGI_FORMAT pixel_format, [in] DXGI_ALPHA_MODE alpha_mode, [out] IDCompositionSurface **surface); + HRESULT CreateVirtualSurface([in] UINT width, [in] UINT height, [in] DXGI_FORMAT pixel_format, [in] DXGI_ALPHA_MODE alpha_mode, [out] IDCompositionVirtualSurface **surface); + HRESULT CreateSurfaceFromHandle([in] HANDLE handle, [out] IUnknown **surface); + HRESULT CreateSurfaceFromHwnd([in] HWND hwnd, [out] IUnknown **surface); + HRESULT CreateTranslateTransform([out] IDCompositionTranslateTransform **transform); + HRESULT CreateScaleTransform([out] IDCompositionScaleTransform **transform); + HRESULT CreateRotateTransform([out] IDCompositionRotateTransform **transform); + HRESULT CreateSkewTransform([out] IDCompositionSkewTransform **transform); + HRESULT CreateMatrixTransform([out] IDCompositionMatrixTransform **transform); + HRESULT CreateTransformGroup([in, size_is(elements)] IDCompositionTransform **transforms, [in] UINT elements, [out] IDCompositionTransform **transform_group); + HRESULT CreateTranslateTransform3D([out] IDCompositionTranslateTransform3D **transform_3d); + HRESULT CreateScaleTransform3D([out] IDCompositionScaleTransform3D **transform_3d); + HRESULT CreateRotateTransform3D([out] IDCompositionRotateTransform3D **transform_3d); + HRESULT CreateMatrixTransform3D([out] IDCompositionMatrixTransform3D **transform_3d); + HRESULT CreateTransform3DGroup([in, size_is(elements)] IDCompositionTransform3D **transforms_3d, [in] UINT elements, [out] IDCompositionTransform3D **transform_3d_group); + HRESULT CreateEffectGroup([out] IDCompositionEffectGroup **effect_group); + HRESULT CreateRectangleClip([out] IDCompositionRectangleClip **clip); + HRESULT CreateAnimation([out] IDCompositionAnimation **animation); + HRESULT CheckDeviceState([out] BOOL *valid); +} + +[ + object, + uuid(75f6468d-1b8e-447c-9bc6-75fea80b5b25), + local, + pointer_default(unique) +] +interface IDCompositionDevice2 : IUnknown +{ + HRESULT Commit(); + HRESULT WaitForCommitCompletion(); + HRESULT GetFrameStatistics([out] DCOMPOSITION_FRAME_STATISTICS *statistics); + HRESULT CreateVisual([out] IDCompositionVisual2 **visual); + HRESULT CreateSurfaceFactory([in] IUnknown *rendering_device, [out] IDCompositionSurfaceFactory **surface_factory); + HRESULT CreateSurface([in] UINT width, [in] UINT height, [in] DXGI_FORMAT pixel_format, [in] DXGI_ALPHA_MODE alpha_mode, [out] IDCompositionSurface **surface); + HRESULT CreateVirtualSurface([in] UINT width, [in] UINT height, [in] DXGI_FORMAT pixel_format, [in] DXGI_ALPHA_MODE alpha_mode, [out] IDCompositionVirtualSurface **surface); + HRESULT CreateTranslateTransform([out] IDCompositionTranslateTransform **transform); + HRESULT CreateScaleTransform([out] IDCompositionScaleTransform **transform); + HRESULT CreateRotateTransform([out] IDCompositionRotateTransform **transform); + HRESULT CreateSkewTransform([out] IDCompositionSkewTransform **transform); + HRESULT CreateMatrixTransform([out] IDCompositionMatrixTransform **transform); + HRESULT CreateTransformGroup([in, size_is(elements)] IDCompositionTransform **transforms, [in] UINT elements, [out] IDCompositionTransform **transform_group); + HRESULT CreateTranslateTransform3D([out] IDCompositionTranslateTransform3D **transform_3d); + HRESULT CreateScaleTransform3D([out] IDCompositionScaleTransform3D **transform_3d); + HRESULT CreateRotateTransform3D([out] IDCompositionRotateTransform3D **transform_3d); + HRESULT CreateMatrixTransform3D([out] IDCompositionMatrixTransform3D **transform_3d); + HRESULT CreateTransform3DGroup([in, size_is(elements)] IDCompositionTransform3D **transforms_3d, [in] UINT elements, [out] IDCompositionTransform3D **transform_3d_group); + HRESULT CreateEffectGroup([out] IDCompositionEffectGroup **effect_group); + HRESULT CreateRectangleClip([out] IDCompositionRectangleClip **clip); + HRESULT CreateAnimation([out] IDCompositionAnimation **animation); +} + +[ + object, + uuid(5f4633fe-1e08-4cb8-8c75-ce24333f5602), + local, + pointer_default(unique) +] +interface IDCompositionDesktopDevice : IDCompositionDevice2 +{ + HRESULT CreateTargetForHwnd([in] HWND hwnd, [in] BOOL topmost, [out] IDCompositionTarget **target); + HRESULT CreateSurfaceFromHandle([in] HANDLE handle, [out] IUnknown **surface); + HRESULT CreateSurfaceFromHwnd([in] HWND hwnd, [out] IUnknown **surface); +} + +cpp_quote("STDAPI DCompositionCreateDevice(IDXGIDevice *dxgi_device, REFIID iid, void **device);") +cpp_quote("STDAPI DCompositionCreateDevice2(IUnknown *rendering_device, REFIID iid, void **device);")