X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6d51f2202930063f397b8fd9a892bc5229963a91..606b005fb2b535b34d1ca45d2d06ee86718e8b1c:/src/msw/bitmap.cpp diff --git a/src/msw/bitmap.cpp b/src/msw/bitmap.cpp index 959590f879..437a6c4452 100644 --- a/src/msw/bitmap.cpp +++ b/src/msw/bitmap.cpp @@ -45,6 +45,7 @@ #include "wx/msw/dib.h" #include "wx/image.h" +#include "wx/xpmdecod.h" // 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) { +#if wxUSE_IMAGE && wxUSE_XPM 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) @@ -1027,6 +1039,10 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour) 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 ) {