]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
Fixed bug that was giving the wrong size of wxCustomDataObjects to the receiver.
[wxWidgets.git] / src / msw / bitmap.cpp
index 3cf541d3c793a56df12d7e4dedfe8e7c133c27bf..d5b37d2cfd284b9467ec8c5f75f74fbf082b9dcf 100644 (file)
@@ -86,7 +86,7 @@ void wxBitmapRefData::Free()
     {
         if ( !::DeleteObject((HBITMAP)m_hBitmap) )
         {
-            wxLogLastError("DeleteObject(hbitmap)");
+            wxLogLastError(wxT("DeleteObject(hbitmap)"));
         }
     }
 
@@ -117,7 +117,7 @@ bool wxBitmap::CopyFromIconOrCursor(const wxGDIImage& icon)
     ICONINFO iconInfo;
     if ( !::GetIconInfo(hicon, &iconInfo) )
     {
-        wxLogLastError("GetIconInfo");
+        wxLogLastError(wxT("GetIconInfo"));
 
         return FALSE;
     }
@@ -269,7 +269,7 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
     HBITMAP hbmp = ::CreateBitmap(width, height, 1, depth, data);
     if ( !hbmp )
     {
-        wxLogLastError("CreateBitmap");
+        wxLogLastError(wxT("CreateBitmap"));
     }
 
     if ( data != bits )
@@ -326,7 +326,7 @@ bool wxBitmap::Create(int w, int h, int d)
         hbmp = ::CreateBitmap(w, h, 1, d, NULL);
         if ( !hbmp )
         {
-            wxLogLastError("CreateBitmap");
+            wxLogLastError(wxT("CreateBitmap"));
         }
     }
     else
@@ -335,7 +335,7 @@ bool wxBitmap::Create(int w, int h, int d)
         hbmp = ::CreateCompatibleBitmap(dc, w, h);
         if ( !hbmp )
         {
-            wxLogLastError("CreateCompatibleBitmap");
+            wxLogLastError(wxT("CreateCompatibleBitmap"));
         }
 
         GetBitmapData()->m_depth = wxDisplayDepth();
@@ -382,8 +382,7 @@ bool wxBitmap::Create(void *data, long type, int width, int height, int depth)
 
     if ( !handler )
     {
-        wxLogDebug(wxT("Failed to create bitmap: no bitmap handler for "
-                       "type %d defined."), type);
+        wxLogDebug(wxT("Failed to create bitmap: no bitmap handler for type %d defined."), type);
 
         return FALSE;
     }
@@ -582,15 +581,15 @@ wxMask::~wxMask()
 // Create a mask from a mono bitmap (copies the bitmap).
 bool wxMask::Create(const wxBitmap& bitmap)
 {
+    wxCHECK_MSG( bitmap.Ok() && bitmap.GetDepth() == 1, FALSE,
+                 _T("can't create mask from invalid or not monochrome bitmap") );
+
     if ( m_maskBitmap )
     {
         ::DeleteObject((HBITMAP) m_maskBitmap);
         m_maskBitmap = 0;
     }
-    if (!bitmap.Ok() || bitmap.GetDepth() != 1)
-    {
-        return FALSE;
-    }
+
     m_maskBitmap = (WXHBITMAP) CreateBitmap(
                                             bitmap.GetWidth(),
                                             bitmap.GetHeight(),
@@ -653,36 +652,42 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
     HDC destDC = ::CreateCompatibleDC(NULL);
     if ( !srcDC || !destDC )
     {
-        wxLogLastError("CreateCompatibleDC");
+        wxLogLastError(wxT("CreateCompatibleDC"));
     }
 
-    if ( !::SelectObject(srcDC, GetHbitmapOf(bitmap)) )
+    bool ok = TRUE;
+
+    HGDIOBJ hbmpSrcOld = ::SelectObject(srcDC, GetHbitmapOf(bitmap));
+    if ( !hbmpSrcOld )
     {
-        wxLogLastError("SelectObject");
+        wxLogLastError(wxT("SelectObject"));
+
+        ok = FALSE;
     }
-    if ( !::SelectObject(destDC, (HBITMAP)m_maskBitmap) )
+
+    HGDIOBJ hbmpDstOld = ::SelectObject(destDC, (HBITMAP)m_maskBitmap);
+    if ( !hbmpDstOld )
     {
-        wxLogLastError("SelectObject");
+        wxLogLastError(wxT("SelectObject"));
+
+        ok = FALSE;
     }
 
     // this is not very efficient, but I can't think of a better way of doing
     // it
-    for ( int w = 0; w < width; w++ )
+    for ( int w = 0; ok && (w < width); w++ )
     {
-        for ( int h = 0; h < height; h++ )
+        for ( int h = 0; ok && (h < height); h++ )
         {
             COLORREF col = GetPixel(srcDC, w, h);
             if ( col == CLR_INVALID )
             {
-                wxLogLastError("GetPixel");
+                wxLogLastError(wxT("GetPixel"));
 
                 // doesn't make sense to continue
-                ::SelectObject(srcDC, 0);
-                ::DeleteDC(srcDC);
-                ::SelectObject(destDC, 0);
-                ::DeleteDC(destDC);
+                ok = FALSE;
 
-                return FALSE;
+                break;
             }
 
             if ( col == maskColour )
@@ -696,12 +701,12 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
         }
     }
 
-    ::SelectObject(srcDC, 0);
+    ::SelectObject(srcDC, hbmpSrcOld);
     ::DeleteDC(srcDC);
-    ::SelectObject(destDC, 0);
+    ::SelectObject(destDC, hbmpDstOld);
     ::DeleteDC(destDC);
 
-    return TRUE;
+    return ok;
 }
 
 // ----------------------------------------------------------------------------
@@ -715,7 +720,7 @@ bool wxBitmapHandler::Create(wxGDIImage *image,
 {
     wxBitmap *bitmap = wxDynamicCast(image, wxBitmap);
 
-    return bitmap ? Create(bitmap, data, width, height, depth) : FALSE;
+    return bitmap ? Create(bitmap, data, flags, width, height, depth) : FALSE;
 }
 
 bool wxBitmapHandler::Load(wxGDIImage *image,
@@ -837,13 +842,13 @@ extern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w, int h)
     HDC hdcDst = ::CreateCompatibleDC(NULL);
     if ( !hdcSrc || !hdcDst )
     {
-        wxLogLastError("CreateCompatibleDC");
+        wxLogLastError(wxT("CreateCompatibleDC"));
     }
 
     HBITMAP hbmpInvMask = ::CreateBitmap(w, h, 1, 1, 0);
     if ( !hbmpInvMask )
     {
-        wxLogLastError("CreateBitmap");
+        wxLogLastError(wxT("CreateBitmap"));
     }
 
     ::SelectObject(hdcSrc, hbmpMask);
@@ -852,7 +857,7 @@ extern HBITMAP wxInvertMask(HBITMAP hbmpMask, int w, int h)
                    hdcSrc, 0, 0,
                    NOTSRCCOPY) )
     {
-        wxLogLastError("BitBlt");
+        wxLogLastError(wxT("BitBlt"));
     }
 
     ::DeleteDC(hdcSrc);