]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dc.cpp
mingw compilation fix
[wxWidgets.git] / src / msw / dc.cpp
index cae9668ac8e9e93be1e4a81d5f54ea47281da47f..9691e86fe2b4e8648565fe3edddeaf3486303abe 100644 (file)
@@ -42,6 +42,7 @@
 
 #include "wx/sysopt.h"
 #include "wx/dcprint.h"
+#include "wx/module.h"
 
 #include <string.h>
 #include <math.h>
@@ -1008,9 +1009,10 @@ void wxDC::DoDrawRotatedText(const wxString& text,
 #ifndef __WXMICROWIN__
     else
     {
-        // NB: don't take DEFAULT_GUI_FONT because it's not TrueType and so
-        //     can't have non zero orientation/escapement
-        wxFont font = m_font.Ok() ? m_font : *wxNORMAL_FONT;
+        // NB: don't take DEFAULT_GUI_FONT (a.k.a. wxSYS_DEFAULT_GUI_FONT)
+        //     because it's not TrueType and so can't have non zero
+        //     orientation/escapement under Win9x
+        wxFont font = m_font.Ok() ? m_font : *wxSWISS_FONT;
         HFONT hfont = (HFONT)font.GetResourceHandle();
         LOGFONT lf;
         if ( ::GetObject(hfont, sizeof(lf), &lf) == 0 )
@@ -1704,30 +1706,25 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
             HBITMAP buffer_bmap ;
 
 #if wxUSE_DC_CACHEING
-            if (CacheEnabled())
-            {
-                // 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);
+#endif // wxUSE_DC_CACHEING/!wxUSE_DC_CACHEING
+            ::SelectObject(dc_mask, (HBITMAP) mask->GetMaskBitmap());
+            ::SelectObject(dc_buffer, buffer_bmap);
 
             // copy dest to buffer
             if ( !::BitBlt(dc_buffer, 0, 0, (int)width, (int)height,
@@ -1776,14 +1773,13 @@ bool wxDC::DoBlit(wxCoord xdest, wxCoord ydest,
             ::SelectObject(dc_mask, 0);
             ::SelectObject(dc_buffer, 0);
 
-#if wxUSE_DC_CACHEING
-            if (!CacheEnabled())
-#endif
+#if !wxUSE_DC_CACHEING
             {
                 ::DeleteDC(dc_mask);
                 ::DeleteDC(dc_buffer);
                 ::DeleteObject(buffer_bmap);
             }
+#endif
         }
     }
     else // no mask, just BitBlt() it
@@ -1986,6 +1982,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