diff --git a/patches/directmanipulation-new-dll/0016-directmanipulation-Support-IDirectManipulationConten.patch b/patches/directmanipulation-new-dll/0016-directmanipulation-Support-IDirectManipulationConten.patch new file mode 100644 index 00000000..86a5c7c3 --- /dev/null +++ b/patches/directmanipulation-new-dll/0016-directmanipulation-Support-IDirectManipulationConten.patch @@ -0,0 +1,166 @@ +From b86977f6822d286b595c756c814c2cc986968050 Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Sun, 22 Dec 2019 19:35:25 +1100 +Subject: [PATCH 1/2] directmanipulation: Support IDirectManipulationContent in + IDirectManipulationPrimaryContent interface + +Based of patch by Gijs Vermeulen. +--- + dlls/directmanipulation/directmanipulation.c | 110 ++++++++++++++++++- + 1 file changed, 109 insertions(+), 1 deletion(-) + +diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c +index ca60e76db6e..05601abbd45 100644 +--- a/dlls/directmanipulation/directmanipulation.c ++++ b/dlls/directmanipulation/directmanipulation.c +@@ -177,10 +177,10 @@ static HRESULT create_update_manager(IDirectManipulationUpdateManager **obj) + return S_OK; + } + +- + struct primarycontext + { + IDirectManipulationPrimaryContent IDirectManipulationPrimaryContent_iface; ++ IDirectManipulationContent IDirectManipulationContent_iface; + LONG ref; + }; + +@@ -189,6 +189,11 @@ static inline struct primarycontext *impl_from_IDirectManipulationPrimaryContent + return CONTAINING_RECORD(iface, struct primarycontext, IDirectManipulationPrimaryContent_iface); + } + ++static inline struct primarycontext *impl_from_IDirectManipulationContent(IDirectManipulationContent *iface) ++{ ++ return CONTAINING_RECORD(iface, struct primarycontext, IDirectManipulationContent_iface); ++} ++ + static HRESULT WINAPI primary_QueryInterface(IDirectManipulationPrimaryContent *iface, REFIID riid, void **ppv) + { + struct primarycontext *This = impl_from_IDirectManipulationPrimaryContent(iface); +@@ -201,6 +206,12 @@ static HRESULT WINAPI primary_QueryInterface(IDirectManipulationPrimaryContent * + *ppv = &This->IDirectManipulationPrimaryContent_iface; + return S_OK; + } ++ else if(IsEqualGUID(riid, &IID_IDirectManipulationContent)) ++ { ++ IUnknown_AddRef(iface); ++ *ppv = &This->IDirectManipulationContent_iface; ++ return S_OK; ++ } + + FIXME("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppv); + return E_NOINTERFACE; +@@ -313,6 +324,102 @@ static const IDirectManipulationPrimaryContentVtbl primaryVtbl = + primary_GetCenterPoint + }; + ++ ++static HRESULT WINAPI content_QueryInterface(IDirectManipulationContent *iface, REFIID riid, void **ppv) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ TRACE("(%p)->(%s,%p)\n", This, debugstr_guid(riid), ppv); ++ ++ return IDirectManipulationPrimaryContent_QueryInterface(&This->IDirectManipulationPrimaryContent_iface, ++ riid, ppv); ++} ++ ++static ULONG WINAPI content_AddRef(IDirectManipulationContent *iface) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ return IDirectManipulationPrimaryContent_AddRef(&This->IDirectManipulationPrimaryContent_iface); ++} ++ ++static ULONG WINAPI content_Release(IDirectManipulationContent *iface) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ return IDirectManipulationPrimaryContent_Release(&This->IDirectManipulationPrimaryContent_iface); ++} ++ ++static HRESULT WINAPI content_GetContentRect(IDirectManipulationContent *iface, RECT *size) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p\n", This, size); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_SetContentRect(IDirectManipulationContent *iface, const RECT *size) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p\n", This, size); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_GetViewport(IDirectManipulationContent *iface, REFIID riid, void **object) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p, %p\n", This, debugstr_guid(riid), object); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_GetTag(IDirectManipulationContent *iface, REFIID riid, void **object, UINT32 *id) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p, %p, %p\n", This, debugstr_guid(riid), object, id); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_SetTag(IDirectManipulationContent *iface, IUnknown *object, UINT32 id) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p, %d\n", This, object, id); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_GetOutputTransform(IDirectManipulationContent *iface, ++ float *matrix, DWORD count) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p, %d\n", This, matrix, count); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_GetContentTransform(IDirectManipulationContent *iface, ++ float *matrix, DWORD count) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p, %d\n", This, matrix, count); ++ return E_NOTIMPL; ++} ++ ++static HRESULT WINAPI content_SyncContentTransform(IDirectManipulationContent *iface, ++ const float *matrix, DWORD count) ++{ ++ struct primarycontext *This = impl_from_IDirectManipulationContent(iface); ++ FIXME("%p, %p, %d\n", This, matrix, count); ++ return E_NOTIMPL; ++} ++ ++static const IDirectManipulationContentVtbl contentVtbl = ++{ ++ content_QueryInterface, ++ content_AddRef, ++ content_Release, ++ content_GetContentRect, ++ content_SetContentRect, ++ content_GetViewport, ++ content_GetTag, ++ content_SetTag, ++ content_GetOutputTransform, ++ content_GetContentTransform, ++ content_SyncContentTransform ++}; ++ + struct directviewport + { + IDirectManipulationViewport2 IDirectManipulationViewport2_iface; +@@ -473,6 +580,7 @@ static HRESULT WINAPI viewport_GetPrimaryContent(IDirectManipulationViewport2 *i + return E_OUTOFMEMORY; + + primary->IDirectManipulationPrimaryContent_iface.lpVtbl = &primaryVtbl; ++ primary->IDirectManipulationContent_iface.lpVtbl = &contentVtbl; + primary->ref = 1; + + *object = &primary->IDirectManipulationPrimaryContent_iface; +-- +2.24.0 + diff --git a/patches/directmanipulation-new-dll/0017-directmanipulation-Fake-success-in-some-functions.patch b/patches/directmanipulation-new-dll/0017-directmanipulation-Fake-success-in-some-functions.patch new file mode 100644 index 00000000..95487902 --- /dev/null +++ b/patches/directmanipulation-new-dll/0017-directmanipulation-Fake-success-in-some-functions.patch @@ -0,0 +1,34 @@ +From 8e284d9f96e2f3c623d6f520c530aaadad943fcd Mon Sep 17 00:00:00 2001 +From: Alistair Leslie-Hughes +Date: Sun, 22 Dec 2019 20:54:43 +1100 +Subject: [PATCH 2/2] directmanipulation: Fake success in some functions + +--- + dlls/directmanipulation/directmanipulation.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c +index 05601abbd45..b42c1f84387 100644 +--- a/dlls/directmanipulation/directmanipulation.c ++++ b/dlls/directmanipulation/directmanipulation.c +@@ -357,7 +357,7 @@ static HRESULT WINAPI content_SetContentRect(IDirectManipulationContent *iface, + { + struct primarycontext *This = impl_from_IDirectManipulationContent(iface); + FIXME("%p, %p\n", This, size); +- return E_NOTIMPL; ++ return S_OK; + } + + static HRESULT WINAPI content_GetViewport(IDirectManipulationContent *iface, REFIID riid, void **object) +@@ -540,7 +540,7 @@ static HRESULT WINAPI viewport_SetViewportRect(IDirectManipulationViewport2 *ifa + { + struct directviewport *This = impl_from_IDirectManipulationViewport2(iface); + FIXME("%p, %p\n", This, viewport); +- return E_NOTIMPL; ++ return S_OK; + } + + static HRESULT WINAPI viewport_ZoomToRect(IDirectManipulationViewport2 *iface, const float left, +-- +2.24.0 + diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 52de3428..c61211c5 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -3142,6 +3142,8 @@ if test "$enable_directmanipulation_new_dll" -eq 1; then patch_apply directmanipulation-new-dll/0013-directmanipulation-Fake-success-from-IDirectManipula.patch patch_apply directmanipulation-new-dll/0014-include-Add-IDirectManipulationPrimaryContent-interf.patch patch_apply directmanipulation-new-dll/0015-directmanipulation-Implement-IDirectManipulationView.patch + patch_apply directmanipulation-new-dll/0016-directmanipulation-Support-IDirectManipulationConten.patch + patch_apply directmanipulation-new-dll/0017-directmanipulation-Fake-success-in-some-functions.patch ( printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add directmanipulation.idl.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: New dll.", 1 },'; @@ -3158,6 +3160,8 @@ if test "$enable_directmanipulation_new_dll" -eq 1; then printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Fake success from IDirectManipulationViewport2 ActivateConfiguration.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "include: Add IDirectManipulationPrimaryContent interface.", 1 },'; printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Implement IDirectManipulationViewport2 GetPrimaryContent.", 1 },'; + printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Support IDirectManipulationContent in IDirectManipulationPrimaryContent interface.", 1 },'; + printf '%s\n' '+ { "Alistair Leslie-Hughes", "directmanipulation: Fake success in some functions.", 1 },'; ) >> "$patchlist" fi