diff --git a/patches/directmanipulation-new-dll/0001-include-Add-directmanipulation.idl.patch b/patches/directmanipulation-new-dll/0001-include-Add-directmanipulation.idl.patch index 38b3aae1..54e238cf 100644 --- a/patches/directmanipulation-new-dll/0001-include-Add-directmanipulation.idl.patch +++ b/patches/directmanipulation-new-dll/0001-include-Add-directmanipulation.idl.patch @@ -1,7 +1,7 @@ -From 61033f8cde29e03787076b06c638ae5e7af7d02a Mon Sep 17 00:00:00 2001 +From c61d77e4a22c35890ac4cc789a879d6a70a942e2 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 17 Jul 2019 08:17:16 +1000 -Subject: [PATCH 1/4] include: Add directmanipulation.idl +Subject: [PATCH 1/6] include: Add directmanipulation.idl Signed-off-by: Alistair Leslie-Hughes --- diff --git a/patches/directmanipulation-new-dll/0002-directmanipulation-New-dll.patch b/patches/directmanipulation-new-dll/0002-directmanipulation-New-dll.patch index 84b6b3ff..0ca8b28b 100644 --- a/patches/directmanipulation-new-dll/0002-directmanipulation-New-dll.patch +++ b/patches/directmanipulation-new-dll/0002-directmanipulation-New-dll.patch @@ -1,7 +1,7 @@ -From 85a1801f45e59803456511a1ff3b4554ad79a23b Mon Sep 17 00:00:00 2001 +From 3c3fd497486e624cbc8ab3a98e2fd02cdf6dc2ba Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 17 Jul 2019 09:26:16 +1000 -Subject: [PATCH 2/4] directmanipulation: New dll +Subject: [PATCH 2/6] directmanipulation: New dll Signed-off-by: Alistair Leslie-Hughes --- diff --git a/patches/directmanipulation-new-dll/0003-uuid-Add-directmanipulation.h.patch b/patches/directmanipulation-new-dll/0003-uuid-Add-directmanipulation.h.patch index 0e600658..9e7fc932 100644 --- a/patches/directmanipulation-new-dll/0003-uuid-Add-directmanipulation.h.patch +++ b/patches/directmanipulation-new-dll/0003-uuid-Add-directmanipulation.h.patch @@ -1,7 +1,7 @@ -From 781e0d3e9a3c1818d59d09125e5f7bf503ea6015 Mon Sep 17 00:00:00 2001 +From 528186d14bef47f9afdbee2e323445f14191c858 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Thu, 18 Jul 2019 09:46:30 +1000 -Subject: [PATCH 3/4] uuid: Add directmanipulation.h +Subject: [PATCH 3/6] uuid: Add directmanipulation.h Signed-off-by: Alistair Leslie-Hughes --- diff --git a/patches/directmanipulation-new-dll/0004-directmanipulation-Create-DirectManipulationManager-.patch b/patches/directmanipulation-new-dll/0004-directmanipulation-Create-DirectManipulationManager-.patch index 5462c7f9..256edded 100644 --- a/patches/directmanipulation-new-dll/0004-directmanipulation-Create-DirectManipulationManager-.patch +++ b/patches/directmanipulation-new-dll/0004-directmanipulation-Create-DirectManipulationManager-.patch @@ -1,7 +1,7 @@ -From 12f3cae8effd5394459dd00c31476cfae4da044d Mon Sep 17 00:00:00 2001 +From d7ab064f1040d0031a0f277f16d2ef7bfe5b1944 Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Wed, 17 Jul 2019 16:33:21 +1000 -Subject: [PATCH 4/4] directmanipulation: Create +Subject: [PATCH 4/6] directmanipulation: Create DirectManipulationManager/DirectManipulationSharedManager objects Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44865 @@ -22,7 +22,7 @@ index 331c2a8420..d67a21eb77 100644 EXTRADLLFLAGS = -mno-cygwin diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c -index 136b2976a4..04bec62af9 100644 +index 136b2976a4..81efa3688b 100644 --- a/dlls/directmanipulation/directmanipulation.c +++ b/dlls/directmanipulation/directmanipulation.c @@ -15,6 +15,7 @@ @@ -173,7 +173,7 @@ index 136b2976a4..04bec62af9 100644 + direct_manip_CreateBehavior +}; + -+HRESULT WINAPI DirectManipulation_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) ++static HRESULT WINAPI DirectManipulation_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) +{ + struct directmanipulation *object; + HRESULT ret; diff --git a/patches/directmanipulation-new-dll/0005-include-Add-DCompManipulationCompositor-coclass-and-.patch b/patches/directmanipulation-new-dll/0005-include-Add-DCompManipulationCompositor-coclass-and-.patch new file mode 100644 index 00000000..01304da8 --- /dev/null +++ b/patches/directmanipulation-new-dll/0005-include-Add-DCompManipulationCompositor-coclass-and-.patch @@ -0,0 +1,108 @@ +From 6ee51b2ae31c53d05fef808c0aa1cfd47534e6af Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Fri, 19 Jul 2019 08:46:01 +1000 +Subject: [PATCH 5/6] include: Add DCompManipulationCompositor coclass and + supporting interfaces. + +--- + include/directmanipulation.idl | 79 ++++++++++++++++++++++++++++++++++ + 1 file changed, 79 insertions(+) + +diff --git a/include/directmanipulation.idl b/include/directmanipulation.idl +index 9dc2366cc3..c2fd831c6c 100644 +--- a/include/directmanipulation.idl ++++ b/include/directmanipulation.idl +@@ -66,6 +66,76 @@ interface IDirectManipulationManager : IUnknown + [in] REFIID riid, [out, iid_is(riid), retval] void **obj); + } + ++[ ++ local, ++ object, ++ uuid(b89962cb-3d89-442b-bb58-5098fa0f9f16), ++ pointer_default(unique) ++] ++interface IDirectManipulationContent : IUnknown ++{ ++ HRESULT GetContentRect([out] RECT *size); ++ ++ HRESULT SetContentRect([in] const RECT *size); ++ ++ HRESULT GetViewport([in] REFIID riid, [out, iid_is(riid)] void **object); ++ ++ HRESULT GetTag([in] REFIID riid, [out, iid_is(riid)] void **object, [out] UINT32 *id); ++ ++ HRESULT SetTag([in, unique] IUnknown *object, [in] UINT32 id); ++ ++ HRESULT GetOutputTransform([out] float *matrix, [in] DWORD count); ++ ++ HRESULT GetContentTransform([out] float *matrix, [in] DWORD count); ++ ++ HRESULT SyncContentTransform([in] const float *matrix, [in] DWORD count); ++} ++ ++[ ++ local, ++ object, ++ uuid(790b6337-64f8-4ff5-a269-b32bc2af27a7), ++ pointer_default(unique) ++] ++interface IDirectManipulationUpdateHandler : IUnknown ++{ ++ HRESULT Update(); ++} ++ ++[ ++ local, ++ object, ++ uuid(b0ae62fd-be34-46e7-9caa-d361facbb9cc), ++ pointer_default(unique) ++] ++interface IDirectManipulationUpdateManager : IUnknown ++{ ++ HRESULT RegisterWaitHandleCallback([in] HANDLE handle, [in] IDirectManipulationUpdateHandler *handler, ++ [out] DWORD *cookie); ++ ++ HRESULT UnregisterWaitHandleCallback([in] DWORD cookie); ++ ++ HRESULT Update([in] IDirectManipulationFrameInfoProvider *provider); ++} ++ ++[ ++ local, ++ object, ++ uuid(537a0825-0387-4efa-b62f-71eb1f085a7e), ++ pointer_default(unique) ++] ++interface IDirectManipulationCompositor : IUnknown ++{ ++ HRESULT AddContent([in] IDirectManipulationContent *content, [in] IUnknown *device, ++ [in] IUnknown *parent, [in] IUnknown *child); ++ ++ HRESULT RemoveContent([in] IDirectManipulationContent *content); ++ ++ HRESULT SetUpdateManager([in] IDirectManipulationUpdateManager *manager); ++ ++ HRESULT Flush(); ++} ++ + [ + local, + object, +@@ -100,4 +170,13 @@ library DirectManipulation + interface IDirectManipulationManager2; + [default] interface IDirectManipulationManager; + } ++ ++ [ ++ uuid(79dea627-a08a-43ac-8ef5-6900b9299126) ++ ] ++ coclass DCompManipulationCompositor ++ { ++ [default] interface IDirectManipulationCompositor; ++ interface IDirectManipulationFrameInfoProvider; ++ } + } +-- +2.17.1 + diff --git a/patches/directmanipulation-new-dll/0006-directmanipulation-Support-DCompManipulationComposit.patch b/patches/directmanipulation-new-dll/0006-directmanipulation-Support-DCompManipulationComposit.patch new file mode 100644 index 00000000..192897d4 --- /dev/null +++ b/patches/directmanipulation-new-dll/0006-directmanipulation-Support-DCompManipulationComposit.patch @@ -0,0 +1,182 @@ +From 4e92430f5d923dba1aa6174957b3d589b38d5fd7 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Fri, 19 Jul 2019 08:49:51 +1000 +Subject: [PATCH 6/6] directmanipulation: Support DCompManipulationCompositor + interface + +--- + dlls/directmanipulation/directmanip.idl | 10 ++ + dlls/directmanipulation/directmanipulation.c | 124 +++++++++++++++++++ + 2 files changed, 134 insertions(+) + +diff --git a/dlls/directmanipulation/directmanip.idl b/dlls/directmanipulation/directmanip.idl +index ff00668ba5..9e1efa48ed 100644 +--- a/dlls/directmanipulation/directmanip.idl ++++ b/dlls/directmanipulation/directmanip.idl +@@ -36,3 +36,13 @@ coclass DirectManipulationSharedManager + interface IDirectManipulationManager2; + [default] interface IDirectManipulationManager; + } ++ ++[ ++ uuid(79dea627-a08a-43ac-8ef5-6900b9299126), ++ threading(both) ++] ++coclass DCompManipulationCompositor ++{ ++ [default] interface IDirectManipulationCompositor; ++ interface IDirectManipulationFrameInfoProvider; ++} +diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c +index 81efa3688b..0fe5c4be34 100644 +--- a/dlls/directmanipulation/directmanipulation.c ++++ b/dlls/directmanipulation/directmanipulation.c +@@ -210,6 +210,117 @@ static HRESULT WINAPI DirectManipulation_CreateInstance(IClassFactory *iface, IU + return ret; + } + ++struct directcompositor ++{ ++ IDirectManipulationCompositor IDirectManipulationCompositor_iface; ++ LONG ref; ++}; ++ ++static inline struct directcompositor *impl_from_IDirectManipulationCompositor(IDirectManipulationCompositor *iface) ++{ ++ return CONTAINING_RECORD(iface, struct directcompositor, IDirectManipulationCompositor_iface); ++} ++ ++static HRESULT WINAPI compositor_QueryInterface(IDirectManipulationCompositor *iface, REFIID riid, void **ppv) ++{ ++ if (IsEqualGUID(riid, &IID_IUnknown) || ++ IsEqualGUID(riid, &IID_IDirectManipulationCompositor)) ++ { ++ IUnknown_AddRef(iface); ++ *ppv = iface; ++ return S_OK; ++ } ++ ++ WARN("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv); ++ return E_NOINTERFACE; ++} ++ ++static ULONG WINAPI compositor_AddRef(IDirectManipulationCompositor *iface) ++{ ++ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface); ++ ULONG ref = InterlockedIncrement(&This->ref); ++ ++ TRACE("(%p) ref=%u\n", This, ref); ++ ++ return ref; ++} ++ ++static ULONG WINAPI compositor_Release(IDirectManipulationCompositor *iface) ++{ ++ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface); ++ ULONG ref = InterlockedDecrement(&This->ref); ++ ++ TRACE("(%p) ref=%u\n", This, ref); ++ ++ if (!ref) ++ { ++ heap_free(This); ++ } ++ return ref; ++} ++ ++static HRESULT WINAPI compositor_AddContent(IDirectManipulationCompositor *iface, IDirectManipulationContent *content, ++ IUnknown *device, IUnknown *parent, IUnknown *child) ++{ ++ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface); ++ FIXME("%p, %p, %p, %p, %p\n", This, content, device, parent, child); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI compositor_RemoveContent(IDirectManipulationCompositor *iface, IDirectManipulationContent *content) ++{ ++ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface); ++ FIXME("%p, %p\n", This, content); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI compositor_SetUpdateManager(IDirectManipulationCompositor *iface, IDirectManipulationUpdateManager *manager) ++{ ++ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface); ++ FIXME("%p, %p\n", This, manager); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI compositor_Flush(IDirectManipulationCompositor *iface) ++{ ++ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface); ++ FIXME("%p\n", This); ++ return E_NOTIMPL; ++} ++ ++struct IDirectManipulationCompositorVtbl compositorVtbl = ++{ ++ compositor_QueryInterface, ++ compositor_AddRef, ++ compositor_Release, ++ compositor_AddContent, ++ compositor_RemoveContent, ++ compositor_SetUpdateManager, ++ compositor_Flush ++}; ++ ++static HRESULT WINAPI DirectCompositor_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv) ++{ ++ struct directcompositor *object; ++ HRESULT ret; ++ ++ TRACE("(%p, %s, %p)\n", outer, debugstr_guid(riid), ppv); ++ ++ *ppv = NULL; ++ ++ object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); ++ if (!object) ++ return E_OUTOFMEMORY; ++ ++ object->IDirectManipulationCompositor_iface.lpVtbl = &compositorVtbl; ++ object->ref = 1; ++ ++ ret = compositor_QueryInterface(&object->IDirectManipulationCompositor_iface, riid, ppv); ++ compositor_Release(&object->IDirectManipulationCompositor_iface); ++ ++ return ret; ++} ++ + static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) + { + *ppv = NULL; +@@ -253,7 +364,16 @@ static const IClassFactoryVtbl DirectFactoryVtbl = { + ClassFactory_LockServer + }; + ++static const IClassFactoryVtbl DirectCompositorVtbl = { ++ ClassFactory_QueryInterface, ++ ClassFactory_AddRef, ++ ClassFactory_Release, ++ DirectCompositor_CreateInstance, ++ ClassFactory_LockServer ++}; ++ + static IClassFactory direct_factory = { &DirectFactoryVtbl }; ++static IClassFactory compositor_factory = { &DirectCompositorVtbl }; + + HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) + { +@@ -262,6 +382,10 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv) + TRACE("(CLSID_DirectManipulationManager %s %p)\n", debugstr_guid(riid), ppv); + return IClassFactory_QueryInterface(&direct_factory, riid, ppv); + } ++ else if(IsEqualGUID(&CLSID_DCompManipulationCompositor, rclsid)) { ++ TRACE("(CLSID_DCompManipulationCompositor %s %p)\n", debugstr_guid(riid), ppv); ++ return IClassFactory_QueryInterface(&compositor_factory, riid, ppv); ++ } + + FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv); + return CLASS_E_CLASSNOTAVAILABLE; +-- +2.17.1 + diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 9c5bc0b0..4a875085 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -3270,11 +3270,15 @@ if test "$enable_directmanipulation_new_dll" -eq 1; then patch_apply directmanipulation-new-dll/0002-directmanipulation-New-dll.patch patch_apply directmanipulation-new-dll/0003-uuid-Add-directmanipulation.h.patch patch_apply directmanipulation-new-dll/0004-directmanipulation-Create-DirectManipulationManager-.patch + patch_apply directmanipulation-new-dll/0005-include-Add-DCompManipulationCompositor-coclass-and-.patch + patch_apply directmanipulation-new-dll/0006-directmanipulation-Support-DCompManipulationComposit.patch ( printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add directmanipulation.idl.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: New dll.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "uuid: Add directmanipulation.h.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Create DirectManipulationManager/DirectManipulationSharedManager objects.", 1 },'; + printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add DCompManipulationCompositor coclass and supporting interfaces.", 1 },'; + printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Support DCompManipulationCompositor interface.", 1 },'; ) >> "$patchlist" fi