X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4b61c88d55f71d59affa4e57df52c99cdaaa5c08..db28c33ca268429840045ef81c17ee1459f4ec47:/src/gtk/bitmap.cpp diff --git a/src/gtk/bitmap.cpp b/src/gtk/bitmap.cpp index 90d40cefbf..df7af69140 100644 --- a/src/gtk/bitmap.cpp +++ b/src/gtk/bitmap.cpp @@ -23,6 +23,7 @@ #include "wx/image.h" #include "wx/dcmemory.h" #include "wx/app.h" +#include "wx/rawbmp.h" #ifdef __WXGTK20__ // need this to get gdk_image_new_bitmap() @@ -306,7 +307,7 @@ bool wxBitmap::Create( int width, int height, int depth ) if (depth == -1) depth = visual->depth; - wxCHECK_MSG( (depth == visual->depth) || (depth == 1), FALSE, + wxCHECK_MSG( (depth == visual->depth) || (depth == 1) || (depth == 32), FALSE, wxT("invalid bitmap depth") ) m_refData = new wxBitmapRefData(); @@ -318,6 +319,14 @@ 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 ); @@ -1555,6 +1564,56 @@ void wxBitmap::PurgeOtherRepresentations(wxBitmap::Representation keep) } } +#endif // __WXGTK20__ + +void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp) +{ +#ifdef __WXGTK20__ + if (bpp != 32) + return NULL; + + GdkPixbuf *pixbuf = GetPixbuf(); + if (!pixbuf) + return NULL; + +#if 0 + if (gdk_pixbuf_get_has_alpha( pixbuf )) + wxPrintf( wxT("Has alpha\n") ); + else + wxPrintf( wxT("No alpha.\n") ); +#endif + + data.m_height = gdk_pixbuf_get_height( pixbuf ); + data.m_width = gdk_pixbuf_get_width( pixbuf ); + data.m_stride = gdk_pixbuf_get_rowstride( pixbuf ); + + return gdk_pixbuf_get_pixels( pixbuf ); +#else + return NULL; +#endif +} + +void wxBitmap::UngetRawData(wxPixelDataBase& data) +{ +} + + +bool wxBitmap::HasAlpha() const +{ +#ifdef __WXGTK20__ + return HasPixbuf(); +#else + return false; +#endif +} + +void wxBitmap::UseAlpha() +{ +#ifdef __WXGTK20__ + GetPixbuf(); +#endif +} + //----------------------------------------------------------------------------- // wxBitmapHandler //----------------------------------------------------------------------------- @@ -1587,4 +1646,3 @@ bool wxBitmapHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, int } -#endif // __WXGTK20__