Updated directmanipulation-new-dll patchset

This commit is contained in:
Alistair Leslie-Hughes 2019-07-19 09:13:30 +10:00
parent a0735f083d
commit a12c030bd9
7 changed files with 304 additions and 10 deletions

View File

@ -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 <leslie_alistair@hotmail.com>
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 <leslie_alistair@hotmail.com>
---

View File

@ -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 <leslie_alistair@hotmail.com>
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 <leslie_alistair@hotmail.com>
---

View File

@ -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 <leslie_alistair@hotmail.com>
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 <leslie_alistair@hotmail.com>
---

View File

@ -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 <leslie_alistair@hotmail.com>
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;

View File

@ -0,0 +1,108 @@
From 6ee51b2ae31c53d05fef808c0aa1cfd47534e6af Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
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

View File

@ -0,0 +1,182 @@
From 4e92430f5d923dba1aa6174957b3d589b38d5fd7 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
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

View File

@ -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