Alexandre Julliard : user32: Delay creation of the 55AA pattern brush until it's needed.
Alexandre Julliard
julliard at winehq.org
Wed Oct 16 14:25:50 CDT 2013
Module: wine
Branch: master
Commit: 209d1a86d26f6eca9b32dd2186c5e2b59fa117c9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=209d1a86d26f6eca9b32dd2186c5e2b59fa117c9
Author: Alexandre Julliard <julliard at winehq.org>
Date: Wed Oct 16 16:07:53 2013 +0200
user32: Delay creation of the 55AA pattern brush until it's needed.
---
dlls/user32/defwnd.c | 2 +-
dlls/user32/nonclient.c | 2 +-
dlls/user32/sysparams.c | 32 +++++++++++++++++++++++---------
dlls/user32/text.c | 2 +-
dlls/user32/uitools.c | 4 ++--
dlls/user32/user_private.h | 2 +-
6 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/dlls/user32/defwnd.c b/dlls/user32/defwnd.c
index 7a55844..eb64666 100644
--- a/dlls/user32/defwnd.c
+++ b/dlls/user32/defwnd.c
@@ -167,7 +167,7 @@ HBRUSH DEFWND_ControlColor( HDC hDC, UINT ctlType )
* look different from the window background.
*/
if (bk == GetSysColor(COLOR_WINDOW))
- return SYSCOLOR_55AABrush;
+ return SYSCOLOR_Get55AABrush();
UnrealizeObject( hb );
return hb;
diff --git a/dlls/user32/nonclient.c b/dlls/user32/nonclient.c
index da9c6bd..6becd5f 100644
--- a/dlls/user32/nonclient.c
+++ b/dlls/user32/nonclient.c
@@ -289,7 +289,7 @@ BOOL WINAPI DrawCaptionTempW (HWND hwnd, HDC hdc, const RECT *rect, HFONT hFont,
FillRect (hdc, &rc, GetSysColorBrush (COLOR_3DFACE));
if (uFlags & DC_ACTIVE) {
- HBRUSH hbr = SelectObject (hdc, SYSCOLOR_55AABrush);
+ HBRUSH hbr = SelectObject (hdc, SYSCOLOR_Get55AABrush());
PatBlt (hdc, rc.left, rc.top,
rc.right-rc.left, rc.bottom-rc.top, 0xFA0089);
SelectObject (hdc, hbr);
diff --git a/dlls/user32/sysparams.c b/dlls/user32/sysparams.c
index 7c05d00..bdfed38 100644
--- a/dlls/user32/sysparams.c
+++ b/dlls/user32/sysparams.c
@@ -242,12 +242,8 @@ static BOOL notify_change = TRUE;
/* System parameters storage */
static RECT work_area;
-static const WORD wPattern55AA[] = { 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa };
-
static HKEY volatile_base_key;
-HBRUSH SYSCOLOR_55AABrush = 0;
-
union sysparam_all_entry;
struct sysparam_entry
@@ -1346,11 +1342,6 @@ void SYSPARAMS_Init(void)
{
HKEY key;
DWORD i, dispos;
- HBITMAP h55AABitmap = CreateBitmap( 8, 8, 1, 1, wPattern55AA );
-
- SYSCOLOR_55AABrush = CreatePatternBrush( h55AABitmap );
- __wine_make_gdi_object_system( SYSCOLOR_55AABrush, TRUE );
- DeleteObject( h55AABitmap );
/* this one must be non-volatile */
if (RegCreateKeyW( HKEY_CURRENT_USER, WINE_CURRENT_USER_REGKEY, &key ))
@@ -2716,6 +2707,29 @@ HPEN SYSCOLOR_GetPen( INT index )
/***********************************************************************
+ * SYSCOLOR_Get55AABrush
+ */
+HBRUSH SYSCOLOR_Get55AABrush(void)
+{
+ static const WORD pattern[] = { 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa, 0x5555, 0xaaaa };
+ static HBRUSH brush_55aa;
+
+ if (!brush_55aa)
+ {
+ HBITMAP bitmap = CreateBitmap( 8, 8, 1, 1, pattern );
+ HBRUSH brush = CreatePatternBrush( bitmap );
+ DeleteObject( bitmap );
+ __wine_make_gdi_object_system( brush, TRUE );
+ if (InterlockedCompareExchangePointer( (void **)&brush_55aa, brush, 0 ))
+ {
+ __wine_make_gdi_object_system( brush, FALSE );
+ DeleteObject( brush );
+ }
+ }
+ return brush_55aa;
+}
+
+/***********************************************************************
* ChangeDisplaySettingsA (USER32.@)
*/
LONG WINAPI ChangeDisplaySettingsA( LPDEVMODEA devmode, DWORD flags )
diff --git a/dlls/user32/text.c b/dlls/user32/text.c
index 12432b8..7bef476 100644
--- a/dlls/user32/text.c
+++ b/dlls/user32/text.c
@@ -1240,7 +1240,7 @@ static BOOL TEXT_GrayString(HDC hdc, HBRUSH hb, GRAYSTRINGPROC fn, LPARAM lp, IN
if(retval || len != -1)
#endif
{
- hbsave = SelectObject(memdc, SYSCOLOR_55AABrush);
+ hbsave = SelectObject(memdc, SYSCOLOR_Get55AABrush());
PatBlt(memdc, 0, 0, cx, cy, 0x000A0329);
SelectObject(memdc, hbsave);
}
diff --git a/dlls/user32/uitools.c b/dlls/user32/uitools.c
index 386801c..c11a1d3 100644
--- a/dlls/user32/uitools.c
+++ b/dlls/user32/uitools.c
@@ -649,7 +649,7 @@ static void UITOOLS_DrawCheckedRect( HDC dc, LPRECT rect )
FillRect(dc, rect, GetSysColorBrush(COLOR_BTNFACE));
bg = SetBkColor(dc, RGB(255, 255, 255));
- hbsave = SelectObject(dc, SYSCOLOR_55AABrush);
+ hbsave = SelectObject(dc, SYSCOLOR_Get55AABrush());
PatBlt(dc, rect->left, rect->top, rect->right-rect->left, rect->bottom-rect->top, 0x00FA0089);
SelectObject(dc, hbsave);
SetBkColor(dc, bg);
@@ -1703,7 +1703,7 @@ static BOOL UITOOLS_DrawState(HDC hdc, HBRUSH hbr, DRAWSTATEPROC func, LPARAM lp
/* This state cause the image to be dithered */
if(flags & DSS_UNION)
{
- hbsave = SelectObject(memdc, SYSCOLOR_55AABrush);
+ hbsave = SelectObject(memdc, SYSCOLOR_Get55AABrush());
if(!hbsave) goto cleanup;
tmp = PatBlt(memdc, 0, 0, cx, cy, 0x00FA0089);
SelectObject(memdc, hbsave);
diff --git a/dlls/user32/user_private.h b/dlls/user32/user_private.h
index 5666412..0f86bdf 100644
--- a/dlls/user32/user_private.h
+++ b/dlls/user32/user_private.h
@@ -209,7 +209,6 @@ static inline BOOL is_broadcast( HWND hwnd )
}
extern HMODULE user32_module DECLSPEC_HIDDEN;
-extern HBRUSH SYSCOLOR_55AABrush DECLSPEC_HIDDEN;
struct dce;
struct tagWND;
@@ -234,6 +233,7 @@ extern LRESULT MSG_SendInternalMessageTimeout( DWORD dest_pid, DWORD dest_tid,
UINT msg, WPARAM wparam, LPARAM lparam,
UINT flags, UINT timeout, PDWORD_PTR res_ptr ) DECLSPEC_HIDDEN;
extern HPEN SYSCOLOR_GetPen( INT index ) DECLSPEC_HIDDEN;
+extern HBRUSH SYSCOLOR_Get55AABrush(void) DECLSPEC_HIDDEN;
extern void SYSPARAMS_Init(void) DECLSPEC_HIDDEN;
extern void USER_CheckNotLock(void) DECLSPEC_HIDDEN;
extern BOOL USER_IsExitingThread( DWORD tid ) DECLSPEC_HIDDEN;
More information about the wine-cvs
mailing list