winehq.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2025
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
List overview
wine-commits
May 2013
----- 2025 -----
February 2025
January 2025
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
----- 2003 -----
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
----- 2002 -----
December 2002
November 2002
October 2002
September 2002
August 2002
July 2002
June 2002
May 2002
April 2002
March 2002
February 2002
January 2002
----- 2001 -----
December 2001
November 2001
October 2001
September 2001
August 2001
July 2001
June 2001
May 2001
April 2001
March 2001
February 2001
wine-commits@winehq.org
2 participants
498 discussions
Start a n
N
ew thread
Alexandre Julliard : ntdll: Reimplement the x86_64 relay entry point in assembler.
by Alexandre Julliard
23 May '13
23 May '13
Module: wine Branch: master Commit: 45a2cf1e227de2408fa9c3222a6cffe5182048a6 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=45a2cf1e227de2408fa9c3222…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu May 23 11:50:46 2013 +0200 ntdll: Reimplement the x86_64 relay entry point in assembler. --- dlls/ntdll/relay.c | 59 ++++++++++++++++++++++++++++++--------------------- 1 files changed, 35 insertions(+), 24 deletions(-) diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c index 6736d0f..b6790da 100644 --- a/dlls/ntdll/relay.c +++ b/dlls/ntdll/relay.c @@ -592,27 +592,36 @@ static void WINAPI relay_call_regs( struct relay_descr *descr, INT_PTR idx, INT_ #elif defined(__x86_64__) -extern LONGLONG CDECL call_entry_point( void *func, int nb_args, const INT_PTR *args, int flags ); -__ASM_GLOBAL_FUNC( call_entry_point, +extern void * WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const INT_PTR *stack ); +__ASM_GLOBAL_FUNC( relay_call, "pushq %rbp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset 8\n\t") __ASM_CFI(".cfi_rel_offset %rbp,0\n\t") "movq %rsp,%rbp\n\t" __ASM_CFI(".cfi_def_cfa_register %rbp\n\t") - "pushq %rsi\n\t" - __ASM_CFI(".cfi_rel_offset %rsi,-8\n\t") - "pushq %rdi\n\t" - __ASM_CFI(".cfi_rel_offset %rdi,-16\n\t") - "movq %rcx,%rax\n\t" + "subq $0x30,%rsp\n\t" + "movq %rsi,0x20(%rsp)\n\t" + __ASM_CFI(".cfi_rel_offset %rsi,-16\n\t") + "movq %rdi,0x28(%rsp)\n\t" + __ASM_CFI(".cfi_rel_offset %rdi,-8\n\t") + /* trace the parameters */ + "movq %rcx,0x10(%rbp)\n\t" + "movq %rdx,0x18(%rbp)\n\t" + "movq %r8,0x20(%rbp)\n\t" + "call " __ASM_NAME("relay_trace_entry") "\n\t" + /* copy the arguments */ + "movzbq 0x1a(%rbp),%rdx\n\t" /* number of args */ "movq $4,%rcx\n\t" "cmp %rcx,%rdx\n\t" "cmovgq %rdx,%rcx\n\t" - "leaq 0(,%rcx,8),%rdx\n\t" + "leaq -16(,%rcx,8),%rdx\n\t" + "andq $~15,%rdx\n\t" "subq %rdx,%rsp\n\t" - "andq $~15,%rsp\n\t" + "movq 0x20(%rbp),%r8\n\t" /* original stack */ + "leaq 8(%r8),%rsi\n\t" "movq %rsp,%rdi\n\t" - "movq %r8,%rsi\n\t" "rep; movsq\n\t" + /* call the entry point */ "movq 0(%rsp),%rcx\n\t" "movq 8(%rsp),%rdx\n\t" "movq 16(%rsp),%r8\n\t" @@ -622,27 +631,29 @@ __ASM_GLOBAL_FUNC( call_entry_point, "movq %r8,%xmm2\n\t" "movq %r9,%xmm3\n\t" "callq *%rax\n\t" - "leaq -16(%rbp),%rsp\n\t" - "popq %rdi\n\t" - __ASM_CFI(".cfi_same_value %rdi\n\t") - "popq %rsi\n\t" + /* trace the return value */ + "leaq -0x30(%rbp),%rsp\n\t" + "movq 0x10(%rbp),%rcx\n\t" + "movq 0x18(%rbp),%rdx\n\t" + "movq 0x20(%rbp),%r8\n\t" + "movq %rax,%rsi\n\t" + "movaps %xmm0,0x10(%rbp)\n\t" + "movq %rax,%r9\n\t" + "call " __ASM_NAME("relay_trace_exit") "\n\t" + /* restore return value and return */ + "movq %rsi,%rax\n\t" + "movaps 0x10(%rbp),%xmm0\n\t" + "movq 0x20(%rsp),%rsi\n\t" __ASM_CFI(".cfi_same_value %rsi\n\t") + "movq 0x28(%rsp),%rdi\n\t" + __ASM_CFI(".cfi_same_value %rdi\n\t") + "movq %rbp,%rsp\n\t" __ASM_CFI(".cfi_def_cfa_register %rsp\n\t") "popq %rbp\n\t" __ASM_CFI(".cfi_adjust_cfa_offset -8\n\t") __ASM_CFI(".cfi_same_value %rbp\n\t") "ret") -static LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const INT_PTR *stack ) -{ - BYTE nb_args = LOBYTE(HIWORD(idx)); - BYTE flags = HIBYTE(HIWORD(idx)); - void *func = relay_trace_entry( descr, idx, stack ); - LONGLONG ret = call_entry_point( func, nb_args, stack + 1, flags ); - relay_trace_exit( descr, idx, stack, ret ); - return ret; -} - static void WINAPI relay_call_regs( struct relay_descr *descr, INT_PTR idx, INT_PTR *stack ) { assert(0); /* should never be called */
1
0
0
0
Alexandre Julliard : ntdll: Reimplement the i386 relay entry point in assembler.
by Alexandre Julliard
23 May '13
23 May '13
Module: wine Branch: master Commit: fb75238f7e3bc5611912ed7103d39f5a3c65d11b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fb75238f7e3bc5611912ed710…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu May 23 13:16:23 2013 +0200 ntdll: Reimplement the i386 relay entry point in assembler. --- dlls/ntdll/relay.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 58 insertions(+), 9 deletions(-) diff --git a/dlls/ntdll/relay.c b/dlls/ntdll/relay.c index f677082..6736d0f 100644 --- a/dlls/ntdll/relay.c +++ b/dlls/ntdll/relay.c @@ -416,15 +416,64 @@ __ASM_GLOBAL_FUNC( call_entry_point, __ASM_CFI(".cfi_same_value %ebp\n\t") "ret" ) -static LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const INT_PTR *stack ) -{ - BYTE nb_args = LOBYTE(HIWORD(idx)); - BYTE flags = HIBYTE(HIWORD(idx)); - void *func = relay_trace_entry( descr, idx, stack ); - LONGLONG ret = call_entry_point( func, nb_args, stack + 1, flags ); - relay_trace_exit( descr, idx, stack, ret ); - return ret; -} +extern LONGLONG WINAPI relay_call( struct relay_descr *descr, unsigned int idx, const INT_PTR *stack ); +__ASM_GLOBAL_FUNC( relay_call, + "pushl %ebp\n\t" + __ASM_CFI(".cfi_adjust_cfa_offset 4\n\t") + __ASM_CFI(".cfi_rel_offset %ebp,0\n\t") + "movl %esp,%ebp\n\t" + __ASM_CFI(".cfi_def_cfa_register %ebp\n\t") + "pushl %esi\n\t" + __ASM_CFI(".cfi_rel_offset %esi,-4\n\t") + "pushl %edi\n\t" + __ASM_CFI(".cfi_rel_offset %edi,-8\n\t") + "pushl %ecx\n\t" + __ASM_CFI(".cfi_rel_offset %ecx,-12\n\t") + /* trace the parameters */ + "pushl 16(%ebp)\n\t" + "pushl 12(%ebp)\n\t" + "pushl 8(%ebp)\n\t" + "call " __ASM_NAME("relay_trace_entry") "\n\t" + /* copy the arguments*/ + "movzbl 14(%ebp),%ecx\n\t" /* number of args */ + "jecxz 1f\n\t" + "leal 0(,%ecx,4),%edx\n\t" + "subl %edx,%esp\n\t" + "andl $~15,%esp\n\t" + "movl 16(%ebp),%esi\n\t" + "addl $4,%esi\n\t" + "movl %esp,%edi\n\t" + "cld\n\t" + "rep; movsl\n\t" + "testb $2,15(%ebp)\n\t" /* (flags & 2) -> thiscall */ + "jz 1f\n\t" + "popl %ecx\n" + /* call the entry point */ + "1:\tcall *%eax\n\t" + "movl %eax,%esi\n\t" + "movl %edx,%edi\n\t" + /* trace the return value */ + "leal -20(%ebp),%esp\n\t" + "pushl %edx\n\t" + "pushl %eax\n\t" + "pushl 16(%ebp)\n\t" + "pushl 12(%ebp)\n\t" + "pushl 8(%ebp)\n\t" + "call " __ASM_NAME("relay_trace_exit") "\n\t" + /* restore return value and return */ + "leal -12(%ebp),%esp\n\t" + "movl %esi,%eax\n\t" + "movl %edi,%edx\n\t" + "popl %ecx\n\t" + __ASM_CFI(".cfi_same_value %ecx\n\t") + "popl %edi\n\t" + __ASM_CFI(".cfi_same_value %edi\n\t") + "popl %esi\n\t" + __ASM_CFI(".cfi_same_value %esi\n\t") + "popl %ebp\n\t" + __ASM_CFI(".cfi_def_cfa %esp,4\n\t") + __ASM_CFI(".cfi_same_value %ebp\n\t") + "ret $12" ) void WINAPI __regs_relay_call_regs( struct relay_descr *descr, unsigned int idx, unsigned int orig_eax, unsigned int ret_addr,
1
0
0
0
Alexandre Julliard : ntdll: Make the entire relay entry point routine CPU-specific.
by Alexandre Julliard
23 May '13
23 May '13
Module: wine Branch: master Commit: f4e58868d499489d6c6e560fed85231eaa36263c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f4e58868d499489d6c6e560fe…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Thu May 23 11:45:39 2013 +0200 ntdll: Make the entire relay entry point routine CPU-specific. --- dlls/ntdll/relay.c | 291 ++++++++++++++++++++++++++++++---------------------- 1 files changed, 166 insertions(+), 125 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=f4e58868d499489d6c6e5…
1
0
0
0
Roderick Colenbrander : winex11: Store opengl swap interval with gl_drawable.
by Alexandre Julliard
23 May '13
23 May '13
Module: wine Branch: master Commit: 1f47580e9ccc9c22435d3933528d89cceb17858b URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1f47580e9ccc9c22435d39335…
Author: Roderick Colenbrander <thunderbird2k(a)gmail.com> Date: Sat May 11 17:55:18 2013 -0700 winex11: Store opengl swap interval with gl_drawable. --- dlls/opengl32/tests/opengl.c | 2 +- dlls/winex11.drv/opengl.c | 42 ++++++++++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c index 066b026..3aa2c40 100644 --- a/dlls/opengl32/tests/opengl.c +++ b/dlls/opengl32/tests/opengl.c @@ -1581,7 +1581,7 @@ static void test_swap_control(HDC oldhdc) * is not global or shared among contexts. */ interval = pwglGetSwapIntervalEXT(); - todo_wine ok(interval == 1, "Expected swap interval 1, got %d\n", interval); + ok(interval == 1, "Expected swap interval 1, got %d\n", interval); ret = wglDeleteContext(ctx1); ok(ret, "Failed to delete GL context, last error %#x.\n", GetLastError()); diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index c617245..05b8f60 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -251,6 +251,7 @@ struct gl_drawable const struct wgl_pixel_format *format; /* pixel format for the drawable */ XVisualInfo *visual; /* information about the GL visual */ RECT rect; /* drawable rect, relative to whole window drawable */ + int swap_interval; }; /* X context to associate a struct gl_drawable to an hwnd */ @@ -271,7 +272,6 @@ static struct wgl_pixel_format *pixel_formats; static int nb_pixel_formats, nb_onscreen_formats; static int use_render_texture_emulation = 1; static BOOL has_swap_control; -static int swap_interval = 1; static CRITICAL_SECTION context_section; static CRITICAL_SECTION_DEBUG critsect_debug = @@ -1223,6 +1223,10 @@ static void free_gl_drawable( struct gl_drawable *gl ) static BOOL create_gl_drawable( HWND hwnd, HWND parent, struct gl_drawable *gl ) { gl->drawable = 0; + /* Default GLX and WGL swap interval is 1, but in case of glXSwapIntervalSGI + * there is no way to query it, so we have to store it here. + */ + gl->swap_interval = 1; if (GetAncestor( hwnd, GA_PARENT ) == GetDesktopWindow()) /* top-level window */ { @@ -2866,9 +2870,24 @@ static const GLubyte *X11DRV_wglGetExtensionsStringEXT(void) */ static int X11DRV_wglGetSwapIntervalEXT(void) { - /* GLX_SGI_swap_control doesn't have any provisions for getting the swap - * interval, so the swap interval has to be tracked. */ + struct wgl_context *ctx = NtCurrentTeb()->glContext; + struct gl_drawable *gl; + int swap_interval; + TRACE("()\n"); + + if (!(gl = get_gl_drawable( WindowFromDC( ctx->hdc ), ctx->hdc ))) + { + /* This can't happen because a current WGL context is required to get + * here. Likely the application is buggy. + */ + WARN("No GL drawable found, returning swap interval 0\n"); + return 0; + } + + swap_interval = gl->swap_interval; + release_gl_drawable(gl); + return swap_interval; } @@ -2879,6 +2898,8 @@ static int X11DRV_wglGetSwapIntervalEXT(void) */ static BOOL X11DRV_wglSwapIntervalEXT(int interval) { + struct wgl_context *ctx = NtCurrentTeb()->glContext; + struct gl_drawable *gl; BOOL ret = TRUE; TRACE("(%d)\n", interval); @@ -2888,13 +2909,20 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval) SetLastError(ERROR_INVALID_DATA); return FALSE; } - else if (!has_swap_control && interval == 0) + + if (!(gl = get_gl_drawable( WindowFromDC( ctx->hdc ), ctx->hdc ))) + { + SetLastError(ERROR_DC_NOT_FOUND); + return FALSE; + } + + if (!has_swap_control && interval == 0) { /* wglSwapIntervalEXT considers an interval value of zero to mean that * vsync should be disabled, but glXSwapIntervalSGI considers such a * value to be an error. Just silently ignore the request for now. */ WARN("Request to disable vertical sync is not handled\n"); - swap_interval = 0; + gl->swap_interval = 0; } else { @@ -2904,11 +2932,13 @@ static BOOL X11DRV_wglSwapIntervalEXT(int interval) WARN("GLX_SGI_swap_control extension is not available\n"); if (ret) - swap_interval = interval; + gl->swap_interval = interval; else SetLastError(ERROR_DC_NOT_FOUND); } + release_gl_drawable(gl); + return ret; }
1
0
0
0
André Hentschel : advapi32/tests: Fix copy&paste typo.
by Alexandre Julliard
23 May '13
23 May '13
Module: wine Branch: master Commit: 1510838d1f166a1343b144c34930aaab42b992a1 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1510838d1f166a1343b144c34…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Thu May 23 00:45:08 2013 +0200 advapi32/tests: Fix copy&paste typo. --- dlls/advapi32/tests/registry.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dlls/advapi32/tests/registry.c b/dlls/advapi32/tests/registry.c index b2483a7..1784118 100644 --- a/dlls/advapi32/tests/registry.c +++ b/dlls/advapi32/tests/registry.c @@ -2156,16 +2156,16 @@ static void test_classesroot(void) ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError()); /* try to find the value in user's classes */ - res = RegQueryValueExA(hkcr, "val0", NULL, &type, (LPBYTE)buffer, &size); + res = RegQueryValueExA(hkey, "val0", NULL, &type, (LPBYTE)buffer, &size); ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d\n", res); ok(!strcmp( buffer, "hkcr" ), "value set to '%s'\n", buffer ); /* modify the value in user's classes */ - res = RegSetValueExA(hkcr, "val0", 0, REG_SZ, (const BYTE *)"user", sizeof("user")); + res = RegSetValueExA(hkey, "val0", 0, REG_SZ, (const BYTE *)"user", sizeof("user")); ok(res == ERROR_SUCCESS, "RegSetValueExA failed: %d, GLE=%x\n", res, GetLastError()); /* check if the value is also modified in hkcr */ - res = RegQueryValueExA(hkey, "val0", NULL, &type, (LPBYTE)buffer, &size); + res = RegQueryValueExA(hkcr, "val0", NULL, &type, (LPBYTE)buffer, &size); ok(res == ERROR_SUCCESS, "RegQueryValueExA failed: %d, GLE=%x\n", res, GetLastError()); ok(!strcmp( buffer, "user" ), "value set to '%s'\n", buffer );
1
0
0
0
Andrew Eikum : gdiplus: Implement GdipResetImageAttributes.
by Alexandre Julliard
22 May '13
22 May '13
Module: wine Branch: master Commit: 2b8b64f9abc2575da7e7beb3adb310ccf98cfcac URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2b8b64f9abc2575da7e7beb3a…
Author: Andrew Eikum <aeikum(a)codeweavers.com> Date: Wed May 22 11:12:18 2013 -0500 gdiplus: Implement GdipResetImageAttributes. --- dlls/gdiplus/gdiplus.spec | 2 +- dlls/gdiplus/imageattributes.c | 17 ++++++++++ dlls/gdiplus/tests/image.c | 65 +++++++++++++++++++++++++++++++++++++-- include/gdiplusflat.h | 2 + 4 files changed, 81 insertions(+), 5 deletions(-) diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 4f30ed1..cee3ea6 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -455,7 +455,7 @@ 455 stdcall GdipReleaseDC(ptr ptr) 456 stdcall GdipRemovePropertyItem(ptr long) 457 stdcall GdipResetClip(ptr) -458 stub GdipResetImageAttributes +458 stdcall GdipResetImageAttributes(ptr long) 459 stdcall GdipResetLineTransform(ptr) 460 stdcall GdipResetPageTransform(ptr) 461 stdcall GdipResetPath(ptr) diff --git a/dlls/gdiplus/imageattributes.c b/dlls/gdiplus/imageattributes.c index bd5c082..0b09547 100644 --- a/dlls/gdiplus/imageattributes.c +++ b/dlls/gdiplus/imageattributes.c @@ -270,3 +270,20 @@ GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes *imageAtt return NotImplemented; } + +GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes *imageAttr, + ColorAdjustType type) +{ + TRACE("(%p,%u)\n", imageAttr, type); + + if(!imageAttr || type >= ColorAdjustTypeCount) + return InvalidParameter; + + memset(&imageAttr->colorkeys[type], 0, sizeof(imageAttr->colorkeys[type])); + memset(&imageAttr->colormatrices[type], 0, sizeof(imageAttr->colormatrices[type])); + memset(&imageAttr->colorremaptables[type], 0, sizeof(imageAttr->colorremaptables[type])); + memset(&imageAttr->gamma_enabled[type], 0, sizeof(imageAttr->gamma_enabled[type])); + memset(&imageAttr->gamma[type], 0, sizeof(imageAttr->gamma[type])); + + return Ok; +} diff --git a/dlls/gdiplus/tests/image.c b/dlls/gdiplus/tests/image.c index 6b4a34c..18e159b 100644 --- a/dlls/gdiplus/tests/image.c +++ b/dlls/gdiplus/tests/image.c @@ -2211,6 +2211,17 @@ static void test_colormatrix(void) expect(Ok, stat); ok(color_match(0xeeff40cc, color, 3), "expected 0xeeff40cc, got 0x%08x\n", color); + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,1,1, 0,0,1,1, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0xff40ccee, color, 1), "Expected ff40ccee, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); GdipDisposeImage((GpImage*)bitmap2); @@ -2273,6 +2284,17 @@ static void test_gamma(void) expect(Ok, stat); ok(color_match(0xff20ffff, color, 1), "Expected ff20ffff, got %.8x\n", color); + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,1,1, 0,0,1,1, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0xff80ffff, color, 1), "Expected ff80ffff, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); GdipDisposeImage((GpImage*)bitmap2); @@ -2604,6 +2626,17 @@ static void test_remaptable(void) expect(Ok, stat); ok(color_match(0xffff00ff, color, 1), "Expected ffff00ff, got %.8x\n", color); + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,1,1, 0,0,1,1, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0xff00ff00, color, 1), "Expected ff00ff00, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); GdipDisposeImage((GpImage*)bitmap2); @@ -2661,19 +2694,43 @@ static void test_colorkey(void) stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); expect(Ok, stat); - ok(color_match(0x00000000, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0x00000000, color, 1), "Expected 00000000, got %.8x\n", color); stat = GdipBitmapGetPixel(bitmap2, 0, 1, &color); expect(Ok, stat); - ok(color_match(0x00000000, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0x00000000, color, 1), "Expected 00000000, got %.8x\n", color); stat = GdipBitmapGetPixel(bitmap2, 1, 0, &color); expect(Ok, stat); - ok(color_match(0x00000000, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0x00000000, color, 1), "Expected 00000000, got %.8x\n", color); stat = GdipBitmapGetPixel(bitmap2, 1, 1, &color); expect(Ok, stat); - ok(color_match(0xffffffff, color, 1), "Expected ffff00ff, got %.8x\n", color); + ok(color_match(0xffffffff, color, 1), "Expected ffffffff, got %.8x\n", color); + + stat = GdipResetImageAttributes(imageattr, ColorAdjustTypeDefault); + expect(Ok, stat); + + stat = GdipDrawImageRectRectI(graphics, (GpImage*)bitmap1, 0,0,2,2, 0,0,2,2, + UnitPixel, imageattr, NULL, NULL); + expect(Ok, stat); + + stat = GdipBitmapGetPixel(bitmap2, 0, 0, &color); + expect(Ok, stat); + ok(color_match(0x20405060, color, 1), "Expected 20405060, got %.8x\n", color); + + stat = GdipBitmapGetPixel(bitmap2, 0, 1, &color); + expect(Ok, stat); + ok(color_match(0x40506070, color, 1), "Expected 40506070, got %.8x\n", color); + + stat = GdipBitmapGetPixel(bitmap2, 1, 0, &color); + expect(Ok, stat); + ok(color_match(0x60708090, color, 1), "Expected 60708090, got %.8x\n", color); + + stat = GdipBitmapGetPixel(bitmap2, 1, 1, &color); + expect(Ok, stat); + ok(color_match(0xffffffff, color, 1), "Expected ffffffff, got %.8x\n", color); + GdipDeleteGraphics(graphics); GdipDisposeImage((GpImage*)bitmap1); diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index c622431..0753585 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -458,6 +458,8 @@ GpStatus WINGDIPAPI GdipSetImageAttributesToIdentity(GpImageAttributes*, ColorAdjustType); GpStatus WINGDIPAPI GdipSetImageAttributesWrapMode(GpImageAttributes*,WrapMode, ARGB,BOOL); +GpStatus WINGDIPAPI GdipResetImageAttributes(GpImageAttributes*, + ColorAdjustType); /* LinearGradientBrush */ GpStatus WINGDIPAPI GdipCreateLineBrush(GDIPCONST GpPointF*,GDIPCONST GpPointF*,
1
0
0
0
Jacek Caban : ieframe: Fixed handling documents that don' t report their ready state.
by Alexandre Julliard
22 May '13
22 May '13
Module: wine Branch: master Commit: 2c6b5d33d1417e9db4e3b93aa95e155d1918c1d8 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2c6b5d33d1417e9db4e3b93aa…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed May 22 16:08:54 2013 +0200 ieframe: Fixed handling documents that don't report their ready state. --- dlls/ieframe/dochost.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/dlls/ieframe/dochost.c b/dlls/ieframe/dochost.c index 76b8950..8c5d4b5 100644 --- a/dlls/ieframe/dochost.c +++ b/dlls/ieframe/dochost.c @@ -310,6 +310,10 @@ HRESULT dochost_object_available(DocHost *This, IUnknown *doc) push_ready_state_task(This, READYSTATE_COMPLETE); if(ready_state != READYSTATE_COMPLETE || This->doc_navigate) advise_prop_notif(This, TRUE); + }else if(!This->doc_navigate) { + /* If we can't get document's ready state, there is not much we can do. + * Assume that document is complete at this point. */ + push_ready_state_task(This, READYSTATE_COMPLETE); } return S_OK;
1
0
0
0
Jacek Caban : ieframe: Use IOleObject:: DoVerb if IHlink interface is not available.
by Alexandre Julliard
22 May '13
22 May '13
Module: wine Branch: master Commit: 14ad0a1a842eab9e7c53c3c46dc1164cac8cdc52 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=14ad0a1a842eab9e7c53c3c46…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Wed May 22 16:08:40 2013 +0200 ieframe: Use IOleObject::DoVerb if IHlink interface is not available. --- dlls/ieframe/dochost.c | 30 ++++++++++++++++++++++-------- 1 files changed, 22 insertions(+), 8 deletions(-) diff --git a/dlls/ieframe/dochost.c b/dlls/ieframe/dochost.c index c717d8b..76b8950 100644 --- a/dlls/ieframe/dochost.c +++ b/dlls/ieframe/dochost.c @@ -121,15 +121,29 @@ static void object_available(DocHost *This) } hres = IUnknown_QueryInterface(This->document, &IID_IHlinkTarget, (void**)&hlink); - if(FAILED(hres)) { - FIXME("Could not get IHlinkTarget interface\n"); - return; - } + if(SUCCEEDED(hres)) { + hres = IHlinkTarget_Navigate(hlink, 0, NULL); + IHlinkTarget_Release(hlink); + if(FAILED(hres)) + FIXME("Navigate failed\n"); + }else { + IOleObject *ole_object; + RECT rect; - hres = IHlinkTarget_Navigate(hlink, 0, NULL); - IHlinkTarget_Release(hlink); - if(FAILED(hres)) - FIXME("Navigate failed\n"); + TRACE("No IHlink iface\n"); + + hres = IUnknown_QueryInterface(This->document, &IID_IOleObject, (void**)&ole_object); + if(FAILED(hres)) { + FIXME("Could not get IOleObject iface: %08x\n", hres); + return; + } + + GetClientRect(This->hwnd, &rect); + hres = IOleObject_DoVerb(ole_object, OLEIVERB_SHOW, NULL, &This->IOleClientSite_iface, -1, This->hwnd, &rect); + IOleObject_Release(ole_object); + if(FAILED(hres)) + FIXME("DoVerb failed: %08x\n", hres); + } } static HRESULT get_doc_ready_state(DocHost *This, READYSTATE *ret)
1
0
0
0
Akihiro Sagawa : gdi32: Use the default character when the glyph is missing .
by Alexandre Julliard
22 May '13
22 May '13
Module: wine Branch: master Commit: 15aa8daf6447b6f819dfc8de15db7db7645738ef URL:
http://source.winehq.org/git/wine.git/?a=commit;h=15aa8daf6447b6f819dfc8de1…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Wed May 22 19:46:31 2013 +0900 gdi32: Use the default character when the glyph is missing. --- dlls/gdi32/freetype.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 50bd52b..e972c98 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -7301,6 +7301,7 @@ static BOOL get_glyph_index_linked(GdiFont *font, UINT c, GdiFont **linked_font, return TRUE; } } + *glyph = get_default_char_index(font); return FALSE; }
1
0
0
0
Akihiro Sagawa : gdi32: Add a helper to get the default character index.
by Alexandre Julliard
22 May '13
22 May '13
Module: wine Branch: master Commit: f6ea5c8a0f94c03d88376e69db31ead707ae4028 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f6ea5c8a0f94c03d88376e69d…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Wed May 22 19:46:28 2013 +0900 gdi32: Add a helper to get the default character index. --- dlls/gdi32/freetype.c | 31 ++++++++++++++++++++----------- 1 files changed, 20 insertions(+), 11 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index bc43772..50bd52b 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -5817,6 +5817,25 @@ static FT_UInt get_glyph_index(const GdiFont *font, UINT glyph) return glyphId; } +static FT_UInt get_default_char_index(GdiFont *font) +{ + FT_UInt default_char; + + if (FT_IS_SFNT(font->ft_face)) + { + TT_OS2 *pOS2 = pFT_Get_Sfnt_Table(font->ft_face, ft_sfnt_os2); + default_char = (pOS2->usDefaultChar ? get_glyph_index(font, pOS2->usDefaultChar) : 0); + } + else + { + TEXTMETRICW textm; + get_text_metrics(font, &textm); + default_char = textm.tmDefaultChar; + } + + return default_char; +} + /************************************************************* * freetype_GetGlyphIndices */ @@ -5849,17 +5868,7 @@ static DWORD freetype_GetGlyphIndices( PHYSDEV dev, LPCWSTR lpstr, INT count, LP { if (!got_default) { - if (FT_IS_SFNT(physdev->font->ft_face)) - { - TT_OS2 *pOS2 = pFT_Get_Sfnt_Table(physdev->font->ft_face, ft_sfnt_os2); - default_char = (pOS2->usDefaultChar ? get_glyph_index(physdev->font, pOS2->usDefaultChar) : 0); - } - else - { - TEXTMETRICW textm; - get_text_metrics(physdev->font, &textm); - default_char = textm.tmDefaultChar; - } + default_char = get_default_char_index(physdev->font); got_default = TRUE; } pgi[i] = default_char;
1
0
0
0
← Newer
1
...
13
14
15
16
17
18
19
...
50
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Results per page:
10
25
50
100
200