]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/bitmap.cpp
Fixing the GetClientsize to deal with OS/2's coordinate system.
[wxWidgets.git] / src / msw / bitmap.cpp
index 18958ff192b980b56ec454a0a7fbf0c7456a67cf..79b21b8e874799a90b0fdb19607ddbcbe5634bdf 100644 (file)
@@ -45,6 +45,7 @@
 
 #include "wx/msw/dib.h"
 #include "wx/image.h"
+#include "wx/xpmdecod.h"
 
 // missing from mingw32 header
 #ifndef CLR_INVALID
@@ -283,9 +284,23 @@ wxBitmap::wxBitmap(const char bits[], int width, int height, int depth)
 // Create from XPM data
 bool wxBitmap::CreateFromXpm(const char **data)
 {
+#if wxUSE_IMAGE && wxUSE_XPM
     Init();
 
-    return Create((void *)data, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0);
+    wxCHECK_MSG( data != NULL, FALSE, wxT("invalid bitmap data") )
+    
+    wxXPMDecoder decoder;
+    wxImage img = decoder.ReadData(data);
+    wxCHECK_MSG( img.Ok(), FALSE, wxT("invalid bitmap data") )
+    
+    *this = wxBitmap(img);
+    
+    if ( wxTheBitmapList ) wxTheBitmapList->AddBitmap(this);
+
+    return TRUE;
+#else
+       return FALSE;
+#endif
 }
 
 wxBitmap::wxBitmap(int w, int h, int d)
@@ -302,7 +317,7 @@ wxBitmap::wxBitmap(void *data, long type, int width, int height, int depth)
     (void)Create(data, type, width, height, depth);
 }
 
-wxBitmap::wxBitmap(const wxString& filename, long type)
+wxBitmap::wxBitmap(const wxString& filename, wxBitmapType type)
 {
     Init();
 
@@ -350,6 +365,12 @@ bool wxBitmap::Create(int w, int h, int d)
     return Ok();
 }
 
+// ----------------------------------------------------------------------------
+// wxImage to/from conversions
+// ----------------------------------------------------------------------------
+
+#if wxUSE_IMAGE
+
 bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
 {
     wxCHECK_MSG( image.Ok(), FALSE, wxT("invalid image") )
@@ -391,7 +412,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
     }
 
     // set bitmap parameters
-    wxCHECK_MSG( Ok(), *this, wxT("invalid image") );
+    wxCHECK_MSG( image.Ok(), FALSE, wxT("invalid image") );
     SetWidth( width );
     SetHeight( bmpHeight );
     if (depth == -1) depth = wxDisplayDepth();
@@ -400,7 +421,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
     // create a DIB header
     int headersize = sizeof(BITMAPINFOHEADER);
     BITMAPINFO *lpDIBh = (BITMAPINFO *) malloc( headersize );
-    wxCHECK_MSG( lpDIBh, bitmap, wxT("could not allocate memory for DIB header") );
+    wxCHECK_MSG( lpDIBh, FALSE, wxT("could not allocate memory for DIB header") );
     // Fill in the DIB header
     lpDIBh->bmiHeader.biSize = headersize;
     lpDIBh->bmiHeader.biWidth = (DWORD)width;
@@ -570,7 +591,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
     // check the wxBitmap object
     GetBitmapData()->SetOk();
 #endif // WXWIN_COMPATIBILITY_2
-      
+
     if (wxTheBitmapList) wxTheBitmapList->AddBitmap(this);
 
     return TRUE;
@@ -579,7 +600,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
 wxImage wxBitmap::ConvertToImage() const
 {
     wxImage image;
-    
+
     wxCHECK_MSG( Ok(), wxNullImage, wxT("invalid bitmap") );
 
     // create an wxImage object
@@ -704,6 +725,8 @@ wxImage wxBitmap::ConvertToImage() const
     return image;
 }
 
+#endif // wxUSE_IMAGE
+
 bool wxBitmap::LoadFile(const wxString& filename, long type)
 {
     UnRef();
@@ -716,16 +739,20 @@ bool wxBitmap::LoadFile(const wxString& filename, long type)
 
         return handler->LoadFile(this, filename, type, -1, -1);
     }
+#if wxUSE_IMAGE
     else
     {
         wxImage image;
-        if ( !image.LoadFile( filename, type ) || !image.Ok() )
-            return FALSE;
-
-        *this = image.ConvertToBitmap();
+        if ( image.LoadFile( filename, type ) && image.Ok() )
+        {
+            *this = image.ConvertToBitmap();
 
-        return TRUE;
+            return TRUE;
+        }
     }
+#endif // wxUSE_IMAGE
+
+    return FALSE;
 }
 
 bool wxBitmap::Create(void *data, long type, int width, int height, int depth)
@@ -754,15 +781,19 @@ bool wxBitmap::SaveFile(const wxString& filename, int type, const wxPalette *pal
     {
         return handler->SaveFile(this, filename, type, palette);
     }
+#if wxUSE_IMAGE
     else
     {
         // FIXME what about palette? shouldn't we use it?
         wxImage image( *this );
-        if (!image.Ok())
-            return FALSE;
-
-        return image.SaveFile( filename, type );
+        if ( image.Ok() )
+        {
+            return image.SaveFile(filename, type);
+        }
     }
+#endif // wxUSE_IMAGE
+
+    return FALSE;
 }
 
 // ----------------------------------------------------------------------------