+void *wxBitmap::GetRawData(wxPixelDataBase& data, int bpp)
+{
+ wxCHECK_MSG( Ok(), NULL, "invalid bitmap" );
+
+ AllocExclusive();
+
+ DFBSurfacePixelFormat format;
+ if ( bpp == 32 )
+ format = DSPF_ARGB;
+ else
+ format = DSPF_RGB24;
+
+ // convert the bitmap into format compatible with requested raw access;
+ // note that we don't bother converting the bitmap back in UngetRawData(),
+ // as unpacked formats (RGB24, RGB32) are the common case and converting
+ // between them while blitting is fast enough (FIXME?)
+ if ( !ConvertSurfaceToFormat(M_BITMAP->m_surface, format) )
+ return NULL;
+
+ void *bits = NULL;
+ if ( !M_BITMAP->m_surface->Lock
+ (
+ (DFBSurfaceLockFlags)(DSLF_READ | DSLF_WRITE),
+ &bits,
+ &data.m_stride
+ ) )
+ return NULL;
+
+ M_BITMAP->m_surface->GetSize(&data.m_width, &data.m_height);
+
+ return bits;
+}
+
+void wxBitmap::UngetRawData(wxPixelDataBase& WXUNUSED(data))
+{
+ M_BITMAP->m_surface->Unlock();
+}
+
+bool wxBitmap::HasAlpha() const
+{
+ wxCHECK_MSG( Ok(), false, "invalid bitmap" );
+
+ return M_BITMAP->m_surface->GetPixelFormat() == DSPF_ARGB;
+}
+