]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
extending calculation of visible region
[wxWidgets.git] / src / msw / bitmap.cpp
index 8be40253f6466aa39d3af870a175cba6fe9ad8cc..6a2c74a221e869b6b44188143f6376db90f11cd8 100644 (file)
@@ -17,7 +17,7 @@
 // headers
 // ----------------------------------------------------------------------------
 
 // headers
 // ----------------------------------------------------------------------------
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
     #pragma implementation "bitmap.h"
 #endif
 
     #pragma implementation "bitmap.h"
 #endif
 
@@ -260,10 +260,6 @@ bool wxBitmap::CopyFromIconOrCursor(const wxGDIImage& icon)
     // delete the old one now as we don't need it any more
     ::DeleteObject(iconInfo.hbmMask);
 
     // delete the old one now as we don't need it any more
     ::DeleteObject(iconInfo.hbmMask);
 
-#if WXWIN_COMPATIBILITY_2
-    refData->m_ok = TRUE;
-#endif // WXWIN_COMPATIBILITY_2
-
     return TRUE;
 #else
     return FALSE;
     return TRUE;
 #else
     return FALSE;
@@ -322,10 +318,6 @@ bool wxBitmap::CopyFromIcon(const wxIcon& icon)
 
     refData->m_hBitmap = (WXHBITMAP)hbitmap;
 
 
     refData->m_hBitmap = (WXHBITMAP)hbitmap;
 
-#if WXWIN_COMPATIBILITY_2
-    refData->m_ok = TRUE;
-#endif // WXWIN_COMPATIBILITY_2
-
     return TRUE;
 #else // Win32
     return CopyFromIconOrCursor(icon);
     return TRUE;
 #else // Win32
     return CopyFromIconOrCursor(icon);
@@ -437,7 +429,11 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
 }
 
 // Create from XPM data
 }
 
 // Create from XPM data
+#if wxUSE_IMAGE && wxUSE_XPM
 bool wxBitmap::CreateFromXpm(const char **data)
 bool wxBitmap::CreateFromXpm(const char **data)
+#else
+bool wxBitmap::CreateFromXpm(const char **WXUNUSED(data))
+#endif
 {
 #if wxUSE_IMAGE && wxUSE_XPM
     Init();
 {
 #if wxUSE_IMAGE && wxUSE_XPM
     Init();
@@ -528,10 +524,6 @@ bool wxBitmap::DoCreate(int w, int h, int d, WXHDC hdc)
     else // create a DDB
 #endif
     {
     else // create a DDB
 #endif
     {
-        if ( d == -1 )
-            d = wxDisplayDepth();
-
-        GetBitmapData()->m_depth = d;
 
 #ifndef __WXMICROWIN__
         if ( d > 0 )
 
 #ifndef __WXMICROWIN__
         if ( d > 0 )
@@ -558,10 +550,6 @@ bool wxBitmap::DoCreate(int w, int h, int d, WXHDC hdc)
 
     SetHBITMAP((WXHBITMAP)hbmp);
 
 
     SetHBITMAP((WXHBITMAP)hbmp);
 
-#if WXWIN_COMPATIBILITY_2
-    GetBitmapData()->m_ok = hbmp != 0;
-#endif // WXWIN_COMPATIBILITY_2
-
     return Ok();
 }
 
     return Ok();
 }
 
@@ -686,11 +674,6 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth, const wxDC& dc)
     SetPalette(image.GetPalette());
 #endif // wxUSE_PALETTE
 
     SetPalette(image.GetPalette());
 #endif // wxUSE_PALETTE
 
-#if WXWIN_COMPATIBILITY_2
-    // check the wxBitmap object
-    GetBitmapData()->SetOk();
-#endif // WXWIN_COMPATIBILITY_2
-
     return TRUE;
 }
 
     return TRUE;
 }
 
@@ -825,10 +808,6 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth, WXHDC hdc )
     // validate this object
     SetHBITMAP((WXHBITMAP)hbitmap);
 
     // validate this object
     SetHBITMAP((WXHBITMAP)hbitmap);
 
-#if WXWIN_COMPATIBILITY_2
-    m_refData->m_ok = TRUE;
-#endif // WXWIN_COMPATIBILITY_2
-
     // finally also set the mask if we have one
     if ( image.HasMask() )
     {
     // finally also set the mask if we have one
     if ( image.HasMask() )
     {
@@ -1397,17 +1376,6 @@ void wxBitmap::SetMask(wxMask *mask)
     GetBitmapData()->SetMask(mask);
 }
 
     GetBitmapData()->SetMask(mask);
 }
 
-#if WXWIN_COMPATIBILITY_2
-
-void wxBitmap::SetOk(bool isOk)
-{
-    EnsureHasData();
-
-    GetBitmapData()->m_ok = isOk;
-}
-
-#endif // WXWIN_COMPATIBILITY_2
-
 #if WXWIN_COMPATIBILITY_2_4
 
 void wxBitmap::SetQuality(int WXUNUSED(quality))
 #if WXWIN_COMPATIBILITY_2_4
 
 void wxBitmap::SetQuality(int WXUNUSED(quality))
@@ -1542,20 +1510,20 @@ void wxBitmap::UngetRawData(wxPixelDataBase& dataBase)
             p = rowStart;
             p.OffsetY(data, 1);
         }
             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
 
 }
 #endif // #ifdef wxHAVE_RAW_BITMAP
 
@@ -1794,14 +1762,11 @@ bool wxCreateDIB(long xSize, long ySize, long bitsPerPixel,
                  HPALETTE hPal, LPBITMAPINFO* lpDIBHeader)
 {
    unsigned long   i, headerSize;
                  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)));
 
    // 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);
 
 
    GetPaletteEntries(hPal, 0, 256, lpPe);
 
@@ -1942,8 +1907,8 @@ HBITMAP wxInvertMask(HBITMAP hbmpMask, int w, int h)
         wxLogLastError(wxT("CreateBitmap"));
     }
 
         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) )
     if ( !::BitBlt(hdcDst, 0, 0, w, h,
                    hdcSrc, 0, 0,
                    NOTSRCCOPY) )
@@ -1951,6 +1916,10 @@ HBITMAP wxInvertMask(HBITMAP hbmpMask, int w, int h)
         wxLogLastError(wxT("BitBlt"));
     }
 
         wxLogLastError(wxT("BitBlt"));
     }
 
+    // Deselect objects
+    SelectObject(hdcSrc,srcTmp);
+    SelectObject(hdcDst,dstTmp);
+    
     ::DeleteDC(hdcSrc);
     ::DeleteDC(hdcDst);
 
     ::DeleteDC(hdcSrc);
     ::DeleteDC(hdcDst);