]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/bitmap.cpp
fixing RawBitmap access
[wxWidgets.git] / src / gtk / bitmap.cpp
index 6bbf68cd474ad612e61e121f3db68c013a0a7e54..cb358da34a5ddfef0f123431535cd47055acf920 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        bitmap.cpp
+// Name:        src/gtk/bitmap.cpp
 // Purpose:
 // Author:      Robert Roebling
 // RCS-ID:      $Id$
@@ -7,10 +7,6 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma implementation "bitmap.h"
-#endif
-
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #include "wx/dcmemory.h"
 #include "wx/app.h"
 
-#ifdef __WXGTK20__
 #include "wx/rawbmp.h"
     // need this to get gdk_image_new_bitmap()
     #define GDK_ENABLE_BROKEN
-#endif
 
 #include <gdk/gdk.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 
-#ifdef __WXGTK20__
-    #include <gdk/gdkimage.h>
-#else // GTK+ 1.2
-    #include <gdk/gdkrgb.h>
-#endif // GTK+ 2.0/1.2
+#include <gdk/gdkimage.h>
 
 #include "wx/math.h"
 
@@ -75,11 +65,13 @@ wxMask::wxMask( const wxBitmap& bitmap, const wxColour& colour )
     Create( bitmap, colour );
 }
 
+#if wxUSE_PALETTE
 wxMask::wxMask( const wxBitmap& bitmap, int paletteIndex )
 {
     m_bitmap = (GdkBitmap *) NULL;
     Create( bitmap, paletteIndex );
 }
+#endif // wxUSE_PALETTE
 
 wxMask::wxMask( const wxBitmap& bitmap )
 {
@@ -186,6 +178,7 @@ bool wxMask::Create( const wxBitmap& bitmap,
     return true;
 }
 
+#if wxUSE_PALETTE
 bool wxMask::Create( const wxBitmap& bitmap, int paletteIndex )
 {
     unsigned char r,g,b;
@@ -197,6 +190,7 @@ bool wxMask::Create( const wxBitmap& bitmap, int paletteIndex )
 
     return Create(bitmap, wxColour(r, g, b));
 }
+#endif // wxUSE_PALETTE
 
 bool wxMask::Create( const wxBitmap& bitmap )
 {
@@ -240,9 +234,7 @@ public:
 
     GdkPixmap      *m_pixmap;
     GdkBitmap      *m_bitmap;
-#ifdef __WXGTK20__
     GdkPixbuf      *m_pixbuf;
-#endif
     wxMask         *m_mask;
     int             m_width;
     int             m_height;
@@ -254,9 +246,7 @@ wxBitmapRefData::wxBitmapRefData()
 {
     m_pixmap = (GdkPixmap *) NULL;
     m_bitmap = (GdkBitmap *) NULL;
-#ifdef __WXGTK20__
     m_pixbuf = (GdkPixbuf *) NULL;
-#endif
     m_mask = (wxMask *) NULL;
     m_width = 0;
     m_height = 0;
@@ -270,12 +260,12 @@ wxBitmapRefData::~wxBitmapRefData()
         gdk_pixmap_unref( m_pixmap );
     if (m_bitmap)
         gdk_bitmap_unref( m_bitmap );
-#ifdef __WXGTK20__
     if (m_pixbuf)
         gdk_pixbuf_unref( m_pixbuf );
-#endif
     delete m_mask;
+#if wxUSE_PALETTE
     delete m_palette;
+#endif // wxUSE_PALETTE
 }
 
 //-----------------------------------------------------------------------------
@@ -319,14 +309,12 @@ bool wxBitmap::Create( int width, int height, int depth )
         M_BMPDATA->m_bitmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, 1 );
         M_BMPDATA->m_bpp = 1;
     }
-#ifdef __WXGTK20__
     else if (depth == 32)
     {
         M_BMPDATA->m_pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, true,
                                               8, width, height);
         M_BMPDATA->m_bpp = 32;
     }
-#endif
     else
     {
         M_BMPDATA->m_pixmap = gdk_pixmap_new( wxGetRootWindow()->window, width, height, depth );
@@ -379,7 +367,6 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight,
 
     wxBitmap bmp;
 
-#ifdef __WXGTK20__
     if (HasPixbuf())
     {
         bmp.SetWidth(width);
@@ -395,7 +382,6 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight,
                          GDK_INTERP_BILINEAR);
     }
     else
-#endif // __WXGTK20__
     {
         GdkImage *img = (GdkImage*) NULL;
         if (GetPixmap())
@@ -469,12 +455,12 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight,
                     old_x = x;
                 }
 
