// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
-#ifdef __GNUG__
-#pragma implementation "bmpmotif.h"
-#endif
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
#ifdef __VMS
#define XtParent XTPARENT
+#define XtDisplay XTDISPLAY
#endif
#include "wx/defs.h"
#if wxHAVE_LIB_XPM
#include <X11/xpm.h>
#endif
-#include <math.h>
+
+#include "wx/math.h"
Pixmap XCreateInsensitivePixmap( Display *display, Pixmap pixmap );
+static inline wxCharBuffer GetCacheImageName(WXImage image)
+{
+ return wxString::Format(_T("wxBitmap_%p"), image).ToAscii();
+}
+
wxBitmapCache::~wxBitmapCache()
{
if( m_display )
(WXDisplay*)wxGetDisplay();
XImage *ximage = XGetImage( (Display*)m_display,
- (Drawable)m_bitmap.GetPixmap(),
+ (Drawable)m_bitmap.GetDrawable(),
0, 0,
m_bitmap.GetWidth(), m_bitmap.GetHeight(),
AllPlanes, ZPixmap );
if( m_image )
{
- char tmp[128];
- sprintf( tmp, "Im%x", (unsigned int)ximage );
- XmInstallImage( ximage, tmp );
+ XmInstallImage( ximage, GetCacheImageName(m_image).data() );
}
}
+WXPixmap wxBitmapCache::GetPixmapFromCache(WXWidget w)
+{
+ Widget widget = (Widget)w;
+ while( XmIsGadget( widget ) )
+ widget = XtParent( widget );
+
+ Pixel fg, bg;
+ XtVaGetValues( widget,
+ XmNbackground, &bg,
+ XmNforeground, &fg,
+ NULL );
+
+ Screen* screen = DefaultScreenOfDisplay( (Display*)m_display );
+ return (WXPixmap)XmGetPixmap(screen, GetCacheImageName(m_image).data(), fg, bg);
+}
+
WXPixmap wxBitmapCache::GetLabelPixmap( WXWidget w )
{
if( m_labelPixmap && !m_recalcPixmaps.label )
if( !m_image )
return (WXPixmap)NULL;
- char tmp[128];
- sprintf( tmp, "Im%x", (unsigned int)m_image );
-
- Pixel fg, bg;
- Widget widget = (Widget)w;
-
- while( XmIsGadget( widget ) )
- widget = XtParent( widget );
- XtVaGetValues( widget,
- XmNbackground, &bg,
- XmNforeground, &fg,
- NULL );
-
- m_labelPixmap = (WXPixmap)XmGetPixmap( screen, tmp, fg, bg );
-
+ m_labelPixmap = GetPixmapFromCache(w);
m_recalcPixmaps.label = !m_labelPixmap;
return m_labelPixmap;
}
if( !m_image )
return (WXPixmap)NULL;
- char tmp[128];
- sprintf( tmp, "Im%x", (unsigned int)m_image );
-
- Pixel fg, bg;
- Widget widget = (Widget) w;
-
- XtVaGetValues( widget, XmNarmColor, &bg, NULL );
- while( XmIsGadget( widget ) )
- widget = XtParent( widget );
- XtVaGetValues( widget, XmNforeground, &fg, NULL );
-
- m_armPixmap = (WXPixmap)XmGetPixmap( screen, tmp, fg, bg );
-
+ m_armPixmap = GetPixmapFromCache(w);
m_recalcPixmaps.arm = !m_armPixmap;
return m_armPixmap;
}
m_insensPixmap =
(WXPixmap)XCreateInsensitivePixmap( (Display*)m_display,
- (Pixmap)m_bitmap.GetPixmap() );
+ (Pixmap)m_bitmap.GetDrawable() );
m_recalcPixmaps.insens = !m_insensPixmap;
return m_insensPixmap;