]> git.saurik.com Git - wxWidgets.git/blobdiff - src/os2/bitmap.cpp
Fix for the fact that unmapped but managed widgets
[wxWidgets.git] / src / os2 / bitmap.cpp
index 2a88e27107cf0831d825eeae50620cef66fcfbc5..76b31572f25ba85cbfcd59a92c3c539a0d23bb4c 100644 (file)
@@ -58,7 +58,7 @@ wxBitmapRefData::wxBitmapRefData()
     m_pSelectedInto = NULL;
     m_nNumColors    = 0;
     m_pBitmapMask   = NULL;
     m_pSelectedInto = NULL;
     m_nNumColors    = 0;
     m_pBitmapMask   = NULL;
-    m_hBitmap = (WXHBITMAP) NULL;
+    m_hBitmap       = (WXHBITMAP) NULL;
 } // end of wxBitmapRefData::wxBitmapRefData
 
 void wxBitmapRefData::Free()
 } // end of wxBitmapRefData::wxBitmapRefData
 
 void wxBitmapRefData::Free()
@@ -74,9 +74,11 @@ void wxBitmapRefData::Free()
             wxLogLastError("GpiDeleteBitmap(hbitmap)");
         }
     }
             wxLogLastError("GpiDeleteBitmap(hbitmap)");
         }
     }
-
-    delete m_pBitmapMask;
-    m_pBitmapMask = NULL;
+    if (m_pBitmapMask)
+    {
+        delete m_pBitmapMask;
+        m_pBitmapMask = NULL;
+    }
 } // end of wxBitmapRefData::Free
 
 // ----------------------------------------------------------------------------
 } // end of wxBitmapRefData::Free
 
 // ----------------------------------------------------------------------------
@@ -90,7 +92,6 @@ void wxBitmap::Init()
     //
     // True for all bitmaps created from bits, wxImages, Xpms
     //
     //
     // True for all bitmaps created from bits, wxImages, Xpms
     //
