ReactOS.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
2024
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
List overview
Download
Ros-diffs
October 2012
----- 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
ros-diffs@reactos.org
14 participants
211 discussions
Start a n
N
ew thread
[hbelusca] 57580: [CSRSS/CSRSRV] - Rename ProcessDataLock to CsrProcessLock (as it was in the "old" csrsrv, see r57579). - Merge the APIs from the "old" csrsrv (subsystems/csr , see r57579) with th...
by hbelusca@svn.reactos.org
Author: hbelusca Date: Sat Oct 20 13:00:41 2012 New Revision: 57580 URL:
http://svn.reactos.org/svn/reactos?rev=57580&view=rev
Log: [CSRSS/CSRSRV] - Rename ProcessDataLock to CsrProcessLock (as it was in the "old" csrsrv, see r57579). - Merge the APIs from the "old" csrsrv (subsystems/csr , see r57579) with the other ones (subsystems/win32/csrss/csrsrv). - Reorganize the functions into Private & Public functions. - Add temporary comments. - Start removing things which should be present in basesrv instead of in csrsrv. This breaks build of this branch at the moment... Modified: branches/ros-csrss/subsystems/win32/csrss/CMakeLists.txt branches/ros-csrss/subsystems/win32/csrss/csrsrv/api/wapi.c branches/ros-csrss/subsystems/win32/csrss/csrsrv/csrsrv.spec branches/ros-csrss/subsystems/win32/csrss/csrsrv/init.c branches/ros-csrss/subsystems/win32/csrss/csrsrv/procsup.c branches/ros-csrss/subsystems/win32/csrss/csrsrv/session.c branches/ros-csrss/subsystems/win32/csrss/csrsrv/thredsup.c branches/ros-csrss/subsystems/win32/csrss/csrss.c branches/ros-csrss/subsystems/win32/csrss/include/api.h [This mail would be too long, it was shortened to contain the URLs only.] Modified: branches/ros-csrss/subsystems/win32/csrss/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrsrv/api/wapi.c URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrsrv/csrsrv.spec URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrsrv/init.c URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrsrv/procsup.c URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrsrv/session.c URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrsrv/thredsup.c URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/csrss.c URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
Modified: branches/ros-csrss/subsystems/win32/csrss/include/api.h URL:
http://svn.reactos.org/svn/reactos/branches/ros-csrss/subsystems/win32/csrs…
12 years
1
0
0
0
[hbelusca] 57579: [CSR] Remove old csrss.
by hbelusca@svn.reactos.org
Author: hbelusca Date: Fri Oct 19 20:14:47 2012 New Revision: 57579 URL:
http://svn.reactos.org/svn/reactos?rev=57579&view=rev
Log: [CSR] Remove old csrss. Removed: branches/ros-csrss/subsystems/csr/
12 years
1
0
0
0
[jgardou] 57578: [WIN32K] - Use GdiBlt channel for relevant functions
by jgardou@svn.reactos.org
Author: jgardou Date: Fri Oct 19 09:00:45 2012 New Revision: 57578 URL:
http://svn.reactos.org/svn/reactos?rev=57578&view=rev
Log: [WIN32K] - Use GdiBlt channel for relevant functions Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/bitblt.c…
============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] Fri Oct 19 09:00:45 2012 @@ -7,9 +7,7 @@ */ #include <win32k.h> - -#define NDEBUG -#include <debug.h> +DBG_DEFAULT_CHANNEL(GdiBlt); #define ROP_USES_SOURCE(Rop) (((((Rop) & 0xCC0000) >> 2) != ((Rop) & 0x330000)) || ((((Rop) & 0xCC000000) >> 2) != ((Rop) & 0x33000000))) #define ROP_USES_MASK(Rop) (((Rop) & 0xFF000000) != (((Rop) & 0xff0000) << 8)) @@ -49,12 +47,12 @@ return FALSE; } - DPRINT("Locking DCs\n"); + TRACE("Locking DCs\n"); ahDC[0] = hDCDest; ahDC[1] = hDCSrc ; if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); + WARN("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -102,7 +100,7 @@ } /* Prepare DCs for blit */ - DPRINT("Preparing DCs for blit\n"); + TRACE("Preparing DCs for blit\n"); DC_vPrepareDCsForBlit(DCDest, DestRect, DCSrc, SourceRect); /* Determine surfaces to be used in the bitblt */ @@ -124,7 +122,7 @@ EXLATEOBJ_vInitXlateFromDCs(&exlo, DCSrc, DCDest); /* Perform the alpha blend operation */ - DPRINT("Performing the alpha blend\n"); + TRACE("Performing the alpha blend\n"); bResult = IntEngAlphaBlend(&BitmapDest->SurfObj, &BitmapSrc->SurfObj, DCDest->rosdc.CombinedClip, @@ -135,7 +133,7 @@ EXLATEOBJ_vCleanup(&exlo); leave : - DPRINT("Finishing blit\n"); + TRACE("Finishing blit\n"); DC_vFinishBlit(DCDest, DCSrc); GDIOBJ_vUnlockObject(&DCSrc->BaseObject); GDIOBJ_vUnlockObject(&DCDest->BaseObject); @@ -197,12 +195,12 @@ BOOL Ret = FALSE; EXLATEOBJ exlo; - DPRINT("Locking DCs\n"); + TRACE("Locking DCs\n"); ahDC[0] = hdcDst; ahDC[1] = hdcSrc ; if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDst, hdcSrc); + WARN("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDst, hdcSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -343,7 +341,7 @@ } else if(psurfMask) { - DPRINT1("Getting Mask bitmap without needing it?\n"); + WARN("Getting Mask bitmap without needing it?\n"); SURFACE_ShareUnlockSurface(psurfMask); psurfMask = NULL; } @@ -351,12 +349,12 @@ MaskPoint.y = yMask; /* Take care of source and destination bitmap */ - DPRINT("Locking DCs\n"); + TRACE("Locking DCs\n"); ahDC[0] = hdcDest; ahDC[1] = UsesSource ? hdcSrc : NULL; if (!GDIOBJ_bLockMultipleObjects(2, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDest, hdcSrc); + WARN("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hdcDest, hdcSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -367,7 +365,7 @@ if (NULL == DCDest) { if(DCSrc) DC_UnlockDc(DCSrc); - DPRINT("Invalid destination dc handle (0x%p) passed to NtGdiBitBlt\n", hdcDest); + WARN("Invalid destination dc handle (0x%p) passed to NtGdiBitBlt\n", hdcDest); return FALSE; } @@ -497,7 +495,7 @@ IN INT yMask, IN DWORD crBackColor) { - UNIMPLEMENTED; + FIXME("NtGdiPlgBlt: unimplemented.\n"); return FALSE; } @@ -558,7 +556,7 @@ ahDC[2] = UsesMask ? hDCMask : NULL; if (!GDIOBJ_bLockMultipleObjects(3, (HGDIOBJ*)ahDC, apObj, GDIObjType_DC_TYPE)) { - DPRINT1("Invalid dc handle (dest=0x%p, src=0x%p) passed to NtGdiAlphaBlend\n", hDCDest, hDCSrc); + WARN("Invalid dc handle (dest=0x%p, src=0x%p) passed to GreStretchBltMask\n", hDCDest, hDCSrc); EngSetLastError(ERROR_INVALID_HANDLE); return FALSE; } @@ -651,7 +649,7 @@ (BitmapMask->SurfObj.sizlBitmap.cx < WidthSrc || BitmapMask->SurfObj.sizlBitmap.cy < HeightSrc)) { - DPRINT1("%dx%d mask is smaller than %dx%d bitmap\n", + WARN("%dx%d mask is smaller than %dx%d bitmap\n", BitmapMask->SurfObj.sizlBitmap.cx, BitmapMask->SurfObj.sizlBitmap.cy, WidthSrc, HeightSrc); EXLATEOBJ_vCleanup(&exlo);
12 years
1
0
0
0
[tfaber] 57577: [WINE] - Remove useless casts from unicode.h CORE-6418 #resolve
by tfaber@svn.reactos.org
Author: tfaber Date: Fri Oct 19 05:55:45 2012 New Revision: 57577 URL:
http://svn.reactos.org/svn/reactos?rev=57577&view=rev
Log: [WINE] - Remove useless casts from unicode.h CORE-6418 #resolve Modified: trunk/reactos/include/reactos/wine/unicode.h Modified: trunk/reactos/include/reactos/wine/unicode.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/wine/unico…
============================================================================== --- trunk/reactos/include/reactos/wine/unicode.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/wine/unicode.h [iso-8859-1] Fri Oct 19 05:55:45 2012 @@ -24,23 +24,23 @@ #define WINE_UNICODE_INLINE static inline #endif -#define memicmpW(s1,s2,n) _wcsnicmp((const wchar_t *)(s1),(const wchar_t *)(s2),(n)) -#define strlenW(s) wcslen((const wchar_t *)(s)) -#define strcpyW(d,s) wcscpy((wchar_t *)(d),(const wchar_t *)(s)) -#define strcatW(d,s) wcscat((wchar_t *)(d),(const wchar_t *)(s)) -#define strcspnW(d,s) wcscspn((wchar_t *)(d),(const wchar_t *)(s)) -#define strstrW(d,s) wcsstr((const wchar_t *)(d),(const wchar_t *)(s)) -#define strtolW(s,e,b) wcstol((const wchar_t *)(s),(wchar_t **)(e),(b)) -#define strchrW(s,c) wcschr((const wchar_t *)(s),(wchar_t)(c)) -#define strrchrW(s,c) wcsrchr((const wchar_t *)(s),(wchar_t)(c)) -#define strncmpW(s1,s2,n) wcsncmp((const wchar_t *)(s1),(const wchar_t *)(s2),(n)) -#define strncpyW(s1,s2,n) wcsncpy((wchar_t *)(s1),(const wchar_t *)(s2),(n)) -#define strcmpW(s1,s2) wcscmp((const wchar_t *)(s1),(const wchar_t *)(s2)) -#define strcmpiW(s1,s2) _wcsicmp((const wchar_t *)(s1),(const wchar_t *)(s2)) -#define strncmpiW(s1,s2,n) _wcsnicmp((const wchar_t *)(s1),(const wchar_t *)(s2),(n)) -#define strtoulW(s1,s2,b) wcstoul((const wchar_t *)(s1),(wchar_t **)(s2),(b)) -#define strspnW(str, accept) wcsspn((const wchar_t *)(str), (const wchar_t *)(accept)) -#define strpbrkW(str, accept) wcspbrk((const wchar_t *)(str), (const wchar_t *)(accept)) +#define memicmpW(s1,s2,n) _wcsnicmp((s1),(s2),(n)) +#define strlenW(s) wcslen((s)) +#define strcpyW(d,s) wcscpy((d),(s)) +#define strcatW(d,s) wcscat((d),(s)) +#define strcspnW(d,s) wcscspn((d),(s)) +#define strstrW(d,s) wcsstr((d),(s)) +#define strtolW(s,e,b) wcstol((s),(e),(b)) +#define strchrW(s,c) wcschr((s),(c)) +#define strrchrW(s,c) wcsrchr((s),(c)) +#define strncmpW(s1,s2,n) wcsncmp((s1),(s2),(n)) +#define strncpyW(s1,s2,n) wcsncpy((s1),(s2),(n)) +#define strcmpW(s1,s2) wcscmp((s1),(s2)) +#define strcmpiW(s1,s2) _wcsicmp((s1),(s2)) +#define strncmpiW(s1,s2,n) _wcsnicmp((s1),(s2),(n)) +#define strtoulW(s1,s2,b) wcstoul((s1),(s2),(b)) +#define strspnW(str, accept) wcsspn((str),(accept)) +#define strpbrkW(str, accept) wcspbrk((str),(accept)) #define tolowerW(n) towlower((n)) #define toupperW(n) towupper((n)) #define islowerW(n) iswlower((n)) @@ -51,10 +51,10 @@ #define isxdigitW(n) iswxdigit((n)) #define isspaceW(n) iswspace((n)) #define iscntrlW(n) iswcntrl((n)) -#define atoiW(s) _wtoi((const wchar_t *)(s)) -#define atolW(s) _wtol((const wchar_t *)(s)) -#define strlwrW(s) _wcslwr((wchar_t *)(s)) -#define struprW(s) _wcsupr((wchar_t *)(s)) +#define atoiW(s) _wtoi((s)) +#define atolW(s) _wtol((s)) +#define strlwrW(s) _wcslwr((s)) +#define struprW(s) _wcsupr((s)) #define sprintfW swprintf #define vsprintfW vswprintf #define snprintfW _snwprintf
12 years
1
0
0
0
[spetreolle] 57576: [BOOTDATA] Add setupapi.dll to the KnownDlls list. CORE-6732 #comment Quake II setup fixed in rev 57576. Patch by Lee Schroeder. #resolve
by spetreolle@svn.reactos.org
Author: spetreolle Date: Thu Oct 18 21:51:42 2012 New Revision: 57576 URL:
http://svn.reactos.org/svn/reactos?rev=57576&view=rev
Log: [BOOTDATA] Add setupapi.dll to the KnownDlls list. CORE-6732 #comment Quake II setup fixed in rev 57576. Patch by Lee Schroeder. #resolve Modified: trunk/reactos/boot/bootdata/hivesys_amd64.inf trunk/reactos/boot/bootdata/hivesys_arm.inf trunk/reactos/boot/bootdata/hivesys_i386.inf Modified: trunk/reactos/boot/bootdata/hivesys_amd64.inf URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesys_amd6…
============================================================================== --- trunk/reactos/boot/bootdata/hivesys_amd64.inf [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/hivesys_amd64.inf [iso-8859-1] Thu Oct 18 21:51:42 2012 @@ -1221,6 +1221,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","setupapi",0x00000000,"setupapi.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll" Modified: trunk/reactos/boot/bootdata/hivesys_arm.inf URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesys_arm.…
============================================================================== --- trunk/reactos/boot/bootdata/hivesys_arm.inf [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/hivesys_arm.inf [iso-8859-1] Thu Oct 18 21:51:42 2012 @@ -776,6 +776,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","setupapi",0x00000000,"setupapi.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll" Modified: trunk/reactos/boot/bootdata/hivesys_i386.inf URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/boot/bootdata/hivesys_i386…
============================================================================== --- trunk/reactos/boot/bootdata/hivesys_i386.inf [iso-8859-1] (original) +++ trunk/reactos/boot/bootdata/hivesys_i386.inf [iso-8859-1] Thu Oct 18 21:51:42 2012 @@ -1221,6 +1221,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","setupapi",0x00000000,"setupapi.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll"
12 years
1
0
0
0
[jgardou] 57575: [WIN32K] - Try to fix MSVC build
by jgardou@svn.reactos.org
Author: jgardou Date: Thu Oct 18 19:33:46 2012 New Revision: 57575 URL:
http://svn.reactos.org/svn/reactos?rev=57575&view=rev
Log: [WIN32K] - Try to fix MSVC build Modified: trunk/reactos/dll/win32/shell32/iconcache.cpp Modified: trunk/reactos/dll/win32/shell32/iconcache.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/iconcach…
============================================================================== --- trunk/reactos/dll/win32/shell32/iconcache.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/iconcache.cpp [iso-8859-1] Thu Oct 18 19:33:46 2012 @@ -183,7 +183,7 @@ if(ShortcutBitmapInfo.bmBitsPixel == 32) { BOOL add_alpha; - BYTE buffer[FIELD_OFFSET(BITMAPINFO, bmiColors[256])]; + BYTE buffer[sizeof(BITMAPINFO) + 256 * sizeof(RGBQUAD)]; BITMAPINFO* lpbmi = (BITMAPINFO*)buffer; PVOID bits; PULONG pixel;
12 years
1
0
0
0
[jgardou] 57574: [SHELL32] - cope with alpha channel when shortcut-overlaying an icon. CORE-6099 #comment Fixed by rev 57574 #resolve
by jgardou@svn.reactos.org
Author: jgardou Date: Thu Oct 18 18:37:37 2012 New Revision: 57574 URL:
http://svn.reactos.org/svn/reactos?rev=57574&view=rev
Log: [SHELL32] - cope with alpha channel when shortcut-overlaying an icon. CORE-6099 #comment Fixed by rev 57574 #resolve Modified: trunk/reactos/dll/win32/shell32/iconcache.cpp Modified: trunk/reactos/dll/win32/shell32/iconcache.cpp URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/shell32/iconcach…
============================================================================== --- trunk/reactos/dll/win32/shell32/iconcache.cpp [iso-8859-1] (original) +++ trunk/reactos/dll/win32/shell32/iconcache.cpp [iso-8859-1] Thu Oct 18 18:37:37 2012 @@ -83,26 +83,38 @@ * NOTES * Creates a new icon as a copy of the passed-in icon, overlayed with a * shortcut image. + * FIXME: This should go to the ImageList implementation! */ static HICON SIC_OverlayShortcutImage(HICON SourceIcon, BOOL large) -{ ICONINFO SourceIconInfo, ShortcutIconInfo, TargetIconInfo; - HICON ShortcutIcon, TargetIcon; - BITMAP SourceBitmapInfo, ShortcutBitmapInfo; - HDC SourceDC = NULL, - ShortcutDC = NULL, - TargetDC = NULL, - ScreenDC = NULL; - HBITMAP OldSourceBitmap = NULL, - OldShortcutBitmap = NULL, +{ + ICONINFO ShortcutIconInfo, TargetIconInfo; + HICON ShortcutIcon = NULL, TargetIcon; + BITMAP TargetBitmapInfo, ShortcutBitmapInfo; + HDC ShortcutDC = NULL, + TargetDC = NULL; + HBITMAP OldShortcutBitmap = NULL, OldTargetBitmap = NULL; static int s_imgListIdx = -1; - - /* Get information about the source icon and shortcut overlay */ - if (! GetIconInfo(SourceIcon, &SourceIconInfo) - || 0 == GetObjectW(SourceIconInfo.hbmColor, sizeof(BITMAP), &SourceBitmapInfo)) - { - return NULL; + ZeroMemory(&ShortcutIconInfo, sizeof(ShortcutIconInfo)); + ZeroMemory(&TargetIconInfo, sizeof(TargetIconInfo)); + + /* Get information about the source icon and shortcut overlay. + * We will write over the source bitmaps to get the final ones */ + if (! GetIconInfo(SourceIcon, &TargetIconInfo)) + return NULL; + + /* Is it possible with the ImageList implementation? */ + if(!TargetIconInfo.hbmColor) + { + /* Maybe we'll support this at some point */ + FIXME("1bpp icon wants its overlay!\n"); + goto fail; + } + + if(!GetObjectW(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo)) + { + goto fail; } /* search for the shortcut icon only once */ @@ -121,23 +133,25 @@ } else ShortcutIcon = NULL; - if (NULL == ShortcutIcon - || ! GetIconInfo(ShortcutIcon, &ShortcutIconInfo) - || 0 == GetObjectW(ShortcutIconInfo.hbmColor, sizeof(BITMAP), &ShortcutBitmapInfo)) - { - return NULL; - } - - TargetIconInfo = SourceIconInfo; - TargetIconInfo.hbmMask = NULL; - TargetIconInfo.hbmColor = NULL; - - /* Setup the source, shortcut and target masks */ - SourceDC = CreateCompatibleDC(NULL); - if (NULL == SourceDC) goto fail; - OldSourceBitmap = (HBITMAP)SelectObject(SourceDC, SourceIconInfo.hbmMask); - if (NULL == OldSourceBitmap) goto fail; - + if (!ShortcutIcon || !GetIconInfo(ShortcutIcon, &ShortcutIconInfo)) + { + goto fail; + } + + /* Is it possible with the ImageLists ? */ + if(!ShortcutIconInfo.hbmColor) + { + /* Maybe we'll support this at some point */ + FIXME("Should draw 1bpp overlay!\n"); + goto fail; + } + + if(!GetObjectW(ShortcutIconInfo.hbmColor, sizeof(BITMAP), &ShortcutBitmapInfo)) + { + goto fail; + } + + /* Setup the masks */ ShortcutDC = CreateCompatibleDC(NULL); if (NULL == ShortcutDC) goto fail; OldShortcutBitmap = (HBITMAP)SelectObject(ShortcutDC, ShortcutIconInfo.hbmMask); @@ -145,44 +159,120 @@ TargetDC = CreateCompatibleDC(NULL); if (NULL == TargetDC) goto fail; - TargetIconInfo.hbmMask = CreateCompatibleBitmap(TargetDC, SourceBitmapInfo.bmWidth, - SourceBitmapInfo.bmHeight); - if (NULL == TargetIconInfo.hbmMask) goto fail; - ScreenDC = GetDC(NULL); - if (NULL == ScreenDC) goto fail; - TargetIconInfo.hbmColor = CreateCompatibleBitmap(ScreenDC, SourceBitmapInfo.bmWidth, - SourceBitmapInfo.bmHeight); - ReleaseDC(NULL, ScreenDC); - if (NULL == TargetIconInfo.hbmColor) goto fail; OldTargetBitmap = (HBITMAP)SelectObject(TargetDC, TargetIconInfo.hbmMask); if (NULL == OldTargetBitmap) goto fail; - /* Create the target mask by ANDing the source and shortcut masks */ - if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight, - SourceDC, 0, 0, SRCCOPY) || - ! BitBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, - ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, - ShortcutDC, 0, 0, SRCAND)) + /* Create the complete mask by ANDing the source and shortcut masks. + * NOTE: in an ImageList, all icons have the same dimensions */ + if (!BitBlt(TargetDC, 0, 0, ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, + ShortcutDC, 0, 0, SRCAND)) { goto fail; } - /* Setup the source and target xor bitmap */ - if (NULL == SelectObject(SourceDC, SourceIconInfo.hbmColor) || + /* + * We must remove or add the alpha component to the shortcut overlay: + * If we don't, SRCCOPY will copy it to our resulting icon, resulting in a + * partially transparent icons where it shouldn't be, and to an invisible icon + * if the underlying icon don't have any alpha channel information. (16bpp only icon for instance). + * But if the underlying icon has alpha channel information, then we must mark the overlay information + * as opaque. + * NOTE: This code sucks(tm) and should belong to the ImageList implementation. + * NOTE2: there are better ways to do this. + */ + if(ShortcutBitmapInfo.bmBitsPixel == 32) + { + BOOL add_alpha; + BYTE buffer[FIELD_OFFSET(BITMAPINFO, bmiColors[256])]; + BITMAPINFO* lpbmi = (BITMAPINFO*)buffer; + PVOID bits; + PULONG pixel; + INT i, j; + + /* Find if the source bitmap has an alpha channel */ + if(TargetBitmapInfo.bmBitsPixel != 32) add_alpha = FALSE; + else + { + ZeroMemory(buffer, sizeof(buffer)); + lpbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + lpbmi->bmiHeader.biWidth = TargetBitmapInfo.bmWidth; + lpbmi->bmiHeader.biHeight = TargetBitmapInfo.bmHeight; + lpbmi->bmiHeader.biPlanes = 1; + lpbmi->bmiHeader.biBitCount = 32; + + bits = HeapAlloc(GetProcessHeap(), 0, TargetBitmapInfo.bmHeight * TargetBitmapInfo.bmWidthBytes); + + if(!bits) goto fail; + + if(!GetDIBits(TargetDC, TargetIconInfo.hbmColor, 0, TargetBitmapInfo.bmHeight, bits, lpbmi, DIB_RGB_COLORS)) + { + ERR("GetBIBits failed!\n"); + HeapFree(GetProcessHeap(), 0, bits); + goto fail; + } + + i = j = 0; + pixel = (PULONG)bits; + + for(i=0; i<TargetBitmapInfo.bmHeight; i++) + { + for(j=0; j<TargetBitmapInfo.bmWidth; j++) + { + add_alpha = (*pixel++ & 0xFF000000) != 0; + if(add_alpha) break; + } + if(add_alpha) break; + } + HeapFree(GetProcessHeap(), 0, bits); + } + + /* Allocate the bits */ + bits = HeapAlloc(GetProcessHeap(), 0, ShortcutBitmapInfo.bmHeight*ShortcutBitmapInfo.bmWidthBytes); + if(!bits) goto fail; + + ZeroMemory(buffer, sizeof(buffer)); + lpbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); + lpbmi->bmiHeader.biWidth = ShortcutBitmapInfo.bmWidth; + lpbmi->bmiHeader.biHeight = ShortcutBitmapInfo.bmHeight; + lpbmi->bmiHeader.biPlanes = 1; + lpbmi->bmiHeader.biBitCount = 32; + + if(!GetDIBits(TargetDC, ShortcutIconInfo.hbmColor, 0, ShortcutBitmapInfo.bmHeight, bits, lpbmi, DIB_RGB_COLORS)) + { + ERR("GetBIBits failed!\n"); + HeapFree(GetProcessHeap(), 0, bits); + goto fail; + } + + pixel = (PULONG)bits; + /* Remove alpha channel component or make it totally opaque */ + for(i=0; i<ShortcutBitmapInfo.bmHeight; i++) + { + for(j=0; j<ShortcutBitmapInfo.bmWidth; j++) + { + if(add_alpha) *pixel++ |= 0xFF000000; + else *pixel++ &= 0x00FFFFFF; + } + } + + /* GetDIBits return BI_BITFIELDS with masks set to 0, and SetDIBits fails when masks are 0. The irony... */ + lpbmi->bmiHeader.biCompression = BI_RGB; + + /* Set the bits again */ + if(!SetDIBits(TargetDC, ShortcutIconInfo.hbmColor, 0, ShortcutBitmapInfo.bmHeight, bits, lpbmi, DIB_RGB_COLORS)) + { + ERR("SetBIBits failed!, %lu\n", GetLastError()); + HeapFree(GetProcessHeap(), 0, bits); + goto fail; + } + HeapFree(GetProcessHeap(), 0, bits); + } + + /* Now do the copy. We overwrite the original icon data */ + if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor) || NULL == SelectObject(TargetDC, TargetIconInfo.hbmColor)) - { - goto fail; - } - - /* Copy the source color bitmap to the target */ - if (! BitBlt(TargetDC, 0, 0, SourceBitmapInfo.bmWidth, SourceBitmapInfo.bmHeight, - SourceDC, 0, 0, SRCCOPY)) goto fail; - - /* Copy the source xor bitmap to the target and clear out part of it by using - the shortcut mask */ - if (NULL == SelectObject(ShortcutDC, ShortcutIconInfo.hbmColor)) goto fail; - if (!MaskBlt(TargetDC, 0, SourceBitmapInfo.bmHeight - ShortcutBitmapInfo.bmHeight, - ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, + goto fail; + if (!MaskBlt(TargetDC, 0, 0, ShortcutBitmapInfo.bmWidth, ShortcutBitmapInfo.bmHeight, ShortcutDC, 0, 0, ShortcutIconInfo.hbmMask, 0, 0, MAKEROP4(0xAA0000, SRCCOPY))) { @@ -192,11 +282,9 @@ /* Clean up, we're not goto'ing to 'fail' after this so we can be lazy and not set handles to NULL */ SelectObject(TargetDC, OldTargetBitmap); - DeleteObject(TargetDC); + DeleteDC(TargetDC); SelectObject(ShortcutDC, OldShortcutBitmap); - DeleteObject(ShortcutDC); - SelectObject(SourceDC, OldSourceBitmap); - DeleteObject(SourceDC); + DeleteDC(ShortcutDC); /* Create the icon using the bitmaps prepared earlier */ TargetIcon = CreateIconIndirect(&TargetIconInfo); @@ -204,19 +292,24 @@ /* CreateIconIndirect copies the bitmaps, so we can release our bitmaps now */ DeleteObject(TargetIconInfo.hbmColor); DeleteObject(TargetIconInfo.hbmMask); + /* Delete what GetIconInfo gave us */ + DeleteObject(ShortcutIconInfo.hbmColor); + DeleteObject(ShortcutIconInfo.hbmMask); + DestroyIcon(ShortcutIcon); return TargetIcon; fail: /* Clean up scratch resources we created */ if (NULL != OldTargetBitmap) SelectObject(TargetDC, OldTargetBitmap); + if (NULL != TargetDC) DeleteDC(TargetDC); + if (NULL != OldShortcutBitmap) SelectObject(ShortcutDC, OldShortcutBitmap); + if (NULL != ShortcutDC) DeleteDC(ShortcutDC); if (NULL != TargetIconInfo.hbmColor) DeleteObject(TargetIconInfo.hbmColor); if (NULL != TargetIconInfo.hbmMask) DeleteObject(TargetIconInfo.hbmMask); - if (NULL != TargetDC) DeleteObject(TargetDC); - if (NULL != OldShortcutBitmap) SelectObject(ShortcutDC, OldShortcutBitmap); - if (NULL != ShortcutDC) DeleteObject(ShortcutDC); - if (NULL != OldSourceBitmap) SelectObject(SourceDC, OldSourceBitmap); - if (NULL != SourceDC) DeleteObject(SourceDC); + if (NULL != ShortcutIconInfo.hbmColor) DeleteObject(ShortcutIconInfo.hbmColor); + if (NULL != ShortcutIconInfo.hbmMask) DeleteObject(ShortcutIconInfo.hbmColor); + if (NULL != ShortcutIcon) DestroyIcon(ShortcutIcon); return NULL; }
12 years
1
0
0
0
[jgardou] 57573: [WIN32K] - Use low level functions (IntEng*) to draw an icon. Now mode settings change (eg. 16->32bpp) is not so ugly.
by jgardou@svn.reactos.org
Author: jgardou Date: Thu Oct 18 18:27:44 2012 New Revision: 57573 URL:
http://svn.reactos.org/svn/reactos?rev=57573&view=rev
Log: [WIN32K] - Use low level functions (IntEng*) to draw an icon. Now mode settings change (eg. 16->32bpp) is not so ugly. Modified: trunk/reactos/win32ss/user/ntuser/cursoricon.c Modified: trunk/reactos/win32ss/user/ntuser/cursoricon.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/user/ntuser/cursor…
============================================================================== --- trunk/reactos/win32ss/user/ntuser/cursoricon.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/user/ntuser/cursoricon.c [iso-8859-1] Thu Oct 18 18:27:44 2012 @@ -1042,7 +1042,14 @@ } #endif -/* Mostly inspired from wine code */ +/* Mostly inspired from wine code. + * We use low level functions because: + * - at this point, the icon bitmap could have a different bit depth than the DC, + * making it thus impossible to use NtCreateCompatibleDC and selecting the bitmap. + * This happens after a mode setting change. + * - it avoids massive GDI objects locking when only the destination surface needs it. + * - It makes (small) performance gains. + */ BOOL UserDrawIconEx( HDC hDc, @@ -1055,128 +1062,220 @@ HBRUSH hbrFlickerFreeDraw, UINT diFlags) { + PSURFACE psurfDest, psurfMask, psurfColor, psurfOffScreen; + PDC pdc = NULL; BOOL Ret = FALSE; HBITMAP hbmMask, hbmColor; - BITMAP bmpColor, bm; - BOOL DoFlickerFree; - INT iOldBkColor = 0, iOldTxtColor = 0; - - HDC hMemDC, hDestDC = hDc; - HGDIOBJ hOldOffBrush = 0; - HGDIOBJ hOldOffBmp = 0; - HBITMAP hTmpBmp = 0, hOffBmp = 0; - BOOL bAlpha = FALSE; - INT x=xLeft, y=yTop; + BOOL bOffScreen, bAlpha = FALSE; + RECTL rcDest, rcSrc; + CLIPOBJ* pdcClipObj = NULL; + EXLATEOBJ exlo; + + /* Stupid case */ + if((diFlags & DI_NORMAL) == 0) + { + ERR("DrawIconEx called without mask or color bitmap to draw.\n"); + return FALSE; + } hbmMask = pIcon->IconInfo.hbmMask; hbmColor = pIcon->IconInfo.hbmColor; - + if (istepIfAniCur) ERR("NtUserDrawIconEx: istepIfAniCur is not supported!\n"); - - if (!hbmMask || !GreGetObject(hbmMask, sizeof(BITMAP), (PVOID)&bm)) - { + + /* + * Get our objects. + * Shared locks are enough, we are only reading those bitmaps + */ + psurfMask = SURFACE_ShareLockSurface(hbmMask); + if(psurfMask == NULL) + { + ERR("Unable to lock the mask surface.\n"); return FALSE; } - - if (hbmColor && !GreGetObject(hbmColor, sizeof(BITMAP), (PVOID)&bmpColor)) - { + + /* Color bitmap is not mandatory */ + if(hbmColor == NULL) + { + /* But then the mask bitmap must have the information in it's bottom half */ + ASSERT(psurfMask->SurfObj.sizlBitmap.cy == 2*pIcon->Size.cy); + psurfColor = NULL; + } + else if ((psurfColor = SURFACE_ShareLockSurface(hbmColor)) == NULL) + { + ERR("Unable to lock the color bitmap.\n"); + SURFACE_ShareUnlockSurface(psurfMask); return FALSE; } - - if(!(hMemDC = NtGdiCreateCompatibleDC(hDc))) - { - ERR("NtGdiCreateCompatibleDC failed!\n"); - return FALSE; - } + + /* Set source rect */ + RECTL_vSetRect(&rcSrc, 0, 0, pIcon->Size.cx, pIcon->Size.cy); /* Check for alpha */ - if (hbmColor - && (bmpColor.bmBitsPixel == 32) - && (diFlags & DI_IMAGE)) - { - SURFACE *psurfOff = NULL; + if (psurfColor && + (psurfColor->SurfObj.iBitmapFormat == BMF_32BPP) && + (diFlags & DI_IMAGE)) + { PFN_DIB_GetPixel fnSource_GetPixel = NULL; INT i, j; /* In order to correctly display 32 bit icons Windows first scans the image, because information about transparency is not stored in any image's headers */ - psurfOff = SURFACE_ShareLockSurface(hbmColor); - if (psurfOff) - { - fnSource_GetPixel = DibFunctionsForBitmapFormat[psurfOff->SurfObj.iBitmapFormat].DIB_GetPixel; - if (fnSource_GetPixel) + fnSource_GetPixel = DibFunctionsForBitmapFormat[BMF_32BPP].DIB_GetPixel; + for (i = 0; i < psurfColor->SurfObj.sizlBitmap.cx; i++) + { + for (j = 0; j < psurfColor->SurfObj.sizlBitmap.cy; j++) { - for (i = 0; i < psurfOff->SurfObj.sizlBitmap.cx; i++) - { - for (j = 0; j < psurfOff->SurfObj.sizlBitmap.cy; j++) - { - bAlpha = ((BYTE)(fnSource_GetPixel(&psurfOff->SurfObj, i, j) >> 24) & 0xff); - if (bAlpha) - break; - } - if (bAlpha) - break; - } + bAlpha = ((BYTE)(fnSource_GetPixel(&psurfColor->SurfObj, i, j) >> 24) & 0xff); + if (bAlpha) + break; } - SURFACE_ShareUnlockSurface(psurfOff); - } - } - + if (bAlpha) + break; + } + } + + /* Fix width parameter, if needed */ if (!cxWidth) - cxWidth = ((diFlags & DI_DEFAULTSIZE) ? - UserGetSystemMetrics(SM_CXICON) : pIcon->Size.cx); - + { + if(diFlags & DI_DEFAULTSIZE) + cxWidth = pIcon->IconInfo.fIcon ? + UserGetSystemMetrics(SM_CXICON) : UserGetSystemMetrics(SM_CXCURSOR); + else + cxWidth = pIcon->Size.cx; + } + + /* Fix height parameter, if needed */ if (!cyHeight) - cyHeight = ((diFlags & DI_DEFAULTSIZE) ? - UserGetSystemMetrics(SM_CYICON) : pIcon->Size.cy); - - DoFlickerFree = (hbrFlickerFreeDraw && - (GDI_HANDLE_GET_TYPE(hbrFlickerFreeDraw) == GDI_OBJECT_TYPE_BRUSH)); - - if (DoFlickerFree) - { - hDestDC = NtGdiCreateCompatibleDC(hDc); - if(!hDestDC) - { - ERR("NtGdiCreateCompatibleDC failed!\n"); - Ret = FALSE; - goto Cleanup ; - } - hOffBmp = NtGdiCreateCompatibleBitmap(hDc, cxWidth, cyHeight); - if(!hOffBmp) - { - ERR("NtGdiCreateCompatibleBitmap failed!\n"); - goto Cleanup ; - } - hOldOffBmp = NtGdiSelectBitmap(hDestDC, hOffBmp); - hOldOffBrush = NtGdiSelectBrush(hDestDC, hbrFlickerFreeDraw); - NtGdiPatBlt(hDestDC, 0, 0, cxWidth, cyHeight, PATCOPY); - NtGdiSelectBrush(hDestDC, hOldOffBrush); - x=y=0; - } - - /* Set Background/foreground colors */ - iOldTxtColor = IntGdiSetTextColor(hDc, 0); // Black - iOldBkColor = IntGdiSetBkColor(hDc, 0x00FFFFFF); // White - + { + if(diFlags & DI_DEFAULTSIZE) + cyHeight = pIcon->IconInfo.fIcon ? + UserGetSystemMetrics(SM_CYICON) : UserGetSystemMetrics(SM_CYCURSOR); + else + cyHeight = pIcon->Size.cy; + } + + /* Should we render off-screen? */ + bOffScreen = hbrFlickerFreeDraw && (GDI_HANDLE_GET_TYPE(hbrFlickerFreeDraw) == GDI_OBJECT_TYPE_BRUSH); + + if (bOffScreen) + { + /* Yes: Allocate and paint the offscreen surface */ + EBRUSHOBJ eboFill; + PBRUSH pbrush = BRUSH_ShareLockBrush(hbrFlickerFreeDraw); + + TRACE("Performing off-screen rendering.\n"); + + if(!pbrush) + { + ERR("Failed to get brush object.\n"); + SURFACE_ShareUnlockSurface(psurfMask); + if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor); + return FALSE; + } + + psurfOffScreen = SURFACE_AllocSurface(STYPE_BITMAP, + cxWidth, cyHeight, psurfColor->SurfObj.iBitmapFormat, + 0, 0, NULL); + if(!psurfOffScreen) + { + ERR("Failed to allocate the off-screen surface.\n"); + SURFACE_ShareUnlockSurface(psurfMask); + if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor); + BRUSH_ShareUnlockBrush(pbrush); + return FALSE; + } + + /* Paint the brush */ + EBRUSHOBJ_vInit(&eboFill, pbrush, psurfOffScreen, 0x00FFFFFF, 0, NULL); + RECTL_vSetRect(&rcDest, 0, 0, cxWidth, cyHeight); + + Ret = IntEngBitBlt(&psurfOffScreen->SurfObj, + NULL, + NULL, + NULL, + NULL, + &rcDest, + NULL, + NULL, + &eboFill.BrushObject, + &pbrush->ptOrigin, + ROP4_PATCOPY); + + /* Clean up everything */ + EBRUSHOBJ_vCleanup(&eboFill); + BRUSH_ShareUnlockBrush(pbrush); + + if(!Ret) + { + ERR("Failed to paint the off-screen surface.\n"); + SURFACE_ShareUnlockSurface(psurfMask); + if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor); + GDIOBJ_vDeleteObject(&psurfOffScreen->BaseObject); + return FALSE; + } + + /* We now have our destination surface */ + psurfDest = psurfOffScreen; + } + else + { + /* We directly draw to the DC */ + TRACE("Performing on screen rendering.\n"); + + psurfOffScreen = NULL; + pdc = DC_LockDc(hDc); + if(!pdc) + { + ERR("Could not lock the destination DC.\n"); + SURFACE_ShareUnlockSurface(psurfMask); + if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor); + return FALSE; + } + /* Calculate destination rectangle */ + RECTL_vSetRect(&rcDest, xLeft, yTop, xLeft + cxWidth, yTop + cyHeight); + IntLPtoDP(pdc, (LPPOINT)&rcDest, 2); + RECTL_vOffsetRect(&rcDest, pdc->ptlDCOrig.x, pdc->ptlDCOrig.y); + + /* Prepare the underlying surface */ + DC_vPrepareDCsForBlit(pdc, rcDest, NULL, rcDest); + + /* Get the clip object */ + pdcClipObj = pdc->rosdc.CombinedClip; + + /* We now have our destination surface and rectangle */ + psurfDest = pdc->dclevel.pSurface; + + if(psurfDest == NULL) + { + /* Empty DC */ + DC_vFinishBlit(pdc, NULL); + DC_UnlockDc(pdc); + SURFACE_ShareUnlockSurface(psurfMask); + if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor); + return FALSE; + } + } + + /* Now do the rendering */ if(bAlpha && (diFlags & DI_IMAGE)) { - BLENDFUNCTION pixelblend = { AC_SRC_OVER, 0, 255, AC_SRC_ALPHA }; + BLENDOBJ blendobj = { {AC_SRC_OVER, 0, 255, AC_SRC_ALPHA } }; BYTE Alpha; INT i, j; - PSURFACE psurf; + PSURFACE psurf = NULL; PBYTE ptr ; - HBITMAP hMemBmp = NULL; - - hMemBmp = BITMAP_CopyBitmap(hbmColor); - if(!hMemBmp) + HBITMAP hsurfCopy = NULL; + + hsurfCopy = BITMAP_CopyBitmap(hbmColor); + if(!hsurfCopy) { ERR("BITMAP_CopyBitmap failed!"); goto CleanupAlpha; } - psurf = SURFACE_ShareLockSurface(hMemBmp); + psurf = SURFACE_ShareLockSurface(hsurfCopy); if(!psurf) { ERR("SURFACE_LockSurface failed!\n"); @@ -1197,109 +1296,181 @@ ptr += 4; } } - - SURFACE_ShareUnlockSurface(psurf); - - hTmpBmp = NtGdiSelectBitmap(hMemDC, hMemBmp); - - Ret = NtGdiAlphaBlend(hDestDC, - x, - y, - cxWidth, - cyHeight, - hMemDC, - 0, - 0, - pIcon->Size.cx, - pIcon->Size.cy, - pixelblend, - NULL); - NtGdiSelectBitmap(hMemDC, hTmpBmp); + + /* Initialize color translation object */ + EXLATEOBJ_vInitialize(&exlo, psurf->ppal, psurfDest->ppal, 0xFFFFFFFF, 0xFFFFFFFF, 0); + + /* Now do it */ + Ret = IntEngAlphaBlend(&psurfDest->SurfObj, + &psurf->SurfObj, + pdcClipObj, + &exlo.xlo, + &rcDest, + &rcSrc, + &blendobj); + + EXLATEOBJ_vCleanup(&exlo); + CleanupAlpha: - if(hMemBmp) NtGdiDeleteObjectApp(hMemBmp); + if(psurf) SURFACE_ShareUnlockSurface(psurf); + if(hsurfCopy) NtGdiDeleteObjectApp(hsurfCopy); if(Ret) goto done; + ERR("NtGdiAlphaBlend failed!\n"); } if (diFlags & DI_MASK) { - DWORD rop = (diFlags & DI_IMAGE) ? SRCAND : SRCCOPY; - hTmpBmp = NtGdiSelectBitmap(hMemDC, hbmMask); - NtGdiStretchBlt(hDestDC, - x, - y, - cxWidth, - cyHeight, - hMemDC, - 0, - 0, - pIcon->Size.cx, - pIcon->Size.cy, - rop, - 0); - NtGdiSelectBitmap(hMemDC, hTmpBmp); + DWORD rop4 = (diFlags & DI_IMAGE) ? ROP4_SRCAND : ROP4_SRCCOPY; + + EXLATEOBJ_vInitSrcMonoXlate(&exlo, psurfDest->ppal, 0x00FFFFFF, 0); + + Ret = IntEngStretchBlt(&psurfDest->SurfObj, + &psurfMask->SurfObj, + NULL, + pdcClipObj, + &exlo.xlo, + NULL, + &rcDest, + &rcSrc, + NULL, + NULL, + NULL, + rop4); + + EXLATEOBJ_vCleanup(&exlo); + + if(!Ret) + { + ERR("Failed to mask the bitmap data.\n"); + goto Cleanup; + } } if(diFlags & DI_IMAGE) { - if (hbmColor) - { - DWORD rop = (diFlags & DI_MASK) ? SRCINVERT : SRCCOPY ; - hTmpBmp = NtGdiSelectBitmap(hMemDC, hbmColor); - NtGdiStretchBlt(hDestDC, - x, - y, - cxWidth, - cyHeight, - hMemDC, - 0, - 0, - pIcon->Size.cx, - pIcon->Size.cy, - rop, - 0); - NtGdiSelectBitmap(hMemDC, hTmpBmp); + if (psurfColor) + { + DWORD rop4 = (diFlags & DI_MASK) ? ROP4_SRCINVERT : ROP4_SRCCOPY ; + + EXLATEOBJ_vInitialize(&exlo, psurfColor->ppal, psurfDest->ppal, 0x00FFFFFF, 0x00FFFFFF, 0); + + Ret = IntEngStretchBlt(&psurfDest->SurfObj, + &psurfColor->SurfObj, + NULL, + pdcClipObj, + &exlo.xlo, + NULL, + &rcDest, + &rcSrc, + NULL, + NULL, + NULL, + rop4); + + EXLATEOBJ_vCleanup(&exlo); + + if(!Ret) + { + ERR("Failed to render the icon bitmap.\n"); + goto Cleanup; + } } else { - /* Mask bitmap holds the information in its second half */ - DWORD rop = (diFlags & DI_MASK) ? SRCINVERT : SRCCOPY ; - hTmpBmp = NtGdiSelectBitmap(hMemDC, hbmMask); - NtGdiStretchBlt(hDestDC, - x, - y, - cxWidth, - cyHeight, - hMemDC, - 0, - pIcon->Size.cy, - pIcon->Size.cx, - pIcon->Size.cy, - rop, - 0); - NtGdiSelectBitmap(hMemDC, hTmpBmp); + /* Mask bitmap holds the information in its bottom half */ + DWORD rop4 = (diFlags & DI_MASK) ? ROP4_SRCINVERT : ROP4_SRCCOPY; + RECTL_vOffsetRect(&rcSrc, 0, pIcon->Size.cy); + + EXLATEOBJ_vInitSrcMonoXlate(&exlo, psurfDest->ppal, 0x00FFFFFF, 0); + + Ret = IntEngStretchBlt(&psurfDest->SurfObj, + &psurfMask->SurfObj, + NULL, + pdcClipObj, + &exlo.xlo, + NULL, + &rcDest, + &rcSrc, + NULL, + NULL, + NULL, + rop4); + + EXLATEOBJ_vCleanup(&exlo); + + if(!Ret) + { + ERR("Failed to render the icon bitmap.\n"); + goto Cleanup; + } } } done: - if(hDestDC != hDc) - { - NtGdiBitBlt(hDc, xLeft, yTop, cxWidth, cyHeight, hDestDC, 0, 0, SRCCOPY, 0, 0); - } - - /* Restore foreground and background colors */ - IntGdiSetBkColor(hDc, iOldBkColor); - IntGdiSetTextColor(hDc, iOldTxtColor); - - Ret = TRUE ; - + /* We're done. Was it a double buffered draw ? */ + if(bOffScreen) + { + /* Yes. Draw it back to our DC */ + POINTL ptSrc = {0, 0}; + pdc = DC_LockDc(hDc); + if(!pdc) + { + ERR("Could not lock the destination DC.\n"); + return FALSE; + } + /* Calculate destination rectangle */ + RECTL_vSetRect(&rcDest, xLeft, yTop, xLeft + cxWidth, yTop + cyHeight); + IntLPtoDP(pdc, (LPPOINT)&rcDest, 2); + RECTL_vOffsetRect(&rcDest, pdc->ptlDCOrig.x, pdc->ptlDCOrig.y); + + /* Prepare the underlying surface */ + DC_vPrepareDCsForBlit(pdc, rcDest, NULL, rcDest); + + /* Get the clip object */ + pdcClipObj = pdc->rosdc.CombinedClip; + + /* We now have our destination surface and rectangle */ + psurfDest = pdc->dclevel.pSurface; + if(!psurfDest) + { + /* So, you did all of this for an empty DC. */ + DC_UnlockDc(pdc); + goto Cleanup2; + } + + /* Color translation */ + EXLATEOBJ_vInitialize(&exlo, psurfOffScreen->ppal, psurfDest->ppal, 0x00FFFFFF, 0x00FFFFFF, 0); + + /* Blt it! */ + Ret = IntEngBitBlt(&psurfDest->SurfObj, + &psurfOffScreen->SurfObj, + NULL, + pdcClipObj, + &exlo.xlo, + &rcDest, + &ptSrc, + NULL, + NULL, + NULL, + ROP4_SRCCOPY); + + EXLATEOBJ_vCleanup(&exlo); + } Cleanup: - NtGdiDeleteObjectApp(hMemDC); - if(hDestDC != hDc) - { - if(hOldOffBmp) NtGdiSelectBitmap(hDestDC, hOldOffBmp); - NtGdiDeleteObjectApp(hDestDC); - if(hOffBmp) NtGdiDeleteObjectApp(hOffBmp); - } + if(pdc) + { + DC_vFinishBlit(pdc, NULL); + DC_UnlockDc(pdc); + } + +Cleanup2: + /* Delete off screen rendering surface */ + if(psurfOffScreen) + GDIOBJ_vDeleteObject(&psurfOffScreen->BaseObject); + + /* Unlock other surfaces */ + SURFACE_ShareUnlockSurface(psurfMask); + if(psurfColor) SURFACE_ShareUnlockSurface(psurfColor); return Ret; }
12 years
1
0
0
0
[jgardou] 57572: [WIN32K] - Implement EXLATEOBJ_vInitSrcMonoXlate
by jgardou@svn.reactos.org
Author: jgardou Date: Thu Oct 18 18:26:08 2012 New Revision: 57572 URL:
http://svn.reactos.org/svn/reactos?rev=57572&view=rev
Log: [WIN32K] - Implement EXLATEOBJ_vInitSrcMonoXlate Modified: trunk/reactos/win32ss/gdi/eng/xlateobj.c Modified: trunk/reactos/win32ss/gdi/eng/xlateobj.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/eng/xlateobj.c…
============================================================================== --- trunk/reactos/win32ss/gdi/eng/xlateobj.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/eng/xlateobj.c [iso-8859-1] Thu Oct 18 18:26:08 2012 @@ -600,6 +600,21 @@ pexlo->ppalDstDc = pdcDst->dclevel.ppal; } +VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate( + PEXLATEOBJ pexlo, + PPALETTE ppalDst, + COLORREF crBackgroundClr, + COLORREF crForegroundClr) +{ + /* Normal initialisation, with mono palette as source */ + EXLATEOBJ_vInitialize(pexlo, + gppalMono, + ppalDst, + 0, + crBackgroundClr, + crForegroundClr); +} + VOID NTAPI EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo)
12 years
1
0
0
0
[jgardou] 57571: [WIN32K] - Add the ability to initialize an EBRUSHOBJ object without a device context
by jgardou@svn.reactos.org
Author: jgardou Date: Thu Oct 18 18:23:47 2012 New Revision: 57571 URL:
http://svn.reactos.org/svn/reactos?rev=57571&view=rev
Log: [WIN32K] - Add the ability to initialize an EBRUSHOBJ object without a device context Modified: trunk/reactos/win32ss/gdi/eng/engbrush.c trunk/reactos/win32ss/gdi/ntgdi/bitblt.c trunk/reactos/win32ss/gdi/ntgdi/brush.h trunk/reactos/win32ss/gdi/ntgdi/dclife.c trunk/reactos/win32ss/gdi/ntgdi/dcobjs.c Modified: trunk/reactos/win32ss/gdi/eng/engbrush.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/eng/engbrush.c…
============================================================================== --- trunk/reactos/win32ss/gdi/eng/engbrush.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/eng/engbrush.c [iso-8859-1] Thu Oct 18 18:23:47 2012 @@ -50,11 +50,15 @@ VOID NTAPI -EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc) +EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, + PBRUSH pbrush, + PSURFACE psurf, + COLORREF crBackgroundClr, + COLORREF crForegroundClr, + PPALETTE ppalDC) { ASSERT(pebo); ASSERT(pbrush); - ASSERT(pdc); pebo->BrushObject.flColorType = 0; pebo->BrushObject.pvRbrush = NULL; @@ -63,20 +67,24 @@ pebo->flattrs = pbrush->flAttrs; /* Initialize 1 bpp fore and back colors */ - pebo->crCurrentBack = pdc->pdcattr->crBackgroundClr; - pebo->crCurrentText = pdc->pdcattr->crForegroundClr; - - pebo->psurfTrg = pdc->dclevel.pSurface; + pebo->crCurrentBack = crBackgroundClr; + pebo->crCurrentText = crForegroundClr; + + pebo->psurfTrg = psurf; /* We are initializing for a new memory DC */ if(!pebo->psurfTrg) pebo->psurfTrg = psurfDefaultBitmap; ASSERT(pebo->psurfTrg); ASSERT(pebo->psurfTrg->ppal); + /* Initialize palettes */ pebo->ppalSurf = pebo->psurfTrg->ppal; GDIOBJ_vReferenceObjectByPointer(&pebo->ppalSurf->BaseObject); - pebo->ppalDC = pdc->dclevel.ppal; + pebo->ppalDC = ppalDC; + if(!pebo->ppalDC) + pebo->ppalDC = gppalDefault; GDIOBJ_vReferenceObjectByPointer(&pebo->ppalDC->BaseObject); + pebo->ppalDIB = NULL; if (pbrush->flAttrs & BR_IS_NULL) { @@ -97,6 +105,16 @@ if (pbrush->flAttrs & BR_IS_HATCH) pebo->crCurrentText = pbrush->BrushAttr.lbColor; } +} + +VOID +NTAPI +EBRUSHOBJ_vInitFromDC(EBRUSHOBJ *pebo, + PBRUSH pbrush, PDC pdc) +{ + EBRUSHOBJ_vInit(pebo, pbrush, pdc->dclevel.pSurface, + pdc->pdcattr->crBackgroundClr, pdc->pdcattr->crForegroundClr, + pdc->dclevel.ppal); } VOID @@ -157,13 +175,15 @@ VOID NTAPI -EBRUSHOBJ_vUpdate(EBRUSHOBJ *pebo, PBRUSH pbrush, PDC pdc) +EBRUSHOBJ_vUpdateFromDC(EBRUSHOBJ *pebo, + PBRUSH pbrush, + PDC pdc) { /* Cleanup the brush */ EBRUSHOBJ_vCleanup(pebo); /* Reinitialize */ - EBRUSHOBJ_vInit(pebo, pbrush, pdc); + EBRUSHOBJ_vInitFromDC(pebo, pbrush, pdc); } /** Modified: trunk/reactos/win32ss/gdi/ntgdi/bitblt.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/bitblt.c…
============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/bitblt.c [iso-8859-1] Thu Oct 18 18:23:47 2012 @@ -853,7 +853,7 @@ if (pbrush != NULL) { /* Initialize a brush object */ - EBRUSHOBJ_vInit(&eboFill, pbrush, pdc); + EBRUSHOBJ_vInitFromDC(&eboFill, pbrush, pdc); IntPatBlt( pdc, Modified: trunk/reactos/win32ss/gdi/ntgdi/brush.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/brush.h?…
============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/brush.h [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/brush.h [iso-8859-1] Thu Oct 18 18:23:47 2012 @@ -98,6 +98,8 @@ extern HSURF gahsurfHatch[HS_DDI_MAX]; +struct _SURFACE; +struct _PALETTE; struct _DC; INIT_FUNCTION @@ -107,7 +109,11 @@ VOID NTAPI -EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *); +EBRUSHOBJ_vInit(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _SURFACE *, COLORREF, COLORREF, struct _PALETTE *); + +VOID +NTAPI +EBRUSHOBJ_vInitFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *); VOID FASTCALL @@ -115,7 +121,7 @@ VOID NTAPI -EBRUSHOBJ_vUpdate(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *pdc); +EBRUSHOBJ_vUpdateFromDC(EBRUSHOBJ *pebo, PBRUSH pbrush, struct _DC *); BOOL NTAPI Modified: trunk/reactos/win32ss/gdi/ntgdi/dclife.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/dclife.c…
============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/dclife.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/dclife.c [iso-8859-1] Thu Oct 18 18:23:47 2012 @@ -270,10 +270,10 @@ pdc->dcattr.ptlBrushOrigin = pdc->dclevel.ptlBrushOrigin; /* Initialize EBRUSHOBJs */ - EBRUSHOBJ_vInit(&pdc->eboFill, pdc->dclevel.pbrFill, pdc); - EBRUSHOBJ_vInit(&pdc->eboLine, pdc->dclevel.pbrLine, pdc); - EBRUSHOBJ_vInit(&pdc->eboText, pbrDefaultBrush, pdc); - EBRUSHOBJ_vInit(&pdc->eboBackground, pbrDefaultBrush, pdc); + EBRUSHOBJ_vInitFromDC(&pdc->eboFill, pdc->dclevel.pbrFill, pdc); + EBRUSHOBJ_vInitFromDC(&pdc->eboLine, pdc->dclevel.pbrLine, pdc); + EBRUSHOBJ_vInitFromDC(&pdc->eboText, pbrDefaultBrush, pdc); + EBRUSHOBJ_vInitFromDC(&pdc->eboBackground, pbrDefaultBrush, pdc); /* Setup fill data */ pdc->dcattr.jROP2 = R2_COPYPEN; Modified: trunk/reactos/win32ss/gdi/ntgdi/dcobjs.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/win32ss/gdi/ntgdi/dcobjs.c…
============================================================================== --- trunk/reactos/win32ss/gdi/ntgdi/dcobjs.c [iso-8859-1] (original) +++ trunk/reactos/win32ss/gdi/ntgdi/dcobjs.c [iso-8859-1] Thu Oct 18 18:23:47 2012 @@ -43,7 +43,7 @@ if (pdcattr->ulDirty_ & DIRTY_FILL) { /* Update eboFill */ - EBRUSHOBJ_vUpdate(&pdc->eboFill, pdc->dclevel.pbrFill, pdc); + EBRUSHOBJ_vUpdateFromDC(&pdc->eboFill, pdc->dclevel.pbrFill, pdc); } /* Check for DC brush */ @@ -90,7 +90,7 @@ if (pdcattr->ulDirty_ & DIRTY_LINE) { /* Update eboLine */ - EBRUSHOBJ_vUpdate(&pdc->eboLine, pdc->dclevel.pbrLine, pdc); + EBRUSHOBJ_vUpdateFromDC(&pdc->eboLine, pdc->dclevel.pbrLine, pdc); } /* Check for DC pen */ @@ -113,7 +113,7 @@ /* Timo : The text brush should never be changed. * Jérôme : Yeah, but its palette must be updated anyway! */ if(pdcattr->ulDirty_ & DIRTY_TEXT) - EBRUSHOBJ_vUpdate(&pdc->eboText, pbrDefaultBrush, pdc); + EBRUSHOBJ_vUpdateFromDC(&pdc->eboText, pbrDefaultBrush, pdc); /* Update the eboText's solid color */ EBRUSHOBJ_vSetSolidRGBColor(&pdc->eboText, pdcattr->crForegroundClr); @@ -129,7 +129,7 @@ PDC_ATTR pdcattr = pdc->pdcattr; if(pdcattr->ulDirty_ & DIRTY_BACKGROUND) - EBRUSHOBJ_vUpdate(&pdc->eboBackground, pbrDefaultBrush, pdc); + EBRUSHOBJ_vUpdateFromDC(&pdc->eboBackground, pbrDefaultBrush, pdc); /* Update the eboBackground's solid color */ EBRUSHOBJ_vSetSolidRGBColor(&pdc->eboBackground, pdcattr->crBackgroundClr);
12 years
1
0
0
0
← Newer
1
...
6
7
8
9
10
11
12
...
22
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
Results per page:
10
25
50
100
200