X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7532f691fb4cb045edd09d4c988727a0d5f7bd4c..a45d2855c6882edc830777de2cec9ac21caced61:/src/msw/bitmap.cpp diff --git a/src/msw/bitmap.cpp b/src/msw/bitmap.cpp index fb6d081fb6..4477a07b19 100644 --- a/src/msw/bitmap.cpp +++ b/src/msw/bitmap.cpp @@ -483,7 +483,7 @@ 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 +#if wxUSE_IMAGE && wxUSE_XPM && wxUSE_WXDIB Init(); wxCHECK_MSG( data != NULL, false, wxT("invalid bitmap data") ) @@ -1011,7 +1011,7 @@ bool wxBitmap::LoadFile(const wxString& filename, long type) return handler->LoadFile(this, filename, type, -1, -1); } -#if wxUSE_IMAGE +#if wxUSE_IMAGE && wxUSE_WXDIB else // no bitmap handler found { wxImage image; @@ -1055,7 +1055,7 @@ bool wxBitmap::SaveFile(const wxString& filename, { return handler->SaveFile(this, filename, type, palette); } -#if wxUSE_IMAGE +#if wxUSE_IMAGE && wxUSE_WXDIB else // no bitmap handler found { // FIXME what about palette? shouldn't we use it? @@ -1636,23 +1636,33 @@ HICON wxBitmapToIconOrCursor(const wxBitmap& bmp, return 0; } - wxMask* mask; - wxBitmap newbmp; if ( bmp.HasAlpha() ) { - // Convert alpha to a mask. NOTE: It would be better to actually put - // the alpha into the icon instead of making a mask, but I don't have - // time to figure that out today. - wxImage img = bmp.ConvertToImage(); - img.ConvertAlphaToMask(); - newbmp = wxBitmap(img); - mask = newbmp.GetMask(); - } - else - { - mask = bmp.GetMask(); + // Create an empty mask bitmap. + // it doesn't seem to work if we mess with the mask at all. + HBITMAP hMonoBitmap = CreateBitmap(bmp.GetWidth(),bmp.GetHeight(),1,1,NULL); + + ICONINFO iconInfo; + wxZeroMemory(iconInfo); + iconInfo.fIcon = iconWanted; // do we want an icon or a cursor? + if ( !iconWanted ) + { + iconInfo.xHotspot = hotSpotX; + iconInfo.yHotspot = hotSpotY; + } + + iconInfo.hbmMask = hMonoBitmap; + iconInfo.hbmColor = GetHbitmapOf(bmp); + + HICON hicon = ::CreateIconIndirect(&iconInfo); + + ::DeleteObject(hMonoBitmap); + + return hicon; } + wxMask* mask = bmp.GetMask(); + if ( !mask ) { // we must have a mask for an icon, so even if it's probably incorrect,