X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6cee329241bc37e110e3514ef4f99b2dbd301dbb..0906c58d0533380cd706b4de2a88615f0f187995:/src/x11/bitmap.cpp diff --git a/src/x11/bitmap.cpp b/src/x11/bitmap.cpp index 8f8ba22e1c..d2901ad3b3 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 @@ -41,7 +41,7 @@ bool wxGetImageFromDrawable(GR_DRAW_ID drawable, int srcX, int srcY, int width, #include "wx/wfstream.h" #endif #endif -#include +#include "wx/math.h" //----------------------------------------------------------------------------- // wxMask @@ -366,7 +366,7 @@ bool wxBitmap::Create(void *data, wxBitmapType type, wxBitmapHandler *handler = FindHandler(type); if ( handler == NULL ) { - wxLogWarning("no data bitmap handler for type %ld defined.", + wxLogWarning(wxT("no data bitmap handler for type %ld defined."), (long)type); return FALSE; @@ -375,9 +375,49 @@ 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") ); + wxCHECK_MSG( bits, FALSE, wxT("NULL pointer in wxBitmap::CreateFromXpm") ); return Create(bits, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0); } @@ -387,7 +427,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth ) #if wxUSE_NANOX if (!image.Ok()) { - wxASSERT_MSG(image.Ok(), "Invalid wxImage passed to wxBitmap::CreateFromImage."); + wxASSERT_MSG(image.Ok(), wxT("Invalid wxImage passed to wxBitmap::CreateFromImage.")); return FALSE; } @@ -518,7 +558,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth ) if (depth == 1) { - wxFAIL_MSG( "mono images later" ); + wxFAIL_MSG( wxT("mono images later") ); } else { @@ -583,7 +623,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth ) int b_mask = image.GetMaskBlue(); unsigned char* data = image.GetData(); - wxASSERT_MSG( data, "No image data" ); + wxASSERT_MSG( data, wxT("No image data") ); unsigned char *colorCube = wxTheApp->GetVisualInfo(M_BMPDATA->m_display)->m_colorCube; @@ -1276,13 +1316,13 @@ IMPLEMENT_ABSTRACT_CLASS(wxBitmapHandler, wxBitmapHandlerBase); class wxXPMFileHandler : public wxBitmapHandler { - DECLARE_DYNAMIC_CLASS(wxXPMFileHandler); + DECLARE_DYNAMIC_CLASS(wxXPMFileHandler) public: wxXPMFileHandler() { - m_name = "XPM file"; - m_extension = "xpm"; - m_type = wxBITMAP_TYPE_XPM; + SetName( wxT("XPM file") ); + SetExtension( wxT("xpm") ); + SetType( wxBITMAP_TYPE_XPM ); }; virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, @@ -1384,13 +1424,13 @@ bool wxXPMFileHandler::SaveFile(const wxBitmap *bitmap, const wxString& name, class wxXPMDataHandler : public wxBitmapHandler { - DECLARE_DYNAMIC_CLASS(wxXPMDataHandler); + DECLARE_DYNAMIC_CLASS(wxXPMDataHandler) public: wxXPMDataHandler() { - m_name = "XPM data"; - m_extension = "xpm"; - m_type = wxBITMAP_TYPE_XPM_DATA; + SetName( wxT("XPM data") ); + SetExtension( wxT("xpm") ); + SetType( wxBITMAP_TYPE_XPM_DATA ); }; virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, @@ -1489,9 +1529,9 @@ class WXDLLEXPORT wxXBMDataHandler: public wxBitmapHandler public: inline wxXBMDataHandler() { - m_name = "XBM data"; - m_extension = "xbm"; - m_type = wxBITMAP_TYPE_XBM_DATA; + SetName( wxT("XBM data") ); + SetExtension( wxT("xbm") ); + SetType( wxBITMAP_TYPE_XBM_DATA ); }; virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, @@ -1532,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()