]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
More small fixes
[wxWidgets.git] / src / msw / bitmap.cpp
index 959590f87998957e8793200c737dbe518a5797a6..437a6c4452a4988e261a0075cde4e5adbc45c222 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "wx/msw/dib.h"
 #include "wx/image.h"
 
 #include "wx/msw/dib.h"
 #include "wx/image.h"
+#include "wx/xpmdecod.h"
 
 // missing from mingw32 header
 #ifndef CLR_INVALID
 
 // missing from mingw32 header
 #ifndef CLR_INVALID
@@ -283,9 +284,20 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
 // Create from XPM data
 bool wxBitmap::CreateFromXpm(const char **data)
 {
 // Create from XPM data
 bool wxBitmap::CreateFromXpm(const char **data)
 {
+#if wxUSE_IMAGE && wxUSE_XPM
     Init();
 
     Init();
 
-    return Create((void *)data, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0);
+    wxCHECK_MSG( data != NULL, FALSE, wxT("invalid bitmap data") )
+    
+    wxXPMDecoder decoder;
+    wxImage img = decoder.ReadData(data);
+    wxCHECK_MSG( img.Ok(), FALSE, wxT("invalid bitmap data") )
+    
+    *this = wxBitmap(img);
+    return TRUE;
+#else
+       return FALSE;
+#endif
 }
 
 wxBitmap::wxBitmap(int w, int h, int d)
 }
 
 wxBitmap::wxBitmap(int w, int h, int d)
@@ -1027,6 +1039,10 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
 
     bool ok = TRUE;
 
 
     bool ok = TRUE;
 
+    // SelectObject() will fail
+    wxASSERT_MSG( !bitmap.GetSelectedInto(),
+                  _T("bitmap can't be selected in another DC") );
+
     HGDIOBJ hbmpSrcOld = ::SelectObject(srcDC, GetHbitmapOf(bitmap));
     if ( !hbmpSrcOld )
     {
     HGDIOBJ hbmpSrcOld = ::SelectObject(srcDC, GetHbitmapOf(bitmap));
     if ( !hbmpSrcOld )
     {