Wine-Devel
By thread
wine-devel@list.winehq.org
By month
Messages by month
- ----- 2026 -----
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
September 2018
- 70 participants
- 1549 messages
[PATCH 2/4] kernel32: Allow initial environment variables to be over 1024 characters long
by Jason Edmeades
Add support for longer than 1024 characters for initial settings of environment variables. Given
windows behaviour changes after 2048, use that as the new limit for the variable size.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45810
---
Manual experiments on windows 10 shows that the registry keys can be over 1024 characters, and as
per the links on the bug, it definitely is possible to have longer variables. We could go higher
than 2048, but as per [1] behavious change after 2048, so until someone hits the new limit, 2048
should suffice
[1] https://software.intel.com/en-us/articles/limitation-to-the-length-of-the-s…
Signed-off-by: Jason Edmeades <us(a)edmeades.me.uk>
---
dlls/kernel32/process.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/process.c b/dlls/kernel32/process.c
index b0b5ccf5bc..b6b2c38d52 100644
--- a/dlls/kernel32/process.c
+++ b/dlls/kernel32/process.c
@@ -335,7 +335,8 @@ static BOOL build_initial_environment(void)
*
* Set environment variables by enumerating the values of a key;
* helper for set_registry_environment().
- * Note that Windows happily truncates the value if it's too big.
+ * Note that early versions of Windows happily truncate the value if
+ * it's too big.
*/
static void set_registry_variables( HANDLE hkey, ULONG type )
{
@@ -345,8 +346,8 @@ static void set_registry_variables( HANDLE hkey, ULONG type )
NTSTATUS status;
DWORD size;
int index;
- char buffer[1024*sizeof(WCHAR) + sizeof(KEY_VALUE_FULL_INFORMATION)];
- WCHAR tmpbuf[1024];
+ char buffer[2048*sizeof(WCHAR) + sizeof(KEY_VALUE_FULL_INFORMATION)];
+ WCHAR tmpbuf[2048];
UNICODE_STRING tmp;
KEY_VALUE_FULL_INFORMATION *info = (KEY_VALUE_FULL_INFORMATION *)buffer;
--
2.17.1
Sept. 25, 2018
[PATCH 1/4] msvcrt: Do not put cmd.exe special environment variables into the environ
by Jason Edmeades
All the special environment variables from the command shell which track directory use are stripped out from
the C runtime environ/wenviron.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45320
---
Note this cannot be tested by the test suites because it only gets triggered for C applications launched from
the command shell - if you launch them from explorer on windows for example, they are not set either. I've
attached a comprehensive set of tests onto the bug as an attachment, which tests the interaction of these
special variables, the current directory and the C runtime vs the command shell.
The way I have chosen to implement this leaves the special variables content in the allocated memory, allowing
the memcpy of the environment strings, but does not put a pointer to that data in the char** array of strings. An
alternative implementation would copy in string by string and skip them, but I have chosen to leave that unless
something is broken because of it.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45320
Signed-off-by: Jason Edmeades <us(a)edmeades.me.uk>
---
dlls/msvcrt/data.c | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcrt/data.c b/dlls/msvcrt/data.c
index 06e16a865e..f08d9b1683 100644
--- a/dlls/msvcrt/data.c
+++ b/dlls/msvcrt/data.c
@@ -73,7 +73,8 @@ char ** msvcrt_SnapshotOfEnvironmentA(char **blk)
for (ptr = environ_strings; *ptr; ptr += strlen(ptr) + 1)
{
- count++;
+ /* Don't count environment variables starting with '=' which are command shell specific */
+ if (*ptr != '=') count++;
len += strlen(ptr) + 1;
}
if (blk)
@@ -88,7 +89,8 @@ char ** msvcrt_SnapshotOfEnvironmentA(char **blk)
memcpy(&blk[count],environ_strings,len);
for (ptr = (char*) &blk[count]; *ptr; ptr += strlen(ptr) + 1)
{
- blk[i++] = ptr;
+ /* Skip special environment strings set by the command shell */
+ if (*ptr != '=') blk[i++] = ptr;
}
}
blk[i] = NULL;
@@ -105,7 +107,8 @@ MSVCRT_wchar_t ** msvcrt_SnapshotOfEnvironmentW(MSVCRT_wchar_t **wblk)
for (wptr = wenviron_strings; *wptr; wptr += strlenW(wptr) + 1)
{
- count++;
+ /* Don't count environment variables starting with '=' which are command shell specific */
+ if (*wptr != '=') count++;
len += strlenW(wptr) + 1;
}
if (wblk)
@@ -119,7 +122,8 @@ MSVCRT_wchar_t ** msvcrt_SnapshotOfEnvironmentW(MSVCRT_wchar_t **wblk)
memcpy(&wblk[count],wenviron_strings,len * sizeof(MSVCRT_wchar_t));
for (wptr = (MSVCRT_wchar_t*)&wblk[count]; *wptr; wptr += strlenW(wptr) + 1)
{
- wblk[i++] = wptr;
+ /* Skip special environment strings set by the command shell */
+ if (*wptr != '=') wblk[i++] = wptr;
}
}
wblk[i] = NULL;
--
2.17.1
Sept. 25, 2018
[PATCH v2] quartz/filtergraph: Improve HRESULT propagation from IFilterGraph2_Connect().
by Zebediah Figura
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/quartz/filtergraph.c | 11 +++++--
dlls/quartz/tests/filtergraph.c | 67 +++++++++++++++++++++++++++++++++++++++--
2 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/dlls/quartz/filtergraph.c b/dlls/quartz/filtergraph.c
index 0468cb5..c8e3c08 100644
--- a/dlls/quartz/filtergraph.c
+++ b/dlls/quartz/filtergraph.c
@@ -1181,7 +1181,11 @@ static HRESULT WINAPI FilterGraph2_Connect(IFilterGraph2 *iface, IPin *ppinOut,
/* Try direct connection first */
hr = IPin_Connect(ppinOut, ppinIn, NULL);
- if (SUCCEEDED(hr))
+
+ /* If direct connection succeeded, we should propagate that return value.
+ * If it returned VFW_E_NOT_CONNECTED or VFW_E_NO_AUDIO_HARDWARE, then don't
+ * even bother trying intermediate filters, since they won't succeed. */
+ if (SUCCEEDED(hr) || hr == VFW_E_NOT_CONNECTED || hr == VFW_E_NO_AUDIO_HARDWARE)
goto out;
TRACE("Direct connection failed, trying to render using extra filters\n");
@@ -1379,6 +1383,9 @@ error:
}
}
+ if (FAILED(hr))
+ hr = VFW_E_CANNOT_CONNECT;
+
IEnumMoniker_Release(pEnumMoniker);
out:
@@ -1391,7 +1398,7 @@ out:
--This->recursioncount;
LeaveCriticalSection(&This->cs);
TRACE("--> %08x\n", hr);
- return SUCCEEDED(hr) ? S_OK : hr;
+ return hr;
}
/* Render all output pins of the given filter. Helper for FilterGraph2_Render(). */
diff --git a/dlls/quartz/tests/filtergraph.c b/dlls/quartz/tests/filtergraph.c
index 6c8b9fa..5693c86 100644
--- a/dlls/quartz/tests/filtergraph.c
+++ b/dlls/quartz/tests/filtergraph.c
@@ -609,7 +609,6 @@ static void test_render_run(const WCHAR *file)
ok(!refs, "Graph has %u references\n", refs);
hr = test_graph_builder_connect_file(filename);
-todo_wine
ok(hr == VFW_E_CANNOT_CONNECT, "got %#x\n", hr);
}
else
@@ -776,6 +775,8 @@ struct testpin
unsigned int type_count, enum_idx;
AM_MEDIA_TYPE *request_mt, *accept_mt;
+ HRESULT Connect_hr;
+ HRESULT EnumMediaTypes_hr;
HRESULT QueryInternalConnections_hr;
};
@@ -964,6 +965,9 @@ static HRESULT WINAPI testpin_EnumMediaTypes(IPin *iface, IEnumMediaTypes **out)
struct testpin *pin = impl_from_IPin(iface);
if (winetest_debug > 1) trace("%p->EnumMediaTypes()\n", pin);
+ if (FAILED(pin->EnumMediaTypes_hr))
+ return pin->EnumMediaTypes_hr;
+
*out = &pin->IEnumMediaTypes_iface;
IEnumMediaTypes_AddRef(*out);
pin->enum_idx = 0;
@@ -1063,6 +1067,8 @@ static void testpin_init(struct testpin *pin, const IPinVtbl *vtbl, PIN_DIRECTIO
pin->IEnumMediaTypes_iface.lpVtbl = &testenummt_vtbl;
pin->ref = 1;
pin->dir = dir;
+ pin->Connect_hr = S_OK;
+ pin->EnumMediaTypes_hr = S_OK;
pin->QueryInternalConnections_hr = E_NOTIMPL;
}
@@ -1077,12 +1083,16 @@ static HRESULT WINAPI testsource_Connect(IPin *iface, IPin *peer, const AM_MEDIA
HRESULT hr;
if (winetest_debug > 1) trace("%p->Connect(%p)\n", pin, peer);
+ if (FAILED(pin->Connect_hr))
+ return pin->Connect_hr;
+
ok(!mt, "Got media type %p.\n", mt);
if (SUCCEEDED(hr = IPin_ReceiveConnection(peer, &pin->IPin_iface, pin->request_mt)))
{
pin->peer = peer;
IPin_AddRef(peer);
+ return pin->Connect_hr;
}
return hr;
}
@@ -1711,12 +1721,50 @@ static void test_graph_builder_connect(void)
IFilterGraph2_Disconnect(graph, source_pin.peer);
IFilterGraph2_Disconnect(graph, &source_pin.IPin_iface);
+ for (source_pin.Connect_hr = 0x00040200; source_pin.Connect_hr <= 0x000402ff;
+ ++source_pin.Connect_hr)
+ {
+ hr = IFilterGraph2_Connect(graph, &source_pin.IPin_iface, &sink_pin.IPin_iface);
+ ok(hr == source_pin.Connect_hr, "Got hr %#x for Connect() hr %#x.\n",
+ hr, source_pin.Connect_hr);
+ ok(source_pin.peer == &sink_pin.IPin_iface, "Got peer %p.\n", source_pin.peer);
+ IFilterGraph2_Disconnect(graph, source_pin.peer);
+ IFilterGraph2_Disconnect(graph, &source_pin.IPin_iface);
+ }
+ source_pin.Connect_hr = S_OK;
+
sink_pin.accept_mt = &sink_type;
hr = IFilterGraph2_Connect(graph, &source_pin.IPin_iface, &sink_pin.IPin_iface);
-todo_wine
ok(hr == VFW_E_CANNOT_CONNECT, "Got hr %#x.\n", hr);
ok(!source_pin.peer, "Got peer %p.\n", source_pin.peer);
+ for (source_pin.Connect_hr = 0x80040200; source_pin.Connect_hr <= 0x800402ff;
+ ++source_pin.Connect_hr)
+ {
+ hr = IFilterGraph2_Connect(graph, &source_pin.IPin_iface, &sink_pin.IPin_iface);
+ if (source_pin.Connect_hr == VFW_E_NOT_CONNECTED
+ || source_pin.Connect_hr == VFW_E_NO_AUDIO_HARDWARE)
+ ok(hr == source_pin.Connect_hr, "Got hr %#x for Connect() hr %#x.\n",
+ hr, source_pin.Connect_hr);
+ else
+ ok(hr == VFW_E_CANNOT_CONNECT, "Got hr %#x for Connect() hr %#x.\n",
+ hr, source_pin.Connect_hr);
+ ok(!source_pin.peer, "Got peer %p.\n", source_pin.peer);
+ ok(!sink_pin.peer, "Got peer %p.\n", sink_pin.peer);
+ }
+ source_pin.Connect_hr = S_OK;
+
+ for (source_pin.EnumMediaTypes_hr = 0x80040200; source_pin.EnumMediaTypes_hr <= 0x800402ff;
+ ++source_pin.EnumMediaTypes_hr)
+ {
+ hr = IFilterGraph2_Connect(graph, &source_pin.IPin_iface, &sink_pin.IPin_iface);
+ ok(hr == source_pin.EnumMediaTypes_hr, "Got hr %#x for EnumMediaTypes() hr %#x.\n",
+ hr, source_pin.EnumMediaTypes_hr);
+ ok(!source_pin.peer, "Got peer %p.\n", source_pin.peer);
+ ok(!sink_pin.peer, "Got peer %p.\n", sink_pin.peer);
+ }
+ source_pin.EnumMediaTypes_hr = S_OK;
+
/* Test usage of intermediate filters. Similarly to Render(), filters are
* simply tried in enumeration order. */
@@ -1740,6 +1788,20 @@ todo_wine
IFilterGraph2_Disconnect(graph, sink_pin.peer);
IFilterGraph2_Disconnect(graph, &sink_pin.IPin_iface);
+ for (source_pin.Connect_hr = 0x00040200; source_pin.Connect_hr <= 0x000402ff;
+ ++source_pin.Connect_hr)
+ {
+ hr = IFilterGraph2_Connect(graph, &source_pin.IPin_iface, &sink_pin.IPin_iface);
+ ok(hr == S_OK, "Got hr %#x for Connect() hr %#x.\n", hr, source_pin.Connect_hr);
+ ok(source_pin.peer == &parser2_pins[0].IPin_iface, "Got peer %p.\n", source_pin.peer);
+ ok(sink_pin.peer == &parser2_pins[1].IPin_iface, "Got peer %p.\n", sink_pin.peer);
+ IFilterGraph2_Disconnect(graph, source_pin.peer);
+ IFilterGraph2_Disconnect(graph, &source_pin.IPin_iface);
+ IFilterGraph2_Disconnect(graph, sink_pin.peer);
+ IFilterGraph2_Disconnect(graph, &sink_pin.IPin_iface);
+ }
+ source_pin.Connect_hr = S_OK;
+
IFilterGraph2_RemoveFilter(graph, &parser1.IBaseFilter_iface);
IFilterGraph2_AddFilter(graph, &parser1.IBaseFilter_iface, NULL);
@@ -1805,7 +1867,6 @@ todo_wine
parser1_pins[1].name[0] = '~';
hr = IFilterGraph2_Connect(graph, &source_pin.IPin_iface, &sink_pin.IPin_iface);
-todo_wine
ok(hr == VFW_E_CANNOT_CONNECT, "Got hr %#x.\n", hr);
ok(!source_pin.peer, "Got peer %p.\n", source_pin.peer);
--
2.7.4
Sept. 25, 2018
[PATCH v2] riched20: Avoid using GCC's typeof extension
by Alex Henrie
Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com>
---
dlls/riched20/txthost.c | 94 ++++++++++++++++++++++-------------------
dlls/riched20/txtsrv.c | 15 ++++++-
2 files changed, 64 insertions(+), 45 deletions(-)
diff --git a/dlls/riched20/txthost.c b/dlls/riched20/txthost.c
index b479bde81b..ec180200e1 100644
--- a/dlls/riched20/txthost.c
+++ b/dlls/riched20/txthost.c
@@ -501,9 +501,17 @@ DECLSPEC_HIDDEN HRESULT WINAPI ITextHostImpl_TxGetSelectionBarWidth(ITextHost *i
#ifdef __i386__ /* thiscall functions are i386-specific */
-#define THISCALL(func) __thiscall_ ## func
+#define DEFINE_ARGS_PLACEHOLDER(args) struct __args_placeholder ## args { char a[args]; };
+DEFINE_ARGS_PLACEHOLDER(4);
+DEFINE_ARGS_PLACEHOLDER(8);
+DEFINE_ARGS_PLACEHOLDER(12);
+DEFINE_ARGS_PLACEHOLDER(16);
+DEFINE_ARGS_PLACEHOLDER(20);
+DEFINE_ARGS_PLACEHOLDER(32);
+
+#define THISCALL(func) (void *) __thiscall_ ## func
#define DEFINE_THISCALL_WRAPPER(func,args) \
- extern typeof(func) THISCALL(func); \
+ extern HRESULT WINAPI __thiscall_ ## func(struct __args_placeholder ## args); \
__ASM_STDCALL_FUNC(__thiscall_ ## func, args, \
"popl %eax\n\t" \
"pushl %ecx\n\t" \
@@ -559,9 +567,9 @@ DEFINE_THISCALL_WRAPPER(ITextHostImpl_TxGetSelectionBarWidth,8)
#ifdef __i386__ /* thiscall functions are i386-specific */
-#define STDCALL(func) __stdcall_ ## func
+#define STDCALL(func) (void *) __stdcall_ ## func
#define DEFINE_STDCALL_WRAPPER(num,func,args) \
- extern typeof(func) __stdcall_ ## func; \
+ extern HRESULT WINAPI __stdcall_ ## func(struct __args_placeholder ## args); \
__ASM_STDCALL_FUNC(__stdcall_ ## func, args, \
"popl %eax\n\t" \
"popl %ecx\n\t" \
@@ -613,45 +621,45 @@ const ITextHostVtbl itextHostStdcallVtbl = {
NULL,
NULL,
NULL,
- __stdcall_ITextHostImpl_TxGetDC,
- __stdcall_ITextHostImpl_TxReleaseDC,
- __stdcall_ITextHostImpl_TxShowScrollBar,
- __stdcall_ITextHostImpl_TxEnableScrollBar,
- __stdcall_ITextHostImpl_TxSetScrollRange,
- __stdcall_ITextHostImpl_TxSetScrollPos,
- __stdcall_ITextHostImpl_TxInvalidateRect,
- __stdcall_ITextHostImpl_TxViewChange,
- __stdcall_ITextHostImpl_TxCreateCaret,
- __stdcall_ITextHostImpl_TxShowCaret,
- __stdcall_ITextHostImpl_TxSetCaretPos,
- __stdcall_ITextHostImpl_TxSetTimer,
- __stdcall_ITextHostImpl_TxKillTimer,
- __stdcall_ITextHostImpl_TxScrollWindowEx,
- __stdcall_ITextHostImpl_TxSetCapture,
- __stdcall_ITextHostImpl_TxSetFocus,
- __stdcall_ITextHostImpl_TxSetCursor,
- __stdcall_ITextHostImpl_TxScreenToClient,
- __stdcall_ITextHostImpl_TxClientToScreen,
- __stdcall_ITextHostImpl_TxActivate,
- __stdcall_ITextHostImpl_TxDeactivate,
- __stdcall_ITextHostImpl_TxGetClientRect,
- __stdcall_ITextHostImpl_TxGetViewInset,
- __stdcall_ITextHostImpl_TxGetCharFormat,
- __stdcall_ITextHostImpl_TxGetParaFormat,
- __stdcall_ITextHostImpl_TxGetSysColor,
- __stdcall_ITextHostImpl_TxGetBackStyle,
- __stdcall_ITextHostImpl_TxGetMaxLength,
- __stdcall_ITextHostImpl_TxGetScrollBars,
- __stdcall_ITextHostImpl_TxGetPasswordChar,
- __stdcall_ITextHostImpl_TxGetAcceleratorPos,
- __stdcall_ITextHostImpl_TxGetExtent,
- __stdcall_ITextHostImpl_OnTxCharFormatChange,
- __stdcall_ITextHostImpl_OnTxParaFormatChange,
- __stdcall_ITextHostImpl_TxGetPropertyBits,
- __stdcall_ITextHostImpl_TxNotify,
- __stdcall_ITextHostImpl_TxImmGetContext,
- __stdcall_ITextHostImpl_TxImmReleaseContext,
- __stdcall_ITextHostImpl_TxGetSelectionBarWidth,
+ STDCALL(ITextHostImpl_TxGetDC),
+ STDCALL(ITextHostImpl_TxReleaseDC),
+ STDCALL(ITextHostImpl_TxShowScrollBar),
+ STDCALL(ITextHostImpl_TxEnableScrollBar),
+ STDCALL(ITextHostImpl_TxSetScrollRange),
+ STDCALL(ITextHostImpl_TxSetScrollPos),
+ STDCALL(ITextHostImpl_TxInvalidateRect),
+ STDCALL(ITextHostImpl_TxViewChange),
+ STDCALL(ITextHostImpl_TxCreateCaret),
+ STDCALL(ITextHostImpl_TxShowCaret),
+ STDCALL(ITextHostImpl_TxSetCaretPos),
+ STDCALL(ITextHostImpl_TxSetTimer),
+ STDCALL(ITextHostImpl_TxKillTimer),
+ STDCALL(ITextHostImpl_TxScrollWindowEx),
+ STDCALL(ITextHostImpl_TxSetCapture),
+ STDCALL(ITextHostImpl_TxSetFocus),
+ STDCALL(ITextHostImpl_TxSetCursor),
+ STDCALL(ITextHostImpl_TxScreenToClient),
+ STDCALL(ITextHostImpl_TxClientToScreen),
+ STDCALL(ITextHostImpl_TxActivate),
+ STDCALL(ITextHostImpl_TxDeactivate),
+ STDCALL(ITextHostImpl_TxGetClientRect),
+ STDCALL(ITextHostImpl_TxGetViewInset),
+ STDCALL(ITextHostImpl_TxGetCharFormat),
+ STDCALL(ITextHostImpl_TxGetParaFormat),
+ STDCALL(ITextHostImpl_TxGetSysColor),
+ STDCALL(ITextHostImpl_TxGetBackStyle),
+ STDCALL(ITextHostImpl_TxGetMaxLength),
+ STDCALL(ITextHostImpl_TxGetScrollBars),
+ STDCALL(ITextHostImpl_TxGetPasswordChar),
+ STDCALL(ITextHostImpl_TxGetAcceleratorPos),
+ STDCALL(ITextHostImpl_TxGetExtent),
+ STDCALL(ITextHostImpl_OnTxCharFormatChange),
+ STDCALL(ITextHostImpl_OnTxParaFormatChange),
+ STDCALL(ITextHostImpl_TxGetPropertyBits),
+ STDCALL(ITextHostImpl_TxNotify),
+ STDCALL(ITextHostImpl_TxImmGetContext),
+ STDCALL(ITextHostImpl_TxImmReleaseContext),
+ STDCALL(ITextHostImpl_TxGetSelectionBarWidth),
};
#endif /* __i386__ */
diff --git a/dlls/riched20/txtsrv.c b/dlls/riched20/txtsrv.c
index ee65621b1d..5a30b59f37 100644
--- a/dlls/riched20/txtsrv.c
+++ b/dlls/riched20/txtsrv.c
@@ -35,9 +35,20 @@
#ifdef __i386__ /* thiscall functions are i386-specific */
-#define THISCALL(func) __thiscall_ ## func
+#define DEFINE_ARGS_PLACEHOLDER(args) struct __args_placeholder ## args { char a[args]; };
+DEFINE_ARGS_PLACEHOLDER(4);
+DEFINE_ARGS_PLACEHOLDER(8);
+DEFINE_ARGS_PLACEHOLDER(12);
+DEFINE_ARGS_PLACEHOLDER(20);
+DEFINE_ARGS_PLACEHOLDER(24);
+DEFINE_ARGS_PLACEHOLDER(36);
+DEFINE_ARGS_PLACEHOLDER(40);
+DEFINE_ARGS_PLACEHOLDER(44);
+DEFINE_ARGS_PLACEHOLDER(52);
+
+#define THISCALL(func) (void *) __thiscall_ ## func
#define DEFINE_THISCALL_WRAPPER(func,args) \
- extern typeof(func) THISCALL(func); \
+ extern HRESULT WINAPI __thiscall_ ## func(struct __args_placeholder ## args); \
__ASM_STDCALL_FUNC(__thiscall_ ## func, args, \
"popl %eax\n\t" \
"pushl %ecx\n\t" \
--
2.19.0
Sept. 25, 2018
[PATCH 5/5] wined3d: Store the wined3d creation flags for NO3D adapters as well.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/wined3d/directx.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index abe81deb337..f7ef5c018fd 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2463,7 +2463,14 @@ static const struct wined3d_adapter_ops wined3d_adapter_no3d_ops =
wined3d_adapter_no3d_create_context,
};
-static BOOL wined3d_adapter_no3d_init(struct wined3d_adapter *adapter)
+static void wined3d_adapter_no3d_init_d3d_info(struct wined3d_adapter *adapter, DWORD wined3d_creation_flags)
+{
+ struct wined3d_d3d_info *d3d_info = &adapter->d3d_info;
+
+ d3d_info->wined3d_creation_flags = wined3d_creation_flags;
+}
+
+static BOOL wined3d_adapter_no3d_init(struct wined3d_adapter *adapter, DWORD wined3d_creation_flags)
{
static const struct wined3d_gpu_description gpu_description =
{
@@ -2485,6 +2492,8 @@ static BOOL wined3d_adapter_no3d_init(struct wined3d_adapter *adapter)
adapter->shader_backend = &none_shader_backend;
adapter->adapter_ops = &wined3d_adapter_no3d_ops;
+ wined3d_adapter_no3d_init_d3d_info(adapter, wined3d_creation_flags);
+
return TRUE;
}
@@ -2510,7 +2519,7 @@ static BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int o
adapter->formats = NULL;
if (wined3d_creation_flags & WINED3D_NO3D)
- return wined3d_adapter_no3d_init(adapter);
+ return wined3d_adapter_no3d_init(adapter, wined3d_creation_flags);
return wined3d_adapter_gl_init(adapter, wined3d_creation_flags);
}
--
2.11.0
Sept. 24, 2018
[PATCH 4/5] ddraw: Reject creating DDSCAPS_VIDEOMEMORY surfaces with DDRAW_NO3D.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/ddraw/surface.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index cf09f9c1416..c51db7661ab 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -6122,8 +6122,9 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
else if (desc->ddsCaps.dwCaps & DDSCAPS_3DDEVICE)
usage = WINED3DUSAGE_RENDERTARGET;
- if (SUCCEEDED(hr = wined3d_check_device_format(ddraw->wined3d, WINED3DADAPTER_DEFAULT,
- WINED3D_DEVICE_TYPE_HAL, mode.format_id, usage, WINED3D_RTYPE_TEXTURE_2D, wined3d_desc.format)))
+ if (!(ddraw->flags & DDRAW_NO3D) && SUCCEEDED(hr = wined3d_check_device_format(ddraw->wined3d,
+ WINED3DADAPTER_DEFAULT, WINED3D_DEVICE_TYPE_HAL, mode.format_id,
+ usage, WINED3D_RTYPE_TEXTURE_2D, wined3d_desc.format)))
desc->ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
else
desc->ddsCaps.dwCaps |= DDSCAPS_SYSTEMMEMORY;
@@ -6257,6 +6258,13 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
return DDERR_NOCOLORKEYHW;
}
+ if ((ddraw->flags & DDRAW_NO3D) && (desc->ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY))
+ {
+ WARN("Video memory surfaces not supported without 3D support.\n");
+ heap_free(texture);
+ return DDERR_NODIRECTDRAWHW;
+ }
+
if (desc->ddsCaps.dwCaps & (DDSCAPS_OVERLAY))
wined3d_desc.usage |= WINED3DUSAGE_OVERLAY;
--
2.11.0
Sept. 24, 2018
[PATCH 3/5] wined3d: Do not report WINEDDSCAPS_VIDEOMEMORY for WINED3D_NO3D adapters.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/wined3d/directx.c | 30 +++++++++++++++---------------
1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 925a5bc9eb8..abe81deb337 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -2389,24 +2389,24 @@ HRESULT CDECL wined3d_get_device_caps(const struct wined3d *wined3d, UINT adapte
caps->ddraw_caps.ssb_color_key_caps = ckey_caps;
caps->ddraw_caps.ssb_fx_caps = fx_caps;
- caps->ddraw_caps.dds_caps = WINEDDSCAPS_ALPHA |
- WINEDDSCAPS_BACKBUFFER |
- WINEDDSCAPS_FLIP |
- WINEDDSCAPS_FRONTBUFFER |
- WINEDDSCAPS_OFFSCREENPLAIN |
- WINEDDSCAPS_PALETTE |
- WINEDDSCAPS_PRIMARYSURFACE |
- WINEDDSCAPS_SYSTEMMEMORY |
- WINEDDSCAPS_VIDEOMEMORY |
- WINEDDSCAPS_VISIBLE;
+ caps->ddraw_caps.dds_caps = WINEDDSCAPS_ALPHA
+ | WINEDDSCAPS_BACKBUFFER
+ | WINEDDSCAPS_FLIP
+ | WINEDDSCAPS_FRONTBUFFER
+ | WINEDDSCAPS_OFFSCREENPLAIN
+ | WINEDDSCAPS_PALETTE
+ | WINEDDSCAPS_PRIMARYSURFACE
+ | WINEDDSCAPS_SYSTEMMEMORY
+ | WINEDDSCAPS_VISIBLE;
if (!(wined3d->flags & WINED3D_NO3D))
{
- caps->ddraw_caps.dds_caps |= WINEDDSCAPS_3DDEVICE |
- WINEDDSCAPS_MIPMAP |
- WINEDDSCAPS_TEXTURE |
- WINEDDSCAPS_ZBUFFER;
- caps->ddraw_caps.caps |= WINEDDCAPS_3D;
+ caps->ddraw_caps.dds_caps |= WINEDDSCAPS_3DDEVICE
+ | WINEDDSCAPS_MIPMAP
+ | WINEDDSCAPS_TEXTURE
+ | WINEDDSCAPS_VIDEOMEMORY
+ | WINEDDSCAPS_ZBUFFER;
+ caps->ddraw_caps.caps |= WINEDDCAPS_3D;
}
caps->shader_double_precision = d3d_info->shader_double_precision;
--
2.11.0
Sept. 24, 2018
[PATCH 2/5] ddraw: Do not report IID_IDirect3DHALDevice in ddraw_find_device() with DDRAW_NO3D.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/ddraw/ddraw.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 56a74cb3285..e9e06ee486f 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -4069,6 +4069,12 @@ static HRESULT ddraw_find_device(struct ddraw *ddraw, const D3DFINDDEVICESEARCH
TRACE("Trying to match GUID %s.\n", debugstr_guid(&fds->guid));
+ if ((ddraw->flags & DDRAW_NO3D) && IsEqualGUID(&fds->guid, &IID_IDirect3DHALDevice))
+ {
+ WARN("HAL device not available without 3D support.\n");
+ return DDERR_NOTFOUND;
+ }
+
for (i = 0; i < guid_count; ++i)
{
if (IsEqualGUID(guids[i], &fds->guid))
--
2.11.0
Sept. 24, 2018
[PATCH 1/5] d2d1: Introduce a debug helper for D2D1_POINT_2F.
by Henri Verbeet
Signed-off-by: Henri Verbeet <hverbeet(a)codeweavers.com>
---
dlls/d2d1/bitmap_render_target.c | 12 ++++++------
dlls/d2d1/brush.c | 8 ++++----
dlls/d2d1/d2d1_private.h | 7 +++++++
dlls/d2d1/dc_render_target.c | 12 ++++++------
dlls/d2d1/device.c | 29 +++++++++++++++--------------
dlls/d2d1/factory.c | 2 +-
dlls/d2d1/geometry.c | 32 +++++++++++++++-----------------
dlls/d2d1/hwnd_render_target.c | 12 ++++++------
8 files changed, 60 insertions(+), 54 deletions(-)
diff --git a/dlls/d2d1/bitmap_render_target.c b/dlls/d2d1/bitmap_render_target.c
index 7411d488926..df5b013a0b5 100644
--- a/dlls/d2d1/bitmap_render_target.c
+++ b/dlls/d2d1/bitmap_render_target.c
@@ -218,8 +218,8 @@ static void STDMETHODCALLTYPE d2d_bitmap_render_target_DrawLine(ID2D1BitmapRende
{
struct d2d_bitmap_render_target *render_target = impl_from_ID2D1BitmapRenderTarget(iface);
- TRACE("iface %p, p0 {%.8e, %.8e}, p1 {%.8e, %.8e}, brush %p, stroke_width %.8e, stroke_style %p.\n",
- iface, p0.x, p0.y, p1.x, p1.y, brush, stroke_width, stroke_style);
+ TRACE("iface %p, p0 %s, p1 %s, brush %p, stroke_width %.8e, stroke_style %p.\n",
+ iface, debug_d2d_point_2f(&p0), debug_d2d_point_2f(&p1), brush, stroke_width, stroke_style);
ID2D1RenderTarget_DrawLine(render_target->dxgi_target, p0, p1, brush, stroke_width, stroke_style);
}
@@ -364,8 +364,8 @@ static void STDMETHODCALLTYPE d2d_bitmap_render_target_DrawTextLayout(ID2D1Bitma
{
struct d2d_bitmap_render_target *render_target = impl_from_ID2D1BitmapRenderTarget(iface);
- TRACE("iface %p, origin {%.8e, %.8e}, layout %p, brush %p, options %#x.\n",
- iface, origin.x, origin.y, layout, brush, options);
+ TRACE("iface %p, origin %s, layout %p, brush %p, options %#x.\n",
+ iface, debug_d2d_point_2f(&origin), layout, brush, options);
ID2D1RenderTarget_DrawTextLayout(render_target->dxgi_target, origin, layout, brush, options);
}
@@ -376,8 +376,8 @@ static void STDMETHODCALLTYPE d2d_bitmap_render_target_DrawGlyphRun(ID2D1BitmapR
{
struct d2d_bitmap_render_target *render_target = impl_from_ID2D1BitmapRenderTarget(iface);
- TRACE("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, brush %p, measuring_mode %#x.\n",
- iface, baseline_origin.x, baseline_origin.y, glyph_run, brush, measuring_mode);
+ TRACE("iface %p, baseline_origin %s, glyph_run %p, brush %p, measuring_mode %#x.\n",
+ iface, debug_d2d_point_2f(&baseline_origin), glyph_run, brush, measuring_mode);
ID2D1RenderTarget_DrawGlyphRun(render_target->dxgi_target,
baseline_origin, glyph_run, brush, measuring_mode);
diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c
index 30a4235cdab..9c73ae1d88f 100644
--- a/dlls/d2d1/brush.c
+++ b/dlls/d2d1/brush.c
@@ -502,7 +502,7 @@ static void STDMETHODCALLTYPE d2d_linear_gradient_brush_SetStartPoint(ID2D1Linea
{
struct d2d_brush *brush = impl_from_ID2D1LinearGradientBrush(iface);
- TRACE("iface %p, start_point {%.8e, %.8e}.\n", iface, start_point.x, start_point.y);
+ TRACE("iface %p, start_point %s.\n", iface, debug_d2d_point_2f(&start_point));
brush->u.linear.start = start_point;
}
@@ -512,7 +512,7 @@ static void STDMETHODCALLTYPE d2d_linear_gradient_brush_SetEndPoint(ID2D1LinearG
{
struct d2d_brush *brush = impl_from_ID2D1LinearGradientBrush(iface);
- TRACE("iface %p, end_point {%.8e, %.8e}.\n", iface, end_point.x, end_point.y);
+ TRACE("iface %p, end_point %s.\n", iface, debug_d2d_point_2f(&end_point));
brush->u.linear.end = end_point;
}
@@ -689,7 +689,7 @@ static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetCenter(ID2D1RadialGra
{
struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface);
- TRACE("iface %p, centre {%.8e, %.8e}.\n", iface, centre.x, centre.y);
+ TRACE("iface %p, centre %s.\n", iface, debug_d2d_point_2f(¢re));
brush->u.radial.centre = centre;
}
@@ -699,7 +699,7 @@ static void STDMETHODCALLTYPE d2d_radial_gradient_brush_SetGradientOriginOffset(
{
struct d2d_brush *brush = impl_from_ID2D1RadialGradientBrush(iface);
- TRACE("iface %p, offset {%.8e, %.8e}.\n", iface, offset.x, offset.y);
+ TRACE("iface %p, offset %s.\n", iface, debug_d2d_point_2f(&offset));
brush->u.radial.offset = offset;
}
diff --git a/dlls/d2d1/d2d1_private.h b/dlls/d2d1/d2d1_private.h
index 2d3acd59977..9bfbbf2a6c4 100644
--- a/dlls/d2d1/d2d1_private.h
+++ b/dlls/d2d1/d2d1_private.h
@@ -587,6 +587,13 @@ static inline void d2d_rect_expand(D2D1_RECT_F *dst, const D2D1_POINT_2F *point)
dst->bottom = point->y;
}
+static inline const char *debug_d2d_point_2f(const D2D1_POINT_2F *point)
+{
+ if (!point)
+ return "(null)";
+ return wine_dbg_sprintf("{%.8e, %.8e}", point->x, point->y);
+}
+
static inline const char *debug_d2d_rect_f(const D2D1_RECT_F *rect)
{
if (!rect) return "(null)";
diff --git a/dlls/d2d1/dc_render_target.c b/dlls/d2d1/dc_render_target.c
index 050adf6dd6f..9a0f458fafe 100644
--- a/dlls/d2d1/dc_render_target.c
+++ b/dlls/d2d1/dc_render_target.c
@@ -247,8 +247,8 @@ static void STDMETHODCALLTYPE d2d_dc_render_target_DrawLine(ID2D1DCRenderTarget
{
struct d2d_dc_render_target *render_target = impl_from_ID2D1DCRenderTarget(iface);
- TRACE("iface %p, p0 {%.8e, %.8e}, p1 {%.8e, %.8e}, brush %p, stroke_width %.8e, stroke_style %p.\n",
- iface, p0.x, p0.y, p1.x, p1.y, brush, stroke_width, stroke_style);
+ TRACE("iface %p, p0 %s, p1 %s, brush %p, stroke_width %.8e, stroke_style %p.\n",
+ iface, debug_d2d_point_2f(&p0), debug_d2d_point_2f(&p1), brush, stroke_width, stroke_style);
ID2D1RenderTarget_DrawLine(render_target->dxgi_target, p0, p1, brush, stroke_width, stroke_style);
}
@@ -393,8 +393,8 @@ static void STDMETHODCALLTYPE d2d_dc_render_target_DrawTextLayout(ID2D1DCRenderT
{
struct d2d_dc_render_target *render_target = impl_from_ID2D1DCRenderTarget(iface);
- TRACE("iface %p, origin {%.8e, %.8e}, layout %p, brush %p, options %#x.\n",
- iface, origin.x, origin.y, layout, brush, options);
+ TRACE("iface %p, origin %s, layout %p, brush %p, options %#x.\n",
+ iface, debug_d2d_point_2f(&origin), layout, brush, options);
ID2D1RenderTarget_DrawTextLayout(render_target->dxgi_target, origin, layout, brush, options);
}
@@ -405,8 +405,8 @@ static void STDMETHODCALLTYPE d2d_dc_render_target_DrawGlyphRun(ID2D1DCRenderTar
{
struct d2d_dc_render_target *render_target = impl_from_ID2D1DCRenderTarget(iface);
- TRACE("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, brush %p, measuring_mode %#x.\n",
- iface, baseline_origin.x, baseline_origin.y, glyph_run, brush, measuring_mode);
+ TRACE("iface %p, baseline_origin %s, glyph_run %p, brush %p, measuring_mode %#x.\n",
+ iface, debug_d2d_point_2f(&baseline_origin), glyph_run, brush, measuring_mode);
ID2D1RenderTarget_DrawGlyphRun(render_target->dxgi_target,
baseline_origin, glyph_run, brush, measuring_mode);
diff --git a/dlls/d2d1/device.c b/dlls/d2d1/device.c
index be8b7eab032..5e6655feba2 100644
--- a/dlls/d2d1/device.c
+++ b/dlls/d2d1/device.c
@@ -550,8 +550,8 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawLine(ID2D1DeviceContext *if
ID2D1GeometrySink *sink;
HRESULT hr;
- TRACE("iface %p, p0 {%.8e, %.8e}, p1 {%.8e, %.8e}, brush %p, stroke_width %.8e, stroke_style %p.\n",
- iface, p0.x, p0.y, p1.x, p1.y, brush, stroke_width, stroke_style);
+ TRACE("iface %p, p0 %s, p1 %s, brush %p, stroke_width %.8e, stroke_style %p.\n",
+ iface, debug_d2d_point_2f(&p0), debug_d2d_point_2f(&p1), brush, stroke_width, stroke_style);
if (FAILED(hr = ID2D1Factory_CreatePathGeometry(render_target->factory, &geometry)))
{
@@ -1108,8 +1108,8 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawTextLayout(ID2D1DeviceConte
struct d2d_draw_text_layout_ctx ctx;
HRESULT hr;
- TRACE("iface %p, origin {%.8e, %.8e}, layout %p, brush %p, options %#x.\n",
- iface, origin.x, origin.y, layout, brush, options);
+ TRACE("iface %p, origin %s, layout %p, brush %p, options %#x.\n",
+ iface, debug_d2d_point_2f(&origin), layout, brush, options);
ctx.brush = brush;
ctx.options = options;
@@ -1324,8 +1324,8 @@ static void STDMETHODCALLTYPE d2d_device_context_DrawGlyphRun(ID2D1DeviceContext
DWRITE_RENDERING_MODE rendering_mode;
HRESULT hr;
- TRACE("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, brush %p, measuring_mode %#x.\n",
- iface, baseline_origin.x, baseline_origin.y, glyph_run, brush, measuring_mode);
+ TRACE("iface %p, baseline_origin %s, glyph_run %p, brush %p, measuring_mode %#x.\n",
+ iface, debug_d2d_point_2f(&baseline_origin), glyph_run, brush, measuring_mode);
rendering_params = render_target->text_rendering_params ? render_target->text_rendering_params
: render_target->default_text_rendering_params;
@@ -1945,8 +1945,8 @@ static HRESULT STDMETHODCALLTYPE d2d_device_context_GetGlyphRunWorldBounds(ID2D1
D2D1_POINT_2F baseline_origin, const DWRITE_GLYPH_RUN *glyph_run,
DWRITE_MEASURING_MODE measuring_mode, D2D1_RECT_F *bounds)
{
- FIXME("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, measuring_mode %#x, bounds %p stub!\n", iface,
- baseline_origin.x, baseline_origin.y, glyph_run, measuring_mode, bounds);
+ FIXME("iface %p, baseline_origin %s, glyph_run %p, measuring_mode %#x, bounds %p stub!\n",
+ iface, debug_d2d_point_2f(&baseline_origin), glyph_run, measuring_mode, bounds);
return E_NOTIMPL;
}
@@ -2012,23 +2012,24 @@ static void STDMETHODCALLTYPE d2d_device_context_ID2D1DeviceContext_DrawGlyphRun
D2D1_POINT_2F baseline_origin, const DWRITE_GLYPH_RUN *glyph_run,
const DWRITE_GLYPH_RUN_DESCRIPTION *glyph_run_desc, ID2D1Brush *brush, DWRITE_MEASURING_MODE measuring_mode)
{
- FIXME("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, "
- "glyph_run_desc %p, brush %p, measuring_mode %#x stub!\n",
- iface, baseline_origin.x, baseline_origin.y, glyph_run, glyph_run_desc, brush, measuring_mode);
+ FIXME("iface %p, baseline_origin %s, glyph_run %p, glyph_run_desc %p, brush %p, measuring_mode %#x stub!\n",
+ iface, debug_d2d_point_2f(&baseline_origin), glyph_run, glyph_run_desc, brush, measuring_mode);
}
static void STDMETHODCALLTYPE d2d_device_context_DrawImage(ID2D1DeviceContext *iface, ID2D1Image *image,
const D2D1_POINT_2F *target_offset, const D2D1_RECT_F *image_rect, D2D1_INTERPOLATION_MODE interpolation_mode,
D2D1_COMPOSITE_MODE composite_mode)
{
- FIXME("iface %p, image %p, target_offset %p, image_rect %s, interpolation_mode %#x, composite_mode %#x stub!\n",
- iface, image, target_offset, debug_d2d_rect_f(image_rect), interpolation_mode, composite_mode);
+ FIXME("iface %p, image %p, target_offset %s, image_rect %s, interpolation_mode %#x, composite_mode %#x stub!\n",
+ iface, image, debug_d2d_point_2f(target_offset), debug_d2d_rect_f(image_rect),
+ interpolation_mode, composite_mode);
}
static void STDMETHODCALLTYPE d2d_device_context_DrawGdiMetafile(ID2D1DeviceContext *iface,
ID2D1GdiMetafile *metafile, const D2D1_POINT_2F *target_offset)
{
- FIXME("iface %p, metafile %p, target_offset %p stub!\n", iface, metafile, target_offset);
+ FIXME("iface %p, metafile %p, target_offset %s stub!\n",
+ iface, metafile, debug_d2d_point_2f(target_offset));
}
static void STDMETHODCALLTYPE d2d_device_context_ID2D1DeviceContext_DrawBitmap(ID2D1DeviceContext *iface,
diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c
index 29038ec91ee..2459b58c03d 100644
--- a/dlls/d2d1/factory.c
+++ b/dlls/d2d1/factory.c
@@ -577,7 +577,7 @@ void WINAPI D2D1MakeRotateMatrix(float angle, D2D1_POINT_2F center, D2D1_MATRIX_
{
float theta, sin_theta, cos_theta;
- TRACE("angle %.8e, center {%.8e, %.8e}, matrix %p.\n", angle, center.x, center.y, matrix);
+ TRACE("angle %.8e, center %s, matrix %p.\n", angle, debug_d2d_point_2f(¢er), matrix);
theta = angle * (M_PI / 180.0f);
sin_theta = sinf(theta);
diff --git a/dlls/d2d1/geometry.c b/dlls/d2d1/geometry.c
index d716fb128d7..421ba2b5515 100644
--- a/dlls/d2d1/geometry.c
+++ b/dlls/d2d1/geometry.c
@@ -2419,8 +2419,8 @@ static void STDMETHODCALLTYPE d2d_geometry_sink_BeginFigure(ID2D1GeometrySink *i
struct d2d_geometry *geometry = impl_from_ID2D1GeometrySink(iface);
struct d2d_figure *figure;
- TRACE("iface %p, start_point {%.8e, %.8e}, figure_begin %#x.\n",
- iface, start_point.x, start_point.y, figure_begin);
+ TRACE("iface %p, start_point %s, figure_begin %#x.\n",
+ iface, debug_d2d_point_2f(&start_point), figure_begin);
if (geometry->u.path.state != D2D_GEOMETRY_STATE_OPEN)
{
@@ -2882,7 +2882,7 @@ done:
static void STDMETHODCALLTYPE d2d_geometry_sink_AddLine(ID2D1GeometrySink *iface, D2D1_POINT_2F point)
{
- TRACE("iface %p, point {%.8e, %.8e}.\n", iface, point.x, point.y);
+ TRACE("iface %p, point %s.\n", iface, debug_d2d_point_2f(&point));
d2d_geometry_sink_AddLines(iface, &point, 1);
}
@@ -3164,9 +3164,9 @@ static HRESULT STDMETHODCALLTYPE d2d_path_geometry_StrokeContainsPoint(ID2D1Path
D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform,
float tolerance, BOOL *contains)
{
- FIXME("iface %p, point {%.8e, %.8e}, stroke_width %.8e, stroke_style %p, "
+ FIXME("iface %p, point %s, stroke_width %.8e, stroke_style %p, "
"transform %p, tolerance %.8e, contains %p stub!\n",
- iface, point.x, point.y, stroke_width, stroke_style, transform, tolerance, contains);
+ iface, debug_d2d_point_2f(&point), stroke_width, stroke_style, transform, tolerance, contains);
return E_NOTIMPL;
}
@@ -3177,8 +3177,8 @@ static HRESULT STDMETHODCALLTYPE d2d_path_geometry_FillContainsPoint(ID2D1PathGe
struct d2d_geometry *geometry = impl_from_ID2D1PathGeometry(iface);
D2D1_MATRIX_3X2_F g_i;
- TRACE("iface %p, point {%.8e, %.8e}, transform %p, tolerance %.8e, contains %p.\n",
- iface, point.x, point.y, transform, tolerance, contains);
+ TRACE("iface %p, point %s, transform %p, tolerance %.8e, contains %p.\n",
+ iface, debug_d2d_point_2f(&point), transform, tolerance, contains);
if (transform)
{
@@ -3609,9 +3609,8 @@ static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_StrokeContainsPoint(ID2D
D2D1_POINT_2F point, float stroke_width, ID2D1StrokeStyle *stroke_style, const D2D1_MATRIX_3X2_F *transform,
float tolerance, BOOL *contains)
{
- FIXME("iface %p, point {%.8e, %.8e}, stroke_width %.8e, stroke_style %p, "
- "transform %p, tolerance %.8e, contains %p stub!\n",
- iface, point.x, point.y, stroke_width, stroke_style, transform, tolerance, contains);
+ FIXME("iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p stub!\n",
+ iface, debug_d2d_point_2f(&point), stroke_width, stroke_style, transform, tolerance, contains);
return E_NOTIMPL;
}
@@ -3623,8 +3622,8 @@ static HRESULT STDMETHODCALLTYPE d2d_rectangle_geometry_FillContainsPoint(ID2D1R
D2D1_RECT_F *rect = &geometry->u.rectangle.rect;
float dx, dy;
- TRACE("iface %p, point {%.8e, %.8e}, transform %p, tolerance %.8e, contains %p.\n",
- iface, point.x, point.y, transform, tolerance, contains);
+ TRACE("iface %p, point %s, transform %p, tolerance %.8e, contains %p.\n",
+ iface, debug_d2d_point_2f(&point), transform, tolerance, contains);
if (transform)
{
@@ -3939,9 +3938,8 @@ static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_StrokeContainsPoint(ID
struct d2d_geometry *geometry = impl_from_ID2D1TransformedGeometry(iface);
D2D1_MATRIX_3X2_F g;
- TRACE("iface %p, point {%.8e, %.8e}, stroke_width %.8e, stroke_style %p, "
- "transform %p, tolerance %.8e, contains %p.\n",
- iface, point.x, point.y, stroke_width, stroke_style, transform, tolerance, contains);
+ TRACE("iface %p, point %s, stroke_width %.8e, stroke_style %p, transform %p, tolerance %.8e, contains %p.\n",
+ iface, debug_d2d_point_2f(&point), stroke_width, stroke_style, transform, tolerance, contains);
g = geometry->transform;
if (transform)
@@ -3957,8 +3955,8 @@ static HRESULT STDMETHODCALLTYPE d2d_transformed_geometry_FillContainsPoint(ID2D
struct d2d_geometry *geometry = impl_from_ID2D1TransformedGeometry(iface);
D2D1_MATRIX_3X2_F g;
- TRACE("iface %p, point {%.8e, %.8e}, transform %p, tolerance %.8e, contains %p.\n",
- iface, point.x, point.y, transform, tolerance, contains);
+ TRACE("iface %p, point %s, transform %p, tolerance %.8e, contains %p.\n",
+ iface, debug_d2d_point_2f(&point), transform, tolerance, contains);
g = geometry->transform;
if (transform)
diff --git a/dlls/d2d1/hwnd_render_target.c b/dlls/d2d1/hwnd_render_target.c
index 2c9481e5768..9b8771f895d 100644
--- a/dlls/d2d1/hwnd_render_target.c
+++ b/dlls/d2d1/hwnd_render_target.c
@@ -233,8 +233,8 @@ static void STDMETHODCALLTYPE d2d_hwnd_render_target_DrawLine(ID2D1HwndRenderTar
{
struct d2d_hwnd_render_target *render_target = impl_from_ID2D1HwndRenderTarget(iface);
- TRACE("iface %p, p0 {%.8e, %.8e}, p1 {%.8e, %.8e}, brush %p, stroke_width %.8e, stroke_style %p.\n",
- iface, p0.x, p0.y, p1.x, p1.y, brush, stroke_width, stroke_style);
+ TRACE("iface %p, p0 %s, p1 %s, brush %p, stroke_width %.8e, stroke_style %p.\n",
+ iface, debug_d2d_point_2f(&p0), debug_d2d_point_2f(&p1), brush, stroke_width, stroke_style);
ID2D1RenderTarget_DrawLine(render_target->dxgi_target, p0, p1, brush, stroke_width, stroke_style);
}
@@ -379,8 +379,8 @@ static void STDMETHODCALLTYPE d2d_hwnd_render_target_DrawTextLayout(ID2D1HwndRen
{
struct d2d_hwnd_render_target *render_target = impl_from_ID2D1HwndRenderTarget(iface);
- TRACE("iface %p, origin {%.8e, %.8e}, layout %p, brush %p, options %#x.\n",
- iface, origin.x, origin.y, layout, brush, options);
+ TRACE("iface %p, origin %s, layout %p, brush %p, options %#x.\n",
+ iface, debug_d2d_point_2f(&origin), layout, brush, options);
ID2D1RenderTarget_DrawTextLayout(render_target->dxgi_target, origin, layout, brush, options);
}
@@ -391,8 +391,8 @@ static void STDMETHODCALLTYPE d2d_hwnd_render_target_DrawGlyphRun(ID2D1HwndRende
{
struct d2d_hwnd_render_target *render_target = impl_from_ID2D1HwndRenderTarget(iface);
- TRACE("iface %p, baseline_origin {%.8e, %.8e}, glyph_run %p, brush %p, measuring_mode %#x.\n",
- iface, baseline_origin.x, baseline_origin.y, glyph_run, brush, measuring_mode);
+ TRACE("iface %p, baseline_origin %s, glyph_run %p, brush %p, measuring_mode %#x.\n",
+ iface, debug_d2d_point_2f(&baseline_origin), glyph_run, brush, measuring_mode);
ID2D1RenderTarget_DrawGlyphRun(render_target->dxgi_target,
baseline_origin, glyph_run, brush, measuring_mode);
--
2.11.0
Sept. 24, 2018
Re: [PATCH 4/4] quartz/filtergraph: Improve HRESULT propagation from IFilterGraph2_Connect().
by Alexandre Julliard
Zebediah Figura <z.figura12(a)gmail.com> writes:
> Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
> ---
> dlls/quartz/filtergraph.c | 15 +++++++++---
> dlls/quartz/tests/filtergraph.c | 51 ++++++++++++++++++++++++++++++++++++++---
> 2 files changed, 60 insertions(+), 6 deletions(-)
It still fails for me:
../../../tools/runtest -q -P wine -T ../../.. -M qcap.dll -p qcap_test.exe.so smartteefilter && touch smartteefilter.ok
smartteefilter.c:1570: Test failed: connecting Capture pin without first connecting Input pin returned 0x80040217
smartteefilter.c:1572: Test failed: connecting Preview pin without first connecting Input pin returned 0x80040217
make: *** [Makefile:227: smartteefilter.ok] Error 2
--
Alexandre Julliard
julliard(a)winehq.org
Sept. 24, 2018