X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/277480474552707c27c7466bb5e5d1738a16372b..8f974c520a8733158591891458fda10fae4c3950:/src/msw/dc.cpp diff --git a/src/msw/dc.cpp b/src/msw/dc.cpp index a9cfabdf12..721a1fb3c7 100644 --- a/src/msw/dc.cpp +++ b/src/msw/dc.cpp @@ -42,6 +42,7 @@ #include "wx/sysopt.h" #include "wx/dcprint.h" +#include "wx/module.h" #include #include @@ -1704,30 +1705,25 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest, HBITMAP buffer_bmap ; #if wxUSE_DC_CACHEING - if (TRUE) - { - // create a temp buffer bitmap and DCs to access it and the mask - wxDCCacheEntry* dcCacheEntry1 = FindDCInCache(NULL, source->GetHDC()); - dc_mask = (HDC) dcCacheEntry1->m_dc; - - wxDCCacheEntry* dcCacheEntry2 = FindDCInCache(dcCacheEntry1, dest->GetHDC()); - dc_buffer = (HDC) dcCacheEntry2->m_dc; - - wxDCCacheEntry* bitmapCacheEntry = FindBitmapInCache(dest->GetHDC(), - width, height); - - buffer_bmap = (HBITMAP) bitmapCacheEntry->m_bitmap; - } - else -#endif - { - // create a temp buffer bitmap and DCs to access it and the mask - dc_mask = ::CreateCompatibleDC(GetHdcOf(*source)); - dc_buffer = ::CreateCompatibleDC(GetHdc()); - buffer_bmap = ::CreateCompatibleBitmap(GetHdc(), width, height); - ::SelectObject(dc_mask, (HBITMAP) mask->GetMaskBitmap()); - ::SelectObject(dc_buffer, buffer_bmap); - } + // create a temp buffer bitmap and DCs to access it and the mask + wxDCCacheEntry* dcCacheEntry1 = FindDCInCache(NULL, source->GetHDC()); + dc_mask = (HDC) dcCacheEntry1->m_dc; + + wxDCCacheEntry* dcCacheEntry2 = FindDCInCache(dcCacheEntry1, GetHDC()); + dc_buffer = (HDC) dcCacheEntry2->m_dc; + + wxDCCacheEntry* bitmapCacheEntry = FindBitmapInCache(GetHDC(), + width, height); + + buffer_bmap = (HBITMAP) bitmapCacheEntry->m_bitmap; +#else // !wxUSE_DC_CACHEING + // create a temp buffer bitmap and DCs to access it and the mask + dc_mask = ::CreateCompatibleDC(GetHdcOf(*source)); + dc_buffer = ::CreateCompatibleDC(GetHdc()); + buffer_bmap = ::CreateCompatibleBitmap(GetHdc(), width, height); + ::SelectObject(dc_mask, (HBITMAP) mask->GetMaskBitmap()); + ::SelectObject(dc_buffer, buffer_bmap); +#endif // wxUSE_DC_CACHEING/!wxUSE_DC_CACHEING // copy dest to buffer if ( !::BitBlt(dc_buffer, 0, 0, (int)width, (int)height, @@ -1985,6 +1981,19 @@ void wxDC::ClearCache() sm_dcCache.DeleteContents(FALSE); } +// Clean up cache at app exit +class wxDCModule : public wxModule +{ +public: + virtual bool OnInit() { return TRUE; } + virtual void OnExit() { wxDC::ClearCache(); } + +private: + DECLARE_DYNAMIC_CLASS(wxDCModule) +}; + +IMPLEMENT_DYNAMIC_CLASS(wxDCModule, wxModule) + #endif // wxUSE_DC_CACHEING