-                if (bpp == 1)
+                if ( dst )
                 {
                     if (!pixval)
                     {
                         char bit=1;
-                        char shift = bit << w % 8;
+                        char shift = bit << (w % 8);
                         outbyte |= shift;
                     }
 
@@ -494,14 +480,14 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight,
             }
 
             // do not forget the last byte
-            if ((bpp == 1) && (width % 8 != 0))
+            if ( dst && (width % 8 != 0) )
                 dst[h*dstbyteperline+width/8] = outbyte;
         }
 
         gdk_image_destroy( img );
         if (gc) gdk_gc_unref( gc );
 
-        if (bpp == 1)
+        if ( dst )
         {
             bmp = wxBitmap( (const char *)dst, width, height, 1 );
             free( dst );
@@ -537,7 +523,7 @@ wxBitmap wxBitmap::Rescale( int clipx, int clipy, int clipwidth, int clipheight,
                     if (pixval)
                     {
                         char bit=1;
-                        char shift = bit << w % 8;
+                        char shift = bit << (w % 8);
                         outbyte |= shift;
                     }
 
@@ -585,10 +571,9 @@ bool wxBitmap::CreateFromImage(const wxImage& image, int depth)
     }
     else
     {
-#ifdef __WXGTK20__
         if (image.HasAlpha())
             return CreateFromImageAsPixbuf(image);
-#endif
+
         return CreateFromImageAsPixmap(image);
     }
 }
@@ -933,7 +918,6 @@ bool wxBitmap::CreateFromImageAsPixmap(const wxImage& img)
     return true;
 }
 
-#ifdef __WXGTK20__
 bool wxBitmap::CreateFromImageAsPixbuf(const wxImage& image)
 {
     int width = image.GetWidth();
@@ -976,7 +960,6 @@ bool wxBitmap::CreateFromImageAsPixbuf(const wxImage& image)
 
     return true;
 }
-#endif // __WXGTK20__
 
 wxImage wxBitmap::ConvertToImage() const
 {
@@ -993,7 +976,6 @@ wxImage wxBitmap::ConvertToImage() const
         return wxNullImage;
     }
 
-#ifdef __WXGTK20__
     if (HasPixbuf())
     {
         GdkPixbuf *pixbuf = GetPixbuf();
@@ -1021,7 +1003,6 @@ wxImage wxBitmap::ConvertToImage() const
         }
     }
     else
-#endif // __WXGTK20__
     {
         // the colour used as transparent one in wxImage and the one it is
         // replaced with when it really occurs in the bitmap
@@ -1162,12 +1143,6 @@ wxImage wxBitmap::ConvertToImage() const
     return image;
 }
 
-wxBitmap::wxBitmap( const wxBitmap& bmp )
-        : wxBitmapBase()
-{
-    Ref( bmp );
-}
-
 wxBitmap::wxBitmap( const wxString &filename, wxBitmapType type )
 {
     LoadFile( filename, type );
@@ -1199,14 +1174,6 @@ wxBitmap::~wxBitmap()
 {
 }
 
-wxBitmap& wxBitmap::operator = ( const wxBitmap& bmp )
-{
-    if ( m_refData != bmp.m_refData )
-        Ref( bmp );
-
-    return *this;
-}
-
 bool wxBitmap::operator == ( const wxBitmap& bmp ) const
 {
     return m_refData == bmp.m_refData;
@@ -1221,9 +1188,7 @@ bool wxBitmap::Ok() const
 {
     return (m_refData != NULL) &&
            (
-#ifdef __WXGTK20__
               M_BMPDATA->m_pixbuf ||
-#endif
               M_BMPDATA->m_bitmap || M_BMPDATA->m_pixmap
            );
 }
@@ -1281,19 +1246,17 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const
     wxBitmap ret( rect.width, rect.height, M_BMPDATA->m_bpp );
     wxASSERT_MSG( ret.Ok(), wxT("GetSubBitmap error") );
 
-#ifdef __WXGTK20__
     if (HasPixbuf())
     {
         GdkPixbuf *pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB,
                                            gdk_pixbuf_get_has_alpha(GetPixbuf()),
-                                           8, GetWidth(), GetHeight());
+                                           8, rect.width, rect.height);
         ret.SetPixbuf(pixbuf);
         gdk_pixbuf_copy_area(GetPixbuf(),
                              rect.x, rect.y, rect.width, rect.height,
                              pixbuf, 0, 0);
     }
     else
