]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
* In _GSocket_Get_Mac_Socket(), do not call CFSocketSetSocketFlags to turn
[wxWidgets.git] / src / msw / bitmap.cpp
index 0e5ab48c9f1aaea1efd86178c43dce87a7400915..12294cdc71130308123c380562ab7120813eaa3e 100644 (file)
@@ -362,6 +362,47 @@ wxBitmap::~wxBitmap()
 {
 }
 
+wxBitmap::wxBitmap()
+{
+    Init();
+}
+
+wxBitmap::wxBitmap(const wxBitmap& bitmap)
+{
+    Init();
+    Ref(bitmap);
+}
+
+wxBitmap::wxBitmap(const char **data)
+{
+    CreateFromXpm(data);
+}
+
+wxBitmap::wxBitmap(char **data)
+{
+    CreateFromXpm((const char **)data);
+}
+
+#if wxUSE_IMAGE
+
+wxBitmap::wxBitmap(const wxImage& image, int depth)
+{
+    (void)CreateFromImage(image, depth);
+}
+
+wxBitmap::wxBitmap(const wxImage& image, const wxDC& dc)
+{
+    (void)CreateFromImage(image, dc);
+}
+
+#endif // wxUSE_IMAGE
+
+wxBitmap::wxBitmap(const wxIcon& icon)
+{
+    Init();
+    CopyFromIcon(icon);
+}
+
 wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
 {
     Init();
@@ -1510,20 +1551,20 @@ void wxBitmap::UngetRawData(wxPixelDataBase& dataBase)
             p = rowStart;
             p.OffsetY(data, 1);
         }
+    }
 
-        // if we're a DDB we need to convert DIB back to DDB now to make the
-        // changes made via raw bitmap access effective
-        if ( !GetBitmapData()->m_isDIB )
-        {
-            wxDIB *dib = GetBitmapData()->m_dib;
-            GetBitmapData()->m_dib = NULL;
+    // if we're a DDB we need to convert DIB back to DDB now to make the
+    // changes made via raw bitmap access effective
+    if ( !GetBitmapData()->m_isDIB )
+    {
+        wxDIB *dib = GetBitmapData()->m_dib;
+        GetBitmapData()->m_dib = NULL;
 
-            // TODO: convert
+        // TODO: convert
 
-            delete dib;
-        }
+        delete dib;
     }
-#endif
+#endif // wxUSE_WXDIB
 }
 #endif // #ifdef wxHAVE_RAW_BITMAP
 
@@ -1762,14 +1803,11 @@ bool wxCreateDIB(long xSize, long ySize, long bitsPerPixel,
                  HPALETTE hPal, LPBITMAPINFO* lpDIBHeader)
 {
    unsigned long   i, headerSize;
-   LPBITMAPINFO    lpDIBheader = NULL;
-   LPPALETTEENTRY  lpPe = NULL;
-
 
    // Allocate space for a DIB header
    headerSize = (sizeof(BITMAPINFOHEADER) + (256 * sizeof(PALETTEENTRY)));
-   lpDIBheader = (BITMAPINFO *) malloc(headerSize);
-   lpPe = (PALETTEENTRY *)((BYTE*)lpDIBheader + sizeof(BITMAPINFOHEADER));
+   LPBITMAPINFO lpDIBheader = (BITMAPINFO *) malloc(headerSize);
+   LPPALETTEENTRY lpPe = (PALETTEENTRY *)((BYTE*)lpDIBheader + sizeof(BITMAPINFOHEADER));
 
    GetPaletteEntries(hPal, 0, 256, lpPe);
 
@@ -1910,8 +1948,8 @@ HBITMAP wxInvertMask(HBITMAP hbmpMask, int w, int h)
         wxLogLastError(wxT("CreateBitmap"));
     }
 
-    ::SelectObject(hdcSrc, hbmpMask);
-    ::SelectObject(hdcDst, hbmpInvMask);
+    HGDIOBJ srcTmp = ::SelectObject(hdcSrc, hbmpMask);
+    HGDIOBJ dstTmp = ::SelectObject(hdcDst, hbmpInvMask);
     if ( !::BitBlt(hdcDst, 0, 0, w, h,
                    hdcSrc, 0, 0,
                    NOTSRCCOPY) )
@@ -1919,6 +1957,10 @@ HBITMAP wxInvertMask(HBITMAP hbmpMask, int w, int h)
         wxLogLastError(wxT("BitBlt"));
     }
 
+    // Deselect objects
+    SelectObject(hdcSrc,srcTmp);
+    SelectObject(hdcDst,dstTmp);
+    
     ::DeleteDC(hdcSrc);
     ::DeleteDC(hdcDst);