]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
support not-quite-owner-drawn mode when we draw only the bitmap and the system takes...
[wxWidgets.git] / src / msw / bitmap.cpp
index 015c8309bd345093a29e6fff305f439a761816d0..f4681af5eafde14da03c3f8a05cf841152c7fc9d 100644 (file)
@@ -337,7 +337,7 @@ bool wxBitmap::CopyFromIconOrCursor(const wxGDIImage& icon)
 #endif
     if ( !refData->m_hasAlpha )
     {
 #endif
     if ( !refData->m_hasAlpha )
     {
-        // the mask returned by GetIconInfo() is inversed compared to the usual
+        // the mask returned by GetIconInfo() is inverted compared to the usual
         // wxWin convention
         refData->SetMask(wxInvertMask(iconInfo.hbmMask, w, h));
     }
         // wxWin convention
         refData->SetMask(wxInvertMask(iconInfo.hbmMask, w, h));
     }
@@ -435,7 +435,7 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
     {
         // we assume that it is in XBM format which is not quite the same as
         // the format CreateBitmap() wants because the order of bytes in the
     {
         // we assume that it is in XBM format which is not quite the same as
         // the format CreateBitmap() wants because the order of bytes in the
-        // line is inversed!
+        // line is reversed!
         const size_t bytesPerLine = (width + 7) / 8;
         const size_t padding = bytesPerLine % 2;
         const size_t len = height * ( padding + bytesPerLine );
         const size_t bytesPerLine = (width + 7) / 8;
         const size_t padding = bytesPerLine % 2;
         const size_t len = height * ( padding + bytesPerLine );
@@ -1639,7 +1639,23 @@ HICON wxBitmapToIconOrCursor(const wxBitmap& bmp,
         return 0;
     }
 
         return 0;
     }
 
-    wxMask *mask = bmp.GetMask();
+    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();
+    }
+    
     if ( !mask )
     {
         // we must have a mask for an icon, so even if it's probably incorrect,
     if ( !mask )
     {
         // we must have a mask for an icon, so even if it's probably incorrect,
@@ -1676,7 +1692,7 @@ HICON wxBitmapToIconOrCursor(const wxBitmap& bmp,
 
     HICON hicon = ::CreateIconIndirect(&iconInfo);
 
 
     HICON hicon = ::CreateIconIndirect(&iconInfo);
 
-    if ( !bmp.GetMask() )
+    if ( !bmp.GetMask() && !bmp.HasAlpha() )
     {
         // we created the mask, now delete it
         delete mask;
     {
         // we created the mask, now delete it
         delete mask;