blind fix for wxMotif compilation with wxHAVE_LIB_XPM == 0

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20342 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-04-25 11:10:45 +00:00
parent c5a2f27478
commit 0cad49b42c

View File

@@ -93,13 +93,13 @@ bool wxMask::Create( const wxBitmap& bitmap,
wxImage image = bitmap.ConvertToImage(); wxImage image = bitmap.ConvertToImage();
if (!image.Ok()) return FALSE; if (!image.Ok()) return FALSE;
m_display = bitmap.GetDisplay(); m_display = bitmap.GetDisplay();
Display *xdisplay = (Display*) m_display; Display *xdisplay = (Display*) m_display;
int xscreen = DefaultScreen( xdisplay ); int xscreen = DefaultScreen( xdisplay );
Window xroot = RootWindow( xdisplay, xscreen ); Window xroot = RootWindow( xdisplay, xscreen );
m_bitmap = (WXPixmap) XCreatePixmap( xdisplay, xroot, image.GetWidth(), image.GetHeight(), 1 ); m_bitmap = (WXPixmap) XCreatePixmap( xdisplay, xroot, image.GetWidth(), image.GetHeight(), 1 );
GC gc = XCreateGC( xdisplay, (Pixmap) m_bitmap, 0, NULL ); GC gc = XCreateGC( xdisplay, (Pixmap) m_bitmap, 0, NULL );
@@ -115,7 +115,7 @@ bool wxMask::Create( const wxBitmap& bitmap,
unsigned char blue = colour.Blue(); unsigned char blue = colour.Blue();
int bpp = wxTheApp->GetVisualInfo(m_display)->m_visualDepth; int bpp = wxTheApp->GetVisualInfo(m_display)->m_visualDepth;
if (bpp == 15) if (bpp == 15)
{ {
red = red & 0xf8; red = red & 0xf8;
@@ -165,7 +165,7 @@ bool wxMask::Create( const wxBitmap& bitmap,
if (start_x != -1) if (start_x != -1)
XDrawLine( xdisplay, (Pixmap) m_bitmap, gc, start_x, j, i, j ); XDrawLine( xdisplay, (Pixmap) m_bitmap, gc, start_x, j, i, j );
} }
XFreeGC( xdisplay, gc ); XFreeGC( xdisplay, gc );
return TRUE; return TRUE;
@@ -199,21 +199,21 @@ bool wxMask::Create( const wxBitmap& bitmap )
if (!bitmap.Ok()) return FALSE; if (!bitmap.Ok()) return FALSE;
wxCHECK_MSG( bitmap.GetBitmap(), FALSE, wxT("Cannot create mask from colour bitmap") ); wxCHECK_MSG( bitmap.GetBitmap(), FALSE, wxT("Cannot create mask from colour bitmap") );
m_display = bitmap.GetDisplay(); m_display = bitmap.GetDisplay();
int xscreen = DefaultScreen( (Display*) m_display ); int xscreen = DefaultScreen( (Display*) m_display );
Window xroot = RootWindow( (Display*) m_display, xscreen ); Window xroot = RootWindow( (Display*) m_display, xscreen );
m_bitmap = (WXPixmap) XCreatePixmap( (Display*) m_display, xroot, bitmap.GetWidth(), bitmap.GetHeight(), 1 ); m_bitmap = (WXPixmap) XCreatePixmap( (Display*) m_display, xroot, bitmap.GetWidth(), bitmap.GetHeight(), 1 );
if (!m_bitmap) return FALSE; if (!m_bitmap) return FALSE;
GC gc = XCreateGC( (Display*) m_display, (Pixmap) m_bitmap, 0, NULL ); GC gc = XCreateGC( (Display*) m_display, (Pixmap) m_bitmap, 0, NULL );
XCopyPlane( (Display*) m_display, (Pixmap) bitmap.GetBitmap(), (Pixmap) m_bitmap, XCopyPlane( (Display*) m_display, (Pixmap) bitmap.GetBitmap(), (Pixmap) m_bitmap,
gc, 0, 0, bitmap.GetWidth(), bitmap.GetHeight(), 0, 0, 1 ); gc, 0, 0, bitmap.GetWidth(), bitmap.GetHeight(), 0, 0, 1 );
XFreeGC( (Display*) m_display, gc ); XFreeGC( (Display*) m_display, gc );
return TRUE; return TRUE;
@@ -279,7 +279,7 @@ static WXPixmap wxGetSubPixmap( WXDisplay* xdisplay, WXPixmap xpixmap,
ZPixmap, 0, 0, width, height, 32, 0 ); ZPixmap, 0, 0, width, height, 32, 0 );
ximage->data = (char*)malloc( ximage->bytes_per_line * ximage->height ); ximage->data = (char*)malloc( ximage->bytes_per_line * ximage->height );
ximage = XGetSubImage( (Display*)xdisplay, (Pixmap)xpixmap, ximage = XGetSubImage( (Display*)xdisplay, (Pixmap)xpixmap,
x, y, width, height, x, y, width, height,
AllPlanes, ZPixmap, ximage, 0, 0 ); AllPlanes, ZPixmap, ximage, 0, 0 );
GC gc = XCreateGC( (Display*)xdisplay, (Pixmap)xpixmap, 0, NULL ); GC gc = XCreateGC( (Display*)xdisplay, (Pixmap)xpixmap, 0, NULL );
@@ -314,14 +314,14 @@ bool wxBitmap::Create( int width, int height, int depth )
wxCHECK_MSG( (width > 0) && (height > 0), FALSE, wxT("invalid bitmap size") ) wxCHECK_MSG( (width > 0) && (height > 0), FALSE, wxT("invalid bitmap size") )
m_refData = new wxBitmapRefData(); m_refData = new wxBitmapRefData();
M_BMPDATA->m_display = wxGlobalDisplay(); M_BMPDATA->m_display = wxGlobalDisplay();
wxASSERT_MSG( M_BMPDATA->m_display, wxT("No display") ); wxASSERT_MSG( M_BMPDATA->m_display, wxT("No display") );
int xscreen = DefaultScreen( (Display*) M_BMPDATA->m_display ); int xscreen = DefaultScreen( (Display*) M_BMPDATA->m_display );
Window xroot = RootWindow( (Display*) M_BMPDATA->m_display, xscreen ); Window xroot = RootWindow( (Display*) M_BMPDATA->m_display, xscreen );
int bpp = DefaultDepth( (Display*) M_BMPDATA->m_display, xscreen ); int bpp = DefaultDepth( (Display*) M_BMPDATA->m_display, xscreen );
if (depth == -1) depth = bpp; if (depth == -1) depth = bpp;
@@ -341,17 +341,17 @@ bool wxBitmap::Create( int width, int height, int depth )
if (depth == 1) if (depth == 1)
{ {
M_BMPDATA->m_bitmap = (WXPixmap) XCreatePixmap( (Display*) M_BMPDATA->m_display, xroot, width, height, 1 ); M_BMPDATA->m_bitmap = (WXPixmap) XCreatePixmap( (Display*) M_BMPDATA->m_display, xroot, width, height, 1 );
wxASSERT_MSG( M_BMPDATA->m_bitmap, wxT("Bitmap creation failed") ); wxASSERT_MSG( M_BMPDATA->m_bitmap, wxT("Bitmap creation failed") );
M_BMPDATA->m_bpp = 1; M_BMPDATA->m_bpp = 1;
} }
else else
{ {
M_BMPDATA->m_pixmap = (WXPixmap) XCreatePixmap( (Display*) M_BMPDATA->m_display, xroot, width, height, depth ); M_BMPDATA->m_pixmap = (WXPixmap) XCreatePixmap( (Display*) M_BMPDATA->m_display, xroot, width, height, depth );
wxASSERT_MSG( M_BMPDATA->m_pixmap, wxT("Pixmap creation failed") ); wxASSERT_MSG( M_BMPDATA->m_pixmap, wxT("Pixmap creation failed") );
M_BMPDATA->m_bpp = depth; M_BMPDATA->m_bpp = depth;
} }
#endif #endif
@@ -390,10 +390,10 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
wxASSERT_MSG(image.Ok(), "Invalid wxImage passed to wxBitmap::CreateFromImage."); wxASSERT_MSG(image.Ok(), "Invalid wxImage passed to wxBitmap::CreateFromImage.");
return FALSE; return FALSE;
} }
int w = image.GetWidth(); int w = image.GetWidth();
int h = image.GetHeight(); int h = image.GetHeight();
if (!Create(w, h, depth)) if (!Create(w, h, depth))
return FALSE; return FALSE;
@@ -409,7 +409,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
// pixmap. See demos/nxroach.c. // pixmap. See demos/nxroach.c.
bool hasMask = image.HasMask(); bool hasMask = image.HasMask();
GC pixmapGC = GrNewGC(); GC pixmapGC = GrNewGC();
Pixmap pixmap = (Pixmap) GetPixmap(); Pixmap pixmap = (Pixmap) GetPixmap();
@@ -425,7 +425,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
maskR = image.GetMaskRed(); maskR = image.GetMaskRed();
maskG = image.GetMaskGreen(); maskG = image.GetMaskGreen();
maskB = image.GetMaskBlue(); maskB = image.GetMaskBlue();
maskGC = GrNewGC(); maskGC = GrNewGC();
maskPixmap = GrNewPixmap(w, h, 0); maskPixmap = GrNewPixmap(w, h, 0);
if (!maskPixmap) if (!maskPixmap)
@@ -440,7 +440,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
GR_COLOR lastPixmapColour = 0; GR_COLOR lastPixmapColour = 0;
GR_COLOR lastMaskColour = 0; GR_COLOR lastMaskColour = 0;
int i, j; int i, j;
for (i = 0; i < w; i++) for (i = 0; i < w; i++)
{ {
@@ -458,9 +458,9 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
GrSetGCForeground(pixmapGC, colour); GrSetGCForeground(pixmapGC, colour);
lastPixmapColour = colour; lastPixmapColour = colour;
} }
GrPoint(pixmap, pixmapGC, i, j); GrPoint(pixmap, pixmapGC, i, j);
if (hasMask) if (hasMask)
{ {
// scan the bitmap for the transparent colour and set the corresponding // scan the bitmap for the transparent colour and set the corresponding
@@ -486,11 +486,11 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
GrDestroyGC(pixmapGC); GrDestroyGC(pixmapGC);
if (hasMask) if (hasMask)
GrDestroyGC(maskGC); GrDestroyGC(maskGC);
return TRUE; return TRUE;
#else #else
// !wxUSE_NANOX // !wxUSE_NANOX
UnRef(); UnRef();
wxCHECK_MSG( image.Ok(), FALSE, wxT("invalid image") ) wxCHECK_MSG( image.Ok(), FALSE, wxT("invalid image") )
@@ -499,15 +499,15 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
m_refData = new wxBitmapRefData(); m_refData = new wxBitmapRefData();
M_BMPDATA->m_display = wxGlobalDisplay(); M_BMPDATA->m_display = wxGlobalDisplay();
Display *xdisplay = (Display*) M_BMPDATA->m_display; Display *xdisplay = (Display*) M_BMPDATA->m_display;
int xscreen = DefaultScreen( xdisplay ); int xscreen = DefaultScreen( xdisplay );
Window xroot = RootWindow( xdisplay, xscreen ); Window xroot = RootWindow( xdisplay, xscreen );
Visual* xvisual = DefaultVisual( xdisplay, xscreen ); Visual* xvisual = DefaultVisual( xdisplay, xscreen );
int bpp = wxTheApp->GetVisualInfo(M_BMPDATA->m_display)->m_visualDepth; int bpp = wxTheApp->GetVisualInfo(M_BMPDATA->m_display)->m_visualDepth;
int width = image.GetWidth(); int width = image.GetWidth();
int height = image.GetHeight(); int height = image.GetHeight();
M_BMPDATA->m_width = width; M_BMPDATA->m_width = width;
@@ -515,7 +515,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
if (depth != 1) depth = bpp; if (depth != 1) depth = bpp;
M_BMPDATA->m_bpp = depth; M_BMPDATA->m_bpp = depth;
if (depth == 1) if (depth == 1)
{ {
wxFAIL_MSG( "mono images later" ); wxFAIL_MSG( "mono images later" );
@@ -523,10 +523,10 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
else else
{ {
// Create image // Create image
XImage *data_image = XCreateImage( xdisplay, xvisual, bpp, ZPixmap, 0, 0, width, height, 32, 0 ); XImage *data_image = XCreateImage( xdisplay, xvisual, bpp, ZPixmap, 0, 0, width, height, 32, 0 );
data_image->data = (char*) malloc( data_image->bytes_per_line * data_image->height ); data_image->data = (char*) malloc( data_image->bytes_per_line * data_image->height );
if (data_image->data == NULL) if (data_image->data == NULL)
{ {
wxLogError( wxT("Out of memory.") ); // TODO clean wxLogError( wxT("Out of memory.") ); // TODO clean
@@ -539,16 +539,16 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
XImage *mask_image = (XImage*) NULL; XImage *mask_image = (XImage*) NULL;
if (image.HasMask()) if (image.HasMask())
{ {
mask_image = XCreateImage( xdisplay, xvisual, 1, ZPixmap, 0, 0, width, height, 32, 0 ); mask_image = XCreateImage( xdisplay, xvisual, 1, ZPixmap, 0, 0, width, height, 32, 0 );
mask_image->data = (char*) malloc( mask_image->bytes_per_line * mask_image->height ); mask_image->data = (char*) malloc( mask_image->bytes_per_line * mask_image->height );
if (mask_image->data == NULL) if (mask_image->data == NULL)
{ {
wxLogError( wxT("Out of memory.") ); // TODO clean wxLogError( wxT("Out of memory.") ); // TODO clean
return FALSE; return FALSE;
} }
wxMask *mask = new wxMask(); wxMask *mask = new wxMask();
mask->SetDisplay( xdisplay ); mask->SetDisplay( xdisplay );
mask->SetBitmap( (WXPixmap) XCreatePixmap( xdisplay, xroot, width, height, 1 ) ); mask->SetBitmap( (WXPixmap) XCreatePixmap( xdisplay, xroot, width, height, 1 ) );
@@ -584,7 +584,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
unsigned char* data = image.GetData(); unsigned char* data = image.GetData();
wxASSERT_MSG( data, "No image data" ); wxASSERT_MSG( data, "No image data" );
unsigned char *colorCube = unsigned char *colorCube =
wxTheApp->GetVisualInfo(M_BMPDATA->m_display)->m_colorCube; wxTheApp->GetVisualInfo(M_BMPDATA->m_display)->m_colorCube;
@@ -694,7 +694,7 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth )
XFreeGC( xdisplay, gc ); XFreeGC( xdisplay, gc );
// Blit mask // Blit mask
if (image.HasMask()) if (image.HasMask())
{ {
GC gc = XCreateGC( xdisplay, (Pixmap) GetMask()->GetBitmap(), 0, NULL ); GC gc = XCreateGC( xdisplay, (Pixmap) GetMask()->GetBitmap(), 0, NULL );
@@ -762,7 +762,7 @@ wxImage wxBitmap::ConvertToImage() const
{ {
x_image_mask = XGetImage( xdisplay, (Pixmap) GetMask()->GetBitmap(), x_image_mask = XGetImage( xdisplay, (Pixmap) GetMask()->GetBitmap(),
0, 0, 0, 0,
GetWidth(), GetHeight(), GetWidth(), GetHeight(),
AllPlanes, ZPixmap ); AllPlanes, ZPixmap );
image.SetMaskColour( 16, 16, 16 ); // anything unlikely and dividable image.SetMaskColour( 16, 16, 16 ); // anything unlikely and dividable
@@ -786,11 +786,11 @@ wxImage wxBitmap::ConvertToImage() const
green_shift_left = 8 - vi->m_visualGreenPrec; green_shift_left = 8 - vi->m_visualGreenPrec;
blue_shift_right = vi->m_visualBlueShift; blue_shift_right = vi->m_visualBlueShift;
blue_shift_left = 8 - vi->m_visualBluePrec; blue_shift_left = 8 - vi->m_visualBluePrec;
use_shift = (vi->m_visualType == GrayScale) || use_shift = (vi->m_visualType == GrayScale) ||
(vi->m_visualType != PseudoColor); (vi->m_visualType != PseudoColor);
} }
if (GetBitmap()) if (GetBitmap())
{ {
bpp = 1; bpp = 1;
@@ -1002,7 +1002,7 @@ bool wxBitmap::SaveFile( const wxString &name, wxBitmapType type,
// Try to save the bitmap via wxImage handlers: // Try to save the bitmap via wxImage handlers:
if (handler == NULL) if (handler == NULL)
{ {
wxImage image(this->ConvertToImage()); wxImage image(this->ConvertToImage());
if (image.Ok()) return image.SaveFile( name, type ); if (image.Ok()) return image.SaveFile( name, type );
@@ -1026,7 +1026,7 @@ bool wxBitmap::LoadFile( const wxString &name, wxBitmapType type )
if (!image.LoadFile( name, type )) if (!image.LoadFile( name, type ))
return FALSE; return FALSE;
if (image.Ok()) if (image.Ok())
{ {
*this = wxBitmap(image); *this = wxBitmap(image);
return TRUE; return TRUE;
@@ -1047,7 +1047,7 @@ void wxBitmap::SetPalette(const wxPalette& palette)
M_BMPDATA->m_palette = NULL; M_BMPDATA->m_palette = NULL;
if (!palette.Ok()) return; if (!palette.Ok()) return;
M_BMPDATA->m_palette = new wxPalette(palette); M_BMPDATA->m_palette = new wxPalette(palette);
} }
@@ -1134,11 +1134,11 @@ bool wxGetImageFromDrawable(GR_DRAW_ID drawable, int srcX, int srcY, int width,
GrGetScreenInfo(&sinfo); GrGetScreenInfo(&sinfo);
if (sinfo.pixtype == MWPF_PALETTE) { if (sinfo.pixtype == MWPF_PALETTE) {
if(!(palette = (GR_PALETTE*) malloc(sizeof(GR_PALETTE)))) { if(!(palette = (GR_PALETTE*) malloc(sizeof(GR_PALETTE)))) {
return FALSE; return FALSE;
} }
GrGetSystemPalette(palette); GrGetSystemPalette(palette);
} }
if(!(pixels = (GR_PIXELVAL*) malloc(sizeof(GR_PIXELVAL) * width * height))) if(!(pixels = (GR_PIXELVAL*) malloc(sizeof(GR_PIXELVAL) * width * height)))
{ {
@@ -1147,55 +1147,55 @@ bool wxGetImageFromDrawable(GR_DRAW_ID drawable, int srcX, int srcY, int width,
image.Create(width, height); image.Create(width, height);
GrReadArea(drawable, srcX, srcY, width, height, GrReadArea(drawable, srcX, srcY, width, height,
pixels); pixels);
for(x = 0; x < sinfo.cols; x++) { for(x = 0; x < sinfo.cols; x++) {
pp = (unsigned char *)pixels + pp = (unsigned char *)pixels +
((x + (y * sinfo.cols)) * ((x + (y * sinfo.cols)) *
sizeof(GR_PIXELVAL)); sizeof(GR_PIXELVAL));
switch(sinfo.pixtype) { switch(sinfo.pixtype) {
/* FIXME: These may need modifying on big endian. */ /* FIXME: These may need modifying on big endian. */
case MWPF_TRUECOLOR0888: case MWPF_TRUECOLOR0888:
case MWPF_TRUECOLOR888: case MWPF_TRUECOLOR888:
rgb[0] = pp[2]; rgb[0] = pp[2];
rgb[1] = pp[1]; rgb[1] = pp[1];
rgb[2] = pp[0]; rgb[2] = pp[0];
break; break;
case MWPF_PALETTE: case MWPF_PALETTE:
rgb[0] = palette->palette[pp[0]].r; rgb[0] = palette->palette[pp[0]].r;
rgb[1] = palette->palette[pp[0]].g; rgb[1] = palette->palette[pp[0]].g;
rgb[2] = palette->palette[pp[0]].b; rgb[2] = palette->palette[pp[0]].b;
break; break;
case MWPF_TRUECOLOR565: case MWPF_TRUECOLOR565:
rgb[0] = pp[1] & 0xf8; rgb[0] = pp[1] & 0xf8;
rgb[1] = ((pp[1] & 0x07) << 5) | rgb[1] = ((pp[1] & 0x07) << 5) |
((pp[0] & 0xe0) >> 3); ((pp[0] & 0xe0) >> 3);
rgb[2] = (pp[0] & 0x1f) << 3; rgb[2] = (pp[0] & 0x1f) << 3;
break; break;
case MWPF_TRUECOLOR555: case MWPF_TRUECOLOR555:
rgb[0] = (pp[1] & 0x7c) << 1; rgb[0] = (pp[1] & 0x7c) << 1;
rgb[1] = ((pp[1] & 0x03) << 6) | rgb[1] = ((pp[1] & 0x03) << 6) |
((pp[0] & 0xe0) >> 2); ((pp[0] & 0xe0) >> 2);
rgb[2] = (pp[0] & 0x1f) << 3; rgb[2] = (pp[0] & 0x1f) << 3;
break; break;
case MWPF_TRUECOLOR332: case MWPF_TRUECOLOR332:
rgb[0] = pp[0] & 0xe0; rgb[0] = pp[0] & 0xe0;
rgb[1] = (pp[0] & 0x1c) << 3; rgb[1] = (pp[0] & 0x1c) << 3;
rgb[2] = (pp[0] & 0x03) << 6; rgb[2] = (pp[0] & 0x03) << 6;
break; break;
default: default:
fprintf(stderr, "Unsupported pixel " fprintf(stderr, "Unsupported pixel "
"format\n"); "format\n");
return 1; return 1;
} }
image.SetRGB(x, y, rgb[0], rgb[1], rgb[2]); image.SetRGB(x, y, rgb[0], rgb[1], rgb[2]);
} }
free(pixels); free(pixels);
if(palette) free(palette); if(palette) free(palette);
@@ -1207,45 +1207,45 @@ bool wxGetImageFromDrawable(GR_DRAW_ID drawable, int srcX, int srcY, int width,
int GrGetPixelColor(GR_SCREEN_INFO* sinfo, GR_PALETTE* palette, GR_PIXELVAL pixel, int GrGetPixelColor(GR_SCREEN_INFO* sinfo, GR_PALETTE* palette, GR_PIXELVAL pixel,
unsigned char* red, unsigned char* green, unsigned char* blue) unsigned char* red, unsigned char* green, unsigned char* blue)
{ {
unsigned char rgb[3], *pp; unsigned char rgb[3], *pp;
pp = (unsigned char*) & pixel ; pp = (unsigned char*) & pixel ;
switch (sinfo.pixtype) switch (sinfo.pixtype)
{ {
/* FIXME: These may need modifying on big endian. */ /* FIXME: These may need modifying on big endian. */
case MWPF_TRUECOLOR0888: case MWPF_TRUECOLOR0888:
case MWPF_TRUECOLOR888: case MWPF_TRUECOLOR888:
rgb[0] = pp[2]; rgb[0] = pp[2];
rgb[1] = pp[1]; rgb[1] = pp[1];
rgb[2] = pp[0]; rgb[2] = pp[0];
break; break;
case MWPF_PALETTE: case MWPF_PALETTE:
rgb[0] = palette->palette[pp[0]].r; rgb[0] = palette->palette[pp[0]].r;
rgb[1] = palette->palette[pp[0]].g; rgb[1] = palette->palette[pp[0]].g;
rgb[2] = palette->palette[pp[0]].b; rgb[2] = palette->palette[pp[0]].b;
break; break;
case MWPF_TRUECOLOR565: case MWPF_TRUECOLOR565:
rgb[0] = pp[1] & 0xf8; rgb[0] = pp[1] & 0xf8;
rgb[1] = ((pp[1] & 0x07) << 5) | rgb[1] = ((pp[1] & 0x07) << 5) |
((pp[0] & 0xe0) >> 3); ((pp[0] & 0xe0) >> 3);
rgb[2] = (pp[0] & 0x1f) << 3; rgb[2] = (pp[0] & 0x1f) << 3;
break; break;
case MWPF_TRUECOLOR555: case MWPF_TRUECOLOR555:
rgb[0] = (pp[1] & 0x7c) << 1; rgb[0] = (pp[1] & 0x7c) << 1;
rgb[1] = ((pp[1] & 0x03) << 6) | rgb[1] = ((pp[1] & 0x03) << 6) |
((pp[0] & 0xe0) >> 2); ((pp[0] & 0xe0) >> 2);
rgb[2] = (pp[0] & 0x1f) << 3; rgb[2] = (pp[0] & 0x1f) << 3;
break; break;
case MWPF_TRUECOLOR332: case MWPF_TRUECOLOR332:
rgb[0] = pp[0] & 0xe0; rgb[0] = pp[0] & 0xe0;
rgb[1] = (pp[0] & 0x1c) << 3; rgb[1] = (pp[0] & 0x1c) << 3;
rgb[2] = (pp[0] & 0x03) << 6; rgb[2] = (pp[0] & 0x03) << 6;
break; break;
default: default:
fprintf(stderr, "Unsupported pixel format\n"); fprintf(stderr, "Unsupported pixel format\n");
return 0; return 0;
} }
*(red) = rgb[0]; *(red) = rgb[0];
@@ -1307,12 +1307,12 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name,
bitmap->SetRefData( new wxBitmapRefData() ); bitmap->SetRefData( new wxBitmapRefData() );
M_BMPHANDLERDATA->m_display = wxGlobalDisplay(); M_BMPHANDLERDATA->m_display = wxGlobalDisplay();
Display *xdisplay = (Display*) M_BMPHANDLERDATA->m_display; Display *xdisplay = (Display*) M_BMPHANDLERDATA->m_display;
int xscreen = DefaultScreen( xdisplay ); int xscreen = DefaultScreen( xdisplay );
Window xroot = RootWindow( xdisplay, xscreen ); Window xroot = RootWindow( xdisplay, xscreen );
int bpp = DefaultDepth( xdisplay, xscreen ); int bpp = DefaultDepth( xdisplay, xscreen );
XpmAttributes xpmAttr; XpmAttributes xpmAttr;
@@ -1320,11 +1320,11 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name,
Pixmap pixmap; Pixmap pixmap;
Pixmap mask = 0; Pixmap mask = 0;
int ErrorStatus = XpmReadFileToPixmap( xdisplay, xroot, int ErrorStatus = XpmReadFileToPixmap( xdisplay, xroot,
(char*) name.c_str(), (char*) name.c_str(),
&pixmap, &mask, &xpmAttr); &pixmap, &mask, &xpmAttr);
if (ErrorStatus == XpmSuccess) if (ErrorStatus == XpmSuccess)
{ {
M_BMPHANDLERDATA->m_width = xpmAttr.width; M_BMPHANDLERDATA->m_width = xpmAttr.width;
@@ -1335,7 +1335,7 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name,
XpmFreeAttributes(&xpmAttr); XpmFreeAttributes(&xpmAttr);
M_BMPHANDLERDATA->m_bitmap = (WXPixmap) pixmap; M_BMPHANDLERDATA->m_bitmap = (WXPixmap) pixmap;
if (mask) if (mask)
{ {
M_BMPHANDLERDATA->m_mask = new wxMask; M_BMPHANDLERDATA->m_mask = new wxMask;
@@ -1346,7 +1346,7 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name,
else else
{ {
UnRef(); UnRef();
return FALSE; return FALSE;
} }
@@ -1357,13 +1357,10 @@ bool wxXPMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name,
if (stream.Ok()) if (stream.Ok())
{ {
wxImage image(decoder.ReadFile(stream)); wxImage image(decoder.ReadFile(stream));
if (image.Ok()) return image.Ok() && bitmap->CreateFromImage(image);
return CreateFromImage(image);
else
return FALSE;
} }
else #else // !wxHAVE_LIB_XPM && !wxUSE_STREAMS
return FALSE; return FALSE;
#endif // wxHAVE_LIB_XPM / wxUSE_STREAMS #endif // wxHAVE_LIB_XPM / wxUSE_STREAMS
} }
@@ -1419,12 +1416,12 @@ bool wxXPMDataHandler::Create(wxBitmap *bitmap, void *bits,
bitmap->SetRefData( new wxBitmapRefData() ); bitmap->SetRefData( new wxBitmapRefData() );
M_BMPHANDLERDATA->m_display = wxGlobalDisplay(); M_BMPHANDLERDATA->m_display = wxGlobalDisplay();
Display *xdisplay = (Display*) M_BMPHANDLERDATA->m_display; Display *xdisplay = (Display*) M_BMPHANDLERDATA->m_display;
int xscreen = DefaultScreen( xdisplay ); int xscreen = DefaultScreen( xdisplay );
Window xroot = RootWindow( xdisplay, xscreen ); Window xroot = RootWindow( xdisplay, xscreen );
int bpp = DefaultDepth( xdisplay, xscreen ); int bpp = DefaultDepth( xdisplay, xscreen );
XpmAttributes xpmAttr; XpmAttributes xpmAttr;
@@ -1432,10 +1429,10 @@ bool wxXPMDataHandler::Create(wxBitmap *bitmap, void *bits,
Pixmap pixmap = 0; Pixmap pixmap = 0;
Pixmap mask = 0; Pixmap mask = 0;
int ErrorStatus = XpmCreatePixmapFromData( xdisplay, xroot, (char**) bits, int ErrorStatus = XpmCreatePixmapFromData( xdisplay, xroot, (char**) bits,
&pixmap, &mask, &xpmAttr ); &pixmap, &mask, &xpmAttr );
if (ErrorStatus == XpmSuccess) if (ErrorStatus == XpmSuccess)
{ {
M_BMPHANDLERDATA->m_width = xpmAttr.width; M_BMPHANDLERDATA->m_width = xpmAttr.width;
@@ -1454,31 +1451,28 @@ bool wxXPMDataHandler::Create(wxBitmap *bitmap, void *bits,
#endif #endif
XpmFreeAttributes(&xpmAttr); XpmFreeAttributes(&xpmAttr);
M_BMPHANDLERDATA->m_pixmap = (WXPixmap) pixmap; M_BMPHANDLERDATA->m_pixmap = (WXPixmap) pixmap;
if (mask) if (mask)
{ {
M_BMPHANDLERDATA->m_mask = new wxMask; M_BMPHANDLERDATA->m_mask = new wxMask;
M_BMPHANDLERDATA->m_mask->SetBitmap( (WXPixmap) mask ); M_BMPHANDLERDATA->m_mask->SetBitmap( (WXPixmap) mask );
M_BMPHANDLERDATA->m_mask->SetDisplay( xdisplay ); M_BMPHANDLERDATA->m_mask->SetDisplay( xdisplay );
} }
return TRUE; return TRUE;
} }
else else
{ {
bitmap->UnRef(); bitmap->UnRef();
return FALSE; return FALSE;
} }
#else #else // !wxHAVE_LIB_XPM
wxXPMDecoder decoder; wxXPMDecoder decoder;
wxImage image(decoder.ReadData(bits)); wxImage image(decoder.ReadData((const char **)bits));
if (image.Ok()) return image.Ok() && bitmap->CreateFromImage(image);
return bitmap->CreateFromImage(image); #endif // wxHAVE_LIB_XPM/!wxHAVE_LIB_XPM
else
return FALSE;
#endif
} }
#endif // wxUSE_XPM #endif // wxUSE_XPM
@@ -1523,10 +1517,10 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *bits,
M_BMPHANDLERDATA->m_display = wxGlobalDisplay(); M_BMPHANDLERDATA->m_display = wxGlobalDisplay();
Display *xdisplay = (Display*) M_BMPHANDLERDATA->m_display; Display *xdisplay = (Display*) M_BMPHANDLERDATA->m_display;
int xscreen = DefaultScreen( xdisplay ); int xscreen = DefaultScreen( xdisplay );
Window xroot = RootWindow( xdisplay, xscreen ); Window xroot = RootWindow( xdisplay, xscreen );
M_BMPHANDLERDATA->m_mask = (wxMask *) NULL; M_BMPHANDLERDATA->m_mask = (wxMask *) NULL;
M_BMPHANDLERDATA->m_bitmap = M_BMPHANDLERDATA->m_bitmap =
(WXPixmap) XCreateBitmapFromData( xdisplay, xroot, (WXPixmap) XCreateBitmapFromData( xdisplay, xroot,