You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
44 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
31c73c6b53 | ||
|
c205df71c7 | ||
|
010c308abd | ||
|
924665da6f | ||
|
523d4ac996 | ||
|
67035d62f7 | ||
|
35a5f7db93 | ||
|
ca09e8918c | ||
|
49b441e0df | ||
|
f901156486 | ||
|
c7780d90cb | ||
|
73f58bac41 | ||
|
ad822b6405 | ||
|
9917fb4559 | ||
|
3f06c18b19 | ||
|
2474aff2c1 | ||
|
c9b8050f9d | ||
|
2394b08005 | ||
|
276ed085b7 | ||
|
b5010c55e8 | ||
|
391055dbe1 | ||
|
7ebc640edb | ||
|
4413770af1 | ||
|
aad0b50e62 | ||
|
9fd7972c2b | ||
|
a67dca35a1 | ||
|
5d7a86d054 | ||
|
a12c030bd9 | ||
|
a0735f083d | ||
|
460094e600 | ||
|
c95aae1049 | ||
|
394c51bd20 | ||
|
0bdc57245a | ||
|
9092f3922a | ||
|
e298cdfaf9 | ||
|
b95b9109b8 | ||
|
8d19b3fc4b | ||
|
aa2ec8b32c | ||
|
944b464511 | ||
|
1b15ab1bdc | ||
|
6e530333e6 | ||
|
5ed9211eab | ||
|
e0bf5ac738 | ||
|
accf189516 |
2
patches/Compiler_Warnings/definition
Normal file
2
patches/Compiler_Warnings/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixes: Fixes compile warnings.
|
||||
Depends: mailing-list-patches
|
@@ -1,31 +0,0 @@
|
||||
From be28c746d013c16fa6c2e50f5f9debc45d39d81b Mon Sep 17 00:00:00 2001
|
||||
From: Qian Hong <qhong@codeweavers.com>
|
||||
Date: Tue, 7 Apr 2015 13:18:31 +0800
|
||||
Subject: advapi32: Initialize buffer length to zero in LsaLookupSids to
|
||||
prevent crash. (try 2)
|
||||
|
||||
Superseded 110588-110594
|
||||
|
||||
Try 2:
|
||||
- Use RtlInitUnicodeStringEx to simplify code when possible. Same for
|
||||
other patches in this series. (Thanks Nikolay)
|
||||
---
|
||||
dlls/advapi32/lsa.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/advapi32/lsa.c b/dlls/advapi32/lsa.c
|
||||
index 2a8b791..69c29c5 100644
|
||||
--- a/dlls/advapi32/lsa.c
|
||||
+++ b/dlls/advapi32/lsa.c
|
||||
@@ -502,7 +502,7 @@ NTSTATUS WINAPI LsaLookupSids(
|
||||
{
|
||||
(*Names)[i].Use = SidTypeUnknown;
|
||||
(*Names)[i].DomainIndex = -1;
|
||||
- (*Names)[i].Name.Buffer = NULL;
|
||||
+ RtlInitUnicodeStringEx(&(*Names)[i].Name, NULL);
|
||||
|
||||
memset(&(*ReferencedDomains)->Domains[i], 0, sizeof(LSA_TRUST_INFORMATION));
|
||||
|
||||
--
|
||||
2.3.5
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 0616176a3276be4ae49dc86c7d96b11240afca78 Mon Sep 17 00:00:00 2001
|
||||
From 5bf0baa79c46ec44dfd5e1340e96ff9289bc37f8 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Sun, 6 Aug 2017 03:15:34 +0200
|
||||
Subject: [PATCH] programs/runas: Basic implementation for starting processes
|
||||
@@ -7,9 +7,9 @@ Subject: [PATCH] programs/runas: Basic implementation for starting processes
|
||||
---
|
||||
configure.ac | 1 +
|
||||
programs/runas/Makefile.in | 8 ++
|
||||
programs/runas/runas.c | 214 +++++++++++++++++++++++++++++++++++++++++++++
|
||||
programs/runas/runas.h | 26 ++++++
|
||||
programs/runas/runas.rc | 39 +++++++++
|
||||
programs/runas/runas.c | 214 +++++++++++++++++++++++++++++++++++++
|
||||
programs/runas/runas.h | 26 +++++
|
||||
programs/runas/runas.rc | 39 +++++++
|
||||
5 files changed, 288 insertions(+)
|
||||
create mode 100644 programs/runas/Makefile.in
|
||||
create mode 100644 programs/runas/runas.c
|
||||
@@ -17,10 +17,10 @@ Subject: [PATCH] programs/runas: Basic implementation for starting processes
|
||||
create mode 100644 programs/runas/runas.rc
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index b9ef668..404ab7a 100644
|
||||
index 499c4f37ca..6f12614af1 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3879,6 +3879,7 @@ WINE_CONFIG_MAKEFILE(programs/regedit/tests)
|
||||
@@ -3891,6 +3891,7 @@ WINE_CONFIG_MAKEFILE(programs/regedit/tests)
|
||||
WINE_CONFIG_MAKEFILE(programs/regsvcs)
|
||||
WINE_CONFIG_MAKEFILE(programs/regsvr32)
|
||||
WINE_CONFIG_MAKEFILE(programs/rpcss)
|
||||
@@ -30,12 +30,12 @@ index b9ef668..404ab7a 100644
|
||||
WINE_CONFIG_MAKEFILE(programs/sc)
|
||||
diff --git a/programs/runas/Makefile.in b/programs/runas/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000..be9434b
|
||||
index 0000000000..33aa00ab03
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/Makefile.in
|
||||
@@ -0,0 +1,8 @@
|
||||
+MODULE = runas.exe
|
||||
+APPMODE = -mconsole -municode
|
||||
+APPMODE = -mconsole -municode -mno-cygwin
|
||||
+IMPORTS = advapi32 user32
|
||||
+
|
||||
+C_SRCS = \
|
||||
@@ -44,7 +44,7 @@ index 0000000..be9434b
|
||||
+RC_SRCS = runas.rc
|
||||
diff --git a/programs/runas/runas.c b/programs/runas/runas.c
|
||||
new file mode 100644
|
||||
index 0000000..8e96aff
|
||||
index 0000000000..412755afa0
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.c
|
||||
@@ -0,0 +1,214 @@
|
||||
@@ -69,7 +69,7 @@ index 0000000..8e96aff
|
||||
+ */
|
||||
+
|
||||
+#include <windows.h>
|
||||
+#include <wine/unicode.h>
|
||||
+#include <wchar.h>
|
||||
+#include <wine/debug.h>
|
||||
+
|
||||
+#include "runas.h"
|
||||
@@ -153,10 +153,10 @@ index 0000000..8e96aff
|
||||
+
|
||||
+static WCHAR *starts_with(WCHAR *str, const WCHAR *start)
|
||||
+{
|
||||
+ DWORD start_len = strlenW(start);
|
||||
+ if (strlenW(str) < start_len)
|
||||
+ DWORD start_len = lstrlenW(start);
|
||||
+ if (lstrlenW(str) < start_len)
|
||||
+ return NULL;
|
||||
+ if (strncmpW(str, start, start_len))
|
||||
+ if (wcsncmp(str, start, start_len))
|
||||
+ return NULL;
|
||||
+ return str + start_len;
|
||||
+}
|
||||
@@ -176,8 +176,8 @@ index 0000000..8e96aff
|
||||
+ WCHAR *arg;
|
||||
+
|
||||
+ if ((arg = starts_with(argv[i], trustlevelW)))
|
||||
+ cmd->trustlevel = strtoulW(arg, NULL, 0);
|
||||
+ else if (!strcmpW(argv[i], showtrustlevelsW))
|
||||
+ cmd->trustlevel = wcstoul(arg, NULL, 0);
|
||||
+ else if (!lstrcmpW(argv[i], showtrustlevelsW))
|
||||
+ show_trustlevels();
|
||||
+ else
|
||||
+ WINE_FIXME("Ignoring parameter %s\n", wine_dbgstr_w(argv[i]));
|
||||
@@ -264,7 +264,7 @@ index 0000000..8e96aff
|
||||
+}
|
||||
diff --git a/programs/runas/runas.h b/programs/runas/runas.h
|
||||
new file mode 100644
|
||||
index 0000000..40599a3
|
||||
index 0000000000..40599a3b33
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.h
|
||||
@@ -0,0 +1,26 @@
|
||||
@@ -296,7 +296,7 @@ index 0000000..40599a3
|
||||
+#define STRING_START_ERROR 104
|
||||
diff --git a/programs/runas/runas.rc b/programs/runas/runas.rc
|
||||
new file mode 100644
|
||||
index 0000000..f9297a4
|
||||
index 0000000000..f9297a4479
|
||||
--- /dev/null
|
||||
+++ b/programs/runas/runas.rc
|
||||
@@ -0,0 +1,39 @@
|
||||
@@ -340,5 +340,5 @@ index 0000000..f9297a4
|
||||
+ %2!u!: %3\n"
|
||||
+}
|
||||
--
|
||||
2.7.4
|
||||
2.23.0.rc1
|
||||
|
||||
|
@@ -0,0 +1,203 @@
|
||||
From 25b5e818272cf6fc52a8707c80b9ade3a5ca5df5 Mon Sep 17 00:00:00 2001
|
||||
From: Jason Edmeades <us@edmeades.me.uk>
|
||||
Date: Tue, 16 Jul 2019 13:49:18 +1000
|
||||
Subject: [PATCH 1/2] cmd: Support for launching programs based on file
|
||||
association
|
||||
|
||||
cmd already handles exe, cmd, bat etc but if you run a file with another extension,
|
||||
then use the associations set in the registry (for example via ftype / assoc) to
|
||||
launch a program. This enables you to run test.txt and notepad to pop up, or
|
||||
fred.msi for msiexec to be launched.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=18154
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=36646
|
||||
---
|
||||
programs/cmd/wcmdmain.c | 140 +++++++++++++++++++++++++++++-----------
|
||||
1 file changed, 104 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
|
||||
index 29e498a48d..2a9e4c75ee 100644
|
||||
--- a/programs/cmd/wcmdmain.c
|
||||
+++ b/programs/cmd/wcmdmain.c
|
||||
@@ -1142,8 +1142,10 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||
|
||||
/* 1. If extension supplied, see if that file exists */
|
||||
if (extensionsupplied) {
|
||||
- if (GetFileAttributesW(thisDir) != INVALID_FILE_ATTRIBUTES) {
|
||||
+ DWORD attribs = GetFileAttributesW(thisDir);
|
||||
+ if (attribs != INVALID_FILE_ATTRIBUTES && !(attribs&FILE_ATTRIBUTE_DIRECTORY)) {
|
||||
found = TRUE;
|
||||
+ WINE_TRACE("Found as file with extension as '%s'\n", wine_dbgstr_w(thisDir));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1174,6 +1176,7 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||
}
|
||||
|
||||
if (GetFileAttributesW(thisDir) != INVALID_FILE_ATTRIBUTES) {
|
||||
+ WINE_TRACE("Found via search and pathext as '%s'\n", wine_dbgstr_w(thisDir));
|
||||
found = TRUE;
|
||||
thisExt = NULL;
|
||||
}
|
||||
@@ -1191,58 +1194,123 @@ void WCMD_run_program (WCHAR *command, BOOL called)
|
||||
WCHAR *ext = wcsrchr( thisDir, '.' );
|
||||
static const WCHAR batExt[] = {'.','b','a','t','\0'};
|
||||
static const WCHAR cmdExt[] = {'.','c','m','d','\0'};
|
||||
+ static const WCHAR exeExt[] = {'.','e','x','e','\0'};
|
||||
+ static const WCHAR comExt[] = {'.','c','o','m','\0'};
|
||||
|
||||
WINE_TRACE("Found as %s\n", wine_dbgstr_w(thisDir));
|
||||
|
||||
/* Special case BAT and CMD */
|
||||
if (ext && (!wcsicmp(ext, batExt) || !wcsicmp(ext, cmdExt))) {
|
||||
BOOL oldinteractive = interactive;
|
||||
+ WINE_TRACE("Calling batch program\n");
|
||||
interactive = FALSE;
|
||||
WCMD_batch (thisDir, command, called, NULL, INVALID_HANDLE_VALUE);
|
||||
interactive = oldinteractive;
|
||||
+ WINE_TRACE("Back from call to batch program\n");
|
||||
return;
|
||||
- } else {
|
||||
+ }
|
||||
|
||||
- /* thisDir contains the file to be launched, but with what?
|
||||
- eg. a.exe will require a.exe to be launched, a.html may be iexplore */
|
||||
- hinst = FindExecutableW (thisDir, NULL, temp);
|
||||
- if ((INT_PTR)hinst < 32)
|
||||
- console = 0;
|
||||
- else
|
||||
- console = SHGetFileInfoW(temp, 0, &psfi, sizeof(psfi), SHGFI_EXETYPE);
|
||||
-
|
||||
- ZeroMemory (&st, sizeof(STARTUPINFOW));
|
||||
- st.cb = sizeof(STARTUPINFOW);
|
||||
- init_msvcrt_io_block(&st);
|
||||
-
|
||||
- /* Launch the process and if a CUI wait on it to complete
|
||||
- Note: Launching internal wine processes cannot specify a full path to exe */
|
||||
- status = CreateProcessW(thisDir,
|
||||
- command, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pe);
|
||||
- heap_free(st.lpReserved2);
|
||||
- if ((opt_c || opt_k) && !opt_s && !status
|
||||
- && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') {
|
||||
- /* strip first and last quote WCHARacters and try again */
|
||||
- WCMD_strip_quotes(command);
|
||||
- opt_s = TRUE;
|
||||
- WCMD_run_program(command, called);
|
||||
+ /* Calculate what program will be launched, and whether it is a
|
||||
+ console application or not. Note the program may be different
|
||||
+ from the parameter (eg running a .txt file will launch notepad.exe) */
|
||||
+ hinst = FindExecutableW (thisDir, NULL, temp);
|
||||
+ if ((INT_PTR)hinst < 32)
|
||||
+ console = 0; /* Assume not console app by default */
|
||||
+ else
|
||||
+ console = SHGetFileInfoW(temp, 0, &psfi, sizeof(psfi), SHGFI_EXETYPE);
|
||||
+
|
||||
+
|
||||
+ /* If it is not a .com or .exe, try to launch through ShellExecuteExW
|
||||
+ which takes into account the association for the extension. */
|
||||
+ if (ext && (wcsicmp(ext, exeExt) && wcsicmp(ext, comExt))) {
|
||||
+
|
||||
+ SHELLEXECUTEINFOW shexw;
|
||||
+ BOOL rc;
|
||||
+ WCHAR *rawarg;
|
||||
+
|
||||
+ WCMD_parameter(command, 1, &rawarg, FALSE, TRUE);
|
||||
+ WINE_TRACE("Launching via ShellExecuteEx\n");
|
||||
+ memset(&shexw, 0x00, sizeof(shexw));
|
||||
+ shexw.cbSize = sizeof(SHELLEXECUTEINFOW);
|
||||
+ shexw.fMask = SEE_MASK_NO_CONSOLE | /* Run in same console as currently using */
|
||||
+ SEE_MASK_NOCLOSEPROCESS; /* We need a process handle to possibly wait on */
|
||||
+ shexw.lpFile = thisDir;
|
||||
+ shexw.lpParameters = rawarg;
|
||||
+ shexw.nShow = SW_SHOWNORMAL;
|
||||
+
|
||||
+ /* Try to launch the binary or its associated program */
|
||||
+ rc = ShellExecuteExW(&shexw);
|
||||
+
|
||||
+ if (rc && (INT_PTR)shexw.hInstApp >= 32) {
|
||||
+
|
||||
+ WINE_TRACE("Successfully launched\n");
|
||||
+
|
||||
+ /* It worked... Always wait when non-interactive (cmd /c or in
|
||||
+ batch program), or for console applications */
|
||||
+ if (!interactive || (console && !HIWORD(console))) {
|
||||
+ WINE_TRACE("Waiting for process to end\n");
|
||||
+ WaitForSingleObject (shexw.hProcess, INFINITE);
|
||||
+ }
|
||||
+
|
||||
+ GetExitCodeProcess (shexw.hProcess, &errorlevel);
|
||||
+ if (errorlevel == STILL_ACTIVE) {
|
||||
+ WINE_TRACE("Process still running, but returning anyway\n");
|
||||
+ errorlevel = 0;
|
||||
+ } else {
|
||||
+ WINE_TRACE("Process ended, errorlevel %d\n", errorlevel);
|
||||
+ }
|
||||
+
|
||||
+ CloseHandle(pe.hProcess);
|
||||
return;
|
||||
+
|
||||
}
|
||||
+ }
|
||||
|
||||
- if (!status)
|
||||
- break;
|
||||
+ /* If its a .exe or .com or the shellexecute failed due to no association,
|
||||
+ CreateProcess directly */
|
||||
+ ZeroMemory (&st, sizeof(STARTUPINFOW));
|
||||
+ st.cb = sizeof(STARTUPINFOW);
|
||||
+ init_msvcrt_io_block(&st);
|
||||
+
|
||||
+ /* Launch the process and if a CUI wait on it to complete
|
||||
+ Note: Launching internal wine processes cannot specify a full path to exe */
|
||||
+ WINE_TRACE("Launching via CreateProcess\n");
|
||||
+ status = CreateProcessW(thisDir,
|
||||
+ command, NULL, NULL, TRUE, 0, NULL, NULL, &st, &pe);
|
||||
+ heap_free(st.lpReserved2);
|
||||
+ if ((opt_c || opt_k) && !opt_s && !status
|
||||
+ && GetLastError()==ERROR_FILE_NOT_FOUND && command[0]=='\"') {
|
||||
+ /* strip first and last quote WCHARacters and try again */
|
||||
+ WCMD_strip_quotes(command);
|
||||
+ opt_s = TRUE;
|
||||
+ WCMD_run_program(command, called);
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- /* Always wait when non-interactive (cmd /c or in batch program),
|
||||
- or for console applications */
|
||||
- if (!interactive || (console && !HIWORD(console)))
|
||||
- WaitForSingleObject (pe.hProcess, INFINITE);
|
||||
- GetExitCodeProcess (pe.hProcess, &errorlevel);
|
||||
- if (errorlevel == STILL_ACTIVE) errorlevel = 0;
|
||||
+ if (!status) {
|
||||
+ WINE_TRACE("Failed to launch via CreateProcess, rc %d (%d)\n",
|
||||
+ status, GetLastError());
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- CloseHandle(pe.hProcess);
|
||||
- CloseHandle(pe.hThread);
|
||||
- return;
|
||||
+ /* Always wait when non-interactive (cmd /c or in batch program),
|
||||
+ or for console applications */
|
||||
+ if (!interactive || (console && !HIWORD(console))) {
|
||||
+ WINE_TRACE("Waiting for process to end\n");
|
||||
+ WaitForSingleObject (pe.hProcess, INFINITE);
|
||||
}
|
||||
+
|
||||
+ GetExitCodeProcess (pe.hProcess, &errorlevel);
|
||||
+ if (errorlevel == STILL_ACTIVE) {
|
||||
+ WINE_TRACE("Process still running, but returning anyway\n");
|
||||
+ errorlevel = 0;
|
||||
+ } else {
|
||||
+ WINE_TRACE("Process ended, errorlevel %d\n", errorlevel);
|
||||
+ }
|
||||
+
|
||||
+ CloseHandle(pe.hProcess);
|
||||
+ CloseHandle(pe.hThread);
|
||||
+ return;
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -0,0 +1,79 @@
|
||||
From 7bb9825d921f91be01144110f6478a0c017cbd79 Mon Sep 17 00:00:00 2001
|
||||
From: Jason Edmeades <us@edmeades.me.uk>
|
||||
Date: Tue, 16 Jul 2019 13:51:58 +1000
|
||||
Subject: [PATCH 2/2] cmd: ftype failed to clear file associations
|
||||
|
||||
If a file association was set (e.g. ftype fred=xxx), ftype fred= needs to clear it,
|
||||
but previously it failed to do so.
|
||||
---
|
||||
programs/cmd/builtins.c | 6 +++---
|
||||
programs/cmd/tests/test_builtins.cmd | 9 +++++++++
|
||||
programs/cmd/tests/test_builtins.cmd.exp | 5 ++++-
|
||||
3 files changed, 16 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
|
||||
index 62ae19a494..e85e553c05 100644
|
||||
--- a/programs/cmd/builtins.c
|
||||
+++ b/programs/cmd/builtins.c
|
||||
@@ -4939,11 +4939,11 @@ void WCMD_assoc (const WCHAR *args, BOOL assoc) {
|
||||
/* If nothing after '=' then clear value - only valid for ASSOC */
|
||||
if (*newValue == 0x00) {
|
||||
|
||||
- if (assoc) rc = RegDeleteKeyW(key, args);
|
||||
- if (assoc && rc == ERROR_SUCCESS) {
|
||||
+ rc = RegDeleteTreeW(key, args);
|
||||
+ if (rc == ERROR_SUCCESS) {
|
||||
WINE_TRACE("HKCR Key '%s' deleted\n", wine_dbgstr_w(args));
|
||||
|
||||
- } else if (assoc && rc != ERROR_FILE_NOT_FOUND) {
|
||||
+ } else if (rc != ERROR_FILE_NOT_FOUND) {
|
||||
WCMD_print_error();
|
||||
errorlevel = 2;
|
||||
|
||||
diff --git a/programs/cmd/tests/test_builtins.cmd b/programs/cmd/tests/test_builtins.cmd
|
||||
index f4dfc9f26d..0ef049a4ab 100644
|
||||
--- a/programs/cmd/tests/test_builtins.cmd
|
||||
+++ b/programs/cmd/tests/test_builtins.cmd
|
||||
@@ -2440,6 +2440,12 @@ echo echo +++>> tmp.cmd
|
||||
echo ftype footype>> tmp.cmd
|
||||
cmd /c tmp.cmd
|
||||
|
||||
+echo --- testing association
|
||||
+ftype footype=cmd.exe /c "echo '%%1'"
|
||||
+echo dummy>test.foo
|
||||
+test.foo
|
||||
+del test.foo
|
||||
+
|
||||
echo --- resetting association
|
||||
assoc .foo=
|
||||
|
||||
@@ -2471,6 +2477,9 @@ echo .foo=footype
|
||||
echo footype=foo_opencmd
|
||||
echo +++
|
||||
echo footype=foo_opencmd
|
||||
+echo --- testing association
|
||||
+echo footype=cmd.exe /c "echo '%%1'"
|
||||
+echo Skipped as not enough permissions
|
||||
echo --- resetting association
|
||||
echo original value
|
||||
|
||||
diff --git a/programs/cmd/tests/test_builtins.cmd.exp b/programs/cmd/tests/test_builtins.cmd.exp
|
||||
index d78d91a6cf..e6ebe06714 100644
|
||||
--- a/programs/cmd/tests/test_builtins.cmd.exp
|
||||
+++ b/programs/cmd/tests/test_builtins.cmd.exp
|
||||
@@ -1444,8 +1444,11 @@ footype=foo_opencmd
|
||||
footype=foo_opencmd
|
||||
+++
|
||||
footype=foo_opencmd
|
||||
+--- testing association
|
||||
+footype=cmd.exe /c "echo '%1'"
|
||||
+'@drive@@path@foobar\test.foo'@or_broken@Skipped as not enough permissions
|
||||
--- resetting association
|
||||
-@todo_wine@original value@or_broken@buggyXP@or_broken@!WINE_FOO!
|
||||
+original value@or_broken@buggyXP@or_broken@!WINE_FOO!
|
||||
------------ Testing CALL ------------
|
||||
--- external script
|
||||
foo@space@
|
||||
--
|
||||
2.17.1
|
||||
|
2
patches/cmd-launch-association/definition
Normal file
2
patches/cmd-launch-association/definition
Normal file
@@ -0,0 +1,2 @@
|
||||
Fixes: [18154] cmd: Support for launching programs based on file association
|
||||
# Fixes: [36646]
|
@@ -0,0 +1,446 @@
|
||||
From 953112b017a794a550491f0008d599bd78b37dd0 Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Mon, 1 Jul 2019 15:40:59 +1000
|
||||
Subject: [PATCH] d3dx9_36: Implement D3DXCreateKeyframedAnimationSet
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45481
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/d3dx9_36/animation.c | 370 ++++++++++++++++++++++++++++++++++++-
|
||||
dlls/d3dx9_36/tests/mesh.c | 27 +++
|
||||
2 files changed, 394 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/animation.c b/dlls/d3dx9_36/animation.c
|
||||
index de6d69d383..4828f2b8d0 100644
|
||||
--- a/dlls/d3dx9_36/animation.c
|
||||
+++ b/dlls/d3dx9_36/animation.c
|
||||
@@ -468,14 +468,378 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT max_outputs, UINT max_sets,
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
+struct d3dx9_animation_frame_set
|
||||
+{
|
||||
+ ID3DXKeyframedAnimationSet ID3DXKeyframedAnimationSet_iface;
|
||||
+ LONG ref;
|
||||
+
|
||||
+ char *name;
|
||||
+ double ticks_per_second;
|
||||
+ D3DXPLAYBACK_TYPE playback_type;
|
||||
+ UINT animation_count;
|
||||
+ UINT callback_key_count;
|
||||
+ const D3DXKEY_CALLBACK *callback_keys;
|
||||
+};
|
||||
+
|
||||
+static inline struct d3dx9_animation_frame_set *impl_from_ID3DXKeyframedAnimationSet(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, struct d3dx9_animation_frame_set, ID3DXKeyframedAnimationSet_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_QueryInterface(ID3DXKeyframedAnimationSet *iface, REFIID riid, void **obj)
|
||||
+{
|
||||
+ TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), obj);
|
||||
+
|
||||
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
+ IsEqualGUID(riid, &IID_ID3DXAnimationSet) ||
|
||||
+ IsEqualGUID(riid, &IID_ID3DXKeyframedAnimationSet))
|
||||
+ {
|
||||
+ iface->lpVtbl->AddRef(iface);
|
||||
+ *obj = iface;
|
||||
+ return D3D_OK;
|
||||
+ }
|
||||
+
|
||||
+ WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid));
|
||||
+ *obj = NULL;
|
||||
+ return E_NOINTERFACE;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI d3dx9_animation_framed_AddRef(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ ULONG refcount = InterlockedIncrement(&framed->ref);
|
||||
+
|
||||
+ TRACE("%p increasing refcount to %u.\n", framed, refcount);
|
||||
+
|
||||
+ return refcount;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI d3dx9_animation_framed_Release(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ ULONG refcount = InterlockedDecrement(&framed->ref);
|
||||
+
|
||||
+ TRACE("%p decreasing refcount to %u.\n", framed, refcount);
|
||||
+
|
||||
+ if (!refcount)
|
||||
+ {
|
||||
+ heap_free(framed->name);
|
||||
+ HeapFree(GetProcessHeap(), 0, framed);
|
||||
+ }
|
||||
+
|
||||
+ return refcount;
|
||||
+}
|
||||
+
|
||||
+static const char * WINAPI d3dx9_animation_framed_GetName(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ TRACE("framed %p.\n", framed);
|
||||
+ return framed->name;
|
||||
+}
|
||||
+
|
||||
+static DOUBLE WINAPI d3dx9_animation_framed_GetPeriod(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p stub.\n", framed);
|
||||
+ return 0.0f;
|
||||
+}
|
||||
+
|
||||
+static DOUBLE WINAPI d3dx9_animation_framed_GetPeriodicPosition(ID3DXKeyframedAnimationSet *iface, DOUBLE position)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p stub.\n", framed);
|
||||
+ return 0.0f;
|
||||
+}
|
||||
+
|
||||
+static UINT WINAPI d3dx9_animation_framed_GetNumAnimations(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p stub.\n", framed);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetAnimationNameByIndex(ID3DXKeyframedAnimationSet *iface, UINT index, const char **name)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, name %p stub.\n", framed, name);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetAnimationIndexByName(ID3DXKeyframedAnimationSet *iface, const char *name, UINT *index)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, name %s, index %p stub.\n", framed, debugstr_a(name), index);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetSRT(ID3DXKeyframedAnimationSet *iface, DOUBLE periodic_position, UINT animation, D3DXVECTOR3 *scale,
|
||||
+ D3DXQUATERNION *rotation, D3DXVECTOR3 *translation)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, periodic_position %f, animation %u, scale %p rotation %p translation %p stub.\n",
|
||||
+ framed, periodic_position, animation, scale, rotation, translation);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetCallback(ID3DXKeyframedAnimationSet *iface, double position, DWORD flags, double *callback_position,
|
||||
+ void **callback_data)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, position %f, flags 0x%08x, callback_position %p, callback_data %p stub.\n",
|
||||
+ framed, position, flags, callback_position, callback_data);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static D3DXPLAYBACK_TYPE WINAPI d3dx9_animation_framed_GetPlaybackType(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ TRACE("framed %p.\n", framed);
|
||||
+ return framed->playback_type;
|
||||
+}
|
||||
+
|
||||
+static DOUBLE WINAPI d3dx9_animation_framed_GetSourceTicksPerSecond(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ TRACE("framed %p.\n", framed);
|
||||
+ return framed->ticks_per_second;
|
||||
+}
|
||||
+
|
||||
+static UINT WINAPI d3dx9_animation_framed_GetNumScaleKeys(ID3DXKeyframedAnimationSet *iface, UINT keys)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, keys %u stub.\n", framed, keys);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetScaleKeys(ID3DXKeyframedAnimationSet *iface, UINT animation, LPD3DXKEY_VECTOR3 scale_keys)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, scale_keys %p stub.\n", framed, animation, scale_keys);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetScaleKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u, scale_key %p stub.\n", framed, animation, key, scale_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_SetScaleKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key, LPD3DXKEY_VECTOR3 scale_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u, scale_key %p stub.\n", framed, animation, key, scale_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static UINT WINAPI d3dx9_animation_framed_GetNumRotationKeys(ID3DXKeyframedAnimationSet *iface, UINT animation)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u stub.\n", framed, animation);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetRotationKeys(ID3DXKeyframedAnimationSet *iface, UINT animation, LPD3DXKEY_QUATERNION rotation_keys)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, rotation_keys %p stub.\n", framed, animation, rotation_keys);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetRotationKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u, rotation_key %p stub.\n", framed, animation, key, rotation_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_SetRotationKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key, LPD3DXKEY_QUATERNION rotation_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u, rotation_key %p stub.\n", framed, animation, key, rotation_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static UINT WINAPI d3dx9_animation_framed_GetNumTranslationKeys(ID3DXKeyframedAnimationSet *iface, UINT animation)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u stub.\n", framed, animation);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetTranslationKeys(ID3DXKeyframedAnimationSet *iface, UINT animation, LPD3DXKEY_VECTOR3 translation_keys)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, rotation_key %p stub.\n", framed, animation, translation_keys);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetTranslationKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u, translation_key %p stub.\n", framed, animation, key, translation_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_SetTranslationKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key, LPD3DXKEY_VECTOR3 translation_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u, translation_key %p stub.\n", framed, animation, key, translation_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static UINT WINAPI d3dx9_animation_framed_GetNumCallbackKeys(ID3DXKeyframedAnimationSet *iface)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p stub.\n", framed);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetCallbackKeys(ID3DXKeyframedAnimationSet *iface, LPD3DXKEY_CALLBACK callback_keys)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, callback_keys %p stub.\n", framed, callback_keys);
|
||||
+
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_GetCallbackKey(ID3DXKeyframedAnimationSet *iface, UINT key, LPD3DXKEY_CALLBACK callback_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, key %u, callback_key %p stub.\n", framed, key, callback_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_SetCallbackKey(ID3DXKeyframedAnimationSet *iface, UINT key, LPD3DXKEY_CALLBACK callback_key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, key %u, callback_key %p stub.\n", framed, key, callback_key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_UnregisterScaleKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u stub.\n", framed, animation, key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_UnregisterRotationKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u stub.\n", framed, animation, key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_UnregisterTranslationKey(ID3DXKeyframedAnimationSet *iface, UINT animation, UINT key)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, animation %u, key %u stub.\n", framed, animation, key);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_RegisterAnimationSRTKeys(ID3DXKeyframedAnimationSet *iface, const char *name, UINT num_scale_keys,
|
||||
+ UINT num_rotation_keys, UINT num_translation_keys, const D3DXKEY_VECTOR3 *scale_keys,
|
||||
+ const D3DXKEY_QUATERNION *rotation_keys, const D3DXKEY_VECTOR3 *translation_keys,
|
||||
+ DWORD *animation_index)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, name %s, num_scale_keys %u, num_rotation_keys %u, rotation_keys %p, num_translation_keys %u, scale_keys %p, "
|
||||
+ "rotation_keys %u, translation_keys %p, animation_index %p stub.\n",
|
||||
+ framed, debugstr_a(name), num_scale_keys, num_rotation_keys, rotation_keys, num_translation_keys, scale_keys,
|
||||
+ rotation_keys, translation_keys, animation_index);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_Compress(ID3DXKeyframedAnimationSet *iface, DWORD flags, float lossiness,
|
||||
+ D3DXFRAME *hierarchy, ID3DXBuffer **compressed_data)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, flags 0x%08x, lossiness %f, hierarchy %p, compressed_data %p stub.\n", framed, flags, lossiness,
|
||||
+ hierarchy, compressed_data);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI d3dx9_animation_framed_UnregisterAnimation(ID3DXKeyframedAnimationSet *iface, UINT index)
|
||||
+{
|
||||
+ struct d3dx9_animation_frame_set *framed = impl_from_ID3DXKeyframedAnimationSet(iface);
|
||||
+ FIXME("framed %p, index %u stub.\n", framed, index);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static const struct ID3DXKeyframedAnimationSetVtbl d3dx9_animation_framed_vtbl =
|
||||
+{
|
||||
+ d3dx9_animation_framed_QueryInterface,
|
||||
+ d3dx9_animation_framed_AddRef,
|
||||
+ d3dx9_animation_framed_Release,
|
||||
+ d3dx9_animation_framed_GetName,
|
||||
+ d3dx9_animation_framed_GetPeriod,
|
||||
+ d3dx9_animation_framed_GetPeriodicPosition,
|
||||
+ d3dx9_animation_framed_GetNumAnimations,
|
||||
+ d3dx9_animation_framed_GetAnimationNameByIndex,
|
||||
+ d3dx9_animation_framed_GetAnimationIndexByName,
|
||||
+ d3dx9_animation_framed_GetSRT,
|
||||
+ d3dx9_animation_framed_GetCallback,
|
||||
+ d3dx9_animation_framed_GetPlaybackType,
|
||||
+ d3dx9_animation_framed_GetSourceTicksPerSecond,
|
||||
+ d3dx9_animation_framed_GetNumScaleKeys,
|
||||
+ d3dx9_animation_framed_GetScaleKeys,
|
||||
+ d3dx9_animation_framed_GetScaleKey,
|
||||
+ d3dx9_animation_framed_SetScaleKey,
|
||||
+ d3dx9_animation_framed_GetNumRotationKeys,
|
||||
+ d3dx9_animation_framed_GetRotationKeys,
|
||||
+ d3dx9_animation_framed_GetRotationKey,
|
||||
+ d3dx9_animation_framed_SetRotationKey,
|
||||
+ d3dx9_animation_framed_GetNumTranslationKeys,
|
||||
+ d3dx9_animation_framed_GetTranslationKeys,
|
||||
+ d3dx9_animation_framed_GetTranslationKey,
|
||||
+ d3dx9_animation_framed_SetTranslationKey,
|
||||
+ d3dx9_animation_framed_GetNumCallbackKeys,
|
||||
+ d3dx9_animation_framed_GetCallbackKeys,
|
||||
+ d3dx9_animation_framed_GetCallbackKey,
|
||||
+ d3dx9_animation_framed_SetCallbackKey,
|
||||
+ d3dx9_animation_framed_UnregisterScaleKey,
|
||||
+ d3dx9_animation_framed_UnregisterRotationKey,
|
||||
+ d3dx9_animation_framed_UnregisterTranslationKey,
|
||||
+ d3dx9_animation_framed_RegisterAnimationSRTKeys,
|
||||
+ d3dx9_animation_framed_Compress,
|
||||
+ d3dx9_animation_framed_UnregisterAnimation
|
||||
+};
|
||||
+
|
||||
HRESULT WINAPI D3DXCreateKeyframedAnimationSet(const char *name, double ticks_per_second,
|
||||
D3DXPLAYBACK_TYPE playback_type, UINT animation_count, UINT callback_key_count,
|
||||
const D3DXKEY_CALLBACK *callback_keys, ID3DXKeyframedAnimationSet **animation_set)
|
||||
{
|
||||
- FIXME("name %s, ticks_per_second %.16e, playback_type %u, animation_count %u, "
|
||||
- "callback_key_count %u, callback_keys %p, animation_set %p stub.\n",
|
||||
+ struct d3dx9_animation_frame_set *object;
|
||||
+
|
||||
+ TRACE("name %s, ticks_per_second %.16e, playback_type %u, animation_count %u, "
|
||||
+ "callback_key_count %u, callback_keys %p, animation_set %p.\n",
|
||||
debugstr_a(name), ticks_per_second, playback_type, animation_count,
|
||||
callback_key_count, callback_keys, animation_set);
|
||||
|
||||
- return E_NOTIMPL;
|
||||
+ if(!animation_count)
|
||||
+ return D3DERR_INVALIDCALL;
|
||||
+
|
||||
+ object = heap_alloc(sizeof(*object));
|
||||
+ if (!object)
|
||||
+ return E_OUTOFMEMORY;
|
||||
+
|
||||
+ object->ID3DXKeyframedAnimationSet_iface.lpVtbl = &d3dx9_animation_framed_vtbl;
|
||||
+ object->ref = 1;
|
||||
+ object->name = heap_alloc( strlen(name)+1 );
|
||||
+ if(!object->name)
|
||||
+ {
|
||||
+ heap_free(object);
|
||||
+ return E_OUTOFMEMORY;
|
||||
+ }
|
||||
+ strcpy(object->name, name);
|
||||
+ object->ticks_per_second = ticks_per_second;
|
||||
+ object->playback_type = playback_type;
|
||||
+ object->animation_count = animation_count;
|
||||
+ object->callback_key_count = callback_key_count;
|
||||
+ object->callback_keys = callback_keys;
|
||||
+
|
||||
+ *animation_set = &object->ID3DXKeyframedAnimationSet_iface;
|
||||
+
|
||||
+ return D3D_OK;
|
||||
}
|
||||
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
|
||||
index da9b80c578..b75e3fce85 100644
|
||||
--- a/dlls/d3dx9_36/tests/mesh.c
|
||||
+++ b/dlls/d3dx9_36/tests/mesh.c
|
||||
@@ -11119,6 +11119,32 @@ static void D3DXCreateAnimationControllerTest(void)
|
||||
animation->lpVtbl->Release(animation);
|
||||
}
|
||||
|
||||
+static void D3DXCreateKeyframedAnimationSetTest(void)
|
||||
+{
|
||||
+ ID3DXKeyframedAnimationSet *framed;
|
||||
+ HRESULT hr;
|
||||
+ const char *name;
|
||||
+ D3DXPLAYBACK_TYPE playtype;
|
||||
+ UINT count;
|
||||
+
|
||||
+ hr = D3DXCreateKeyframedAnimationSet("wine_bottle", 5.0, D3DXPLAY_LOOP, 0, 0, NULL, &framed);
|
||||
+ ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr returned %#x.\n", hr);
|
||||
+
|
||||
+ hr = D3DXCreateKeyframedAnimationSet("wine_bottle", 5.0, D3DXPLAY_LOOP, 10, 0, NULL, &framed);
|
||||
+ ok(hr == D3D_OK, "Got unexpected hr returned %#x.\n", hr);
|
||||
+
|
||||
+ name = framed->lpVtbl->GetName(framed);
|
||||
+ ok(!strcmp(name, "wine_bottle"), "unexpected name (%s)\n", name);
|
||||
+
|
||||
+ playtype = framed->lpVtbl->GetPlaybackType(framed);
|
||||
+ ok(playtype == D3DXPLAY_LOOP, "unexpected value, got %d\n", playtype);
|
||||
+
|
||||
+ count = framed->lpVtbl->GetNumAnimations(framed);
|
||||
+ ok(count == 0, "unexpected value, got %d\n", count);
|
||||
+
|
||||
+ framed->lpVtbl->Release(framed);
|
||||
+}
|
||||
+
|
||||
static void test_D3DXFrameFind(void)
|
||||
{
|
||||
static char n1[] = "name1";
|
||||
@@ -11387,6 +11413,7 @@ START_TEST(mesh)
|
||||
D3DXCreateTextTest();
|
||||
D3DXCreateTorusTest();
|
||||
D3DXCreateAnimationControllerTest();
|
||||
+ D3DXCreateKeyframedAnimationSetTest();
|
||||
test_get_decl_length();
|
||||
test_get_decl_vertex_size();
|
||||
test_fvf_decl_conversion();
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -0,0 +1 @@
|
||||
Fixes: [45481] d3dx9_36: Implement D3DXCreateKeyframedAnimationSet
|
@@ -1,4 +1,4 @@
|
||||
From 4e692713dface59a0e717e4ab9e2abf6b8223995 Mon Sep 17 00:00:00 2001
|
||||
From f22ce02d880a9a6723d202eaf959d1eaa7a4c3df Mon Sep 17 00:00:00 2001
|
||||
From: Christian Costa <titan.costa@gmail.com>
|
||||
Date: Sun, 11 Jan 2015 16:29:30 +0100
|
||||
Subject: [PATCH] d3dx9_36: Improve D3DXSaveTextureToFile to save simple
|
||||
@@ -6,17 +6,17 @@ Subject: [PATCH] d3dx9_36: Improve D3DXSaveTextureToFile to save simple
|
||||
|
||||
---
|
||||
dlls/d3dx9_36/d3dx9_private.h | 2 ++
|
||||
dlls/d3dx9_36/surface.c | 62 +++++++++++++++++++++++++++++++++++++++++++
|
||||
dlls/d3dx9_36/texture.c | 5 +---
|
||||
dlls/d3dx9_36/surface.c | 62 +++++++++++++++++++++++++++++++++++
|
||||
dlls/d3dx9_36/texture.c | 5 +--
|
||||
3 files changed, 65 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_36/d3dx9_private.h b/dlls/d3dx9_36/d3dx9_private.h
|
||||
index 5a28f2e..158aae3 100644
|
||||
index 9497343f422..679b57b2626 100644
|
||||
--- a/dlls/d3dx9_36/d3dx9_private.h
|
||||
+++ b/dlls/d3dx9_36/d3dx9_private.h
|
||||
@@ -125,6 +125,8 @@ HRESULT lock_surface(IDirect3DSurface9 *surface, D3DLOCKED_RECT *lock,
|
||||
@@ -125,6 +125,8 @@ HRESULT lock_surface(IDirect3DSurface9 *surface, const RECT *surface_rect, D3DLO
|
||||
IDirect3DSurface9 **temp_surface, BOOL write) DECLSPEC_HIDDEN;
|
||||
HRESULT unlock_surface(IDirect3DSurface9 *surface, D3DLOCKED_RECT *lock,
|
||||
HRESULT unlock_surface(IDirect3DSurface9 *surface, const RECT *surface_rect,
|
||||
IDirect3DSurface9 *temp_surface, BOOL update) DECLSPEC_HIDDEN;
|
||||
+HRESULT save_dds_texture_to_memory(ID3DXBuffer **dst_buffer, IDirect3DBaseTexture9 *src_texture,
|
||||
+ const PALETTEENTRY *src_palette) DECLSPEC_HIDDEN;
|
||||
@@ -24,10 +24,10 @@ index 5a28f2e..158aae3 100644
|
||||
unsigned short float_32_to_16(const float in) DECLSPEC_HIDDEN;
|
||||
float float_16_to_32(const unsigned short in) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
|
||||
index f5dc799..e0d84fd 100644
|
||||
index aa9ee891b54..9871d211a7c 100644
|
||||
--- a/dlls/d3dx9_36/surface.c
|
||||
+++ b/dlls/d3dx9_36/surface.c
|
||||
@@ -611,6 +611,68 @@ static HRESULT save_dds_surface_to_memory(ID3DXBuffer **dst_buffer, IDirect3DSur
|
||||
@@ -636,6 +636,68 @@ static HRESULT save_dds_surface_to_memory(ID3DXBuffer **dst_buffer, IDirect3DSur
|
||||
return D3D_OK;
|
||||
}
|
||||
|
||||
@@ -97,10 +97,10 @@ index f5dc799..e0d84fd 100644
|
||||
const D3DBOX *dst_box, const void *src_data, const D3DBOX *src_box, DWORD filter, D3DCOLOR color_key,
|
||||
const D3DXIMAGE_INFO *src_info)
|
||||
diff --git a/dlls/d3dx9_36/texture.c b/dlls/d3dx9_36/texture.c
|
||||
index e2dfab8..9f0e541 100644
|
||||
index 26d07ca9f66..b743d5cfad0 100644
|
||||
--- a/dlls/d3dx9_36/texture.c
|
||||
+++ b/dlls/d3dx9_36/texture.c
|
||||
@@ -1906,10 +1906,7 @@ HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
|
||||
@@ -1904,10 +1904,7 @@ HRESULT WINAPI D3DXSaveTextureToFileInMemory(ID3DXBuffer **dst_buffer, D3DXIMAGE
|
||||
if (!dst_buffer || !src_texture) return D3DERR_INVALIDCALL;
|
||||
|
||||
if (file_format == D3DXIFF_DDS)
|
||||
@@ -113,5 +113,5 @@ index e2dfab8..9f0e541 100644
|
||||
type = IDirect3DBaseTexture9_GetType(src_texture);
|
||||
switch (type)
|
||||
--
|
||||
1.9.1
|
||||
2.17.1
|
||||
|
||||
|
@@ -1,4 +1,4 @@
|
||||
From 4595b49c9c878e8a86fcd22dc82a9f5cfadfc7a8 Mon Sep 17 00:00:00 2001
|
||||
From 3fb7038ed7f1ebbadd60465f68ed0e61ba81e730 Mon Sep 17 00:00:00 2001
|
||||
From: Christian Costa <titan.costa@gmail.com>
|
||||
Date: Fri, 30 Mar 2018 08:22:02 +0000
|
||||
Subject: [PATCH] d3dx9_36: add DXTn support
|
||||
@@ -29,164 +29,164 @@ Subject: [PATCH] d3dx9_36: add DXTn support
|
||||
22 files changed, 118 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/dlls/d3dx9_24/Makefile.in b/dlls/d3dx9_24/Makefile.in
|
||||
index 99db5f355..0c3fb8a90 100644
|
||||
index a327292b8..b43b1be81 100644
|
||||
--- a/dlls/d3dx9_24/Makefile.in
|
||||
+++ b/dlls/d3dx9_24/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=24
|
||||
MODULE = d3dx9_24.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_25/Makefile.in b/dlls/d3dx9_25/Makefile.in
|
||||
index 9e54aba2c..4419b18b8 100644
|
||||
index ccf374832..edcba8b59 100644
|
||||
--- a/dlls/d3dx9_25/Makefile.in
|
||||
+++ b/dlls/d3dx9_25/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=25
|
||||
MODULE = d3dx9_25.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_26/Makefile.in b/dlls/d3dx9_26/Makefile.in
|
||||
index 104f7c19b..cfc9711ef 100644
|
||||
index 21ef9e00b..72d0e0ce1 100644
|
||||
--- a/dlls/d3dx9_26/Makefile.in
|
||||
+++ b/dlls/d3dx9_26/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=26
|
||||
MODULE = d3dx9_26.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_27/Makefile.in b/dlls/d3dx9_27/Makefile.in
|
||||
index db04c8310..d598c9bbf 100644
|
||||
index 3adea191c..24763cb10 100644
|
||||
--- a/dlls/d3dx9_27/Makefile.in
|
||||
+++ b/dlls/d3dx9_27/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=27
|
||||
MODULE = d3dx9_27.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_28/Makefile.in b/dlls/d3dx9_28/Makefile.in
|
||||
index 8a2b9c690..8e9979092 100644
|
||||
index bd75a23d2..ce041b069 100644
|
||||
--- a/dlls/d3dx9_28/Makefile.in
|
||||
+++ b/dlls/d3dx9_28/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=28
|
||||
MODULE = d3dx9_28.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_29/Makefile.in b/dlls/d3dx9_29/Makefile.in
|
||||
index 6e1f45c02..efe538fde 100644
|
||||
index 491c105ab..99ab2ded7 100644
|
||||
--- a/dlls/d3dx9_29/Makefile.in
|
||||
+++ b/dlls/d3dx9_29/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=29
|
||||
MODULE = d3dx9_29.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_30/Makefile.in b/dlls/d3dx9_30/Makefile.in
|
||||
index 092a6b154..4a1ee6304 100644
|
||||
index 44e28b79f..bcf0b1c82 100644
|
||||
--- a/dlls/d3dx9_30/Makefile.in
|
||||
+++ b/dlls/d3dx9_30/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=30
|
||||
MODULE = d3dx9_30.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_31/Makefile.in b/dlls/d3dx9_31/Makefile.in
|
||||
index 48c67e6e0..dcbb7a01b 100644
|
||||
index 0f16d27fd..7c980fbb8 100644
|
||||
--- a/dlls/d3dx9_31/Makefile.in
|
||||
+++ b/dlls/d3dx9_31/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=31
|
||||
MODULE = d3dx9_31.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_32/Makefile.in b/dlls/d3dx9_32/Makefile.in
|
||||
index d51d6a0db..fb89ea7c2 100644
|
||||
index 99357dcce..e493bd8a6 100644
|
||||
--- a/dlls/d3dx9_32/Makefile.in
|
||||
+++ b/dlls/d3dx9_32/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=32
|
||||
MODULE = d3dx9_32.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_33/Makefile.in b/dlls/d3dx9_33/Makefile.in
|
||||
index 52cdde13a..487255e43 100644
|
||||
index 5a92dca61..fba4106af 100644
|
||||
--- a/dlls/d3dx9_33/Makefile.in
|
||||
+++ b/dlls/d3dx9_33/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=33
|
||||
MODULE = d3dx9_33.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_34/Makefile.in b/dlls/d3dx9_34/Makefile.in
|
||||
index 37f431228..9b0b500f7 100644
|
||||
index 84cca56ec..e03d8ebd5 100644
|
||||
--- a/dlls/d3dx9_34/Makefile.in
|
||||
+++ b/dlls/d3dx9_34/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=34
|
||||
MODULE = d3dx9_34.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_35/Makefile.in b/dlls/d3dx9_35/Makefile.in
|
||||
index 4441b5f6e..ac4291359 100644
|
||||
index 640f30620..ea19e55b2 100644
|
||||
--- a/dlls/d3dx9_35/Makefile.in
|
||||
+++ b/dlls/d3dx9_35/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=35
|
||||
MODULE = d3dx9_35.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_36/Makefile.in b/dlls/d3dx9_36/Makefile.in
|
||||
index 5e76ab7f5..c95dc0707 100644
|
||||
index b8a173ce0..3f96b6656 100644
|
||||
--- a/dlls/d3dx9_36/Makefile.in
|
||||
+++ b/dlls/d3dx9_36/Makefile.in
|
||||
@@ -1,7 +1,7 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=36
|
||||
MODULE = d3dx9_36.dll
|
||||
IMPORTLIB = d3dx9
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
diff --git a/dlls/d3dx9_36/surface.c b/dlls/d3dx9_36/surface.c
|
||||
index 57d9818cd..f05bad5ab 100644
|
||||
index 8e9b834d8..83c30338e 100644
|
||||
--- a/dlls/d3dx9_36/surface.c
|
||||
+++ b/dlls/d3dx9_36/surface.c
|
||||
@@ -25,6 +25,8 @@
|
||||
@@ -198,7 +198,7 @@ index 57d9818cd..f05bad5ab 100644
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(d3dx);
|
||||
|
||||
HRESULT WINAPI WICCreateImagingFactory_Proxy(UINT, IWICImagingFactory**);
|
||||
@@ -1772,6 +1774,24 @@ void point_filter_argb_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slic
|
||||
@@ -1798,6 +1800,24 @@ void point_filter_argb_pixels(const BYTE *src, UINT src_row_pitch, UINT src_slic
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ index 57d9818cd..f05bad5ab 100644
|
||||
/************************************************************
|
||||
* D3DXLoadSurfaceFromMemory
|
||||
*
|
||||
@@ -1811,10 +1831,12 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
|
||||
@@ -1837,10 +1857,12 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
|
||||
{
|
||||
const struct pixel_format_desc *srcformatdesc, *destformatdesc;
|
||||
IDirect3DSurface9 *surface;
|
||||
@@ -237,7 +237,7 @@ index 57d9818cd..f05bad5ab 100644
|
||||
|
||||
TRACE("(%p, %p, %s, %p, %#x, %u, %p, %s, %#x, 0x%08x)\n",
|
||||
dst_surface, dst_palette, wine_dbgstr_rect(dst_rect), src_memory, src_format,
|
||||
@@ -1895,18 +1917,65 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
|
||||
@@ -1921,18 +1943,65 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
|
||||
}
|
||||
else /* Stretching or format conversion. */
|
||||
{
|
||||
@@ -252,7 +252,7 @@ index 57d9818cd..f05bad5ab 100644
|
||||
+ (!post_convert && !is_conversion_to_supported(destformatdesc)))
|
||||
{
|
||||
FIXME("Unsupported format conversion %#x -> %#x.\n", src_format, surfdesc.Format);
|
||||
unlock_surface(dst_surface, &lockrect, surface, FALSE);
|
||||
unlock_surface(dst_surface, dst_rect, surface, FALSE);
|
||||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
@@ -307,7 +307,7 @@ index 57d9818cd..f05bad5ab 100644
|
||||
}
|
||||
else /* if ((filter & 0xf) == D3DX_FILTER_POINT) */
|
||||
{
|
||||
@@ -1915,12 +1984,29 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
|
||||
@@ -1941,12 +2010,29 @@ HRESULT WINAPI D3DXLoadSurfaceFromMemory(IDirect3DSurface9 *dst_surface,
|
||||
|
||||
/* Always apply a point filter until D3DX_FILTER_LINEAR,
|
||||
* D3DX_FILTER_TRIANGLE and D3DX_FILTER_BOX are implemented. */
|
||||
@@ -328,23 +328,23 @@ index 57d9818cd..f05bad5ab 100644
|
||||
}
|
||||
}
|
||||
|
||||
- return unlock_surface(dst_surface, &lockrect, surface, TRUE);
|
||||
- return unlock_surface(dst_surface, dst_rect, surface, TRUE);
|
||||
+done:
|
||||
+ if (pre_convert)
|
||||
+ HeapFree(GetProcessHeap(), 0, tmp_src_memory);
|
||||
+ if (post_convert)
|
||||
+ HeapFree(GetProcessHeap(), 0, tmp_dst_memory);
|
||||
+
|
||||
+ unlock_surface(dst_surface, &lockrect, surface, TRUE);
|
||||
+ unlock_surface(dst_surface, dst_rect, surface, TRUE);
|
||||
+ return hr;
|
||||
}
|
||||
|
||||
/************************************************************
|
||||
diff --git a/dlls/d3dx9_36/tests/surface.c b/dlls/d3dx9_36/tests/surface.c
|
||||
index 56b79d80c..8614cec4c 100644
|
||||
index 4a10492a0..d59ff028a 100644
|
||||
--- a/dlls/d3dx9_36/tests/surface.c
|
||||
+++ b/dlls/d3dx9_36/tests/surface.c
|
||||
@@ -1225,7 +1225,7 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
|
||||
@@ -1242,7 +1242,7 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
|
||||
hr = IDirect3DTexture9_GetSurfaceLevel(tex, 0, &newsurf);
|
||||
ok(SUCCEEDED(hr), "Failed to get the surface, hr %#x.\n", hr);
|
||||
hr = D3DXLoadSurfaceFromSurface(newsurf, NULL, NULL, surf, NULL, NULL, D3DX_FILTER_NONE, 0);
|
||||
@@ -353,7 +353,7 @@ index 56b79d80c..8614cec4c 100644
|
||||
check_release((IUnknown*)newsurf, 1);
|
||||
check_release((IUnknown*)tex, 0);
|
||||
}
|
||||
@@ -1251,7 +1251,7 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
|
||||
@@ -1268,7 +1268,7 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
|
||||
hr = IDirect3DTexture9_GetSurfaceLevel(tex, 0, &newsurf);
|
||||
ok(SUCCEEDED(hr), "Failed to get the surface, hr %#x.\n", hr);
|
||||
hr = D3DXLoadSurfaceFromSurface(newsurf, NULL, NULL, surf, NULL, NULL, D3DX_FILTER_NONE, 0);
|
||||
@@ -362,7 +362,7 @@ index 56b79d80c..8614cec4c 100644
|
||||
check_release((IUnknown*)newsurf, 1);
|
||||
check_release((IUnknown*)tex, 0);
|
||||
}
|
||||
@@ -1264,10 +1264,10 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
|
||||
@@ -1281,10 +1281,10 @@ static void test_D3DXLoadSurface(IDirect3DDevice9 *device)
|
||||
hr = IDirect3DTexture9_GetSurfaceLevel(tex, 0, &newsurf);
|
||||
ok(SUCCEEDED(hr), "Failed to get the surface, hr %#x.\n", hr);
|
||||
hr = D3DXLoadSurfaceFromSurface(newsurf, NULL, NULL, surf, NULL, NULL, D3DX_FILTER_NONE, 0);
|
||||
@@ -376,89 +376,89 @@ index 56b79d80c..8614cec4c 100644
|
||||
check_release((IUnknown*)newsurf, 1);
|
||||
check_release((IUnknown*)tex, 0);
|
||||
diff --git a/dlls/d3dx9_37/Makefile.in b/dlls/d3dx9_37/Makefile.in
|
||||
index ea0a04807..a710cef03 100644
|
||||
index d16a0ce05..669482dee 100644
|
||||
--- a/dlls/d3dx9_37/Makefile.in
|
||||
+++ b/dlls/d3dx9_37/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=37
|
||||
MODULE = d3dx9_37.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_38/Makefile.in b/dlls/d3dx9_38/Makefile.in
|
||||
index af62f823d..543a482af 100644
|
||||
index 4a02ab417..1f43705e7 100644
|
||||
--- a/dlls/d3dx9_38/Makefile.in
|
||||
+++ b/dlls/d3dx9_38/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=38
|
||||
MODULE = d3dx9_38.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_39/Makefile.in b/dlls/d3dx9_39/Makefile.in
|
||||
index ab71712d4..cacb0c00d 100644
|
||||
index 5a3840574..690ed7d31 100644
|
||||
--- a/dlls/d3dx9_39/Makefile.in
|
||||
+++ b/dlls/d3dx9_39/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=39
|
||||
MODULE = d3dx9_39.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_40/Makefile.in b/dlls/d3dx9_40/Makefile.in
|
||||
index 76428d2fd..a58a99ef2 100644
|
||||
index 581e18dba..8e6984683 100644
|
||||
--- a/dlls/d3dx9_40/Makefile.in
|
||||
+++ b/dlls/d3dx9_40/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=40
|
||||
MODULE = d3dx9_40.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_41/Makefile.in b/dlls/d3dx9_41/Makefile.in
|
||||
index d3647f895..93fb6b508 100644
|
||||
index 63a0be753..37fb2f3e6 100644
|
||||
--- a/dlls/d3dx9_41/Makefile.in
|
||||
+++ b/dlls/d3dx9_41/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=41
|
||||
MODULE = d3dx9_41.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_42/Makefile.in b/dlls/d3dx9_42/Makefile.in
|
||||
index 88bd746da..197d0d45b 100644
|
||||
index ff391a202..2d706c5f8 100644
|
||||
--- a/dlls/d3dx9_42/Makefile.in
|
||||
+++ b/dlls/d3dx9_42/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=42
|
||||
MODULE = d3dx9_42.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
diff --git a/dlls/d3dx9_43/Makefile.in b/dlls/d3dx9_43/Makefile.in
|
||||
index 2f6b8634a..17895954a 100644
|
||||
index e009a41c5..d539f6b22 100644
|
||||
--- a/dlls/d3dx9_43/Makefile.in
|
||||
+++ b/dlls/d3dx9_43/Makefile.in
|
||||
@@ -1,6 +1,6 @@
|
||||
EXTRADEFS = -DD3DX_SDK_VERSION=43
|
||||
MODULE = d3dx9_43.dll
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 wined3d
|
||||
-IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase
|
||||
+IMPORTS = d3d9 d3dcompiler dxguid d3dxof ole32 gdi32 user32 ucrtbase wined3d
|
||||
PARENTSRC = ../d3dx9_36
|
||||
DELAYIMPORTS = windowscodecs
|
||||
|
||||
--
|
||||
2.21.0
|
||||
2.22.0
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
1
patches/dbgeng-IDebugClient7/definition
Normal file
1
patches/dbgeng-IDebugClient7/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [44958] dbgeng: Support IDebugClient7 interface.
|
@@ -0,0 +1,136 @@
|
||||
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/6] include: Add directmanipulation.idl
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
include/Makefile.in | 1 +
|
||||
include/directmanipulation.idl | 103 +++++++++++++++++++++++++++++++++
|
||||
2 files changed, 104 insertions(+)
|
||||
create mode 100644 include/directmanipulation.idl
|
||||
|
||||
diff --git a/include/Makefile.in b/include/Makefile.in
|
||||
index 69135879a9..a7fd4dc929 100644
|
||||
--- a/include/Makefile.in
|
||||
+++ b/include/Makefile.in
|
||||
@@ -199,6 +199,7 @@ SOURCES = \
|
||||
dimm.idl \
|
||||
dinput.h \
|
||||
dinputd.h \
|
||||
+ directmanipulation.idl \
|
||||
dispdib.h \
|
||||
dispex.idl \
|
||||
dlgs.h \
|
||||
diff --git a/include/directmanipulation.idl b/include/directmanipulation.idl
|
||||
new file mode 100644
|
||||
index 0000000000..9dc2366cc3
|
||||
--- /dev/null
|
||||
+++ b/include/directmanipulation.idl
|
||||
@@ -0,0 +1,103 @@
|
||||
+/*
|
||||
+ * Copyright 2019 Alistair Leslie-Hughes
|
||||
+ *
|
||||
+ * 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 "oaidl.idl";
|
||||
+import "ocidl.idl";
|
||||
+
|
||||
+cpp_quote("#if 0")
|
||||
+typedef void* HWND;
|
||||
+cpp_quote("#endif")
|
||||
+
|
||||
+typedef enum DIRECTMANIPULATION_HITTEST_TYPE
|
||||
+{
|
||||
+ DIRECTMANIPULATION_HITTEST_TYPE_ASYNCHRONOUS = 0x00000000,
|
||||
+ DIRECTMANIPULATION_HITTEST_TYPE_SYNCHRONOUS = 0x00000001,
|
||||
+ DIRECTMANIPULATION_HITTEST_TYPE_AUTO_SYNCHRONOUS = 0x00000002
|
||||
+} DIRECTMANIPULATION_HITTEST_TYPE;
|
||||
+
|
||||
+[
|
||||
+ local,
|
||||
+ object,
|
||||
+ uuid(fb759dba-6f4c-4c01-874e-19c8a05907f9),
|
||||
+ pointer_default(unique)
|
||||
+]
|
||||
+interface IDirectManipulationFrameInfoProvider : IUnknown
|
||||
+{
|
||||
+ HRESULT GetNextFrameInfo([out] ULONGLONG *time, [out] ULONGLONG *process, [out] ULONGLONG *composition);
|
||||
+}
|
||||
+
|
||||
+[
|
||||
+ local,
|
||||
+ object,
|
||||
+ uuid(fbf5d3b4-70c7-4163-9322-5a6f660d6fbc),
|
||||
+ pointer_default(unique)
|
||||
+]
|
||||
+interface IDirectManipulationManager : IUnknown
|
||||
+{
|
||||
+ HRESULT Activate([in] HWND window);
|
||||
+
|
||||
+ HRESULT Deactivate([in] HWND window);
|
||||
+
|
||||
+ HRESULT RegisterHitTestTarget([in] HWND window, [in] HWND hittest, [in] DIRECTMANIPULATION_HITTEST_TYPE type);
|
||||
+
|
||||
+ HRESULT ProcessInput([in] const MSG *msg, [out, retval] BOOL *handled);
|
||||
+
|
||||
+ HRESULT GetUpdateManager([in] REFIID riid, [out, iid_is(riid), retval,] void **obj);
|
||||
+
|
||||
+ HRESULT CreateViewport([in] IDirectManipulationFrameInfoProvider *frame, [in] HWND window,
|
||||
+ [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
|
||||
+
|
||||
+ HRESULT CreateContent([in] IDirectManipulationFrameInfoProvider *frame, [in] REFCLSID clsid,
|
||||
+ [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
|
||||
+}
|
||||
+
|
||||
+[
|
||||
+ local,
|
||||
+ object,
|
||||
+ uuid(fa1005e9-3d16-484c-bfc9-62b61e56ec4e),
|
||||
+ pointer_default(unique)
|
||||
+]
|
||||
+interface IDirectManipulationManager2 : IDirectManipulationManager
|
||||
+{
|
||||
+ HRESULT CreateBehavior([in] REFCLSID clsid, [in] REFIID riid, [out, iid_is(riid), retval] void **obj);
|
||||
+}
|
||||
+
|
||||
+[
|
||||
+ uuid(9fbedf98-f6d8-4e3b-b488-fa66dbf5e9f3),
|
||||
+ version(1.0)
|
||||
+]
|
||||
+library DirectManipulation
|
||||
+{
|
||||
+ [
|
||||
+ uuid(54e211b6-3650-4f75-8334-fa359598e1c5)
|
||||
+ ]
|
||||
+ coclass DirectManipulationManager
|
||||
+ {
|
||||
+ interface IDirectManipulationManager2;
|
||||
+ [default] interface IDirectManipulationManager;
|
||||
+ }
|
||||
+
|
||||
+ [
|
||||
+ uuid(99793286-77cc-4b57-96db-3b354f6f9fb5)
|
||||
+ ]
|
||||
+ coclass DirectManipulationSharedManager
|
||||
+ {
|
||||
+ interface IDirectManipulationManager2;
|
||||
+ [default] interface IDirectManipulationManager;
|
||||
+ }
|
||||
+}
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -0,0 +1,198 @@
|
||||
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/6] directmanipulation: New dll
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
configure | 2 +
|
||||
configure.ac | 1 +
|
||||
dlls/directmanipulation/Makefile.in | 8 +++
|
||||
dlls/directmanipulation/directmanip.idl | 38 +++++++++++
|
||||
dlls/directmanipulation/directmanipulation.c | 67 +++++++++++++++++++
|
||||
.../directmanipulation.spec | 6 ++
|
||||
6 files changed, 122 insertions(+)
|
||||
create mode 100644 dlls/directmanipulation/Makefile.in
|
||||
create mode 100644 dlls/directmanipulation/directmanip.idl
|
||||
create mode 100644 dlls/directmanipulation/directmanipulation.c
|
||||
create mode 100644 dlls/directmanipulation/directmanipulation.spec
|
||||
|
||||
diff --git a/configure b/configure
|
||||
index f1de2c4052..bc376a6686 100755
|
||||
--- a/configure
|
||||
+++ b/configure
|
||||
@@ -1231,6 +1231,7 @@ enable_dhtmled_ocx
|
||||
enable_difxapi
|
||||
enable_dinput
|
||||
enable_dinput8
|
||||
+enable_directmanipulation
|
||||
enable_dispex
|
||||
enable_dmband
|
||||
enable_dmcompos
|
||||
@@ -20162,6 +20163,7 @@ wine_fn_config_makefile dlls/dinput enable_dinput
|
||||
wine_fn_config_makefile dlls/dinput/tests enable_tests
|
||||
wine_fn_config_makefile dlls/dinput8 enable_dinput8
|
||||
wine_fn_config_makefile dlls/dinput8/tests enable_tests
|
||||
+wine_fn_config_makefile dlls/directmanipulation enable_directmanipulation
|
||||
wine_fn_config_makefile dlls/dispdib.dll16 enable_win16
|
||||
wine_fn_config_makefile dlls/dispex enable_dispex
|
||||
wine_fn_config_makefile dlls/dispex/tests enable_tests
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index a7c45ace73..51519fdd9b 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -3148,6 +3148,7 @@ WINE_CONFIG_MAKEFILE(dlls/dinput)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dinput/tests)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dinput8)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dinput8/tests)
|
||||
+WINE_CONFIG_MAKEFILE(dlls/directmanipulation)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dispdib.dll16,enable_win16)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dispex)
|
||||
WINE_CONFIG_MAKEFILE(dlls/dispex/tests)
|
||||
diff --git a/dlls/directmanipulation/Makefile.in b/dlls/directmanipulation/Makefile.in
|
||||
new file mode 100644
|
||||
index 0000000000..331c2a8420
|
||||
--- /dev/null
|
||||
+++ b/dlls/directmanipulation/Makefile.in
|
||||
@@ -0,0 +1,8 @@
|
||||
+MODULE = directmanipulation.dll
|
||||
+
|
||||
+EXTRADLLFLAGS = -mno-cygwin
|
||||
+
|
||||
+IDL_SRCS = directmanip.idl
|
||||
+
|
||||
+C_SRCS = \
|
||||
+ directmanipulation.c
|
||||
diff --git a/dlls/directmanipulation/directmanip.idl b/dlls/directmanipulation/directmanip.idl
|
||||
new file mode 100644
|
||||
index 0000000000..ff00668ba5
|
||||
--- /dev/null
|
||||
+++ b/dlls/directmanipulation/directmanip.idl
|
||||
@@ -0,0 +1,38 @@
|
||||
+/*
|
||||
+ * Copyright 2019 Alistair Leslie-Hughes
|
||||
+ *
|
||||
+ * 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
|
||||
+ */
|
||||
+#pragma makedep register
|
||||
+
|
||||
+[
|
||||
+ uuid(54e211b6-3650-4f75-8334-fa359598e1c5),
|
||||
+ threading(both)
|
||||
+]
|
||||
+coclass DirectManipulationManager
|
||||
+{
|
||||
+ interface IDirectManipulationManager2;
|
||||
+ [default] interface IDirectManipulationManager;
|
||||
+}
|
||||
+
|
||||
+[
|
||||
+ uuid(99793286-77cc-4b57-96db-3b354f6f9fb5),
|
||||
+ threading(both)
|
||||
+]
|
||||
+coclass DirectManipulationSharedManager
|
||||
+{
|
||||
+ interface IDirectManipulationManager2;
|
||||
+ [default] interface IDirectManipulationManager;
|
||||
+}
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
|
||||
new file mode 100644
|
||||
index 0000000000..136b2976a4
|
||||
--- /dev/null
|
||||
+++ b/dlls/directmanipulation/directmanipulation.c
|
||||
@@ -0,0 +1,67 @@
|
||||
+/*
|
||||
+ * Copyright 2019 Alistair Leslie-Hughes
|
||||
+ *
|
||||
+ * 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
|
||||
+ */
|
||||
+
|
||||
+#include <stdarg.h>
|
||||
+
|
||||
+#include "windef.h"
|
||||
+#include "winbase.h"
|
||||
+#include "oleidl.h"
|
||||
+#include "rpcproxy.h"
|
||||
+#include "wine/debug.h"
|
||||
+
|
||||
+WINE_DEFAULT_DEBUG_CHANNEL(manipulation);
|
||||
+
|
||||
+static HINSTANCE dm_instance;
|
||||
+
|
||||
+BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, void *reserved)
|
||||
+{
|
||||
+ TRACE("(%p, %u, %p)\n", instance, reason, reserved);
|
||||
+
|
||||
+ switch (reason)
|
||||
+ {
|
||||
+ case DLL_WINE_PREATTACH:
|
||||
+ return FALSE; /* prefer native version */
|
||||
+ case DLL_PROCESS_ATTACH:
|
||||
+ dm_instance = instance;
|
||||
+ DisableThreadLibraryCalls(instance);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return TRUE;
|
||||
+}
|
||||
+
|
||||
+HRESULT WINAPI DllRegisterServer(void)
|
||||
+{
|
||||
+ return __wine_register_resources( dm_instance );
|
||||
+}
|
||||
+
|
||||
+HRESULT WINAPI DllUnregisterServer(void)
|
||||
+{
|
||||
+ return __wine_unregister_resources( dm_instance );
|
||||
+}
|
||||
+
|
||||
+HRESULT WINAPI DllCanUnloadNow(void)
|
||||
+{
|
||||
+ return S_FALSE;
|
||||
+}
|
||||
+
|
||||
+HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
|
||||
+{
|
||||
+ FIXME("(%s,%s,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
|
||||
+ return CLASS_E_CLASSNOTAVAILABLE;
|
||||
+}
|
||||
\ No newline at end of file
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.spec b/dlls/directmanipulation/directmanipulation.spec
|
||||
new file mode 100644
|
||||
index 0000000000..3f0004daeb
|
||||
--- /dev/null
|
||||
+++ b/dlls/directmanipulation/directmanipulation.spec
|
||||
@@ -0,0 +1,6 @@
|
||||
+@ stub InitializeDManipHook
|
||||
+@ stdcall -private DllCanUnloadNow()
|
||||
+@ stub DllGetActivationFactory
|
||||
+@ stdcall -private DllGetClassObject(ptr ptr ptr)
|
||||
+@ stdcall -private DllRegisterServer()
|
||||
+@ stdcall -private DllUnregisterServer()
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -0,0 +1,25 @@
|
||||
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/6] uuid: Add directmanipulation.h
|
||||
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/uuid/uuid.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/dlls/uuid/uuid.c b/dlls/uuid/uuid.c
|
||||
index aa3b30c3c7..eacb83301d 100644
|
||||
--- a/dlls/uuid/uuid.c
|
||||
+++ b/dlls/uuid/uuid.c
|
||||
@@ -90,6 +90,7 @@ DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0);
|
||||
#include "netcfgx.h"
|
||||
#include "shimgdata.h"
|
||||
#include "comsvcs.h"
|
||||
+#include "directmanipulation.h"
|
||||
|
||||
/* FIXME: cguids declares GUIDs but does not define their values */
|
||||
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -0,0 +1,259 @@
|
||||
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/6] directmanipulation: Create
|
||||
DirectManipulationManager/DirectManipulationSharedManager objects
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44865
|
||||
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
---
|
||||
dlls/directmanipulation/Makefile.in | 1 +
|
||||
dlls/directmanipulation/directmanipulation.c | 205 ++++++++++++++++++-
|
||||
2 files changed, 204 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/dlls/directmanipulation/Makefile.in b/dlls/directmanipulation/Makefile.in
|
||||
index 331c2a8420..d67a21eb77 100644
|
||||
--- a/dlls/directmanipulation/Makefile.in
|
||||
+++ b/dlls/directmanipulation/Makefile.in
|
||||
@@ -1,4 +1,5 @@
|
||||
MODULE = directmanipulation.dll
|
||||
+IMPORTS = uuid
|
||||
|
||||
EXTRADLLFLAGS = -mno-cygwin
|
||||
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
|
||||
index 136b2976a4..81efa3688b 100644
|
||||
--- a/dlls/directmanipulation/directmanipulation.c
|
||||
+++ b/dlls/directmanipulation/directmanipulation.c
|
||||
@@ -15,6 +15,7 @@
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
+#define COBJMACROS
|
||||
|
||||
#include <stdarg.h>
|
||||
|
||||
@@ -22,8 +23,11 @@
|
||||
#include "winbase.h"
|
||||
#include "oleidl.h"
|
||||
#include "rpcproxy.h"
|
||||
+#include "wine/heap.h"
|
||||
#include "wine/debug.h"
|
||||
|
||||
+#include "directmanipulation.h"
|
||||
+
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(manipulation);
|
||||
|
||||
static HINSTANCE dm_instance;
|
||||
@@ -60,8 +64,205 @@ HRESULT WINAPI DllCanUnloadNow(void)
|
||||
return S_FALSE;
|
||||
}
|
||||
|
||||
+
|
||||
+struct directmanipulation
|
||||
+{
|
||||
+ IDirectManipulationManager2 IDirectManipulationManager2_iface;
|
||||
+ LONG ref;
|
||||
+};
|
||||
+
|
||||
+static inline struct directmanipulation *impl_from_IDirectManipulationManager2(IDirectManipulationManager2 *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, struct directmanipulation, IDirectManipulationManager2_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_QueryInterface(IDirectManipulationManager2 *iface, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
+ IsEqualGUID(riid, &IID_IDirectManipulationManager) ||
|
||||
+ IsEqualGUID(riid, &IID_IDirectManipulationManager2)) {
|
||||
+ IUnknown_AddRef(iface);
|
||||
+ *ppv = iface;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+
|
||||
+ FIXME("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv);
|
||||
+ return E_NOINTERFACE;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI direct_manip_AddRef(IDirectManipulationManager2 *iface)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ ULONG ref = InterlockedIncrement(&This->ref);
|
||||
+
|
||||
+ TRACE("(%p) ref=%u\n", This, ref);
|
||||
+
|
||||
+ return ref;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI direct_manip_Release(IDirectManipulationManager2 *iface)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ ULONG ref = InterlockedDecrement(&This->ref);
|
||||
+
|
||||
+ TRACE("(%p) ref=%u\n", This, ref);
|
||||
+
|
||||
+ if (!ref)
|
||||
+ {
|
||||
+ heap_free(This);
|
||||
+ }
|
||||
+ return ref;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_Activate(IDirectManipulationManager2 *iface, HWND window)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %p\n", This, window);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_Deactivate(IDirectManipulationManager2 *iface, HWND window)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %p\n", This, window);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_RegisterHitTestTarget(IDirectManipulationManager2 *iface, HWND window,
|
||||
+ HWND hittest, DIRECTMANIPULATION_HITTEST_TYPE type)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %p, %p, %d\n", This, window, hittest, type);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_ProcessInput(IDirectManipulationManager2 *iface, const MSG *msg, BOOL *handled)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %p, %p\n", This, msg, handled);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_GetUpdateManager(IDirectManipulationManager2 *iface, REFIID riid, void **obj)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %s, %p\n", This, debugstr_guid(riid), obj);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_CreateViewport(IDirectManipulationManager2 *iface, IDirectManipulationFrameInfoProvider *frame,
|
||||
+ HWND window, REFIID riid, void **obj)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %p, %p, %s, %p\n", This, frame, window, debugstr_guid(riid), obj);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_CreateContent(IDirectManipulationManager2 *iface, IDirectManipulationFrameInfoProvider *frame,
|
||||
+ REFCLSID clsid, REFIID riid, void **obj)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %p, %s, %p\n", This, frame, debugstr_guid(riid), obj);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI direct_manip_CreateBehavior(IDirectManipulationManager2 *iface, REFCLSID clsid, REFIID riid, void **obj)
|
||||
+{
|
||||
+ struct directmanipulation *This = impl_from_IDirectManipulationManager2(iface);
|
||||
+ FIXME("%p, %s, %s, %p\n", This, debugstr_guid(clsid), debugstr_guid(riid), obj);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static const struct IDirectManipulationManager2Vtbl directmanipVtbl =
|
||||
+{
|
||||
+ direct_manip_QueryInterface,
|
||||
+ direct_manip_AddRef,
|
||||
+ direct_manip_Release,
|
||||
+ direct_manip_Activate,
|
||||
+ direct_manip_Deactivate,
|
||||
+ direct_manip_RegisterHitTestTarget,
|
||||
+ direct_manip_ProcessInput,
|
||||
+ direct_manip_GetUpdateManager,
|
||||
+ direct_manip_CreateViewport,
|
||||
+ direct_manip_CreateContent,
|
||||
+ direct_manip_CreateBehavior
|
||||
+};
|
||||
+
|
||||
+static HRESULT WINAPI DirectManipulation_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ struct directmanipulation *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->IDirectManipulationManager2_iface.lpVtbl = &directmanipVtbl;
|
||||
+ object->ref = 1;
|
||||
+
|
||||
+ ret = direct_manip_QueryInterface(&object->IDirectManipulationManager2_iface, riid, ppv);
|
||||
+ direct_manip_Release(&object->IDirectManipulationManager2_iface);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ *ppv = NULL;
|
||||
+
|
||||
+ if(IsEqualGUID(&IID_IUnknown, riid) || IsEqualGUID(&IID_IClassFactory, riid)) {
|
||||
+ *ppv = iface;
|
||||
+ }
|
||||
+
|
||||
+ if(*ppv) {
|
||||
+ IUnknown_AddRef((IUnknown*)*ppv);
|
||||
+ return S_OK;
|
||||
+ }
|
||||
+
|
||||
+ WARN("(%p)->(%s %p)\n", iface, debugstr_guid(riid), ppv);
|
||||
+ return E_NOINTERFACE;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI ClassFactory_AddRef(IClassFactory *iface)
|
||||
+{
|
||||
+ TRACE("(%p)\n", iface);
|
||||
+ return 2;
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI ClassFactory_Release(IClassFactory *iface)
|
||||
+{
|
||||
+ TRACE("(%p)\n", iface);
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI ClassFactory_LockServer(IClassFactory *iface, BOOL fLock)
|
||||
+{
|
||||
+ TRACE("(%p)->(%x)\n", iface, fLock);
|
||||
+ return S_OK;
|
||||
+}
|
||||
+
|
||||
+static const IClassFactoryVtbl DirectFactoryVtbl = {
|
||||
+ ClassFactory_QueryInterface,
|
||||
+ ClassFactory_AddRef,
|
||||
+ ClassFactory_Release,
|
||||
+ DirectManipulation_CreateInstance,
|
||||
+ ClassFactory_LockServer
|
||||
+};
|
||||
+
|
||||
+static IClassFactory direct_factory = { &DirectFactoryVtbl };
|
||||
+
|
||||
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
|
||||
{
|
||||
- FIXME("(%s,%s,%p): no interface found.\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
|
||||
+ if(IsEqualGUID(&CLSID_DirectManipulationManager, rclsid) ||
|
||||
+ IsEqualGUID(&CLSID_DirectManipulationSharedManager, rclsid) ) {
|
||||
+ TRACE("(CLSID_DirectManipulationManager %s %p)\n", debugstr_guid(riid), ppv);
|
||||
+ return IClassFactory_QueryInterface(&direct_factory, riid, ppv);
|
||||
+ }
|
||||
+
|
||||
+ FIXME("%s %s %p\n", debugstr_guid(rclsid), debugstr_guid(riid), ppv);
|
||||
return CLASS_E_CLASSNOTAVAILABLE;
|
||||
-}
|
||||
\ No newline at end of file
|
||||
+}
|
||||
--
|
||||
2.17.1
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
+ }
|
||||
+
|
||||
+ FIXME("(%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;
|
||||
+}
|
||||
+
|
||||
+static const 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
|
||||
|
@@ -0,0 +1,104 @@
|
||||
From c7190485c2cc3ccc4d6480d0621552aa488154bd Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Tue, 23 Jul 2019 08:37:12 +1000
|
||||
Subject: [PATCH] directmanipulation: Supprot
|
||||
IDirectManipulationFrameInfoProvider interface in
|
||||
IDirectManipulationCompositor.
|
||||
|
||||
---
|
||||
dlls/directmanipulation/directmanipulation.c | 49 ++++++++++++++++++++
|
||||
1 file changed, 49 insertions(+)
|
||||
|
||||
diff --git a/dlls/directmanipulation/directmanipulation.c b/dlls/directmanipulation/directmanipulation.c
|
||||
index 44d74b368d0..f5a8aee5de2 100644
|
||||
--- a/dlls/directmanipulation/directmanipulation.c
|
||||
+++ b/dlls/directmanipulation/directmanipulation.c
|
||||
@@ -213,6 +213,7 @@ static HRESULT WINAPI DirectManipulation_CreateInstance(IClassFactory *iface, IU
|
||||
struct directcompositor
|
||||
{
|
||||
IDirectManipulationCompositor IDirectManipulationCompositor_iface;
|
||||
+ IDirectManipulationFrameInfoProvider IDirectManipulationFrameInfoProvider_iface;
|
||||
LONG ref;
|
||||
};
|
||||
|
||||
@@ -221,8 +222,15 @@ static inline struct directcompositor *impl_from_IDirectManipulationCompositor(I
|
||||
return CONTAINING_RECORD(iface, struct directcompositor, IDirectManipulationCompositor_iface);
|
||||
}
|
||||
|
||||
+static inline struct directcompositor *impl_from_IDirectManipulationFrameInfoProvider(IDirectManipulationFrameInfoProvider *iface)
|
||||
+{
|
||||
+ return CONTAINING_RECORD(iface, struct directcompositor, IDirectManipulationFrameInfoProvider_iface);
|
||||
+}
|
||||
+
|
||||
static HRESULT WINAPI compositor_QueryInterface(IDirectManipulationCompositor *iface, REFIID riid, void **ppv)
|
||||
{
|
||||
+ struct directcompositor *This = impl_from_IDirectManipulationCompositor(iface);
|
||||
+
|
||||
if (IsEqualGUID(riid, &IID_IUnknown) ||
|
||||
IsEqualGUID(riid, &IID_IDirectManipulationCompositor))
|
||||
{
|
||||
@@ -230,6 +238,12 @@ static HRESULT WINAPI compositor_QueryInterface(IDirectManipulationCompositor *i
|
||||
*ppv = iface;
|
||||
return S_OK;
|
||||
}
|
||||
+ else if(IsEqualGUID(riid, &IID_IDirectManipulationFrameInfoProvider))
|
||||
+ {
|
||||
+ IUnknown_AddRef(iface);
|
||||
+ *ppv = &This->IDirectManipulationFrameInfoProvider_iface;
|
||||
+ return S_OK;
|
||||
+ }
|
||||
|
||||
FIXME("(%p)->(%s,%p),not found\n", iface, debugstr_guid(riid), ppv);
|
||||
return E_NOINTERFACE;
|
||||
@@ -299,6 +313,40 @@ static const struct IDirectManipulationCompositorVtbl compositorVtbl =
|
||||
compositor_Flush
|
||||
};
|
||||
|
||||
+static HRESULT WINAPI provider_QueryInterface(IDirectManipulationFrameInfoProvider *iface, REFIID riid, void **ppv)
|
||||
+{
|
||||
+ struct directcompositor *This = impl_from_IDirectManipulationFrameInfoProvider(iface);
|
||||
+ return IDirectManipulationCompositor_QueryInterface(&This->IDirectManipulationCompositor_iface, riid, ppv);
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI provider_AddRef(IDirectManipulationFrameInfoProvider *iface)
|
||||
+{
|
||||
+ struct directcompositor *This = impl_from_IDirectManipulationFrameInfoProvider(iface);
|
||||
+ return IDirectManipulationCompositor_AddRef(&This->IDirectManipulationCompositor_iface);
|
||||
+}
|
||||
+
|
||||
+static ULONG WINAPI provider_Release(IDirectManipulationFrameInfoProvider *iface)
|
||||
+{
|
||||
+ struct directcompositor *This = impl_from_IDirectManipulationFrameInfoProvider(iface);
|
||||
+ return IDirectManipulationCompositor_Release(&This->IDirectManipulationCompositor_iface);
|
||||
+}
|
||||
+
|
||||
+static HRESULT WINAPI provider_GetNextFrameInfo(IDirectManipulationFrameInfoProvider *iface, ULONGLONG *time,
|
||||
+ ULONGLONG *process, ULONGLONG *composition)
|
||||
+{
|
||||
+ struct directcompositor *This = impl_from_IDirectManipulationFrameInfoProvider(iface);
|
||||
+ FIXME("%p, %p, %p, %p\n", This, time, process, composition);
|
||||
+ return E_NOTIMPL;
|
||||
+}
|
||||
+
|
||||
+static const struct IDirectManipulationFrameInfoProviderVtbl providerVtbl =
|
||||
+{
|
||||
+ provider_QueryInterface,
|
||||
+ provider_AddRef,
|
||||
+ provider_Release,
|
||||
+ provider_GetNextFrameInfo
|
||||
+};
|
||||
+
|
||||
static HRESULT WINAPI DirectCompositor_CreateInstance(IClassFactory *iface, IUnknown *outer, REFIID riid, void **ppv)
|
||||
{
|
||||
struct directcompositor *object;
|
||||
@@ -313,6 +361,7 @@ static HRESULT WINAPI DirectCompositor_CreateInstance(IClassFactory *iface, IUnk
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
object->IDirectManipulationCompositor_iface.lpVtbl = &compositorVtbl;
|
||||
+ object->IDirectManipulationFrameInfoProvider_iface.lpVtbl = &providerVtbl;
|
||||
object->ref = 1;
|
||||
|
||||
ret = compositor_QueryInterface(&object->IDirectManipulationCompositor_iface, riid, ppv);
|
||||
--
|
||||
2.17.1
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user