-    m_bFlip = TRUE;
 } // end of wxBitmap::Init
 
 bool wxBitmap::CopyFromIconOrCursor(
 } // end of wxBitmap::Init
 
 bool wxBitmap::CopyFromIconOrCursor(
@@ -269,7 +270,6 @@ wxBitmap::wxBitmap(
 )
 {
     Init();
 )
 {
     Init();
-    m_bFlip = FALSE;
     (void)Create( nW
                  ,nH
                  ,nD
     (void)Create( nW
                  ,nH
                  ,nD
@@ -295,15 +295,15 @@ wxBitmap::wxBitmap(
 } // end of wxBitmap::wxBitmap
 
 wxBitmap::wxBitmap(
 } // end of wxBitmap::wxBitmap
 
 wxBitmap::wxBitmap(
-  const wxString&                   rFilename
+  int                               nId
 , long                              lType
 )
 {
     Init();
 , long                              lType
 )
 {
     Init();
-    m_bFlip = FALSE;
-    LoadFile( rFilename
+    LoadFile( nId
              ,(int)lType
             );
              ,(int)lType
             );
+    SetId(nId);
 } // end of wxBitmap::wxBitmap
 
 bool wxBitmap::Create(
 } // end of wxBitmap::wxBitmap
 
 bool wxBitmap::Create(
@@ -326,8 +326,6 @@ bool wxBitmap::Create(
     // Xpms and bitmaps from other images can also be mono's, but only
     // mono's need help changing their colors with MemDC changes
     //
     // Xpms and bitmaps from other images can also be mono's, but only
     // mono's need help changing their colors with MemDC changes
     //
-    if (nD == 1)
-        m_bIsMono = TRUE;
     if (nD > 0)
     {
         DEVOPENSTRUC                vDop  = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
     if (nD > 0)
     {
         DEVOPENSTRUC                vDop  = {0L, "DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L};
@@ -335,6 +333,8 @@ bool wxBitmap::Create(
         HDC                         hDC   = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE);
         HPS                         hPS   = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC);
 
         HDC                         hDC   = ::DevOpenDC(vHabmain, OD_MEMORY, "*", 5L, (PDEVOPENDATA)&vDop, NULLHANDLE);
         HPS                         hPS   = ::GpiCreatePS(vHabmain, hDC, &vSize, PU_PELS | GPIA_ASSOC);
 
+        if (nD == 1)
+            m_bIsMono = TRUE;
         memset(&vHeader, '\0', 16);
         vHeader.cbFix     =  16;
         vHeader.cx        = nW;
         memset(&vHeader, '\0', 16);
         vHeader.cbFix     =  16;
         vHeader.cx        = nW;
@@ -412,7 +412,7 @@ bool wxBitmap::CreateFromXpm(
 } // end of wxBitmap::CreateFromXpm
 
 bool wxBitmap::LoadFile(
 } // end of wxBitmap::CreateFromXpm
 
 bool wxBitmap::LoadFile(
-  const wxString&                   rFilename
+  int                               nId
 , long                              lType
 )
 {
 , long                              lType
 )
 {
@@ -429,8 +429,7 @@ bool wxBitmap::LoadFile(
         m_refData = new wxBitmapRefData;
 
         return(pHandler->LoadFile( this
         m_refData = new wxBitmapRefData;
 
         return(pHandler->LoadFile( this
-                                  ,rFilename
-                                  ,hPs
+                                  ,nId
                                   ,lType
                                   , -1
                                   , -1
                                   ,lType
                                   , -1
                                   , -1
@@ -438,14 +437,7 @@ bool wxBitmap::LoadFile(
     }
     else
     {
     }
     else
     {
-        wxImage                     vImage;
-
-        if (!vImage.LoadFile(rFilename, lType) || !vImage.Ok() )
-            return(FALSE);
-
-        *this = wxBitmap(vImage);
-
-        return(TRUE);
+        return(FALSE);
     }
 } // end of wxBitmap::LoadFile
 
     }
 } // end of wxBitmap::LoadFile
 
@@ -516,7 +508,7 @@ bool wxBitmap::SaveFile(
 
 
 // ----------------------------------------------------------------------------
 
 
 // ----------------------------------------------------------------------------
-// wxImage-wxBitmap convertion
+// wxImage-wxBitmap conversion
 // ----------------------------------------------------------------------------
 
 bool wxBitmap::CreateFromImage (
 // ----------------------------------------------------------------------------
 
 bool wxBitmap::CreateFromImage (
@@ -526,7 +518,6 @@ bool wxBitmap::CreateFromImage (
 {
     wxCHECK_MSG(rImage.Ok(), FALSE, wxT("invalid image"));
     m_refData = new wxBitmapRefData();
 {
     wxCHECK_MSG(rImage.Ok(), FALSE, wxT("invalid image"));
     m_refData = new wxBitmapRefData();
-    m_bFlip = TRUE;
 
     int                             nSizeLimit = 1024 * 768 * 3;
     int                             nWidth = rImage.GetWidth();
 
     int                             nSizeLimit = 1024 * 768 * 3;
     int                             nWidth = rImage.GetWidth();
@@ -565,6 +556,10 @@ bool wxBitmap::CreateFromImage (
     wxCHECK_MSG(rImage.Ok(), FALSE, wxT("invalid image"));
     SetWidth(nWidth);
     SetHeight(nBmpHeight);
     wxCHECK_MSG(rImage.Ok(), FALSE, wxT("invalid image"));
     SetWidth(nWidth);
     SetHeight(nBmpHeight);
+    if (nDepth == 1)
+        m_bIsMono = TRUE;
+    else
+        m_bIsMono = FALSE;
     if (nDepth == -1)
         nDepth = wxDisplayDepth();
     SetDepth(nDepth);
     if (nDepth == -1)
         nDepth = wxDisplayDepth();
     SetDepth(nDepth);
@@ -770,6 +765,7 @@ bool wxBitmap::CreateFromImage (
                 //
                 nHeight         = nHRemain;
                 vHeader.cy      = (DWORD)(nHeight);
                 //
                 nHeight         = nHRemain;
                 vHeader.cy      = (DWORD)(nHeight);
+                vHeader.cbImage = nBytePerLine * nHeight;
             }
             ptbits = pucBits;
             for (int j = 0; j < nHeight; j++)
             }
             ptbits = pucBits;
             for (int j = 0; j < nHeight; j++)
@@ -1478,8 +1474,7 @@ bool wxBitmapHandler::Create(
 
 bool wxBitmapHandler::Load(
   wxGDIImage*                       pImage
 
 bool wxBitmapHandler::Load(
   wxGDIImage*                       pImage
-, const wxString&                   rName
-, HPS                               hPs
+, int                               nId
 , long                              lFlags
 , int                               nWidth
 , int                               nHeight
 , long                              lFlags
 , int                               nWidth
 , int                               nHeight
@@ -1490,8 +1485,7 @@ bool wxBitmapHandler::Load(
                                                            );
 
     return(pBitmap ? LoadFile( pBitmap
                                                            );
 
     return(pBitmap ? LoadFile( pBitmap
-                              ,rName
-                              ,hPs
+                              ,nId
                               ,lFlags
                               ,nWidth
                               ,nHeight
                               ,lFlags
                               ,nWidth
                               ,nHeight
@@ -1528,8 +1522,7 @@ bool wxBitmapHandler::Create(
 
 bool wxBitmapHandler::LoadFile(
   wxBitmap*                         WXUNUSED(pBitmap)
 
 bool wxBitmapHandler::LoadFile(
   wxBitmap*                         WXUNUSED(pBitmap)
-, const wxString&                   WXUNUSED(rName)
-, HPS                               WXUNUSED(hPs)
+, int                               WXUNUSED(nId)
 , long                              WXUNUSED(lType)
 , int                               WXUNUSED(nDesiredWidth)
 , int                               WXUNUSED(nDesiredHeight)
 , long                              WXUNUSED(lType)
 , int                               WXUNUSED(nDesiredWidth)
 , int                               WXUNUSED(nDesiredHeight)