// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "bitmap.h"
#endif
#include "wx/wfstream.h"
#endif
#endif
-#include <math.h>
+#include "wx/math.h"
//-----------------------------------------------------------------------------
// wxMask
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;
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);
}
#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;
}
if (depth == 1)
{
- wxFAIL_MSG( "mono images later" );
+ wxFAIL_MSG( wxT("mono images later") );
}
else
{
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;
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,
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
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,
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,
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()