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
November 2012
----- 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
708 discussions
Start a n
N
ew thread
Alexandre Julliard : user32: Add some error checking in ScreenToClient and ClientToScreen.
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 7fc61f6fea27d207706f896dbf47285516ebe760 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=7fc61f6fea27d207706f896db…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Nov 14 16:29:39 2012 +0100 user32: Add some error checking in ScreenToClient and ClientToScreen. --- dlls/user32/winpos.c | 62 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 42 insertions(+), 20 deletions(-) diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c index c620df9..0ce3ddd 100644 --- a/dlls/user32/winpos.c +++ b/dlls/user32/winpos.c @@ -235,26 +235,6 @@ BOOL WINAPI GetClientRect( HWND hwnd, LPRECT rect ) } -/******************************************************************* - * ClientToScreen (USER32.@) - */ -BOOL WINAPI ClientToScreen( HWND hwnd, LPPOINT lppnt ) -{ - MapWindowPoints( hwnd, 0, lppnt, 1 ); - return TRUE; -} - - -/******************************************************************* - * ScreenToClient (USER32.@) - */ -BOOL WINAPI ScreenToClient( HWND hwnd, LPPOINT lppnt ) -{ - MapWindowPoints( 0, hwnd, lppnt, 1 ); - return TRUE; -} - - /*********************************************************************** * list_children_from_point * @@ -588,6 +568,48 @@ INT WINAPI MapWindowPoints( HWND hwndFrom, HWND hwndTo, LPPOINT lppt, UINT count } +/******************************************************************* + * ClientToScreen (USER32.@) + */ +BOOL WINAPI ClientToScreen( HWND hwnd, LPPOINT lppnt ) +{ + POINT offset; + BOOL mirrored; + + if (!hwnd) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return FALSE; + } + if (!WINPOS_GetWinOffset( hwnd, 0, &mirrored, &offset )) return FALSE; + lppnt->x += offset.x; + lppnt->y += offset.y; + if (mirrored) lppnt->x = -lppnt->x; + return TRUE; +} + + +/******************************************************************* + * ScreenToClient (USER32.@) + */ +BOOL WINAPI ScreenToClient( HWND hwnd, LPPOINT lppnt ) +{ + POINT offset; + BOOL mirrored; + + if (!hwnd) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return FALSE; + } + if (!WINPOS_GetWinOffset( 0, hwnd, &mirrored, &offset )) return FALSE; + lppnt->x += offset.x; + lppnt->y += offset.y; + if (mirrored) lppnt->x = -lppnt->x; + return TRUE; +} + + /*********************************************************************** * IsIconic (USER32.@) */
1
0
0
0
Alexandre Julliard : user32: Properly set last error in MapWindowPoints.
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 5dea6543170fd12928cf2196b55fec9c2fe82c75 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5dea6543170fd12928cf2196b…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Nov 14 16:26:13 2012 +0100 user32: Properly set last error in MapWindowPoints. --- dlls/user32/winpos.c | 36 ++++++++++++++++++++++++------------ 1 files changed, 24 insertions(+), 12 deletions(-) diff --git a/dlls/user32/winpos.c b/dlls/user32/winpos.c index eda5b78..c620df9 100644 --- a/dlls/user32/winpos.c +++ b/dlls/user32/winpos.c @@ -422,11 +422,11 @@ HWND WINAPI ChildWindowFromPointEx( HWND hwndParent, POINT pt, UINT uFlags) * Calculate the offset between the origin of the two windows. Used * to implement MapWindowPoints. */ -static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) +static BOOL WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored, POINT *ret_offset ) { WND * wndPtr; POINT offset; - BOOL mirror_from, mirror_to; + BOOL mirror_from, mirror_to, ret; HWND hwnd; offset.x = offset.y = 0; @@ -435,7 +435,11 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) /* Translate source window origin to screen coords */ if (hwndFrom) { - if (!(wndPtr = WIN_GetPtr( hwndFrom ))) return offset; + if (!(wndPtr = WIN_GetPtr( hwndFrom ))) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return FALSE; + } if (wndPtr == WND_OTHER_PROCESS) goto other_process; if (wndPtr != WND_DESKTOP) { @@ -466,7 +470,11 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) /* Translate origin to destination window coords */ if (hwndTo) { - if (!(wndPtr = WIN_GetPtr( hwndTo ))) return offset; + if (!(wndPtr = WIN_GetPtr( hwndTo ))) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return FALSE; + } if (wndPtr == WND_OTHER_PROCESS) goto other_process; if (wndPtr != WND_DESKTOP) { @@ -496,35 +504,37 @@ static POINT WINPOS_GetWinOffset( HWND hwndFrom, HWND hwndTo, BOOL *mirrored ) *mirrored = mirror_from ^ mirror_to; if (mirror_from) offset.x = -offset.x; - return offset; + *ret_offset = offset; + return TRUE; other_process: /* one of the parents may belong to another process, do it the hard way */ - offset.x = offset.y = 0; SERVER_START_REQ( get_windows_offset ) { req->from = wine_server_user_handle( hwndFrom ); req->to = wine_server_user_handle( hwndTo ); - if (!wine_server_call( req )) + if ((ret = !wine_server_call_err( req ))) { - offset.x = reply->x; - offset.y = reply->y; + ret_offset->x = reply->x; + ret_offset->y = reply->y; *mirrored = reply->mirror; } } SERVER_END_REQ; - return offset; + return ret; } /* map coordinates of a window region */ void map_window_region( HWND from, HWND to, HRGN hrgn ) { BOOL mirrored; - POINT offset = WINPOS_GetWinOffset( from, to, &mirrored ); + POINT offset; UINT i, size; RGNDATA *data; HRGN new_rgn; RECT *rect; + if (!WINPOS_GetWinOffset( from, to, &mirrored, &offset )) return; + if (!mirrored) { OffsetRgn( hrgn, offset.x, offset.y ); @@ -557,9 +567,11 @@ void map_window_region( HWND from, HWND to, HRGN hrgn ) INT WINAPI MapWindowPoints( HWND hwndFrom, HWND hwndTo, LPPOINT lppt, UINT count ) { BOOL mirrored; - POINT offset = WINPOS_GetWinOffset( hwndFrom, hwndTo, &mirrored ); + POINT offset; UINT i; + if (!WINPOS_GetWinOffset( hwndFrom, hwndTo, &mirrored, &offset )) return 0; + for (i = 0; i < count; i++) { lppt[i].x += offset.x;
1
0
0
0
Alexandre Julliard : user32: Add helper functions for loading and saving system parameter registry entries .
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: fb1c533e94578f1fb21b6e53b999517ca29f987c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=fb1c533e94578f1fb21b6e53b…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Nov 14 13:22:25 2012 +0100 user32: Add helper functions for loading and saving system parameter registry entries. --- dlls/user32/sysparams.c | 79 +++++++++++++++++++++------------------------- 1 files changed, 36 insertions(+), 43 deletions(-) diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 5070469..fa97815 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -606,7 +606,7 @@ static void SYSPARAMS_NotifyChange( UINT uiAction, UINT fWinIni ) /*********************************************************************** * Loads system parameter from user profile. */ -static BOOL SYSPARAMS_LoadRaw( LPCWSTR lpRegKey, LPCWSTR lpValName, void *lpBuf, DWORD count ) +static BOOL SYSPARAMS_Load( LPCWSTR lpRegKey, LPCWSTR lpValName, void *lpBuf, DWORD count ) { BOOL ret = FALSE; DWORD type; @@ -629,11 +629,6 @@ static BOOL SYSPARAMS_LoadRaw( LPCWSTR lpRegKey, LPCWSTR lpValName, void *lpBuf, return ret; } -static BOOL SYSPARAMS_Load( LPCWSTR lpRegKey, LPCWSTR lpValName, LPWSTR lpBuf, DWORD count ) -{ - return SYSPARAMS_LoadRaw( lpRegKey, lpValName, (LPBYTE)lpBuf, count ); -} - /*********************************************************************** * Saves system parameter to user profile. */ @@ -701,6 +696,28 @@ static BOOL SYSPARAMS_SaveLogFont( LPCWSTR lpRegKey, LPCWSTR lpValName, sizeof(LOGFONTW), REG_BINARY, fWinIni ); } +/* load a value to a registry entry */ +static BOOL load_entry( struct sysparam_entry *entry, void *data, DWORD size ) +{ + BOOL ret = SYSPARAMS_Load( entry->regkey, entry->regval, data, size ); + entry->loaded = TRUE; + return ret; +} + +/* save a value to a registry entry */ +static BOOL save_entry( const struct sysparam_entry *entry, const void *data, DWORD size, + DWORD type, UINT flags ) +{ + if (!SYSPARAMS_SaveRaw( entry->regkey, entry->regval, data, size, type, flags )) return FALSE; + if (entry->mirror) SYSPARAMS_SaveRaw( entry->mirror, entry->regval, data, size, type, flags ); + return TRUE; +} + +/* save a string value to a registry entry */ +static BOOL save_entry_string( const struct sysparam_entry *entry, const WCHAR *str, UINT flags ) +{ + return save_entry( entry, str, (strlenW(str) + 1) * sizeof(WCHAR), REG_SZ, flags ); +} static inline HDC get_display_dc(void) { @@ -1042,9 +1059,7 @@ static BOOL get_uint_entry( union sysparam_all_entry *entry, UINT int_param, voi { WCHAR buf[32]; - if (SYSPARAMS_Load( entry->hdr.regkey, entry->hdr.regval, buf, sizeof(buf) )) - entry->uint.val = atoiW( buf ); - entry->hdr.loaded = TRUE; + if (load_entry( &entry->hdr, buf, sizeof(buf) )) entry->uint.val = atoiW( buf ); } *(UINT *)ptr_param = entry->uint.val; return TRUE; @@ -1056,8 +1071,7 @@ static BOOL set_uint_entry( union sysparam_all_entry *entry, UINT int_param, voi WCHAR buf[32]; wsprintfW( buf, CSu, int_param ); - if (!SYSPARAMS_Save( entry->hdr.regkey, entry->hdr.regval, buf, flags )) return FALSE; - if (entry->hdr.mirror) SYSPARAMS_Save( entry->hdr.mirror, entry->hdr.regval, buf, flags ); + if (!save_entry_string( &entry->hdr, buf, flags )) return FALSE; entry->uint.val = int_param; entry->hdr.loaded = TRUE; return TRUE; @@ -1069,8 +1083,7 @@ static BOOL set_int_entry( union sysparam_all_entry *entry, UINT int_param, void WCHAR buf[32]; wsprintfW( buf, CSd, int_param ); - if (!SYSPARAMS_Save( entry->hdr.regkey, entry->hdr.regval, buf, flags )) return FALSE; - if (entry->hdr.mirror) SYSPARAMS_Save( entry->hdr.mirror, entry->hdr.regval, buf, flags ); + if (!save_entry_string( &entry->hdr, buf, flags )) return FALSE; entry->uint.val = int_param; entry->hdr.loaded = TRUE; return TRUE; @@ -1085,9 +1098,8 @@ static BOOL get_twips_entry( union sysparam_all_entry *entry, UINT int_param, vo { WCHAR buf[32]; - if (SYSPARAMS_Load( entry->hdr.regkey, entry->hdr.regval, buf, sizeof(buf) )) + if (load_entry( &entry->hdr, buf, sizeof(buf) )) entry->uint.val = SYSPARAMS_Twips2Pixels( atoiW(buf) ); - entry->hdr.loaded = TRUE; } *(UINT *)ptr_param = entry->uint.val; return TRUE; @@ -1102,9 +1114,7 @@ static BOOL get_bool_entry( union sysparam_all_entry *entry, UINT int_param, voi { WCHAR buf[32]; - if (SYSPARAMS_Load( entry->hdr.regkey, entry->hdr.regval, buf, sizeof(buf) )) - entry->bool.val = atoiW( buf ) != 0; - entry->hdr.loaded = TRUE; + if (load_entry( &entry->hdr, buf, sizeof(buf) )) entry->bool.val = atoiW( buf ) != 0; } *(UINT *)ptr_param = entry->bool.val; return TRUE; @@ -1116,8 +1126,7 @@ static BOOL set_bool_entry( union sysparam_all_entry *entry, UINT int_param, voi WCHAR buf[32]; wsprintfW( buf, CSu, int_param != 0 ); - if (!SYSPARAMS_Save( entry->hdr.regkey, entry->hdr.regval, buf, flags )) return FALSE; - if (entry->hdr.mirror) SYSPARAMS_Save( entry->hdr.mirror, entry->hdr.regval, buf, flags ); + if (!save_entry_string( &entry->hdr, buf, flags )) return FALSE; entry->bool.val = int_param != 0; entry->hdr.loaded = TRUE; return TRUE; @@ -1132,9 +1141,7 @@ static BOOL get_yesno_entry( union sysparam_all_entry *entry, UINT int_param, vo { WCHAR buf[32]; - if (SYSPARAMS_Load( entry->hdr.regkey, entry->hdr.regval, buf, sizeof(buf) )) - entry->bool.val = !lstrcmpiW( Yes, buf ); - entry->hdr.loaded = TRUE; + if (load_entry( &entry->hdr, buf, sizeof(buf) )) entry->bool.val = !lstrcmpiW( Yes, buf ); } *(UINT *)ptr_param = entry->bool.val; return TRUE; @@ -1145,8 +1152,7 @@ static BOOL set_yesno_entry( union sysparam_all_entry *entry, UINT int_param, vo { const WCHAR *str = int_param ? Yes : No; - if (!SYSPARAMS_Save( entry->hdr.regkey, entry->hdr.regval, str, flags )) return FALSE; - if (entry->hdr.mirror) SYSPARAMS_Save( entry->hdr.mirror, entry->hdr.regval, str, flags ); + if (!save_entry_string( &entry->hdr, str, flags )) return FALSE; entry->bool.val = int_param != 0; entry->hdr.loaded = TRUE; return TRUE; @@ -1161,9 +1167,7 @@ static BOOL get_dword_entry( union sysparam_all_entry *entry, UINT int_param, vo { DWORD val; - if (SYSPARAMS_LoadRaw( entry->hdr.regkey, entry->hdr.regval, &val, sizeof(val) )) - entry->dword.val = val; - entry->hdr.loaded = TRUE; + if (load_entry( &entry->hdr, &val, sizeof(val) )) entry->dword.val = val; } *(DWORD *)ptr_param = entry->bool.val; return TRUE; @@ -1174,10 +1178,7 @@ static BOOL set_dword_entry( union sysparam_all_entry *entry, UINT int_param, vo { DWORD val = PtrToUlong( ptr_param ); - if (!SYSPARAMS_SaveRaw( entry->hdr.regkey, entry->hdr.regval, &val, sizeof(val), REG_DWORD, flags )) - return FALSE; - if (entry->hdr.mirror) - SYSPARAMS_SaveRaw( entry->hdr.mirror, entry->hdr.regval, &val, sizeof(val), REG_DWORD, flags ); + if (!save_entry( &entry->hdr, &val, sizeof(val), REG_DWORD, flags )) return FALSE; entry->dword.val = val; entry->hdr.loaded = TRUE; return TRUE; @@ -1211,10 +1212,7 @@ static BOOL set_font_entry( union sysparam_all_entry *entry, UINT int_param, voi ptr = memchrW( font.lfFaceName, 0, LF_FACESIZE ); if (ptr) memset( ptr, 0, (font.lfFaceName + LF_FACESIZE - ptr) * sizeof(WCHAR) ); - if (!SYSPARAMS_SaveRaw( entry->hdr.regkey, entry->hdr.regval, &font, sizeof(font), REG_BINARY, flags )) - return FALSE; - if (entry->hdr.mirror) - SYSPARAMS_SaveRaw( entry->hdr.mirror, entry->hdr.regval, &font, sizeof(font), REG_BINARY, flags ); + if (!save_entry( &entry->hdr, &font, sizeof(font), REG_BINARY, flags )) return FALSE; entry->font.val = font; entry->hdr.loaded = TRUE; return TRUE; @@ -1229,9 +1227,8 @@ static BOOL get_binary_entry( union sysparam_all_entry *entry, UINT int_param, v { void *buffer = HeapAlloc( GetProcessHeap(), 0, entry->bin.size ); - if (SYSPARAMS_LoadRaw( entry->hdr.regkey, entry->hdr.regval, buffer, entry->bin.size )) + if (load_entry( &entry->hdr, buffer, entry->bin.size )) memcpy( entry->bin.ptr, buffer, entry->bin.size ); - entry->hdr.loaded = TRUE; HeapFree( GetProcessHeap(), 0, buffer ); } memcpy( ptr_param, entry->bin.ptr, min( int_param, entry->bin.size ) ); @@ -1246,13 +1243,9 @@ static BOOL set_binary_entry( union sysparam_all_entry *entry, UINT int_param, v memcpy( buffer, entry->bin.ptr, entry->bin.size ); memcpy( buffer, ptr_param, min( int_param, entry->bin.size )); - ret = SYSPARAMS_SaveRaw( entry->hdr.regkey, entry->hdr.regval, buffer, - entry->bin.size, REG_BINARY, flags ); + ret = save_entry( &entry->hdr, buffer, entry->bin.size, REG_BINARY, flags ); if (ret) { - if (entry->hdr.mirror) - SYSPARAMS_SaveRaw( entry->hdr.mirror, entry->hdr.regval, buffer, - entry->bin.size, REG_BINARY, flags ); memcpy( entry->bin.ptr, buffer, entry->bin.size ); entry->hdr.loaded = TRUE; }
1
0
0
0
Alexandre Julliard : user32: Support more user preference system parameters .
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 270979dc9ee30cd018f8b1070a8a8bf8eb7f3e7d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=270979dc9ee30cd018f8b1070…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Nov 14 12:54:41 2012 +0100 user32: Support more user preference system parameters. --- dlls/user32/sysparams.c | 114 ++++++++++++++++++++++++++++++----------------- 1 files changed, 73 insertions(+), 41 deletions(-) diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c index 66e12a3..5070469 100644 --- a/dlls/user32/sysparams.c +++ b/dlls/user32/sysparams.c @@ -1264,7 +1264,7 @@ static BOOL set_binary_entry( union sysparam_all_entry *entry, UINT int_param, v static BOOL get_userpref_entry( union sysparam_all_entry *entry, UINT int_param, void *ptr_param ) { union sysparam_all_entry *parent_entry = (union sysparam_all_entry *)entry->pref.parent; - BYTE prefs[4]; + BYTE prefs[8]; if (!ptr_param) return FALSE; @@ -1277,7 +1277,7 @@ static BOOL get_userpref_entry( union sysparam_all_entry *entry, UINT int_param, static BOOL set_userpref_entry( union sysparam_all_entry *entry, UINT int_param, void *ptr_param, UINT flags ) { union sysparam_all_entry *parent_entry = (union sysparam_all_entry *)entry->pref.parent; - BYTE prefs[4]; + BYTE prefs[8]; parent_entry->hdr.loaded = FALSE; /* force loading it again */ if (!parent_entry->hdr.get( parent_entry, sizeof(prefs), prefs )) return FALSE; @@ -1404,26 +1404,33 @@ static DWORD_ENTRY( FOREGROUNDFLASHCOUNT, 3 ); static DWORD_ENTRY( FOREGROUNDLOCKTIMEOUT, 0 ); static DWORD_ENTRY( MOUSECLICKLOCKTIME, 1200 ); -static BYTE user_prefs[4]; +static BYTE user_prefs[8] = { 0x30, 0x00, 0x02, 0x80, 0x10, 0x00, 0x00, 0x00 }; static BINARY_ENTRY( USERPREFERENCESMASK, user_prefs ); static FONT_ENTRY( ICONTITLELOGFONT ); -static USERPREF_ENTRY( MENUANIMATION, 0, 0x02 ); -static USERPREF_ENTRY( COMBOBOXANIMATION, 0, 0x04 ); -static USERPREF_ENTRY( LISTBOXSMOOTHSCROLLING, 0, 0x08 ); -static USERPREF_ENTRY( GRADIENTCAPTIONS, 0, 0x10 ); -static USERPREF_ENTRY( KEYBOARDCUES, 0, 0x20 ); -static USERPREF_ENTRY( HOTTRACKING, 0, 0x80 ); -static USERPREF_ENTRY( SELECTIONFADE, 1, 0x04 ); -static USERPREF_ENTRY( TOOLTIPANIMATION, 1, 0x08 ); -static USERPREF_ENTRY( TOOLTIPFADE, 1, 0x10 ); -static USERPREF_ENTRY( CURSORSHADOW, 1, 0x20 ); -static USERPREF_ENTRY( MOUSEVANISH, 2, 0x01 ); -static USERPREF_ENTRY( FLATMENU, 2, 0x02 ); -static USERPREF_ENTRY( DROPSHADOW, 2, 0x04 ); -static USERPREF_ENTRY( UIEFFECTS, 3, 0x80 ); - +static USERPREF_ENTRY( MENUANIMATION, 0, 0x02 ); +static USERPREF_ENTRY( COMBOBOXANIMATION, 0, 0x04 ); +static USERPREF_ENTRY( LISTBOXSMOOTHSCROLLING, 0, 0x08 ); +static USERPREF_ENTRY( GRADIENTCAPTIONS, 0, 0x10 ); +static USERPREF_ENTRY( KEYBOARDCUES, 0, 0x20 ); +static USERPREF_ENTRY( ACTIVEWNDTRKZORDER, 0, 0x40 ); +static USERPREF_ENTRY( HOTTRACKING, 0, 0x80 ); +static USERPREF_ENTRY( MENUFADE, 1, 0x02 ); +static USERPREF_ENTRY( SELECTIONFADE, 1, 0x04 ); +static USERPREF_ENTRY( TOOLTIPANIMATION, 1, 0x08 ); +static USERPREF_ENTRY( TOOLTIPFADE, 1, 0x10 ); +static USERPREF_ENTRY( CURSORSHADOW, 1, 0x20 ); +static USERPREF_ENTRY( MOUSESONAR, 1, 0x40 ); +static USERPREF_ENTRY( MOUSECLICKLOCK, 1, 0x80 ); +static USERPREF_ENTRY( MOUSEVANISH, 2, 0x01 ); +static USERPREF_ENTRY( FLATMENU, 2, 0x02 ); +static USERPREF_ENTRY( DROPSHADOW, 2, 0x04 ); +static USERPREF_ENTRY( UIEFFECTS, 3, 0x80 ); +static USERPREF_ENTRY( DISABLEOVERLAPPEDCONTENT, 4, 0x01 ); +static USERPREF_ENTRY( CLIENTAREAANIMATION, 4, 0x02 ); +static USERPREF_ENTRY( CLEARTYPE, 4, 0x10 ); +static USERPREF_ENTRY( SPEECHRECOGNITION, 4, 0x20 ); /*********************************************************************** * SystemParametersInfoW (USER32.@) @@ -2201,18 +2208,24 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, case SPI_SETKEYBOARDCUES: ret = set_entry( &entry_KEYBOARDCUES, uiParam, pvParam, fWinIni ); break; - - WINE_SPI_FIXME(SPI_GETACTIVEWNDTRKZORDER); /* 0x100C _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */ - WINE_SPI_FIXME(SPI_SETACTIVEWNDTRKZORDER); /* 0x100D _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */ + case SPI_GETACTIVEWNDTRKZORDER: + ret = get_entry( &entry_ACTIVEWNDTRKZORDER, uiParam, pvParam ); + break; + case SPI_SETACTIVEWNDTRKZORDER: + ret = set_entry( &entry_ACTIVEWNDTRKZORDER, uiParam, pvParam, fWinIni ); + break; case SPI_GETHOTTRACKING: ret = get_entry( &entry_HOTTRACKING, uiParam, pvParam ); break; case SPI_SETHOTTRACKING: ret = set_entry( &entry_HOTTRACKING, uiParam, pvParam, fWinIni ); break; - - WINE_SPI_FIXME(SPI_GETMENUFADE); /* 0x1012 _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */ - WINE_SPI_FIXME(SPI_SETMENUFADE); /* 0x1013 _WIN32_WINNT >= 0x500 || _WIN32_WINDOW > 0x400 */ + case SPI_GETMENUFADE: + ret = get_entry( &entry_MENUFADE, uiParam, pvParam ); + break; + case SPI_SETMENUFADE: + ret = set_entry( &entry_MENUFADE, uiParam, pvParam, fWinIni ); + break; case SPI_GETSELECTIONFADE: ret = get_entry( &entry_SELECTIONFADE, uiParam, pvParam ); break; @@ -2237,12 +2250,18 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, case SPI_SETCURSORSHADOW: ret = set_entry( &entry_CURSORSHADOW, uiParam, pvParam, fWinIni ); break; - - WINE_SPI_FIXME(SPI_GETMOUSESONAR); /* 0x101C _WIN32_WINNT >= 0x510 || _WIN32_WINDOW >= 0x490*/ - WINE_SPI_FIXME(SPI_SETMOUSESONAR); /* 0x101D _WIN32_WINNT >= 0x510 || _WIN32_WINDOW >= 0x490*/ - WINE_SPI_FIXME(SPI_GETMOUSECLICKLOCK); /* 0x101E _WIN32_WINNT >= 0x510 || _WIN32_WINDOW >= 0x490*/ - WINE_SPI_FIXME(SPI_SETMOUSECLICKLOCK); /* 0x101F _WIN32_WINNT >= 0x510 || _WIN32_WINDOW >= 0x490*/ - + case SPI_GETMOUSESONAR: + ret = get_entry( &entry_MOUSESONAR, uiParam, pvParam ); + break; + case SPI_SETMOUSESONAR: + ret = set_entry( &entry_MOUSESONAR, uiParam, pvParam, fWinIni ); + break; + case SPI_GETMOUSECLICKLOCK: + ret = get_entry( &entry_MOUSECLICKLOCK, uiParam, pvParam ); + break; + case SPI_SETMOUSECLICKLOCK: + ret = set_entry( &entry_MOUSECLICKLOCK, uiParam, pvParam, fWinIni ); + break; case SPI_GETMOUSEVANISH: ret = get_entry( &entry_MOUSEVANISH, uiParam, pvParam ); break; @@ -2274,17 +2293,30 @@ BOOL WINAPI SystemParametersInfoW( UINT uiAction, UINT uiParam, /* FIXME: this probably should mask other UI effect values when unset */ ret = set_entry( &entry_UIEFFECTS, uiParam, pvParam, fWinIni ); break; - - /* _WIN32_WINNT >= 0x600 */ - WINE_SPI_FIXME(SPI_GETDISABLEOVERLAPPEDCONTENT); - WINE_SPI_FIXME(SPI_SETDISABLEOVERLAPPEDCONTENT); - WINE_SPI_FIXME(SPI_GETCLIENTAREAANIMATION); - WINE_SPI_FIXME(SPI_SETCLIENTAREAANIMATION); - WINE_SPI_FIXME(SPI_GETCLEARTYPE); - WINE_SPI_FIXME(SPI_SETCLEARTYPE); - WINE_SPI_FIXME(SPI_GETSPEECHRECOGNITION); - WINE_SPI_FIXME(SPI_SETSPEECHRECOGNITION); - + case SPI_GETDISABLEOVERLAPPEDCONTENT: + ret = get_entry( &entry_DISABLEOVERLAPPEDCONTENT, uiParam, pvParam ); + break; + case SPI_SETDISABLEOVERLAPPEDCONTENT: + ret = set_entry( &entry_DISABLEOVERLAPPEDCONTENT, uiParam, pvParam, fWinIni ); + break; + case SPI_GETCLIENTAREAANIMATION: + ret = get_entry( &entry_CLIENTAREAANIMATION, uiParam, pvParam ); + break; + case SPI_SETCLIENTAREAANIMATION: + ret = set_entry( &entry_CLIENTAREAANIMATION, uiParam, pvParam, fWinIni ); + break; + case SPI_GETCLEARTYPE: + ret = get_entry( &entry_CLEARTYPE, uiParam, pvParam ); + break; + case SPI_SETCLEARTYPE: + ret = set_entry( &entry_CLEARTYPE, uiParam, pvParam, fWinIni ); + break; + case SPI_GETSPEECHRECOGNITION: + ret = get_entry( &entry_SPEECHRECOGNITION, uiParam, pvParam ); + break; + case SPI_SETSPEECHRECOGNITION: + ret = set_entry( &entry_SPEECHRECOGNITION, uiParam, pvParam, fWinIni ); + break; case SPI_GETFOREGROUNDLOCKTIMEOUT: ret = get_entry( &entry_FOREGROUNDLOCKTIMEOUT, uiParam, pvParam ); break;
1
0
0
0
Alexandre Julliard : user32: Add system parameter descriptors for user preference parameters.
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 95d782779c92dfb3d07fcaf82deb1048b9ff2f41 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=95d782779c92dfb3d07fcaf82…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Wed Nov 14 12:19:19 2012 +0100 user32: Add system parameter descriptors for user preference parameters. --- dlls/user32/sysparams.c | 270 ++++++++++++++++++++++++++++------------------- 1 files changed, 161 insertions(+), 109 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=95d782779c92dfb3d07fc…
1
0
0
0
Henri Verbeet : d3d10core: Implement d3d10_device_GSGetShader().
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 25c449247f40f2e637187a6066eadf17610fd015 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=25c449247f40f2e637187a606…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Nov 13 21:24:23 2012 +0100 d3d10core: Implement d3d10_device_GSGetShader(). --- dlls/d3d10core/device.c | 16 +++++++++++++++- dlls/wined3d/device.c | 7 +++++++ dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 1 + 4 files changed, 24 insertions(+), 1 deletions(-) diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index 0f30a13..84fff72 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -546,7 +546,21 @@ static void STDMETHODCALLTYPE d3d10_device_GSGetConstantBuffers(ID3D10Device *if static void STDMETHODCALLTYPE d3d10_device_GSGetShader(ID3D10Device *iface, ID3D10GeometryShader **shader) { - FIXME("iface %p, shader %p stub!\n", iface, shader); + struct d3d10_device *device = impl_from_ID3D10Device(iface); + struct d3d10_geometry_shader *shader_impl; + struct wined3d_shader *wined3d_shader; + + TRACE("iface %p, shader %p.\n", iface, shader); + + if (!(wined3d_shader = wined3d_device_get_geometry_shader(device->wined3d_device))) + { + *shader = NULL; + return; + } + + shader_impl = wined3d_shader_get_parent(wined3d_shader); + *shader = &shader_impl->ID3D10GeometryShader_iface; + ID3D10GeometryShader_AddRef(*shader); } static void STDMETHODCALLTYPE d3d10_device_IAGetPrimitiveTopology(ID3D10Device *iface, diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 979a248..2242cc3 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -3012,6 +3012,13 @@ void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, str device_invalidate_state(device, STATE_GEOMETRY_SHADER); } +struct wined3d_shader * CDECL wined3d_device_get_geometry_shader(const struct wined3d_device *device) +{ + TRACE("device %p.\n", device); + + return device->stateBlock->state.geometry_shader; +} + /* Context activation is done by the caller. */ /* Do not call while under the GL lock. */ #define copy_and_next(dest, src, size) memcpy(dest, src, size); dest += (size) diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 3bfa239..f8364e1 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -64,6 +64,7 @@ @ cdecl wined3d_device_get_display_mode(ptr long ptr ptr) @ cdecl wined3d_device_get_front_buffer_data(ptr long ptr) @ cdecl wined3d_device_get_gamma_ramp(ptr long ptr) +@ cdecl wined3d_device_get_geometry_shader(ptr) @ cdecl wined3d_device_get_index_buffer(ptr) @ cdecl wined3d_device_get_light(ptr long ptr) @ cdecl wined3d_device_get_light_enable(ptr long ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index fff8bd9..7169a25 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2124,6 +2124,7 @@ HRESULT __cdecl wined3d_device_get_front_buffer_data(const struct wined3d_device UINT swapchain_idx, struct wined3d_surface *dst_surface); void __cdecl wined3d_device_get_gamma_ramp(const struct wined3d_device *device, UINT swapchain_idx, struct wined3d_gamma_ramp *ramp); +struct wined3d_shader * __cdecl wined3d_device_get_geometry_shader(const struct wined3d_device *device); struct wined3d_buffer * __cdecl wined3d_device_get_index_buffer(const struct wined3d_device *device); HRESULT __cdecl wined3d_device_get_light(const struct wined3d_device *device, UINT light_idx, struct wined3d_light *light);
1
0
0
0
Henri Verbeet : d3d10core: Implement d3d10_device_GSSetShader().
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 9081f8afb1ce135e5de6dd29d2d1dbfccc8fcfca URL:
http://source.winehq.org/git/wine.git/?a=commit;h=9081f8afb1ce135e5de6dd29d…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Nov 13 21:24:22 2012 +0100 d3d10core: Implement d3d10_device_GSSetShader(). --- dlls/d3d10core/d3d10core_private.h | 1 + dlls/d3d10core/device.c | 8 ++++++-- dlls/d3d10core/shader.c | 9 +++++++++ dlls/wined3d/device.c | 19 +++++++++++++++++++ dlls/wined3d/state.c | 7 +++++++ dlls/wined3d/utils.c | 2 ++ dlls/wined3d/wined3d.spec | 1 + dlls/wined3d/wined3d_private.h | 7 ++++++- include/wine/wined3d.h | 1 + 9 files changed, 52 insertions(+), 3 deletions(-) diff --git a/dlls/d3d10core/d3d10core_private.h b/dlls/d3d10core/d3d10core_private.h index 4297adf..a4e29e2 100644 --- a/dlls/d3d10core/d3d10core_private.h +++ b/dlls/d3d10core/d3d10core_private.h @@ -191,6 +191,7 @@ struct d3d10_geometry_shader HRESULT d3d10_geometry_shader_init(struct d3d10_geometry_shader *shader, struct d3d10_device *device, const void *byte_code, SIZE_T byte_code_length) DECLSPEC_HIDDEN; +struct d3d10_geometry_shader *unsafe_impl_from_ID3D10GeometryShader(ID3D10GeometryShader *iface) DECLSPEC_HIDDEN; /* ID3D10PixelShader */ struct d3d10_pixel_shader diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index 0889f3b..0f30a13 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -260,8 +260,12 @@ static void STDMETHODCALLTYPE d3d10_device_GSSetConstantBuffers(ID3D10Device *if static void STDMETHODCALLTYPE d3d10_device_GSSetShader(ID3D10Device *iface, ID3D10GeometryShader *shader) { - if (shader) FIXME("iface %p, shader %p stub!\n", iface, shader); - else WARN("iface %p, shader %p stub!\n", iface, shader); + struct d3d10_device *device = impl_from_ID3D10Device(iface); + struct d3d10_geometry_shader *gs = unsafe_impl_from_ID3D10GeometryShader(shader); + + TRACE("iface %p, shader %p.\n", iface, shader); + + wined3d_device_set_geometry_shader(device->wined3d_device, gs ? gs->wined3d_shader : NULL); } static void STDMETHODCALLTYPE d3d10_device_IASetPrimitiveTopology(ID3D10Device *iface, diff --git a/dlls/d3d10core/shader.c b/dlls/d3d10core/shader.c index c6803ed..4f189e9 100644 --- a/dlls/d3d10core/shader.c +++ b/dlls/d3d10core/shader.c @@ -420,6 +420,15 @@ HRESULT d3d10_geometry_shader_init(struct d3d10_geometry_shader *shader, struct return S_OK; } +struct d3d10_geometry_shader *unsafe_impl_from_ID3D10GeometryShader(ID3D10GeometryShader *iface) +{ + if (!iface) + return NULL; + assert(iface->lpVtbl == &d3d10_geometry_shader_vtbl); + + return impl_from_ID3D10GeometryShader(iface); +} + static inline struct d3d10_pixel_shader *impl_from_ID3D10PixelShader(ID3D10PixelShader *iface) { return CONTAINING_RECORD(iface, struct d3d10_pixel_shader, ID3D10PixelShader_iface); diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index e01048b..979a248 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -2993,6 +2993,25 @@ HRESULT CDECL wined3d_device_get_ps_consts_f(const struct wined3d_device *device return WINED3D_OK; } +void CDECL wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader) +{ + struct wined3d_shader *prev = device->updateStateBlock->state.geometry_shader; + + TRACE("device %p, shader %p.\n", device, shader); + + if (shader) + wined3d_shader_incref(shader); + if (prev) + wined3d_shader_decref(prev); + + device->updateStateBlock->state.geometry_shader = shader; + + if (device->isRecordingState || shader == prev) + return; + + device_invalidate_state(device, STATE_GEOMETRY_SHADER); +} + /* Context activation is done by the caller. */ /* Do not call while under the GL lock. */ #define copy_and_next(dest, src, size) memcpy(dest, src, size); dest += (size) diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index c16fa2a..2376527 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -3760,6 +3760,11 @@ void apply_pixelshader(struct wined3d_context *context, const struct wined3d_sta context->load_constants = 1; } +void state_geometry_shader(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) +{ + context->select_shader = 1; +} + static void shader_bumpenvmat(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id) { DWORD stage = (state_id - STATE_TEXTURESTAGE(0, 0)) / (WINED3D_HIGHEST_TEXTURE_STATE + 1); @@ -5129,6 +5134,7 @@ const struct StateEntryTemplate misc_state_template[] = { { STATE_BASEVERTEXINDEX, { STATE_STREAMSRC, NULL, }, WINED3D_GL_EXT_NONE }, { STATE_FRAMEBUFFER, { STATE_FRAMEBUFFER, context_state_fb }, WINED3D_GL_EXT_NONE }, { STATE_PIXELSHADER, { STATE_PIXELSHADER, context_state_drawbuf},WINED3D_GL_EXT_NONE }, + { STATE_GEOMETRY_SHADER, { STATE_GEOMETRY_SHADER, state_geometry_shader}, WINED3D_GL_EXT_NONE }, {0 /* Terminate */, { 0, 0 }, WINED3D_GL_EXT_NONE }, }; @@ -5789,6 +5795,7 @@ static void validate_state_table(struct StateEntry *state_table) STATE_VERTEXSHADERCONSTANT, STATE_PIXELSHADERCONSTANT, STATE_VSHADER, + STATE_GEOMETRY_SHADER, STATE_PIXELSHADER, STATE_VIEWPORT, STATE_SCISSORRECT, diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c index 0624694..9e008f8 100644 --- a/dlls/wined3d/utils.c +++ b/dlls/wined3d/utils.c @@ -2335,6 +2335,8 @@ const char *debug_d3dstate(DWORD state) return "STATE_VDECL"; if (STATE_IS_VSHADER(state)) return "STATE_VSHADER"; + if (STATE_IS_GEOMETRY_SHADER(state)) + return "STATE_GEOMETRY_SHADER"; if (STATE_IS_VIEWPORT(state)) return "STATE_VIEWPORT"; if (STATE_IS_VERTEXSHADERCONSTANT(state)) diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 2aaa9ce..3bfa239 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -111,6 +111,7 @@ @ cdecl wined3d_device_set_depth_stencil(ptr ptr) @ cdecl wined3d_device_set_dialog_box_mode(ptr long) @ cdecl wined3d_device_set_gamma_ramp(ptr long long ptr) +@ cdecl wined3d_device_set_geometry_shader(ptr ptr) @ cdecl wined3d_device_set_index_buffer(ptr ptr long) @ cdecl wined3d_device_set_light(ptr long ptr) @ cdecl wined3d_device_set_light_enable(ptr long long) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 56d7f38..e525414 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -995,7 +995,10 @@ extern glMultiTexCoordFunc multi_texcoord_funcs[WINED3D_FFP_EMIT_COUNT] DECLSPEC #define STATE_VSHADER (STATE_VDECL + 1) #define STATE_IS_VSHADER(a) ((a) == STATE_VSHADER) -#define STATE_VIEWPORT (STATE_VSHADER + 1) +#define STATE_GEOMETRY_SHADER (STATE_VSHADER + 1) +#define STATE_IS_GEOMETRY_SHADER(a) ((a) == STATE_GEOMETRY_SHADER) + +#define STATE_VIEWPORT (STATE_GEOMETRY_SHADER + 1) #define STATE_IS_VIEWPORT(a) ((a) == STATE_VIEWPORT) #define STATE_VERTEXSHADERCONSTANT (STATE_VIEWPORT + 1) @@ -2296,6 +2299,8 @@ struct wined3d_state INT vs_consts_i[MAX_CONST_I * 4]; float *vs_consts_f; + struct wined3d_shader *geometry_shader; + struct wined3d_shader *pixel_shader; BOOL ps_consts_b[MAX_CONST_B]; INT ps_consts_i[MAX_CONST_I * 4]; diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index e201c2e..fff8bd9 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2198,6 +2198,7 @@ void __cdecl wined3d_device_set_depth_stencil(struct wined3d_device *device, str HRESULT __cdecl wined3d_device_set_dialog_box_mode(struct wined3d_device *device, BOOL enable_dialogs); void __cdecl wined3d_device_set_gamma_ramp(const struct wined3d_device *device, UINT swapchain_idx, DWORD flags, const struct wined3d_gamma_ramp *ramp); +void __cdecl wined3d_device_set_geometry_shader(struct wined3d_device *device, struct wined3d_shader *shader); void __cdecl wined3d_device_set_index_buffer(struct wined3d_device *device, struct wined3d_buffer *index_buffer, enum wined3d_format_id format_id); HRESULT __cdecl wined3d_device_set_light(struct wined3d_device *device,
1
0
0
0
Henri Verbeet : ddraw: Avoid LPDIRECT3DDEVICE3.
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: a0ee8b20bc6f3e7c9fec22923c6fbee2a294d11d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=a0ee8b20bc6f3e7c9fec22923…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Nov 13 21:24:21 2012 +0100 ddraw: Avoid LPDIRECT3DDEVICE3. --- include/d3d.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/d3d.h b/include/d3d.h index 9cab6f7..5a8f576 100644 --- a/include/d3d.h +++ b/include/d3d.h @@ -534,7 +534,7 @@ DECLARE_INTERFACE_(IDirect3DMaterial3,IUnknown) /*** IDirect3DMaterial3 methods ***/ STDMETHOD(SetMaterial)(THIS_ LPD3DMATERIAL lpMat) PURE; STDMETHOD(GetMaterial)(THIS_ LPD3DMATERIAL lpMat) PURE; - STDMETHOD(GetHandle)(THIS_ LPDIRECT3DDEVICE3 lpDirect3DDevice3, LPD3DMATERIALHANDLE lpHandle) PURE; + STDMETHOD(GetHandle)(THIS_ struct IDirect3DDevice3 *device, D3DMATERIALHANDLE *handle) PURE; }; #undef INTERFACE @@ -1472,7 +1472,7 @@ DECLARE_INTERFACE_(IDirect3DVertexBuffer,IUnknown) IDirect3DVertexBuffer *src_buffer, DWORD src_idx, IDirect3DDevice3 *device, DWORD flags) PURE; STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC lpD3DVertexBufferDesc) PURE; - STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE3 lpD3DDevice,DWORD dwFlags) PURE; + STDMETHOD(Optimize)(THIS_ IDirect3DDevice3 *device, DWORD flags) PURE; }; #undef INTERFACE
1
0
0
0
Henri Verbeet : ddraw: Avoid LPDIRECT3DDEVICE7.
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: a24d59a1dd619f8a7892fe00d75cc2ddde26bbbb URL:
http://source.winehq.org/git/wine.git/?a=commit;h=a24d59a1dd619f8a7892fe00d…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Nov 13 21:24:20 2012 +0100 ddraw: Avoid LPDIRECT3DDEVICE7. --- dlls/ddraw/tests/d3d.c | 2 +- include/d3d.h | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c index 7968b09..73317a8 100644 --- a/dlls/ddraw/tests/d3d.c +++ b/dlls/ddraw/tests/d3d.c @@ -33,7 +33,7 @@ static IDirectDraw7 *lpDD; static LPDIRECT3D7 lpD3D = NULL; static IDirectDrawSurface7 *lpDDS; static IDirectDrawSurface7 *lpDDSdepth; -static LPDIRECT3DDEVICE7 lpD3DDevice = NULL; +static IDirect3DDevice7 *lpD3DDevice; static IDirect3DVertexBuffer7 *lpVBufSrc; static IDirectDraw *DirectDraw1 = NULL; diff --git a/include/d3d.h b/include/d3d.h index 7911497..9cab6f7 100644 --- a/include/d3d.h +++ b/include/d3d.h @@ -1517,8 +1517,9 @@ DECLARE_INTERFACE_(IDirect3DVertexBuffer7,IUnknown) IDirect3DVertexBuffer7 *src_buffer, DWORD src_idx, IDirect3DDevice7 *device, DWORD flags) PURE; STDMETHOD(GetVertexBufferDesc)(THIS_ LPD3DVERTEXBUFFERDESC lpD3DVertexBufferDesc) PURE; - STDMETHOD(Optimize)(THIS_ LPDIRECT3DDEVICE7 lpD3DDevice,DWORD dwFlags) PURE; - STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD dwVertexOp,DWORD dwDestIndex,DWORD dwCount,LPD3DDRAWPRIMITIVESTRIDEDDATA lpStrideData,DWORD dwVertexTypeDesc,LPDIRECT3DDEVICE7 lpD3DDevice,DWORD dwFlags) PURE; + STDMETHOD(Optimize)(THIS_ IDirect3DDevice7 *device, DWORD flags) PURE; + STDMETHOD(ProcessVerticesStrided)(THIS_ DWORD vertex_op, DWORD dst_idx, DWORD count, + D3DDRAWPRIMITIVESTRIDEDDATA *data, DWORD fvf, IDirect3DDevice7 *device, DWORD flags) PURE; }; #undef INTERFACE
1
0
0
0
Henri Verbeet : ddraw: Avoid LPDIRECT3DVIEWPORT.
by Alexandre Julliard
14 Nov '12
14 Nov '12
Module: wine Branch: master Commit: 785033d19d6d910cdb10bfee331cff5c6d7a818d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=785033d19d6d910cdb10bfee3…
Author: Henri Verbeet <hverbeet(a)codeweavers.com> Date: Tue Nov 13 21:24:19 2012 +0100 ddraw: Avoid LPDIRECT3DVIEWPORT. --- include/d3d.h | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) diff --git a/include/d3d.h b/include/d3d.h index c7c7838..7911497 100644 --- a/include/d3d.h +++ b/include/d3d.h @@ -215,7 +215,7 @@ DECLARE_INTERFACE_(IDirect3D,IUnknown) STDMETHOD(EnumDevices)(THIS_ LPD3DENUMDEVICESCALLBACK lpEnumDevicesCallback, LPVOID lpUserArg) PURE; STDMETHOD(CreateLight)(THIS_ LPDIRECT3DLIGHT *lplpDirect3DLight, IUnknown *pUnkOuter) PURE; STDMETHOD(CreateMaterial)(THIS_ struct IDirect3DMaterial **material, IUnknown *outer) PURE; - STDMETHOD(CreateViewport)(THIS_ LPDIRECT3DVIEWPORT *lplpD3DViewport, IUnknown *pUnkOuter) PURE; + STDMETHOD(CreateViewport)(THIS_ struct IDirect3DViewport **viewport, IUnknown *outer) PURE; STDMETHOD(FindDevice)(THIS_ LPD3DFINDDEVICESEARCH lpD3DDFS, LPD3DFINDDEVICERESULT lplpD3DDevice) PURE; }; #undef INTERFACE @@ -944,9 +944,10 @@ DECLARE_INTERFACE_(IDirect3DDevice,IUnknown) STDMETHOD(GetStats)(THIS_ LPD3DSTATS lpD3DStats) PURE; STDMETHOD(Execute)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport, DWORD flags) PURE; - STDMETHOD(AddViewport)(THIS_ LPDIRECT3DVIEWPORT lpDirect3DViewport) PURE; - STDMETHOD(DeleteViewport)(THIS_ LPDIRECT3DVIEWPORT lpDirect3DViewport) PURE; - STDMETHOD(NextViewport)(THIS_ LPDIRECT3DVIEWPORT lpDirect3DViewport, LPDIRECT3DVIEWPORT *lplpDirect3DViewport, DWORD dwFlags) PURE; + STDMETHOD(AddViewport)(THIS_ IDirect3DViewport *viewport) PURE; + STDMETHOD(DeleteViewport)(THIS_ IDirect3DViewport *viewport) PURE; + STDMETHOD(NextViewport)(THIS_ IDirect3DViewport *ref, + IDirect3DViewport **viewport, DWORD flags) PURE; STDMETHOD(Pick)(THIS_ IDirect3DExecuteBuffer *buffer, IDirect3DViewport *viewport, DWORD flags, D3DRECT *rect) PURE; STDMETHOD(GetPickRecords)(THIS_ LPDWORD lpCount, LPD3DPICKRECORD lpD3DPickRec) PURE;
1
0
0
0
Nozomi Kodama : d3dx9_36: Fix the case out = in for D3DXSHRotate.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 965e27149abc5d1becd4530d01f03dff42677721 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=965e27149abc5d1becd4530d0…
Author: Nozomi Kodama <nozomi.kodama(a)yahoo.com> Date: Sun Nov 11 15:23:57 2012 -1000 d3dx9_36: Fix the case out = in for D3DXSHRotate. --- dlls/d3dx9_36/math.c | 12 ++++---- dlls/d3dx9_36/tests/math.c | 65 ++++++++++++++++++++++++++++++------------- 2 files changed, 51 insertions(+), 26 deletions(-) diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c index 05125f7..12073e3 100644 --- a/dlls/d3dx9_36/math.c +++ b/dlls/d3dx9_36/math.c @@ -2774,7 +2774,7 @@ static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in) FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, CONST D3DXMATRIX *matrix, CONST FLOAT *in) { - FLOAT alpha, beta, gamma, sinb, temp[36]; + FLOAT alpha, beta, gamma, sinb, temp[36], temp1[36]; TRACE("out %p, order %u, matrix %p, in %p\n", out, order, matrix, in); @@ -2848,11 +2848,11 @@ FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, CONST D3DXMATRIX *matrix, CON gamma = 0.0f; } - D3DXSHRotateZ(out, order, gamma, in); - rotate_X(temp, order, 1.0f, out); - D3DXSHRotateZ(out, order, beta, temp); - rotate_X(temp, order, -1.0f, out); - D3DXSHRotateZ(out, order, alpha, temp); + D3DXSHRotateZ(temp, order, gamma, in); + rotate_X(temp1, order, 1.0f, temp); + D3DXSHRotateZ(temp, order, beta, temp1); + rotate_X(temp1, order, -1.0f, temp); + D3DXSHRotateZ(out, order, alpha, temp1); return out; } diff --git a/dlls/d3dx9_36/tests/math.c b/dlls/d3dx9_36/tests/math.c index 53262b7..c727c5f 100644 --- a/dlls/d3dx9_36/tests/math.c +++ b/dlls/d3dx9_36/tests/math.c @@ -2751,7 +2751,7 @@ static void test_D3DXSHMultiply4(void) static void test_D3DXSHRotate(void) { D3DXMATRIX m[4]; - FLOAT expected, in[49], out[49], *received_ptr; + FLOAT expected, in[49], out[49], *out_temp, *received_ptr; static const FLOAT table[]= { /* Rotation around X-axis Pi/2 */ 1.01f, -3.01f, 2.01f, 4.01f, -8.01f, -6.01f, @@ -2760,6 +2760,8 @@ static void test_D3DXSHRotate(void) 30.241013f, 26.919991f, 39.236877f, -22.632446f, 6.707388f, -11.768282f, 3.443672f, -6.07445f, 11.61839f, 1.527561f, 37.89633f, -56.9012f, 47.42289f, 50.39153f, 10.61819f, 25.50101f, 0.049241f, 16.98330f, + + 1.01f, -3.01f, -3.01f, 4.01f, -8.01f, -6.01f, -11.307889f, -8.01f, 14.297919f, /* Rotation around X-axis -Pi/2 */ 1.01f, 3.01f, -2.01f, 4.01f, 8.01f, -6.01f, -11.307890f, -5.01f, -1.565839f, -1.093598f, -11.01f, -19.833414f, @@ -2767,6 +2769,8 @@ static void test_D3DXSHRotate(void) -30.241013f, 26.919991f, 39.236877f, 22.632446f, 6.707388f, 11.768282f, 3.443672f, 6.07445f, 11.61839f, -1.527561f, 37.89633f, 56.9012f, -47.42289f, 50.39153f, -10.61819f, 25.50101f, -0.049248f, 16.98330f, + + 1.01f, 3.01f, -3.01f, 4.01f, 8.01f, -6.01f, -11.307890f, -8.01f, 14.297919f, /* Yaw Pi/3, Pitch Pi/4, Roll Pi/5 */ 1.01f, 4.944899f, 1.442301f, 1.627281f, 0.219220f, 10.540824f, -9.136903f, 2.763750f, -7.30904f, -5.875721f, 5.303124f, -8.682154f, @@ -2774,41 +2778,62 @@ static void test_D3DXSHRotate(void) 14.629795f, -54.467102f, -12.231035f, -4.089857f, -9.444222f, 3.056035f, 0.179257f, -10.041875f, 23.090092f, -23.188709f, 11.727098f, -65.183090f, 48.671577f, -15.073209f, 38.793171f, -26.039536f, 6.192769f, -17.672247f, + + 1.01f, 4.944899f, -0.891142f, 4.607695f, 0.219218f, 10.773325f, + -8.204769f, 13.563829f, -12.007767f, /* Rotation around Z-axis Pi/6 */ 1.01f, 3.745711f, 3.01f, 2.467762f, 10.307889f, 9.209813f, 7.01f, 3.931864f, 0.166212f, 16.01f, 18.504042f, 17.405966f, 13.01f, 6.128016f, -2.029941f, -10.01f, 13.154292f, 24.01f, 29.432245f, 28.334167f, 21.01f, 9.056221f, -4.958143f, -18.01f, -27.236094f, -4.520332f, 16.814543f, 34.01f, 43.092495f, 41.994423f, - 31.01f, 12.716471f, -8.618400f, -28.01f, -40.896347f, -44.190571,}; - unsigned int i, j, order; + 31.01f, 12.716471f, -8.618400f, -28.01f, -40.896347f, -44.190571, + + 1.01f, 3.745711f, 3.01f, 1.599906f, 10.307889f, 9.209813f, + 7.01f, 2.331957f, -4.421894f, }; + unsigned int i, j, l, order; D3DXMatrixRotationX(&m[0], -D3DX_PI / 2.0f); D3DXMatrixRotationX(&m[1], D3DX_PI / 2.0f); D3DXMatrixRotationYawPitchRoll(&m[2], D3DX_PI / 3.0f, D3DX_PI / 4.0f, D3DX_PI / 5.0f); D3DXMatrixRotationZ(&m[3], D3DX_PI / 6.0f); - for (i = 0; i < 49; i++) - in[i] = i + 1.01f; - - for (j = 0; j < 4; j++) + for (l = 0; l < 2; l++) { - for (order = 0; order <= D3DXSH_MAXORDER; order++) - { - for (i = 0; i < 49; i++) - out[i] = ( i + 1.0f ) * ( i + 1.0f ); - - received_ptr = D3DXSHRotate(out, order, &m[j], in); - ok(received_ptr == out, "Order %u, expected %p, received %p\n", order, out, received_ptr); + if (l == 0) + out_temp = out; + else + out_temp = in; - for (i = 0; i < 49; i++) + for (j = 0; j < 4; j++) + { + for (order = 0; order <= D3DXSH_MAXORDER; order++) { - if ( ( i > 0 ) && ( ( i >= order * order ) || ( order > D3DXSH_MAXORDER ) ) ) - expected = ( i + 1.0f ) * ( i + 1.0f ); - else - expected = table[36 * j + i]; + for (i = 0; i < 49; i++) + { + out[i] = ( i + 1.0f ) * ( i + 1.0f ); + in[i] = i + 1.01f; + } + + received_ptr = D3DXSHRotate(out_temp, order, &m[j], in); + ok(received_ptr == out_temp, "Order %u, expected %p, received %p\n", order, out, received_ptr); - ok(relative_error(out[i], expected) < admitted_error, "Order %u index %u, expected %f, received %f\n", order, i, expected, out[i]); + for (i = 0; i < 49; i++) + { + if ((i > 0) && ((i >= order * order) || (order > D3DXSH_MAXORDER))) + { + if (l == 0) + expected = ( i + 1.0f ) * ( i + 1.0f ); + else + expected = i + 1.01f; + } + else if ((l == 0) || (order > 3)) + expected = table[45 * j + i]; + else + expected = table[45 * j + 36 +i]; + ok(relative_error(out_temp[i], expected) < admitted_error, + "Order %u index %u, expected %f, received %f\n", order, i, expected, out_temp[i]); + } } } }
1
0
0
0
Nozomi Kodama : d3dx9_36: Implement handy computations for small orders in D3DXSHRotate.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 1ca9ed90e32e7dc984cb7b50da8f8aaeb78aa791 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1ca9ed90e32e7dc984cb7b50d…
Author: Nozomi Kodama <nozomi.kodama(a)yahoo.com> Date: Sun Nov 11 15:21:36 2012 -1000 d3dx9_36: Implement handy computations for small orders in D3DXSHRotate. --- dlls/d3dx9_36/math.c | 78 +++++++++++++++++++++++++++++++++++++------------ 1 files changed, 59 insertions(+), 19 deletions(-) diff --git a/dlls/d3dx9_36/math.c b/dlls/d3dx9_36/math.c index 0aebff0..05125f7 100644 --- a/dlls/d3dx9_36/math.c +++ b/dlls/d3dx9_36/math.c @@ -2726,14 +2726,10 @@ FLOAT * WINAPI D3DXSHMultiply4(FLOAT *out, CONST FLOAT *a, CONST FLOAT *b) static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in) { out[0] = in[0]; - if ( order < 2 ) - return; out[1] = a * in[2]; out[2] = -a * in[1]; out[3] = in[3]; - if ( order == 2 ) - return; out[4] = a * in[7]; out[5] = -in[5]; @@ -2741,8 +2737,6 @@ static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in) out[7] = -a * in[4]; out[8] = -0.8660253882f * in[6] + 0.5f * in[8]; out[9] = -a * 0.7905694842f * in[12] + a * 0.6123724580f * in[14]; - if ( order == 3 ) - return; out[10] = -in[10]; out[11] = -a * 0.6123724580f * in[12] - a * 0.7905694842f * in[14]; @@ -2750,7 +2744,7 @@ static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in) out[13] = -0.25f * in[13] - 0.9682458639f * in[15]; out[14] = -a * 0.6123724580f * in[9] + a * 0.7905694842f * in[11]; out[15] = -0.9682458639f * in[13] + 0.25f * in[15]; - if ( order == 4 ) + if (order == 4) return; out[16] = -a * 0.9354143739f * in[21] + a * 0.3535533845f * in[23]; @@ -2762,7 +2756,7 @@ static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in) out[22] = 0.5590170026f * in[20] + 0.5f * in[22] - 0.6614378691f * in[24]; out[23] = -a * 0.3535533845f * in[16] + a * 0.9354143739f * in[18]; out[24] = 0.7395099998f * in[20] - 0.6614378691f * in[22] + 0.125f * in[24]; - if ( order == 5 ) + if (order == 5) return; out[25] = a * 0.7015607357f * in[30] - a * 0.6846531630f * in[32] + a * 0.1976423711f * in[34]; @@ -2776,7 +2770,6 @@ static void rotate_X(FLOAT *out, UINT order, FLOAT a, FLOAT *in) out[33] = 0.4050463140f * in[31] + 0.8125f * in[33] - 0.4192627370f * in[35]; out[34] = -a * 0.1976423711f * in[25] + a * 0.7954951525f * in[27] - a * 0.5728219748f * in[29]; out[35] = 0.9057110548f * in[31] - 0.4192627370f * in[33] + 0.0624999329f * in[35]; - } FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, CONST D3DXMATRIX *matrix, CONST FLOAT *in) @@ -2787,23 +2780,70 @@ FLOAT* WINAPI D3DXSHRotate(FLOAT *out, UINT order, CONST D3DXMATRIX *matrix, CON out[0] = in[0]; - if ( ( order > D3DXSH_MAXORDER ) || ( order < D3DXSH_MINORDER ) ) + if ((order > D3DXSH_MAXORDER) || (order < D3DXSH_MINORDER)) return out; - /* TODO: Implement handy computations for order <= 3. They are faster than the general algorithm. */ - if ( order < 4 ) - WARN("Using general algorithm for order = %u\n", order); + if (order <= 3) + { + out[1] = matrix->u.m[1][1] * in[1] - matrix->u.m[2][1] * in[2] + matrix->u.m[0][1] * in[3]; + out[2] = -matrix->u.m[1][2] * in[1] + matrix->u.m[2][2] * in[2] - matrix->u.m[0][2] * in[3]; + out[3] = matrix->u.m[1][0] * in[1] - matrix->u.m[2][0] * in[2] + matrix->u.m[0][0] * in[3]; + + if (order == 3) + { + FLOAT coeff[]={ + matrix->u.m[1][0] * matrix->u.m[0][0], matrix->u.m[1][1] * matrix->u.m[0][1], + matrix->u.m[1][1] * matrix->u.m[2][1], matrix->u.m[1][0] * matrix->u.m[2][0], + matrix->u.m[2][0] * matrix->u.m[2][0], matrix->u.m[2][1] * matrix->u.m[2][1], + matrix->u.m[0][0] * matrix->u.m[2][0], matrix->u.m[0][1] * matrix->u.m[2][1], + matrix->u.m[0][1] * matrix->u.m[0][1], matrix->u.m[1][0] * matrix->u.m[1][0], + matrix->u.m[1][1] * matrix->u.m[1][1], matrix->u.m[0][0] * matrix->u.m[0][0], }; + + out[4] = (matrix->u.m[1][1] * matrix->u.m[0][0] + matrix->u.m[0][1] * matrix->u.m[1][0]) * in[4]; + out[4] -= (matrix->u.m[1][0] * matrix->u.m[2][1] + matrix->u.m[1][1] * matrix->u.m[2][0]) * in[5]; + out[4] += 1.7320508076f * matrix->u.m[2][0] * matrix->u.m[2][1] * in[6]; + out[4] -= (matrix->u.m[0][1] * matrix->u.m[2][0] + matrix->u.m[0][0] * matrix->u.m[2][1]) * in[7]; + out[4] += (matrix->u.m[0][0] * matrix->u.m[0][1] - matrix->u.m[1][0] * matrix->u.m[1][1]) * in[8]; + + out[5] = (matrix->u.m[1][1] * matrix->u.m[2][2] + matrix->u.m[1][2] * matrix->u.m[2][1]) * in[5]; + out[5] -= (matrix->u.m[1][1] * matrix->u.m[0][2] + matrix->u.m[1][2] * matrix->u.m[0][1]) * in[4]; + out[5] -= 1.7320508076f * matrix->u.m[2][2] * matrix->u.m[2][1] * in[6]; + out[5] += (matrix->u.m[0][2] * matrix->u.m[2][1] + matrix->u.m[0][1] * matrix->u.m[2][2]) * in[7]; + out[5] -= (matrix->u.m[0][1] * matrix->u.m[0][2] - matrix->u.m[1][1] * matrix->u.m[1][2]) * in[8]; + + out[6] = (matrix->u.m[2][2] * matrix->u.m[2][2] - 0.5f * (coeff[4] + coeff[5])) * in[6]; + out[6] -= (0.5773502692f * (coeff[0] + coeff[1]) - 1.1547005384f * matrix->u.m[1][2] * matrix->u.m[0][2]) * in[4]; + out[6] += (0.5773502692f * (coeff[2] + coeff[3]) - 1.1547005384f * matrix->u.m[1][2] * matrix->u.m[2][2]) * in[5]; + out[6] += (0.5773502692f * (coeff[6] + coeff[7]) - 1.1547005384f * matrix->u.m[0][2] * matrix->u.m[2][2]) * in[7]; + out[6] += (0.2886751347f * (coeff[9] - coeff[8] + coeff[10] - coeff[11]) - 0.5773502692f * + (matrix->u.m[1][2] * matrix->u.m[1][2] - matrix->u.m[0][2] * matrix->u.m[0][2])) * in[8]; + + out[7] = (matrix->u.m[0][0] * matrix->u.m[2][2] + matrix->u.m[0][2] * matrix->u.m[2][0]) * in[7]; + out[7] -= (matrix->u.m[1][0] * matrix->u.m[0][2] + matrix->u.m[1][2] * matrix->u.m[0][0]) * in[4]; + out[7] += (matrix->u.m[1][0] * matrix->u.m[2][2] + matrix->u.m[1][2] * matrix->u.m[2][0]) * in[5]; + out[7] -= 1.7320508076f * matrix->u.m[2][2] * matrix->u.m[2][0] * in[6]; + out[7] -= (matrix->u.m[0][0] * matrix->u.m[0][2] - matrix->u.m[1][0] * matrix->u.m[1][2]) * in[8]; + + out[8] = 0.5f * (coeff[11] - coeff[8] - coeff[9] + coeff[10]) * in[8]; + out[8] += (coeff[0] - coeff[1]) * in[4]; + out[8] += (coeff[2] - coeff[3]) * in[5]; + out[8] += 0.86602540f * (coeff[4] - coeff[5]) * in[6]; + out[8] += (coeff[7] - coeff[6]) * in[7]; + } + + return out; + } - if ( fabsf( matrix->u.m[2][2] ) != 1.0f ) + if (fabsf(matrix->u.m[2][2]) != 1.0f) { - sinb = sqrtf( 1.0f - matrix->u.m[2][2] * matrix->u.m[2][2] ); - alpha = atan2f(matrix->u.m[2][1] / sinb, matrix->u.m[2][0] / sinb ); - beta = atan2f( sinb, matrix->u.m[2][2] ); - gamma = atan2f( matrix->u.m[1][2] / sinb, -matrix->u.m[0][2] / sinb ); + sinb = sqrtf(1.0f - matrix->u.m[2][2] * matrix->u.m[2][2]); + alpha = atan2f(matrix->u.m[2][1] / sinb, matrix->u.m[2][0] / sinb); + beta = atan2f(sinb, matrix->u.m[2][2]); + gamma = atan2f(matrix->u.m[1][2] / sinb, -matrix->u.m[0][2] / sinb); } else { - alpha = atan2f( matrix->u.m[0][1], matrix->u.m[0][0] ); + alpha = atan2f(matrix->u.m[0][1], matrix->u.m[0][0]); beta = 0.0f; gamma = 0.0f; }
1
0
0
0
Detlef Riekenberg : advapi32/tests: Test string alias for common RID in sid strings.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: ef603cbbd9867c0f6cbf3b3d174b27082ab8d255 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=ef603cbbd9867c0f6cbf3b3d1…
Author: Detlef Riekenberg <wine.dev(a)web.de> Date: Tue Nov 13 05:31:25 2012 +0100 advapi32/tests: Test string alias for common RID in sid strings. --- dlls/advapi32/tests/security.c | 120 +++++++++++++++++++-------------------- 1 files changed, 58 insertions(+), 62 deletions(-) diff --git a/dlls/advapi32/tests/security.c b/dlls/advapi32/tests/security.c index f5fc4e2..844b238 100644 --- a/dlls/advapi32/tests/security.c +++ b/dlls/advapi32/tests/security.c @@ -129,6 +129,14 @@ static HMODULE hmod; static int myARGC; static char** myARGV; +struct strsid_entry +{ + const char *str; + DWORD flags; +}; +#define STRSID_OK 0 +#define STRSID_OPT 1 + struct sidRef { SID_IDENTIFIER_AUTHORITY auth; @@ -173,29 +181,6 @@ static void init(void) myARGC = winetest_get_mainargs( &myARGV ); } -static void test_str_sid(const char *str_sid) -{ - PSID psid; - char *temp; - - if (pConvertStringSidToSidA(str_sid, &psid)) - { - if (pConvertSidToStringSidA(psid, &temp)) - { - trace(" %s: %s\n", str_sid, temp); - LocalFree(temp); - } - LocalFree(psid); - } - else - { - if (GetLastError() != ERROR_INVALID_SID) - trace(" %s: couldn't be converted, returned %d\n", str_sid, GetLastError()); - else - trace(" %s: couldn't be converted\n", str_sid); - } -} - static void test_sid(void) { struct sidRef refs[] = { @@ -206,6 +191,18 @@ static void test_sid(void) { { {0x00,0x00,0x00,0x00,0x00,0x02} }, "S-1-2-1" }, { { {0x00,0x00,0x00,0x00,0x00,0x0c} }, "S-1-12-1" }, }; + struct strsid_entry strsid_table[] = { + {"AO", STRSID_OK}, {"RU", STRSID_OK}, {"AN", STRSID_OK}, {"AU", STRSID_OK}, + {"BA", STRSID_OK}, {"BG", STRSID_OK}, {"BO", STRSID_OK}, {"BU", STRSID_OK}, + {"CA", STRSID_OPT}, {"CG", STRSID_OK}, {"CO", STRSID_OK}, {"DA", STRSID_OPT}, + {"DC", STRSID_OPT}, {"DD", STRSID_OPT}, {"DG", STRSID_OPT}, {"DU", STRSID_OPT}, + {"EA", STRSID_OPT}, {"ED", STRSID_OK}, {"WD", STRSID_OK}, {"PA", STRSID_OPT}, + {"IU", STRSID_OK}, {"LA", STRSID_OK}, {"LG", STRSID_OK}, {"LS", STRSID_OK}, + {"SY", STRSID_OK}, {"NU", STRSID_OK}, {"NO", STRSID_OK}, {"NS", STRSID_OK}, + {"PO", STRSID_OK}, {"PS", STRSID_OK}, {"PU", STRSID_OK}, {"RS", STRSID_OPT}, + {"RD", STRSID_OK}, {"RE", STRSID_OK}, {"RC", STRSID_OK}, {"SA", STRSID_OPT}, + {"SO", STRSID_OK}, {"SU", STRSID_OK}}; + const char noSubAuthStr[] = "S-1-5"; unsigned int i; PSID psid = NULL; @@ -290,45 +287,44 @@ static void test_sid(void) LocalFree( psid ); } - trace("String SIDs:\n"); - test_str_sid("AO"); - test_str_sid("RU"); - test_str_sid("AN"); - test_str_sid("AU"); - test_str_sid("BA"); - test_str_sid("BG"); - test_str_sid("BO"); - test_str_sid("BU"); - test_str_sid("CA"); - test_str_sid("CG"); - test_str_sid("CO"); - test_str_sid("DA"); - test_str_sid("DC"); - test_str_sid("DD"); - test_str_sid("DG"); - test_str_sid("DU"); - test_str_sid("EA"); - test_str_sid("ED"); - test_str_sid("WD"); - test_str_sid("PA"); - test_str_sid("IU"); - test_str_sid("LA"); - test_str_sid("LG"); - test_str_sid("LS"); - test_str_sid("SY"); - test_str_sid("NU"); - test_str_sid("NO"); - test_str_sid("NS"); - test_str_sid("PO"); - test_str_sid("PS"); - test_str_sid("PU"); - test_str_sid("RS"); - test_str_sid("RD"); - test_str_sid("RE"); - test_str_sid("RC"); - test_str_sid("SA"); - test_str_sid("SO"); - test_str_sid("SU"); + /* string constant format not supported before XP */ + r = pConvertStringSidToSidA(strsid_table[0].str, &psid); + if(!r) + { + win_skip("String constant format not supported\n"); + return; + } + LocalFree(psid); + + for(i = 0; i < sizeof(strsid_table) / sizeof(strsid_table[0]); i++) + { + char *temp; + + SetLastError(0xdeadbeef); + r = pConvertStringSidToSidA(strsid_table[i].str, &psid); + + if (!(strsid_table[i].flags & STRSID_OPT)) + { + ok(r, "%s: got %u\n", strsid_table[i].str, GetLastError()); + } + + if (r) + { + if ((winetest_debug > 1) && (pConvertSidToStringSidA(psid, &temp))) + { + trace(" %s: %s\n", strsid_table[i].str, temp); + LocalFree(temp); + } + LocalFree(psid); + } + else + { + if (GetLastError() != ERROR_INVALID_SID) + trace(" %s: couldn't be converted, returned %d\n", strsid_table[i].str, GetLastError()); + else + trace(" %s: couldn't be converted\n", strsid_table[i].str); + } + } } static void test_trustee(void)
1
0
0
0
Detlef Riekenberg : advapi32: Allow string alias for common RID in sid strings.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: f7a6c4c32349e01a4902a752938ce4f67c6d5445 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=f7a6c4c32349e01a4902a7529…
Author: Detlef Riekenberg <wine.dev(a)web.de> Date: Tue Nov 13 05:31:24 2012 +0100 advapi32: Allow string alias for common RID in sid strings. --- dlls/advapi32/security.c | 47 ++++++++++++++++++++++++++++++++------------- 1 files changed, 33 insertions(+), 14 deletions(-) diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c index c86ca17..699c8e0 100644 --- a/dlls/advapi32/security.c +++ b/dlls/advapi32/security.c @@ -138,24 +138,25 @@ static const WELLKNOWNSID WellKnownSids[] = /* these SIDs must be constructed as relative to some domain - only the RID is well-known */ typedef struct WELLKNOWNRID { + WCHAR wstr[2]; WELL_KNOWN_SID_TYPE Type; DWORD Rid; } WELLKNOWNRID; static const WELLKNOWNRID WellKnownRids[] = { - { WinAccountAdministratorSid, DOMAIN_USER_RID_ADMIN }, - { WinAccountGuestSid, DOMAIN_USER_RID_GUEST }, - { WinAccountKrbtgtSid, DOMAIN_USER_RID_KRBTGT }, - { WinAccountDomainAdminsSid, DOMAIN_GROUP_RID_ADMINS }, - { WinAccountDomainUsersSid, DOMAIN_GROUP_RID_USERS }, - { WinAccountDomainGuestsSid, DOMAIN_GROUP_RID_GUESTS }, - { WinAccountComputersSid, DOMAIN_GROUP_RID_COMPUTERS }, - { WinAccountControllersSid, DOMAIN_GROUP_RID_CONTROLLERS }, - { WinAccountCertAdminsSid, DOMAIN_GROUP_RID_CERT_ADMINS }, - { WinAccountSchemaAdminsSid, DOMAIN_GROUP_RID_SCHEMA_ADMINS }, - { WinAccountEnterpriseAdminsSid, DOMAIN_GROUP_RID_ENTERPRISE_ADMINS }, - { WinAccountPolicyAdminsSid, DOMAIN_GROUP_RID_POLICY_ADMINS }, - { WinAccountRasAndIasServersSid, DOMAIN_ALIAS_RID_RAS_SERVERS }, + { {'L','A'}, WinAccountAdministratorSid, DOMAIN_USER_RID_ADMIN }, + { {'L','G'}, WinAccountGuestSid, DOMAIN_USER_RID_GUEST }, + { {0,0}, WinAccountKrbtgtSid, DOMAIN_USER_RID_KRBTGT }, + { {0,0}, WinAccountDomainAdminsSid, DOMAIN_GROUP_RID_ADMINS }, + { {0,0}, WinAccountDomainUsersSid, DOMAIN_GROUP_RID_USERS }, + { {0,0}, WinAccountDomainGuestsSid, DOMAIN_GROUP_RID_GUESTS }, + { {0,0}, WinAccountComputersSid, DOMAIN_GROUP_RID_COMPUTERS }, + { {0,0}, WinAccountControllersSid, DOMAIN_GROUP_RID_CONTROLLERS }, + { {0,0}, WinAccountCertAdminsSid, DOMAIN_GROUP_RID_CERT_ADMINS }, + { {0,0}, WinAccountSchemaAdminsSid, DOMAIN_GROUP_RID_SCHEMA_ADMINS }, + { {0,0}, WinAccountEnterpriseAdminsSid, DOMAIN_GROUP_RID_ENTERPRISE_ADMINS }, + { {0,0}, WinAccountPolicyAdminsSid, DOMAIN_GROUP_RID_POLICY_ADMINS }, + { {0,0}, WinAccountRasAndIasServersSid, DOMAIN_ALIAS_RID_RAS_SERVERS }, }; @@ -5257,6 +5258,15 @@ static DWORD ComputeStringSidSize(LPCWSTR StringSid) for (i = 0; i < sizeof(WellKnownSids)/sizeof(WellKnownSids[0]); i++) if (!strncmpW(WellKnownSids[i].wstr, StringSid, 2)) return GetSidLengthRequired(WellKnownSids[i].Sid.SubAuthorityCount); + + for (i = 0; i < sizeof(WellKnownRids)/sizeof(WellKnownRids[0]); i++) + if (!strncmpW(WellKnownRids[i].wstr, StringSid, 2)) + { + MAX_SID local; + ADVAPI_GetComputerSid(&local); + return GetSidLengthRequired(*GetSidSubAuthorityCount(&local) + 1); + } + } return GetSidLengthRequired(0); @@ -5284,7 +5294,7 @@ static BOOL ParseStringSidToSid(LPCWSTR StringSid, PSID pSid, LPDWORD cBytes) *cBytes = ComputeStringSidSize(StringSid); if (!pisid) /* Simply compute the size */ { - TRACE("only size requested, returning TRUE\n"); + TRACE("only size requested, returning TRUE with %d\n", *cBytes); return TRUE; } @@ -5363,6 +5373,15 @@ static BOOL ParseStringSidToSid(LPCWSTR StringSid, PSID pSid, LPDWORD cBytes) bret = TRUE; } + for (i = 0; i < sizeof(WellKnownRids)/sizeof(WellKnownRids[0]); i++) + if (!strncmpW(WellKnownRids[i].wstr, StringSid, 2)) + { + ADVAPI_GetComputerSid(pisid); + pisid->SubAuthority[pisid->SubAuthorityCount] = WellKnownRids[i].Rid; + pisid->SubAuthorityCount++; + bret = TRUE; + } + if (!bret) FIXME("String constant not supported: %s\n", debugstr_wn(StringSid, 2)); }
1
0
0
0
Christian Costa : d3drm: Implement texture SetAppData and GetAppData.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 1b2aacc97bebd31b4176a7de8bacf371f124f6ed URL:
http://source.winehq.org/git/wine.git/?a=commit;h=1b2aacc97bebd31b4176a7de8…
Author: Christian Costa <titan.costa(a)gmail.com> Date: Fri Nov 9 10:05:46 2012 +0100 d3drm: Implement texture SetAppData and GetAppData. --- dlls/d3drm/texture.c | 31 +++++++++++++++++++++---------- 1 files changed, 21 insertions(+), 10 deletions(-) diff --git a/dlls/d3drm/texture.c b/dlls/d3drm/texture.c index cfa7e85..8a0185e9 100644 --- a/dlls/d3drm/texture.c +++ b/dlls/d3drm/texture.c @@ -33,6 +33,7 @@ typedef struct { IDirect3DRMTexture2 IDirect3DRMTexture2_iface; IDirect3DRMTexture3 IDirect3DRMTexture3_iface; LONG ref; + DWORD app_data; } IDirect3DRMTextureImpl; static inline IDirect3DRMTextureImpl *impl_from_IDirect3DRMTexture2(IDirect3DRMTexture2 *iface) @@ -128,18 +129,22 @@ static HRESULT WINAPI IDirect3DRMTexture2Impl_DeleteDestroyCallback(IDirect3DRMT } static HRESULT WINAPI IDirect3DRMTexture2Impl_SetAppData(IDirect3DRMTexture2* iface, - DWORD data) + DWORD data) { - FIXME("(%p)->(%u): stub\n", iface, data); + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); - return E_NOTIMPL; + TRACE("(%p)->(%u)\n", iface, data); + + return IDirect3DRMTexture3_SetAppData(&This->IDirect3DRMTexture3_iface, data); } static DWORD WINAPI IDirect3DRMTexture2Impl_GetAppData(IDirect3DRMTexture2* iface) { - FIXME("(%p)->(): stub\n", iface); + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture2(iface); - return 0; + TRACE("(%p)->()\n", iface); + + return IDirect3DRMTexture3_GetAppData(&This->IDirect3DRMTexture3_iface); } static HRESULT WINAPI IDirect3DRMTexture2Impl_SetName(IDirect3DRMTexture2* iface, LPCSTR name) @@ -492,18 +497,24 @@ static HRESULT WINAPI IDirect3DRMTexture3Impl_DeleteDestroyCallback(IDirect3DRMT } static HRESULT WINAPI IDirect3DRMTexture3Impl_SetAppData(IDirect3DRMTexture3* iface, - DWORD data) + DWORD data) { - FIXME("(%p)->(%u): stub\n", iface, data); + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); - return E_NOTIMPL; + TRACE("(%p)->(%u)\n", iface, data); + + This->app_data = data; + + return D3DRM_OK; } static DWORD WINAPI IDirect3DRMTexture3Impl_GetAppData(IDirect3DRMTexture3* iface) { - FIXME("(%p)->(): stub\n", iface); + IDirect3DRMTextureImpl *This = impl_from_IDirect3DRMTexture3(iface); - return 0; + TRACE("(%p)->()\n", iface); + + return This->app_data; } static HRESULT WINAPI IDirect3DRMTexture3Impl_SetName(IDirect3DRMTexture3* iface, LPCSTR name)
1
0
0
0
André Hentschel : msxml3: Fix remaining memory leak ( coverity).
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 5e031741cd02785348da0d0c51d12e1a3c517c53 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=5e031741cd02785348da0d0c5…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Sat Nov 10 15:57:22 2012 +0100 msxml3: Fix remaining memory leak (coverity). --- dlls/msxml3/httprequest.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-) diff --git a/dlls/msxml3/httprequest.c b/dlls/msxml3/httprequest.c index 9a9d93e..62fff98 100644 --- a/dlls/msxml3/httprequest.c +++ b/dlls/msxml3/httprequest.c @@ -685,7 +685,11 @@ static HRESULT BindStatusCallback_create(httprequest* This, BindStatusCallback * case VT_ARRAY|VT_UI1: { sa = V_ARRAY(body); - if ((hr = SafeArrayAccessData(sa, (void **)&ptr)) != S_OK) return hr; + if ((hr = SafeArrayAccessData(sa, (void **)&ptr)) != S_OK) + { + heap_free(bsc); + return hr; + } if ((hr = SafeArrayGetUBound(sa, 1, &size) != S_OK)) { SafeArrayUnaccessData(sa);
1
0
0
0
André Hentschel : oleaut32: Fix remaining memory leak (coverity).
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 43ffbe5611161d1227baa710c541c22b94794204 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=43ffbe5611161d1227baa710c…
Author: André Hentschel <nerv(a)dawncrow.de> Date: Sat Nov 10 15:56:58 2012 +0100 oleaut32: Fix remaining memory leak (coverity). --- dlls/oleaut32/typelib.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c index cb179f9..83ea7e1 100644 --- a/dlls/oleaut32/typelib.c +++ b/dlls/oleaut32/typelib.c @@ -4079,6 +4079,7 @@ static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength) pTIHeader = pBlk; if(pTIHeader->magic != SLTG_TIHEADER_MAGIC) { FIXME_(typelib)("TypeInfoHeader magic = %04x\n", pTIHeader->magic); + heap_free(pOtherTypeInfoBlks); return NULL; } TRACE_(typelib)("pTIHeader->res06 = %x, pTIHeader->res0e = %x, "
1
0
0
0
Akihiro Sagawa : winmm: Fix SEEK_END direction of mmio files without buffering.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 2d3f3204633388e0bba5ace02ebd370a9be1692d URL:
http://source.winehq.org/git/wine.git/?a=commit;h=2d3f3204633388e0bba5ace02…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Tue Nov 13 00:26:45 2012 +0900 winmm: Fix SEEK_END direction of mmio files without buffering. --- dlls/winmm/mmio.c | 5 ++++- dlls/winmm/tests/mmio.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/dlls/winmm/mmio.c b/dlls/winmm/mmio.c index 7f35480..b6f60d1 100644 --- a/dlls/winmm/mmio.c +++ b/dlls/winmm/mmio.c @@ -127,7 +127,10 @@ static LRESULT CALLBACK mmioDosIOProc(LPMMIOINFO lpmmioinfo, UINT uMessage, * lParam2 = from whence to seek (SEEK_SET, SEEK_CUR, SEEK_END) * Returns: new file position, -1 on error */ - ret = _llseek((HFILE)lpmmioinfo->adwInfo[0], (LONG)lParam1, (LONG)lParam2); + if (lParam2 == SEEK_END) + ret = _llseek((HFILE)lpmmioinfo->adwInfo[0], -(LONG)lParam1, (LONG)lParam2); + else + ret = _llseek((HFILE)lpmmioinfo->adwInfo[0], (LONG)lParam1, (LONG)lParam2); if (ret != -1) lpmmioinfo->lDiskOffset = ret; return ret; diff --git a/dlls/winmm/tests/mmio.c b/dlls/winmm/tests/mmio.c index 64f0149..a4e7a2d 100644 --- a/dlls/winmm/tests/mmio.c +++ b/dlls/winmm/tests/mmio.c @@ -750,7 +750,7 @@ static void test_mmioSeek(void) /* seek backward from the end */ pos = mmioSeek(hmmio, offset, SEEK_END); - todo_wine ok(pos == size-offset, "expected %d, got %d\n", size-offset, pos); + ok(pos == size-offset, "expected %d, got %d\n", size-offset, pos); mmioClose(hmmio, 0); }
1
0
0
0
Akihiro Sagawa : winmm/tests: Add more mmioSeek tests.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 10c7f5859cc7300ca3a356c1dbd5e6b5522dc972 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=10c7f5859cc7300ca3a356c1d…
Author: Akihiro Sagawa <sagawa.aki(a)gmail.com> Date: Tue Nov 13 00:26:42 2012 +0900 winmm/tests: Add more mmioSeek tests. --- dlls/winmm/tests/mmio.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 120 insertions(+), 0 deletions(-) diff --git a/dlls/winmm/tests/mmio.c b/dlls/winmm/tests/mmio.c index a76de7a..64f0149 100644 --- a/dlls/winmm/tests/mmio.c +++ b/dlls/winmm/tests/mmio.c @@ -668,6 +668,125 @@ static void test_mmioOpen_fourcc(void) mmioInstallIOProc(FOURCC_DOS, NULL, MMIO_REMOVEPROC); } +static BOOL create_test_file(char *temp_file) +{ + char temp_path[MAX_PATH]; + DWORD ret, written; + HANDLE h; + + ret = GetTempPath(sizeof(temp_path), temp_path); + ok(ret, "Failed to get a temp path, err %d\n", GetLastError()); + if (!ret) + return FALSE; + + ret = GetTempFileName(temp_path, "mmio", 0, temp_file); + ok(ret, "Failed to get a temp name, err %d\n", GetLastError()); + if (!ret) + return FALSE; + + h = CreateFileA(temp_file, GENERIC_WRITE, 0, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + ok(h != INVALID_HANDLE_VALUE, "Failed to create a file, err %d\n", GetLastError()); + if (h == INVALID_HANDLE_VALUE) return FALSE; + + ret = WriteFile(h, RIFF_buf, sizeof(RIFF_buf), &written, NULL); + ok(ret, "Failed to write a file, err %d\n", GetLastError()); + CloseHandle(h); + if (!ret) DeleteFileA(temp_file); + return ret; +} + +static void test_mmioSeek(void) +{ + HMMIO hmmio; + MMIOINFO mmio; + LONG end, pos; + const LONG size = sizeof(RIFF_buf), offset = 16; + char test_file[MAX_PATH]; + MMRESULT res; + + /* test memory file */ + memset(&mmio, 0, sizeof(mmio)); + mmio.fccIOProc = FOURCC_MEM; + mmio.pchBuffer = (char*)&RIFF_buf; + mmio.cchBuffer = sizeof(RIFF_buf); + hmmio = mmioOpen(NULL, &mmio, MMIO_READ); + ok(hmmio != NULL, "mmioOpen error %u\n", mmio.wErrorRet); + if (hmmio != NULL) { + /* seek to the end */ + end = mmioSeek(hmmio, 0, SEEK_END); + todo_wine ok(end == size, "expected %d, got %d\n", size, end); + + /* seek backward from the end */ + pos = mmioSeek(hmmio, offset, SEEK_END); + ok(pos == size-offset, "expected %d, got %d\n", size-offset, pos); + + mmioClose(hmmio, 0); + } + + if (!create_test_file(test_file)) return; + + /* test standard file without buffering */ + hmmio = NULL; + memset(&mmio, 0, sizeof(mmio)); + mmio.fccIOProc = FOURCC_DOS; + mmio.pchBuffer = 0; + mmio.cchBuffer = 0; + hmmio = mmioOpen(test_file, &mmio, MMIO_READ); + ok(hmmio != NULL, "mmioOpen error %u\n", mmio.wErrorRet); + if (hmmio != NULL) { + /* seek to the end */ + end = mmioSeek(hmmio, 0, SEEK_END); + ok(end == size, "expected %d, got %d\n", size, end); + + /* test MMIOINFO values */ + res = mmioGetInfo(hmmio, &mmio, 0); + ok(res == MMSYSERR_NOERROR, "expected 0, got %d\n", res); + ok(mmio.pchNext == mmio.pchBuffer, "expected %p, got %p\n", mmio.pchBuffer, mmio.pchNext); + ok(mmio.pchEndRead == mmio.pchBuffer, "expected %p, got %p\n", mmio.pchBuffer, mmio.pchEndRead); + ok(mmio.pchEndWrite == mmio.pchBuffer + mmio.cchBuffer, "expected %p + %d, got %p\n", mmio.pchBuffer, mmio.cchBuffer, mmio.pchEndWrite); + todo_wine ok(mmio.lBufOffset == size, "expected %d, got %d\n", size, mmio.lBufOffset); + ok(mmio.lDiskOffset == size, "expected %d, got %d\n", size, mmio.lDiskOffset); + + /* seek backward from the end */ + pos = mmioSeek(hmmio, offset, SEEK_END); + todo_wine ok(pos == size-offset, "expected %d, got %d\n", size-offset, pos); + + mmioClose(hmmio, 0); + } + + /* test standard file with buffering */ + hmmio = NULL; + memset(&mmio, 0, sizeof(mmio)); + mmio.fccIOProc = FOURCC_DOS; + mmio.pchBuffer = 0; + mmio.cchBuffer = 0; + hmmio = mmioOpen(test_file, &mmio, MMIO_READ | MMIO_ALLOCBUF); + ok(hmmio != NULL, "mmioOpen error %u\n", mmio.wErrorRet); + if (hmmio != NULL) { + /* seek to the end */ + end = mmioSeek(hmmio, 0, SEEK_END); + ok(end == size, "expected %d, got %d\n", size, end); + + /* test MMIOINFO values */ + res = mmioGetInfo(hmmio, &mmio, 0); + ok(res == MMSYSERR_NOERROR, "expected 0, got %d\n", res); + ok(mmio.pchNext == mmio.pchBuffer, "expected %p, got %p\n", mmio.pchBuffer, mmio.pchNext); + ok(mmio.pchEndRead == mmio.pchBuffer, "expected %p, got %p\n", mmio.pchBuffer, mmio.pchEndRead); + ok(mmio.pchEndWrite == mmio.pchBuffer + mmio.cchBuffer, "expected %p + %d, got %p\n", mmio.pchBuffer, mmio.cchBuffer, mmio.pchEndWrite); + ok(mmio.lBufOffset == end, "expected %d, got %d\n", end, mmio.lBufOffset); + ok(mmio.lDiskOffset == size, "expected %d, got %d\n", size, mmio.lDiskOffset); + + /* seek backward from the end */ + pos = mmioSeek(hmmio, offset, SEEK_END); + ok(pos == size-offset, "expected %d, got %d\n", size-offset, pos); + + mmioClose(hmmio, 0); + } + + DeleteFileA(test_file); +} + START_TEST(mmio) { /* Make it possible to run the tests against a specific AVI file in @@ -683,4 +802,5 @@ START_TEST(mmio) test_mmioSetBuffer(NULL); test_mmioSetBuffer(fname); test_mmioOpen_fourcc(); + test_mmioSeek(); }
1
0
0
0
Jörg Höhle : mciavi: Fix player deadlock when starting to play.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 42bdb48c675be7bc1b38a76554d2eb78fd64026c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=42bdb48c675be7bc1b38a7655…
Author: Jörg Höhle <hoehle(a)users.sourceforge.net> Date: Tue Nov 6 22:59:55 2012 +0100 mciavi: Fix player deadlock when starting to play. --- dlls/mciavi32/mciavi.c | 265 +++++++++++++++++++++------------------- dlls/mciavi32/private_mciavi.h | 1 - 2 files changed, 138 insertions(+), 128 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=42bdb48c675be7bc1b38a…
1
0
0
0
Piotr Caban : gdi32: Added GetGlyphOutlineW tests on glyph that contains empty contour.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 4f07c49547cc110323b9201c51514d4f10c11b7c URL:
http://source.winehq.org/git/wine.git/?a=commit;h=4f07c49547cc110323b9201c5…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Nov 13 16:51:51 2012 +0100 gdi32: Added GetGlyphOutlineW tests on glyph that contains empty contour. --- dlls/gdi32/tests/font.c | 42 ++++++++++++++++++++++++++++++++++++++++ dlls/gdi32/tests/wine_test.sfd | 29 +++++++++++++++++++++++++- dlls/gdi32/tests/wine_test.ttf | Bin 1552 -> 1652 bytes 3 files changed, 69 insertions(+), 2 deletions(-) diff --git a/dlls/gdi32/tests/font.c b/dlls/gdi32/tests/font.c index 4d41388..1064ce2 100644 --- a/dlls/gdi32/tests/font.c +++ b/dlls/gdi32/tests/font.c @@ -4277,6 +4277,46 @@ static BOOL write_ttf_file(const char *fontname, char *tmp_name) return ret; } +static void test_GetGlyphOutline_empty_contour(void) +{ + HDC hdc; + LOGFONTA lf; + HFONT hfont, hfont_prev; + TTPOLYGONHEADER *header; + GLYPHMETRICS gm; + char buf[1024]; + DWORD ret; + + memset(&lf, 0, sizeof(lf)); + lf.lfHeight = 72; + lstrcpyA(lf.lfFaceName, "wine_test"); + + hfont = CreateFontIndirectA(&lf); + ok(hfont != 0, "CreateFontIndirectA error %u\n", GetLastError()); + + hdc = GetDC(NULL); + + hfont_prev = SelectObject(hdc, hfont); + ok(hfont_prev != NULL, "SelectObject failed\n"); + + ret = GetGlyphOutlineW(hdc, 0xa8, GGO_NATIVE, &gm, 0, NULL, &mat); + ok(ret == 228, "GetGlyphOutline returned %d, expected 228\n", ret); + + header = (TTPOLYGONHEADER*)buf; + ret = GetGlyphOutlineW(hdc, 0xa8, GGO_NATIVE, &gm, sizeof(buf), buf, &mat); + ok(ret == 228, "GetGlyphOutline returned %d, expected 228\n", ret); + ok(header->cb == 36, "header->cb = %d, expected 36\n", header->cb); + ok(header->dwType == TT_POLYGON_TYPE, "header->dwType = %d, expected TT_POLYGON_TYPE\n", header->dwType); + header = (TTPOLYGONHEADER*)((char*)header+header->cb); + ok(header->cb == 96, "header->cb = %d, expected 96\n", header->cb); + header = (TTPOLYGONHEADER*)((char*)header+header->cb); + ok(header->cb == 96, "header->cb = %d, expected 96\n", header->cb); + + SelectObject(hdc, hfont_prev); + DeleteObject(hfont); + ReleaseDC(NULL, hdc); +} + static void test_CreateScalableFontResource(void) { char ttf_name[MAX_PATH]; @@ -4358,6 +4398,8 @@ todo_wine ret = is_truetype_font_installed("wine_test"); ok(ret, "font wine_test should be enumerated\n"); + test_GetGlyphOutline_empty_contour(); + ret = pRemoveFontResourceExA(fot_name, FR_PRIVATE, 0); todo_wine ok(!ret, "RemoveFontResourceEx() with not matching flags should fail\n"); diff --git a/dlls/gdi32/tests/wine_test.sfd b/dlls/gdi32/tests/wine_test.sfd index 5b73545..5adf7cf 100644 --- a/dlls/gdi32/tests/wine_test.sfd +++ b/dlls/gdi32/tests/wine_test.sfd @@ -20,7 +20,7 @@ OS2Version: 2 OS2_WeightWidthSlopeOnly: 0 OS2_UseTypoMetrics: 1 CreationTime: 1288336343 -ModificationTime: 1288336873 +ModificationTime: 1352483620 PfmFamily: 17 TTFWeight: 500 TTFWidth: 5 @@ -86,7 +86,7 @@ DisplaySize: -24 AntiAlias: 1 FitToEm: 1 WinInfo: 65 65 19 -BeginChars: 65539 4 +BeginChars: 65539 5 StartChar: .notdef Encoding: 65536 -1 0 @@ -176,5 +176,30 @@ Width: 0 Flags: W LayerCount: 2 EndChar + +StartChar: dieresis +Encoding: 168 168 0 +Width: 1000 +VWidth: 0 +Flags: HW +LayerCount: 2 +Fore +SplineSet +620.215 824.429 m 1,0,1 + 760.84 777.554 760.84 777.554 713.965 636.929 c 1,2,-1 + 620.215 824.429 l 1,0,1 +154.883 324.971 m 0,3,-1 +254.492 773.213 m 1,4,5 + 310.707 834.805 310.707 834.805 374.609 767.354 c 1,6,7 + 410.471 728.672 410.471 728.672 374.609 691.182 c 0,8,9 + 308.375 621.934 308.375 621.934 254.492 688.252 c 0,10,11 + 216.406 735.127 216.406 735.127 254.492 773.213 c 1,4,5 +254.492 773.213 m 1,12,13 + 216.406 735.127 216.406 735.127 254.492 688.252 c 0,14,15 + 308.375 621.934 308.375 621.934 374.609 691.182 c 0,16,17 + 410.471 728.672 410.471 728.672 374.609 767.354 c 1,18,19 + 310.707 834.805 310.707 834.805 254.492 773.213 c 1,12,13 +EndSplineSet +EndChar EndChars EndSplineFont diff --git a/dlls/gdi32/tests/wine_test.ttf b/dlls/gdi32/tests/wine_test.ttf index badef18..1e546eb 100644 Binary files a/dlls/gdi32/tests/wine_test.ttf and b/dlls/gdi32/tests/wine_test.ttf differ
1
0
0
0
Piotr Caban : gdi32: Ignore contours containing one point in get_glyph_outline function.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: b696558f04511f86bff73e20adebed7f422b15c2 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=b696558f04511f86bff73e20a…
Author: Piotr Caban <piotr(a)codeweavers.com> Date: Tue Nov 13 16:51:29 2012 +0100 gdi32: Ignore contours containing one point in get_glyph_outline function. --- dlls/gdi32/freetype.c | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/dlls/gdi32/freetype.c b/dlls/gdi32/freetype.c index 8b56330..79a0975 100644 --- a/dlls/gdi32/freetype.c +++ b/dlls/gdi32/freetype.c @@ -6377,6 +6377,12 @@ static DWORD get_glyph_outline(GdiFont *incoming_font, UINT glyph, UINT format, } for(contour = 0; contour < outline->n_contours; contour++) { + /* Ignore contours containing one point */ + if(point == outline->contours[contour]) { + point++; + continue; + } + pph_start = needed; pph = (TTPOLYGONHEADER *)((char *)buf + needed); first_pt = point;
1
0
0
0
Jacek Caban : mshtml: Added IHTMLScriptElement::get_text implementation.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 95f3c6402a01021a78dfd8ceaa93d481764179dc URL:
http://source.winehq.org/git/wine.git/?a=commit;h=95f3c6402a01021a78dfd8cea…
Author: Jacek Caban <jacek(a)codeweavers.com> Date: Tue Nov 13 13:35:49 2012 +0100 mshtml: Added IHTMLScriptElement::get_text implementation. --- dlls/mshtml/htmlscript.c | 10 ++++++++-- dlls/mshtml/tests/dom.c | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/dlls/mshtml/htmlscript.c b/dlls/mshtml/htmlscript.c index 2dc25de..d08c9cb 100644 --- a/dlls/mshtml/htmlscript.c +++ b/dlls/mshtml/htmlscript.c @@ -199,8 +199,14 @@ static HRESULT WINAPI HTMLScriptElement_put_text(IHTMLScriptElement *iface, BSTR static HRESULT WINAPI HTMLScriptElement_get_text(IHTMLScriptElement *iface, BSTR *p) { HTMLScriptElement *This = impl_from_IHTMLScriptElement(iface); - FIXME("(%p)->(%p)\n", This, p); - return E_NOTIMPL; + nsAString nsstr; + nsresult nsres; + + TRACE("(%p)->(%p)\n", This, p); + + nsAString_Init(&nsstr, NULL); + nsres = nsIDOMHTMLScriptElement_GetText(This->nsscript, &nsstr); + return return_nsstr(nsres, &nsstr, p); } static HRESULT WINAPI HTMLScriptElement_put_defer(IHTMLScriptElement *iface, VARIANT_BOOL v) diff --git a/dlls/mshtml/tests/dom.c b/dlls/mshtml/tests/dom.c index 3f9bd5f..6bd7837 100644 --- a/dlls/mshtml/tests/dom.c +++ b/dlls/mshtml/tests/dom.c @@ -3559,6 +3559,19 @@ static void _test_link_type(unsigned line, IHTMLElement *elem, const char *v) IHTMLLinkElement_Release(link); } +#define test_script_text(a,b) _test_script_text(__LINE__,a,b) +static void _test_script_text(unsigned line, IHTMLScriptElement *script, const char *extext) +{ + BSTR str; + HRESULT hres; + + str = (void*)0xdeadbeef; + hres = IHTMLScriptElement_get_text(script, &str); + ok_(__FILE__,line)(hres == S_OK, "get_text failed: %08x\n", hres); + ok(!strcmp_wa(str, extext), "text = %s, expected \"%s\"\n", wine_dbgstr_w(str), extext); + SysFreeString(str); +} + #define link_put_type(a,b) _link_put_type(__LINE__,a,b) static void _link_put_type(unsigned line, IHTMLElement *elem, const char *v) { @@ -5822,9 +5835,10 @@ static void test_elems(IHTMLDocument2 *doc) hres = IHTMLScriptElement_get_type(script, &type); ok(hres == S_OK, "get_type failed: %08x\n", hres); ok(!strcmp_wa(type, "text/javascript"), "Unexpected type %s\n", wine_dbgstr_w(type)); - SysFreeString(type); + test_script_text(script, "<!--\nfunction Testing() {}\n// -->\n"); + /* test defer */ hres = IHTMLScriptElement_put_defer(script, VARIANT_TRUE); ok(hres == S_OK, "put_defer failed: %08x\n", hres);
1
0
0
0
Daniel Jelinski : comctl32: Move WM_SIZE handling into WM_WINDOWPOSCHANGED.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: e9e09b66a0eca2cec97faa71cffa9ea7269fc681 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=e9e09b66a0eca2cec97faa71c…
Author: Daniel Jelinski <djelinski1(a)gmail.com> Date: Mon Nov 12 19:03:24 2012 +0100 comctl32: Move WM_SIZE handling into WM_WINDOWPOSCHANGED. --- dlls/comctl32/listview.c | 16 +++++++--------- 1 files changed, 7 insertions(+), 9 deletions(-) diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 2525dfe..d8d11ca 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -11584,9 +11584,6 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_SHOWWINDOW: return LISTVIEW_ShowWindow(infoPtr, wParam, lParam); - case WM_SIZE: - return LISTVIEW_Size(infoPtr, (short)LOWORD(lParam), (short)HIWORD(lParam)); - case WM_STYLECHANGED: return LISTVIEW_StyleChanged(infoPtr, wParam, (LPSTYLESTRUCT)lParam); @@ -11612,13 +11609,14 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) case WM_WINDOWPOSCHANGED: if (!(((WINDOWPOS *)lParam)->flags & SWP_NOSIZE)) { - SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE | - SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); + SetWindowPos(infoPtr->hwndSelf, 0, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOACTIVATE | + SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE); - if ((infoPtr->dwStyle & LVS_OWNERDRAWFIXED) && (infoPtr->uView == LV_VIEW_DETAILS)) - { - if (notify_measureitem(infoPtr)) LISTVIEW_InvalidateList(infoPtr); - } + if ((infoPtr->dwStyle & LVS_OWNERDRAWFIXED) && (infoPtr->uView == LV_VIEW_DETAILS)) + { + if (notify_measureitem(infoPtr)) LISTVIEW_InvalidateList(infoPtr); + } + LISTVIEW_Size(infoPtr, ((WINDOWPOS *)lParam)->cx, ((WINDOWPOS *)lParam)->cy); } return DefWindowProcW(hwnd, uMsg, wParam, lParam);
1
0
0
0
Alexandre Julliard : user32: Add some defines to reduce Unicode string duplication.
by Alexandre Julliard
13 Nov '12
13 Nov '12
Module: wine Branch: master Commit: 44423f915ca87bb83a4cff3107cfa2ef797e4d55 URL:
http://source.winehq.org/git/wine.git/?a=commit;h=44423f915ca87bb83a4cff310…
Author: Alexandre Julliard <julliard(a)winehq.org> Date: Tue Nov 13 16:09:22 2012 +0100 user32: Add some defines to reduce Unicode string duplication. --- dlls/user32/sysparams.c | 123 +++++++++++++++++++++++------------------------ 1 files changed, 61 insertions(+), 62 deletions(-) Diff:
http://source.winehq.org/git/wine.git/?a=commitdiff;h=44423f915ca87bb83a4cf…
1
0
0
0
← Newer
1
...
15
16
17
18
19
20
21
...
29
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
Results per page:
10
25
50
100
200