Don't query system option in every DrawBitmap() call under MSW.

Doing this had noticeable (and bad) performance implications so cache the
value of the option during the first call. This doesn't allow changing its
value during the program execution so we may want to provide some way to
update its value later if really needed.

Closes #11172.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61967 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2009-09-18 17:11:21 +00:00
parent 0f08aa4432
commit 7b8d24ad99

View File

@ -1214,13 +1214,20 @@ void wxMSWDCImpl::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool
#ifdef __WIN32__ #ifdef __WIN32__
// use MaskBlt() with ROP which doesn't do anything to dst in the mask // use MaskBlt() with ROP which doesn't do anything to dst in the mask
// points // points
bool ok = false;
#if wxUSE_SYSTEM_OPTIONS
// On some systems, MaskBlt succeeds yet is much much slower // On some systems, MaskBlt succeeds yet is much much slower
// than the wxWidgets fall-back implementation. So we need // than the wxWidgets fall-back implementation. So we need
// to be able to switch this on and off at runtime. // to be able to switch this on and off at runtime.
bool ok = false; //
#if wxUSE_SYSTEM_OPTIONS // NB: don't query the value of the option every time but do it only
if (wxSystemOptions::GetOptionInt(wxT("no-maskblt")) == 0) // once as otherwise it can have real (and bad) performance
#endif // implications (see #11172)
static bool
s_maskBltAllowed = wxSystemOptions::GetOptionInt("no-maskblt") == 0;
if ( s_maskBltAllowed )
#endif // wxUSE_SYSTEM_OPTIONS
{ {
HDC cdc = GetHdc(); HDC cdc = GetHdc();
HDC hdcMem = ::CreateCompatibleDC(GetHdc()); HDC hdcMem = ::CreateCompatibleDC(GetHdc());