]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/dcmemory.cpp
More asserts and stuff
[wxWidgets.git] / src / msw / dcmemory.cpp
index b0e6a77f18ed07f5d52458247172d39d283098a7..03e89a1c910b6e8bcf385fd8f129d55dc8813f38 100644 (file)
 #endif
 
 #ifndef WX_PRECOMP
+#include "wx/utils.h"
 #endif
 
-#include "wx/dcmemory.h"
+#include "wx/msw/private.h"
 
-#include <windows.h>
+#include "wx/dcmemory.h"
 
 #if !USE_SHARED_LIBRARY
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
@@ -38,12 +39,18 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
 
 wxMemoryDC::wxMemoryDC(void)
 {
-  m_hDC = (WXHDC) ::CreateCompatibleDC(NULL);
+  m_hDC = (WXHDC) ::CreateCompatibleDC((HDC) NULL);
   m_ok = (m_hDC != 0);
   m_bOwnsDC = TRUE;
 
   SetBrush(*wxWHITE_BRUSH);
   SetPen(*wxBLACK_PEN);
+
+  // the background mode is only used for text background
+  // and is set in DrawText() to OPAQUE as required, other-
+  // wise always TRANSPARENT, RR
+  ::SetBkMode( GetHdc(), TRANSPARENT );
+
 }
 
 wxMemoryDC::wxMemoryDC(wxDC *old_dc)
@@ -57,6 +64,12 @@ wxMemoryDC::wxMemoryDC(wxDC *old_dc)
 
   SetBrush(*wxWHITE_BRUSH);
   SetPen(*wxBLACK_PEN);
+
+  // the background mode is only used for text background
+  // and is set in DrawText() to OPAQUE as required, other-
+  // wise always TRANSPARENT, RR
+  ::SetBkMode( GetHdc(), TRANSPARENT );
+
 }
 
 wxMemoryDC::~wxMemoryDC(void)
@@ -80,41 +93,42 @@ void wxMemoryDC::SelectObject(const wxBitmap& bitmap)
   // a device context
   if (bitmap.GetSelectedInto() && (bitmap.GetSelectedInto() != this))
   {
-    wxFatalError("Error in wxMemoryDC::SelectObject\nBitmap is selected in another wxMemoryDC.\nDelete the first wxMemoryDC or use SelectObject(NULL)");
+    wxFatalError(_T("Error in wxMemoryDC::SelectObject\nBitmap is selected in another wxMemoryDC.\nDelete the first wxMemoryDC or use SelectObject(NULL)"));
     return;
   }
 
   // Check if the bitmap has the correct depth for this device context
-  if (bitmap.Ok() && (bitmap.GetDepth() != GetDepth()))
-  {
-      // Make a new bitmap that has the correct depth.
-      wxBitmap newBitmap = bitmap.GetBitmapForDC(* this);
-
-      m_selectedBitmap = newBitmap ;
-  }
-  else
-  {
+//  if (bitmap.Ok() && (bitmap.GetDepth() != GetDepth()))
+  // JACS 11/12/98: disabling this since the Forty Thieves sample
+  // shows this not working properly. In fact, if loading from a resource,
+  // the depth should become the screen depth, so why was it being called?
+//  if (0)
+//  {
+//      // Make a new bitmap that has the correct depth.
+//      wxBitmap newBitmap = bitmap.GetBitmapForDC(* this);
+//
+//      m_selectedBitmap = newBitmap ;
+//  }
+//  else
+//  {
       m_selectedBitmap = bitmap;
-  }
+//  }
 
   if (!m_selectedBitmap.Ok())
     return;
 
   m_selectedBitmap.SetSelectedInto(this);
-#if WXDEBUG > 1
-  wxDebugMsg("wxMemoryDC::SelectObject: Selecting HBITMAP %X\n", m_selectedBitmap.GetHBITMAP());
-#endif
   HBITMAP bm = (HBITMAP) ::SelectObject((HDC) m_hDC, (HBITMAP) m_selectedBitmap.GetHBITMAP());
 
   if (bm == ERROR)
   {
-    wxFatalError("Error in wxMemoryDC::SelectObject\nBitmap may not be loaded, or may be selected in another wxMemoryDC.\nDelete the first wxMemoryDC to deselect bitmap.");
+    wxFatalError(_T("Error in wxMemoryDC::SelectObject\nBitmap may not be loaded, or may be selected in another wxMemoryDC.\nDelete the first wxMemoryDC to deselect bitmap."));
   }
   else if (!m_oldBitmap)
     m_oldBitmap = (WXHBITMAP) bm;
 }
 
-void wxMemoryDC::GetSize(int *width, int *height) const
+void wxMemoryDC::DoGetSize(int *width, int *height) const
 {
   if (!m_selectedBitmap.Ok())
   {