-#endif // __WXGTK20__
     {
         if (ret.GetPixmap())
         {
@@ -1392,6 +1355,7 @@ bool wxBitmap::LoadFile( const wxString &name, wxBitmapType type )
     return true;
 }
 
+#if wxUSE_PALETTE
 wxPalette *wxBitmap::GetPalette() const
 {
     if (!Ok())
@@ -1404,6 +1368,7 @@ void wxBitmap::SetPalette(const wxPalette& WXUNUSED(palette))
 {
     // TODO
 }
+#endif // wxUSE_PALETTE
 
 void wxBitmap::SetHeight( int height )
 {
@@ -1435,9 +1400,7 @@ void wxBitmap::SetPixmap( GdkPixmap *pixmap )
         m_refData = new wxBitmapRefData();
 
     M_BMPDATA->m_pixmap = pixmap;
-#ifdef __WXGTK20__
     PurgeOtherRepresentations(Pixmap);
-#endif
 }
 
 void wxBitmap::SetBitmap( GdkPixmap *bitmap )
@@ -1446,16 +1409,13 @@ void wxBitmap::SetBitmap( GdkPixmap *bitmap )
         m_refData = new wxBitmapRefData();
 
     M_BMPDATA->m_bitmap = bitmap;
-#ifdef __WXGTK20__
     PurgeOtherRepresentations(Pixmap);
-#endif
 }
 
 GdkPixmap *wxBitmap::GetPixmap() const
 {
     wxCHECK_MSG( Ok(), (GdkPixmap *) NULL, wxT("invalid bitmap") );
 
-#ifdef __WXGTK20__
     // create the pixmap on the fly if we use Pixbuf representation:
     if (HasPixbuf() && !HasPixmap())
     {
@@ -1466,7 +1426,6 @@ GdkPixmap *wxBitmap::GetPixmap() const
                                           &M_BMPDATA->m_mask->m_bitmap,
                                           128 /*threshold*/);
     }
-#endif // __WXGTK20__
 
     return M_BMPDATA->m_pixmap;
 }
@@ -1485,7 +1444,6 @@ GdkBitmap *wxBitmap::GetBitmap() const
     return M_BMPDATA->m_bitmap;
 }
 
-#ifdef __WXGTK20__
 GdkPixbuf *wxBitmap::GetPixbuf() const
 {
     wxCHECK_MSG( Ok(), NULL, wxT("invalid bitmap") );
@@ -1565,11 +1523,8 @@ void wxBitmap::PurgeOtherRepresentations(wxBitmap::Representation keep)
     }
 }
 
-#endif // __WXGTK20__
-
 void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
 {
-#ifdef __WXGTK20__
     if (bpp != 32)
         return NULL;
 
@@ -1589,30 +1544,21 @@ void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
     data.m_stride = gdk_pixbuf_get_rowstride( pixbuf );
 
     return gdk_pixbuf_get_pixels( pixbuf );
-#else
-    return NULL;
-#endif
 }
 
-void wxBitmap::UngetRawData(wxPixelDataBase& data)
+void wxBitmap::UngetRawData(wxPixelDataBase& WXUNUSED(data))
 {
 }
 
 
 bool wxBitmap::HasAlpha() const
 {
-#ifdef __WXGTK20__
     return HasPixbuf();
-#else
-    return false;
-#endif
 }
 
 void wxBitmap::UseAlpha()
 {
-#ifdef __WXGTK20__
     GetPixbuf();
-#endif
 }
 
 //-----------------------------------------------------------------------------
@@ -1625,19 +1571,36 @@ wxBitmapHandler::~wxBitmapHandler()
 {
 }
 
-bool wxBitmapHandler::Create(wxBitmap *bitmap, void *data, long type, int width, int height, int depth)
+bool wxBitmapHandler::Create(wxBitmap * WXUNUSED(bitmap),
+                             void * WXUNUSED(data),
+                             long WXUNUSED(type),
+                             int WXUNUSED(width),
+                             int WXUNUSED(height),
+                             int WXUNUSED(depth))
 {
+    wxFAIL_MSG( _T("not implemented") );
+
     return false;
 }
 
-bool wxBitmapHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long flags,
-        int desiredWidth, int desiredHeight)
+bool wxBitmapHandler::LoadFile(wxBitmap * WXUNUSED(bitmap),
+                               const wxString& WXUNUSED(name),
+                               long WXUNUSED(flags),
+                               int WXUNUSED(desiredWidth),
+                               int WXUNUSED(desiredHeight))
 {
+    wxFAIL_MSG( _T("not implemented") );
+
     return false;
 }
 
-bool wxBitmapHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, int type, const wxPalette *palette)
+bool wxBitmapHandler::SaveFile(const wxBitmap * WXUNUSED(bitmap),
+                               const wxString& WXUNUSED(name),
+                               int WXUNUSED(type),
+                               const wxPalette * WXUNUSED(palette))
 {
+    wxFAIL_MSG( _T("not implemented") );
+
     return false;
 }
 
@@ -1645,5 +1608,3 @@ bool wxBitmapHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, int
 {
     // TODO: Insert handler based on GdkPixbufs handler later
 }
-
-