X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0cad49b42cc28eb5c86cd0193c5bc4cba33f109d..1978421a6d8b81c1f8a961da4b8ddf544fec7b1b:/src/x11/bitmap.cpp?ds=sidebyside diff --git a/src/x11/bitmap.cpp b/src/x11/bitmap.cpp index cbee3462f6..12a782db43 100644 --- a/src/x11/bitmap.cpp +++ b/src/x11/bitmap.cpp @@ -9,7 +9,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "bitmap.h" #endif @@ -375,6 +375,46 @@ bool wxBitmap::Create(void *data, wxBitmapType type, return handler->Create(this, data, type, width, height, depth); } +bool wxBitmap::Create(WXPixmap pixmap) +{ + UnRef(); + Pixmap xpixmap = (Pixmap)pixmap; + Display* xdisplay = wxGlobalDisplay(); + int xscreen = DefaultScreen( xdisplay ); + Window xroot = RootWindow( xdisplay, xscreen ); + + // make a copy of the Pixmap + Window root; + Pixmap copy; + int x, y; + unsigned width, height, border, depth; + + XGetGeometry( xdisplay, (Drawable)xpixmap, &root, &x, &y, + &width, &height, &border, &depth ); + copy = XCreatePixmap( xdisplay, xroot, width, height, depth ); + + GC gc = XCreateGC( xdisplay, copy, 0, NULL ); + XCopyArea( xdisplay, xpixmap, copy, gc, 0, 0, width, height, 0, 0 ); + XFreeGC( xdisplay, gc ); + + // fill in ref data + wxBitmapRefData* ref = new wxBitmapRefData(); + + if( depth == 1 ) + ref->m_bitmap = (WXPixmap)copy; + else + ref->m_pixmap = (WXPixmap)copy; + + ref->m_display = (WXDisplay*)xdisplay; + ref->m_width = width; + ref->m_height = height; + ref->m_bpp = depth; + + m_refData = ref; + + return true; +} + bool wxBitmap::CreateFromXpm( const char **bits ) { wxCHECK_MSG( bits, FALSE, _T("NULL pointer in wxBitmap::CreateFromXpm") ); @@ -1359,6 +1399,8 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, wxImage image(decoder.ReadFile(stream)); return image.Ok() && bitmap->CreateFromImage(image); } + + return FALSE; #else // !wxHAVE_LIB_XPM && !wxUSE_STREAMS return FALSE; #endif // wxHAVE_LIB_XPM / wxUSE_STREAMS @@ -1530,9 +1572,10 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *bits, M_BMPHANDLERDATA->m_bpp = 1; return TRUE; -#endif - wxCHECK_MSG( M_BMPHANDLERDATA->m_bitmap, FALSE, +#else + wxCHECK_MSG( M_BMPHANDLERDATA->m_bitmap, FALSE, wxT("couldn't create bitmap") ); +#endif } void wxBitmap::InitStandardHandlers()