X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4611dd06a1c5f016fd5b4c5384bbe4620f8af3e9..de5dd006449a97887afb2aad39c8f20549818d98:/src/gtk1/bitmap.cpp diff --git a/src/gtk1/bitmap.cpp b/src/gtk1/bitmap.cpp index adf047670c..df7af69140 100644 --- a/src/gtk1/bitmap.cpp +++ b/src/gtk1/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 ); @@ -1556,3 +1565,84 @@ 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 +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler,wxBitmapHandlerBase) + +wxBitmapHandler::~wxBitmapHandler() +{ +} + +bool wxBitmapHandler::Create(wxBitmap *bitmap, void *data, long type, int width, int height, int depth) +{ + return FALSE; +} + +bool wxBitmapHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long flags, + int desiredWidth, int desiredHeight) +{ + return FALSE; +} + +bool wxBitmapHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, int type, const wxPalette *palette) +{ + return FALSE; +} + +/* static */ void wxBitmap::InitStandardHandlers() +{ + // TODO: Insert handler based on GdkPixbufs handler later +} + +