X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d3a80c922c7f0932f0b3985846e58ef48e3a6da7..59a9a6bcc699b5f886f7cdd71d499f85b25f3daa:/src/motif/bitmap.cpp diff --git a/src/motif/bitmap.cpp b/src/motif/bitmap.cpp index 4e380b6df2..21a9b7ae91 100644 --- a/src/motif/bitmap.cpp +++ b/src/motif/bitmap.cpp @@ -17,17 +17,17 @@ #define XtParent XTPARENT #endif -#include "wx/setup.h" +#include "wx/defs.h" #include "wx/utils.h" #include "wx/palette.h" #include "wx/bitmap.h" #include "wx/icon.h" #include "wx/log.h" -#include "wx/control.h" #include "wx/dcmemory.h" #include "wx/image.h" #include "wx/app.h" +#if 0 #ifdef __VMS__ #pragma message disable nosimpint #endif @@ -35,8 +35,10 @@ #ifdef __VMS__ #pragma message enable nosimpint #endif +#endif -#include "wx/motif/private.h" +#include +#include #if wxHAVE_LIB_XPM #include @@ -53,27 +55,34 @@ wxBitmapRefData::wxBitmapRefData() m_width = 0; m_height = 0; m_depth = 0; - m_quality = 0; - m_numColors = 0; + // XXX m_quality = 0; + // m_numColors = 0; m_bitmapMask = NULL; m_pixmap = (WXPixmap) 0; m_display = (WXDisplay*) 0; - m_freePixmap = TRUE; //TODO: necessary? + // m_freePixmap = TRUE; //TODO: necessary? +#if 0 m_freeColors = (unsigned long*) 0; m_freeColorsCount = 0; +#endif // These 5 variables are for wxControl +#if 0 m_insensPixmap = (WXPixmap) 0; m_labelPixmap = (WXPixmap) 0; m_armPixmap = (WXPixmap) 0; +#endif +#if 0 m_image = (WXImage*) 0; m_insensImage = (WXImage*) 0; +#endif } wxBitmapRefData::~wxBitmapRefData() { +#if 0 if (m_labelPixmap) XmDestroyPixmap (DefaultScreenOfDisplay ((Display*) m_display), (Pixmap) m_labelPixmap); @@ -82,22 +91,28 @@ wxBitmapRefData::~wxBitmapRefData() if (m_insensPixmap) XmDestroyPixmap (DefaultScreenOfDisplay ((Display*) m_display), (Pixmap) m_insensPixmap); +#endif +#if 0 if (m_image) { XmUninstallImage ((XImage*) m_image); XtFree ((char *) (XImage*) m_image); } +#endif +#if 0 if (m_insensImage) { XmUninstallImage ((XImage*) m_insensImage); delete[] ((XImage*) m_insensImage)->data; XtFree ((char *) (XImage*) m_insensImage); } - if (m_pixmap && m_freePixmap) +#endif + if (m_pixmap /* && m_freePixmap */) XFreePixmap ((Display*) m_display, (Pixmap) m_pixmap); +#if 0 if (m_freeColors) { int screen = DefaultScreen((Display*) m_display); @@ -107,6 +122,7 @@ wxBitmapRefData::~wxBitmapRefData() XFreeColors((Display*) m_display, cmp, &m_freeColors[llp], 1, 0L); delete m_freeColors; }; +#endif if (m_bitmapMask) delete m_bitmapMask; @@ -147,6 +163,7 @@ wxBitmap::wxBitmap(const wxString& filename, wxBitmapType type) LoadFile(filename, type); } +#if 0 // Create from XPM data static wxControl* sg_Control = NULL; wxBitmap::wxBitmap(char **data, wxControl* control) @@ -158,6 +175,7 @@ wxBitmap::wxBitmap(char **data, wxControl* control) sg_Control = (wxControl*) NULL; } +#endif bool wxBitmap::CreateFromXpm(const char **bits) { @@ -184,7 +202,7 @@ bool wxBitmap::Create(int w, int h, int d) M_BITMAPDATA->m_width = w; M_BITMAPDATA->m_height = h; M_BITMAPDATA->m_depth = d; - M_BITMAPDATA->m_freePixmap = TRUE; + // M_BITMAPDATA->m_freePixmap = TRUE; Display *dpy = (Display*) wxGetDisplay(); @@ -276,6 +294,9 @@ void wxBitmap::SetDepth(int d) M_BITMAPDATA->m_depth = d; } +#if 0 + +// XXX void wxBitmap::SetQuality(int q) { if (!M_BITMAPDATA) @@ -284,6 +305,8 @@ void wxBitmap::SetQuality(int q) M_BITMAPDATA->m_quality = q; } +#endif + void wxBitmap::SetOk(bool isOk) { if (!M_BITMAPDATA) @@ -419,7 +442,9 @@ bool wxXBMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight)) { - M_BITMAPHANDLERDATA->m_freePixmap = TRUE; + // M_BITMAPHANDLERDATA->m_freePixmap = TRUE; + if (!bitmap->GetRefData()) + bitmap->SetRefData( new wxBitmapRefData() ); int hotX, hotY; unsigned int w, h; @@ -468,10 +493,13 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), int width, int height, int WXUNUSED(depth)) { + if (!bitmap->GetRefData()) + bitmap->SetRefData( new wxBitmapRefData() ); + M_BITMAPHANDLERDATA->m_width = width; M_BITMAPHANDLERDATA->m_height = height; M_BITMAPHANDLERDATA->m_depth = 1; - M_BITMAPHANDLERDATA->m_freePixmap = TRUE; + // M_BITMAPHANDLERDATA->m_freePixmap = TRUE; Display *dpy = (Display*) wxGetDisplay(); M_BITMAPHANDLERDATA->m_display = (WXDisplay*) dpy; @@ -479,6 +507,7 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, M_BITMAPHANDLERDATA->m_pixmap = (WXPixmap) XCreateBitmapFromData (dpy, RootWindow (dpy, DefaultScreen (dpy)), (char*) data, width, height); M_BITMAPHANDLERDATA->m_ok = (M_BITMAPHANDLERDATA->m_pixmap != (WXPixmap) 0) ; +#if 0 // code for wxControl. TODO: can we avoid doing this until we need it? // E.g. have CreateButtonPixmaps which is called on demand. XImage* image = (XImage *) XtMalloc (sizeof (XImage)); @@ -529,6 +558,9 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, M_BITMAPHANDLERDATA->m_image = (WXImage*) image; M_BITMAPHANDLERDATA->m_insensImage = (WXImage*) insensImage; +#endif + + return TRUE; } @@ -558,6 +590,9 @@ bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight) ) { + if (!bitmap->GetRefData()) + bitmap->SetRefData( new wxBitmapRefData() ); + Display *dpy = (Display*) wxGetDisplay(); M_BITMAPHANDLERDATA->m_display = (WXDisplay*) dpy; @@ -604,7 +639,7 @@ bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, M_BITMAPHANDLERDATA->m_depth = depthRet; - M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; + // M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; XpmFreeAttributes(&xpmAttr); @@ -659,10 +694,13 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), int width, int height, int WXUNUSED(depth)) { + if (!bitmap->GetRefData()) + bitmap->SetRefData( new wxBitmapRefData() ); + M_BITMAPHANDLERDATA->m_width = width; M_BITMAPHANDLERDATA->m_height = height; M_BITMAPHANDLERDATA->m_depth = 1; - M_BITMAPHANDLERDATA->m_freePixmap = TRUE; + // M_BITMAPHANDLERDATA->m_freePixmap = TRUE; Display *dpy = (Display*) wxGetDisplay(); M_BITMAPHANDLERDATA->m_display = (WXDisplay*) dpy; @@ -671,6 +709,7 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, xpmAttr.valuemask = XpmReturnInfos; /* nothing yet, but get infos back */ +#if 0 XpmColorSymbol symbolicColors[4]; if (sg_Control && sg_Control->GetMainWidget()) { @@ -685,8 +724,9 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, xpmAttr.colorsymbols = symbolicColors; xpmAttr.valuemask |= XpmColorSymbols; // add flag } +#endif - Pixmap pixmap; + Pixmap pixmap = 0; Pixmap mask = 0; int ErrorStatus = XpmCreatePixmapFromData(dpy, RootWindow(dpy, DefaultScreen(dpy)), (char**) data, &pixmap, &mask, &xpmAttr); @@ -715,7 +755,7 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, M_BITMAPHANDLERDATA->m_depth = depthRet; - M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; + // M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; XpmFreeAttributes(&xpmAttr); M_BITMAPHANDLERDATA->m_ok = TRUE; M_BITMAPHANDLERDATA->m_pixmap = (WXPixmap) pixmap; @@ -749,13 +789,15 @@ void wxBitmap::InitStandardHandlers() #endif // wxHAVE_LIB_XPM } +#if 0 WXPixmap wxBitmap::GetLabelPixmap (WXWidget w) { if (!M_BITMAPDATA) return (WXPixmap)NULL; - if (M_BITMAPDATA->m_image == (WXPixmap) 0) + // if (M_BITMAPDATA->m_image == (WXPixmap) 0) return M_BITMAPDATA->m_pixmap; +#if 0 Display *dpy = (Display*) M_BITMAPDATA->m_display; #ifdef FOO @@ -794,13 +836,15 @@ WXPixmap wxBitmap::GetLabelPixmap (WXWidget w) M_BITMAPDATA->m_labelPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); return M_BITMAPDATA->m_labelPixmap; +#endif } WXPixmap wxBitmap::GetArmPixmap (WXWidget w) { - if (M_BITMAPDATA->m_image == (WXPixmap) 0) + // if (M_BITMAPDATA->m_image == (WXPixmap) 0) return M_BITMAPDATA->m_pixmap; +#if 0 Display *dpy = (Display*) M_BITMAPDATA->m_display; #ifdef FOO // See GetLabelPixmap () comment @@ -824,6 +868,7 @@ WXPixmap wxBitmap::GetArmPixmap (WXWidget w) M_BITMAPDATA->m_armPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); return M_BITMAPDATA->m_armPixmap; +#endif } WXPixmap wxBitmap::GetInsensPixmap (WXWidget w) @@ -844,9 +889,10 @@ WXPixmap wxBitmap::GetInsensPixmap (WXWidget w) return M_BITMAPDATA->m_pixmap; } - if (M_BITMAPDATA->m_insensImage == (WXPixmap) 0) + // if (M_BITMAPDATA->m_insensImage == (WXPixmap) 0) return M_BITMAPDATA->m_pixmap; +#if 0 #ifdef FOO See GetLabelPixmap () comment // Must be destroyed, because colours can have been changed! @@ -867,101 +913,9 @@ WXPixmap wxBitmap::GetInsensPixmap (WXWidget w) M_BITMAPDATA->m_insensPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); return M_BITMAPDATA->m_insensPixmap; +#endif } - -// We may need this sometime... - -/**************************************************************************** - - NAME - XCreateInsensitivePixmap - create a grayed-out copy of a pixmap - - SYNOPSIS - Pixmap XCreateInsensitivePixmap( Display *display, Pixmap pixmap ) - - DESCRIPTION - This function creates a grayed-out copy of the argument pixmap, suitable - for use as a XmLabel's XmNlabelInsensitivePixmap resource. - - RETURN VALUES - The return value is the new Pixmap id or zero on error. Errors include - a NULL display argument or an invalid Pixmap argument. - - ERRORS - If one of the XLib functions fail, it will produce a X error. The - default X error handler prints a diagnostic and calls exit(). - - SEE ALSO - XCopyArea(3), XCreateBitmapFromData(3), XCreateGC(3), XCreatePixmap(3), - XFillRectangle(3), exit(2) - - AUTHOR - John R Veregge - john@puente.jpl.nasa.gov - Advanced Engineering and Prototyping Group (AEG) - Information Systems Technology Section (395) - Jet Propulsion Lab - Calif Institute of Technology - -*****************************************************************************/ - -Pixmap -XCreateInsensitivePixmap( Display *display, Pixmap pixmap ) - -{ - static char stipple_data[] = - { - 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, - 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, - 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, - 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA - }; - GC gc; - Pixmap ipixmap, stipple; - unsigned width, height, depth; - - Window window; /* These return values */ - unsigned border; /* from XGetGeometry() */ - int x, y; /* are not needed. */ - - ipixmap = 0; - - if ( NULL == display || 0 == pixmap ) - return ipixmap; - - if ( 0 == XGetGeometry( display, pixmap, &window, &x, &y, - &width, &height, &border, &depth ) - ) - return ipixmap; /* BadDrawable: probably an invalid pixmap */ - - /* Get the stipple pixmap to be used to 'gray-out' the argument pixmap. - */ - stipple = XCreateBitmapFromData( display, pixmap, stipple_data, 16, 16 ); - if ( 0 != stipple ) - { - gc = XCreateGC( display, pixmap, (XtGCMask)0, (XGCValues*)NULL ); - if ( NULL != gc ) - { - /* Create an identical copy of the argument pixmap. - */ - ipixmap = XCreatePixmap( display, pixmap, width, height, depth ); - if ( 0 != ipixmap ) - { - /* Copy the argument pixmap into the new pixmap. - */ - XCopyArea( display, pixmap, ipixmap, - gc, 0, 0, width, height, 0, 0 ); - - /* Refill the new pixmap using the stipple algorithm/pixmap. - */ - XSetStipple( display, gc, stipple ); - XSetFillStyle( display, gc, FillStippled ); - XFillRectangle( display, ipixmap, gc, 0, 0, width, height ); - } - XFreeGC( display, gc ); - } - XFreePixmap( display, stipple ); - } - return ipixmap; -} +#endif // Creates a bitmap with transparent areas drawn in // the given colour. @@ -1075,8 +1029,8 @@ wxSearchColor::wxSearchColor( int size_, XColor *colors_ ) wxSearchColor::~wxSearchColor( void ) { - if ( color ) delete color; - if ( entry ) delete entry; + if ( color ) delete[] color; + if ( entry ) delete[] entry; } int wxSearchColor::SearchColor( int r, int g, int b ) @@ -1208,12 +1162,11 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth ) vinfo_template.depth = bpp; int nitem = 0; - vi = XGetVisualInfo( dpy, VisualIDMask|VisualDepthMask, &vinfo_template, &nitem ); + vi = XGetVisualInfo( dpy, VisualIDMask|VisualDepthMask, + &vinfo_template, &nitem ); wxCHECK_MSG( vi, FALSE, wxT("no visual") ); - XFree( vi ); - if ((bpp == 16) && (vi->red_mask != 0xf800)) bpp = 15; if (bpp < 8) bpp = 8; @@ -1232,6 +1185,8 @@ bool wxBitmap::CreateFromImage( const wxImage& image, int depth ) else if ((vi->green_mask > vi->blue_mask) && (vi->blue_mask > vi->red_mask)) b_o = GBR; } + XFree( vi ); + int r_mask = image.GetMaskRed(); int g_mask = image.GetMaskGreen(); int b_mask = image.GetMaskBlue();