X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/f9e02ac76b28a6787e7714a5c1f6ade2d46cd7a0..d6c9c1b71e069396bbe3850862de9aa10e6812e0:/src/motif/bitmap.cpp diff --git a/src/motif/bitmap.cpp b/src/motif/bitmap.cpp index 78272ccdf0..524d851c60 100644 --- a/src/motif/bitmap.cpp +++ b/src/motif/bitmap.cpp @@ -13,6 +13,10 @@ #pragma implementation "bitmap.h" #endif +#ifdef __VMS +#define XtParent XTPARENT +#endif + #include "wx/setup.h" #include "wx/utils.h" #include "wx/palette.h" @@ -21,20 +25,24 @@ #include "wx/log.h" #include "wx/control.h" #include "wx/dcmemory.h" +#include "wx/image.h" +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include +#ifdef __VMS__ +#pragma message enable nosimpint +#endif #include "wx/motif/private.h" -// TODO: correct symbol, path? -#if wxUSE_XPM -#include +#if wxHAVE_LIB_XPM + #include #endif -#if !USE_SHARED_LIBRARIES IMPLEMENT_DYNAMIC_CLASS(wxBitmap, wxGDIObject) IMPLEMENT_DYNAMIC_CLASS(wxMask, wxObject) -#endif wxBitmapRefData::wxBitmapRefData() { @@ -89,12 +97,12 @@ wxBitmapRefData::~wxBitmapRefData() if (m_freeColors) { - int screen = DefaultScreen((Display*) m_display); - Colormap cmp = DefaultColormap((Display*) m_display,screen); - long llp; - for(llp = 0;llp < m_freeColorsCount;llp++) - XFreeColors((Display*) m_display, cmp, &m_freeColors[llp], 1, 0L); - delete m_freeColors; + int screen = DefaultScreen((Display*) m_display); + Colormap cmp = DefaultColormap((Display*) m_display,screen); + long llp; + for(llp = 0;llp < m_freeColorsCount;llp++) + XFreeColors((Display*) m_display, cmp, &m_freeColors[llp], 1, 0L); + delete m_freeColors; }; if (m_bitmapMask) @@ -104,6 +112,8 @@ wxBitmapRefData::~wxBitmapRefData() wxList wxBitmap::sm_handlers; +#define M_BMPDATA ((wxBitmapRefData *)m_refData) + wxBitmap::wxBitmap() { m_refData = NULL; @@ -164,6 +174,13 @@ wxBitmap::wxBitmap(char **data, wxControl* control) sg_Control = (wxControl*) NULL; } +bool wxBitmap::CreateFromXpm(const char **bits) +{ + wxCHECK_MSG( bits, FALSE, _T("NULL pointer in wxBitmap::CreateFromXpm") ); + + return Create(bits, wxBITMAP_TYPE_XPM_DATA, 0, 0, 0); +} + bool wxBitmap::Create(int w, int h, int d) { UnRef(); @@ -171,7 +188,7 @@ bool wxBitmap::Create(int w, int h, int d) m_refData = new wxBitmapRefData; if (d < 1) - d = wxDisplayDepth(); + d = wxDisplayDepth(); M_BITMAPDATA->m_width = w; M_BITMAPDATA->m_height = h; @@ -183,7 +200,7 @@ bool wxBitmap::Create(int w, int h, int d) M_BITMAPDATA->m_display = dpy; /* MATTHEW: [4] Remember the display */ M_BITMAPDATA->m_pixmap = (WXPixmap) XCreatePixmap (dpy, RootWindow (dpy, DefaultScreen (dpy)), - w, h, d); + w, h, d); M_BITMAPDATA->m_ok = (M_BITMAPDATA->m_pixmap != (WXPixmap) 0) ; return M_BITMAPDATA->m_ok; @@ -198,9 +215,14 @@ bool wxBitmap::LoadFile(const wxString& filename, long type) wxBitmapHandler *handler = FindHandler(type); if ( handler == NULL ) { - wxLogWarning("no bitmap handler for type %d defined.", type); - - return FALSE; + wxImage image; + if (!image.LoadFile( filename, type )) return FALSE; + if (image.Ok()) + { + *this = image.ConvertToBitmap(); + return TRUE; + } + else return FALSE; } return handler->LoadFile(this, filename, type, -1, -1); @@ -215,7 +237,7 @@ bool wxBitmap::Create(void *data, long type, int width, int height, int depth) wxBitmapHandler *handler = FindHandler(type); if ( handler == NULL ) { - wxLogWarning("no bitmap handler for type %d defined.", type); + wxLogWarning("no data bitmap handler for type %d defined.", type); return FALSE; } @@ -227,13 +249,13 @@ bool wxBitmap::SaveFile(const wxString& filename, int type, const wxPalette *pal { wxBitmapHandler *handler = FindHandler(type); - if ( handler == NULL ) { - wxLogWarning("no bitmap handler for type %d defined.", type); - - return FALSE; - } + if ( handler == NULL ) { // try wxImage + wxImage image( *this ); + if (image.Ok()) return image.SaveFile( filename, type ); + else return FALSE; + } - return handler->SaveFile(this, filename, type, palette); + return handler->SaveFile(this, filename, type, palette); } void wxBitmap::SetWidth(int w) @@ -292,6 +314,20 @@ void wxBitmap::SetMask(wxMask *mask) M_BITMAPDATA->m_bitmapMask = mask ; } +wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const +{ + wxCHECK_MSG( Ok() && + (rect.x >= 0) && (rect.y >= 0) && + (rect.x+rect.width <= M_BMPDATA->m_width) && (rect.y+rect.height <= M_BMPDATA->m_height), + wxNullBitmap, wxT("invalid bitmap or bitmap region") ); + + wxBitmap ret( rect.width, rect.height, 0 ); + wxASSERT_MSG( ret.Ok(), wxT("GetSubBitmap error") ); + + // The remaining still TODO + return ret; +} + void wxBitmap::AddHandler(wxBitmapHandler *handler) { sm_handlers.Append(handler); @@ -334,7 +370,7 @@ wxBitmapHandler *wxBitmap::FindHandler(const wxString& extension, long bitmapTyp { wxBitmapHandler *handler = (wxBitmapHandler *)node->Data(); if ( handler->GetExtension() == extension && - (bitmapType == -1 || handler->GetType() == bitmapType) ) + (bitmapType == -1 || handler->GetType() == bitmapType) ) return handler; node = node->Next(); } @@ -355,8 +391,8 @@ wxBitmapHandler *wxBitmap::FindHandler(long bitmapType) } /* - * wxMask - */ +* wxMask +*/ wxMask::wxMask() { @@ -399,7 +435,7 @@ wxMask::~wxMask() // Create a mask from a mono bitmap (copies the bitmap). bool wxMask::Create(const wxBitmap& WXUNUSED(bitmap)) { -// TODO + // TODO return FALSE; } @@ -407,7 +443,7 @@ bool wxMask::Create(const wxBitmap& WXUNUSED(bitmap)) // the transparent area bool wxMask::Create(const wxBitmap& WXUNUSED(bitmap), int WXUNUSED(paletteIndex)) { -// TODO + // TODO return FALSE; } @@ -415,37 +451,37 @@ bool wxMask::Create(const wxBitmap& WXUNUSED(bitmap), int WXUNUSED(paletteIndex) // the transparent area bool wxMask::Create(const wxBitmap& WXUNUSED(bitmap), const wxColour& WXUNUSED(colour)) { -// TODO + // TODO return FALSE; } /* - * wxBitmapHandler - */ +* wxBitmapHandler +*/ IMPLEMENT_DYNAMIC_CLASS(wxBitmapHandler, wxObject) -bool wxBitmapHandler::Create(wxBitmap *WXUNUSED(bitmap), void *WXUNUSED(data), long WXUNUSED(type), - int WXUNUSED(width), int WXUNUSED(height), int WXUNUSED(depth)) +bool wxBitmapHandler::Create(wxBitmap *WXUNUSED(bitmap), void *WXUNUSED(data), long WXUNUSED(type), + int WXUNUSED(width), int WXUNUSED(height), int WXUNUSED(depth)) { return FALSE; } bool wxBitmapHandler::LoadFile(wxBitmap *WXUNUSED(bitmap), const wxString& WXUNUSED(name), long WXUNUSED(type), - int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight)) + int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight)) { return FALSE; } -bool wxBitmapHandler::SaveFile(wxBitmap *WXUNUSED(bitmap), const wxString& WXUNUSED(name), int WXUNUSED(type), - const wxPalette *WXUNUSED(palette)) +bool wxBitmapHandler::SaveFile(wxBitmap *WXUNUSED(bitmap), const wxString& WXUNUSED(name), int WXUNUSED(type), + const wxPalette *WXUNUSED(palette)) { return FALSE; } /* - * Standard handlers - */ +* Standard handlers +*/ class WXDLLEXPORT wxXBMFileHandler: public wxBitmapHandler { @@ -459,12 +495,12 @@ public: }; virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, - int desiredWidth, int desiredHeight); + int desiredWidth, int desiredHeight); }; IMPLEMENT_DYNAMIC_CLASS(wxXBMFileHandler, wxBitmapHandler) bool wxXBMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long WXUNUSED(flags), - int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight)) + int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight)) { M_BITMAPHANDLERDATA->m_freePixmap = TRUE; @@ -476,7 +512,7 @@ bool wxXBMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, long WXU M_BITMAPDATA->m_display = (WXDisplay*) dpy; int value = XReadBitmapFile (dpy, RootWindow (dpy, DefaultScreen (dpy)), - (char*) (const char*) name, &w, &h, &pixmap, &hotX, &hotY); + (char*) (const char*) name, &w, &h, &pixmap, &hotX, &hotY); M_BITMAPHANDLERDATA->m_width = w; M_BITMAPHANDLERDATA->m_height = h; M_BITMAPHANDLERDATA->m_depth = 1; @@ -510,8 +546,8 @@ public: }; IMPLEMENT_DYNAMIC_CLASS(wxXBMDataHandler, wxBitmapHandler) -bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), - int width, int height, int WXUNUSED(depth)) +bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), + int width, int height, int WXUNUSED(depth)) { M_BITMAPHANDLERDATA->m_width = width; M_BITMAPHANDLERDATA->m_height = height; @@ -578,7 +614,7 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags return TRUE; } -#if wxUSE_XPM +#if wxHAVE_LIB_XPM class WXDLLEXPORT wxXPMFileHandler: public wxBitmapHandler { DECLARE_DYNAMIC_CLASS(wxXPMFileHandler) @@ -591,14 +627,14 @@ public: }; virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, - int desiredWidth, int desiredHeight); + int desiredWidth, int desiredHeight); virtual bool SaveFile(wxBitmap *bitmap, const wxString& name, int type, const wxPalette *palette = NULL); }; IMPLEMENT_DYNAMIC_CLASS(wxXPMFileHandler, wxBitmapHandler) bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, long WXUNUSED(flags), - int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight) ) + int WXUNUSED(desiredWidth), int WXUNUSED(desiredHeight) ) { Display *dpy = (Display*) wxGetDisplay(); M_BITMAPHANDLERDATA->m_display = (WXDisplay*) dpy; @@ -633,46 +669,46 @@ bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, long WX M_BITMAPHANDLERDATA->m_width = xpmAttr.width; M_BITMAPHANDLERDATA->m_height = xpmAttr.height; - /* + /* if ( xpmAttr.npixels > 2 ) { - M_BITMAPHANDLERDATA->m_depth = 8; // TODO: next time not just a guess :-) ... + M_BITMAPHANDLERDATA->m_depth = 8; // TODO: next time not just a guess :-) ... } else { - M_BITMAPHANDLERDATA->m_depth = 1; // mono + M_BITMAPHANDLERDATA->m_depth = 1; // mono } - */ + */ M_BITMAPHANDLERDATA->m_depth = depthRet; - M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; + M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; - XpmFreeAttributes(&xpmAttr); + XpmFreeAttributes(&xpmAttr); M_BITMAPHANDLERDATA->m_ok = TRUE; return TRUE; } else { -// XpmDebugError(errorStatus, name); + // XpmDebugError(errorStatus, name); M_BITMAPHANDLERDATA->m_ok = FALSE; return FALSE; } } -bool wxXPMFileHandler::SaveFile( wxBitmap *bitmap, const wxString& name, int WXUNUSED(type), - const wxPalette *WXUNUSED(palette)) +bool wxXPMFileHandler::SaveFile( wxBitmap *bitmap, const wxString& name, int WXUNUSED(type), + const wxPalette *WXUNUSED(palette)) { if (M_BITMAPHANDLERDATA->m_ok && M_BITMAPHANDLERDATA->m_pixmap) { Display *dpy = (Display*) M_BITMAPHANDLERDATA->m_display; int errorStatus = XpmWriteFileFromPixmap(dpy, (char*) (const char*) name, - (Pixmap) M_BITMAPHANDLERDATA->m_pixmap, - (M_BITMAPHANDLERDATA->m_bitmapMask ? (Pixmap) M_BITMAPHANDLERDATA->m_bitmapMask->GetPixmap() : (Pixmap) 0), - (XpmAttributes *) NULL); + (Pixmap) M_BITMAPHANDLERDATA->m_pixmap, + (M_BITMAPHANDLERDATA->m_bitmapMask ? (Pixmap) M_BITMAPHANDLERDATA->m_bitmapMask->GetPixmap() : (Pixmap) 0), + (XpmAttributes *) NULL); if (errorStatus == XpmSuccess) - return TRUE; + return TRUE; else - return FALSE; + return FALSE; } else return FALSE; @@ -693,8 +729,8 @@ public: }; IMPLEMENT_DYNAMIC_CLASS(wxXPMDataHandler, wxBitmapHandler) -bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), - int width, int height, int WXUNUSED(depth)) +bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), + int width, int height, int WXUNUSED(depth)) { M_BITMAPHANDLERDATA->m_width = width; M_BITMAPHANDLERDATA->m_height = height; @@ -726,7 +762,7 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags Pixmap pixmap; Pixmap mask = 0; int ErrorStatus = XpmCreatePixmapFromData(dpy, RootWindow(dpy, DefaultScreen(dpy)), - (char**) data, &pixmap, &mask, &xpmAttr); + (char**) data, &pixmap, &mask, &xpmAttr); if (ErrorStatus == XpmSuccess) { // Set attributes @@ -740,15 +776,15 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags XGetGeometry(dpy, pixmap, &rootWindowRet, &xRet, &yRet, &widthRet, &heightRet, &borderWidthRet, &depthRet); - /* - if ( xpmAttr.npixels > 2 ) - { + /* + if ( xpmAttr.npixels > 2 ) + { M_BITMAPHANDLERDATA->m_depth = 8; // next time not just a guess :-) ... - } else - { + } else + { M_BITMAPHANDLERDATA->m_depth = 1; // mono - } - */ + } + */ M_BITMAPHANDLERDATA->m_depth = depthRet; @@ -764,13 +800,13 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags } else { -// XpmDebugError(ErrorStatus, NULL); + // XpmDebugError(ErrorStatus, NULL); M_BITMAPHANDLERDATA->m_ok = FALSE; } return M_BITMAPHANDLERDATA->m_ok ; } -#endif +#endif // wxHAVE_LIB_XPM void wxBitmap::CleanUpHandlers() { @@ -791,160 +827,161 @@ void wxBitmap::InitStandardHandlers() AddHandler(new wxXBMFileHandler); AddHandler(new wxXBMDataHandler); - // XPM is considered standard for Moif, although it can be omitted if absolutely - // necessary. -#if wxUSE_XPM + // XPM is considered standard for Motif, although it can be omitted if + // libXpm is not installed +#if wxHAVE_LIB_XPM AddHandler(new wxXPMFileHandler); AddHandler(new wxXPMDataHandler); -#endif +#endif // wxHAVE_LIB_XPM } WXPixmap wxBitmap::GetLabelPixmap (WXWidget w) { - if (M_BITMAPDATA->m_image == (WXPixmap) 0) - return M_BITMAPDATA->m_pixmap; + if (M_BITMAPDATA->m_image == (WXPixmap) 0) + return M_BITMAPDATA->m_pixmap; - Display *dpy = (Display*) M_BITMAPDATA->m_display; + Display *dpy = (Display*) M_BITMAPDATA->m_display; #ifdef FOO -/* - If we do: - if (labelPixmap) return labelPixmap; - things can be wrong, because colors can have been changed. - - If we do: - if (labelPixmap) - XmDestroyPixmap(DefaultScreenOfDisplay(dpy),labelPixmap) ; - we got BadDrawable if the pixmap is referenced by multiples widgets - - this is a catch22!! - - So, before doing thing really clean, I just do nothing; if the pixmap is - referenced by many widgets, Motif performs caching functions. - And if pixmap is referenced with multiples colors, we just have some - memory leaks... I hope we can deal with them... - */ - // Must be destroyed, because colours can have been changed! - if (M_BITMAPDATA->m_labelPixmap) - XmDestroyPixmap (DefaultScreenOfDisplay (dpy), M_BITMAPDATA->m_labelPixmap); + /* + If we do: + if (labelPixmap) return labelPixmap; + things can be wrong, because colors can have been changed. + + If we do: + if (labelPixmap) + XmDestroyPixmap(DefaultScreenOfDisplay(dpy),labelPixmap) ; + we got BadDrawable if the pixmap is referenced by multiples widgets + + this is a catch22!! + + So, before doing thing really clean, I just do nothing; if the pixmap is + referenced by many widgets, Motif performs caching functions. + And if pixmap is referenced with multiples colors, we just have some + memory leaks... I hope we can deal with them... + */ + // Must be destroyed, because colours can have been changed! + if (M_BITMAPDATA->m_labelPixmap) + XmDestroyPixmap (DefaultScreenOfDisplay (dpy), M_BITMAPDATA->m_labelPixmap); #endif - char tmp[128]; - sprintf (tmp, "Im%x", (unsigned int) M_BITMAPDATA->m_image); + char tmp[128]; + sprintf (tmp, "Im%x", (unsigned int) M_BITMAPDATA->m_image); - Pixel fg, bg; - Widget widget = (Widget) w; + Pixel fg, bg; + Widget widget = (Widget) w; - while (XmIsGadget ( widget )) - widget = XtParent (widget); - XtVaGetValues (widget, XmNbackground, &bg, XmNforeground, &fg, NULL); + while (XmIsGadget ( widget )) + widget = XtParent (widget); + XtVaGetValues (widget, XmNbackground, &bg, XmNforeground, &fg, NULL); - M_BITMAPDATA->m_labelPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); + M_BITMAPDATA->m_labelPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); - return M_BITMAPDATA->m_labelPixmap; + return M_BITMAPDATA->m_labelPixmap; } WXPixmap wxBitmap::GetArmPixmap (WXWidget w) { - if (M_BITMAPDATA->m_image == (WXPixmap) 0) - return M_BITMAPDATA->m_pixmap; + if (M_BITMAPDATA->m_image == (WXPixmap) 0) + return M_BITMAPDATA->m_pixmap; - Display *dpy = (Display*) M_BITMAPDATA->m_display; + Display *dpy = (Display*) M_BITMAPDATA->m_display; #ifdef FOO - See GetLabelPixmap () comment - // Must be destroyed, because colours can have been changed! - if (M_BITMAPDATA->m_armPixmap) - XmDestroyPixmap (DefaultScreenOfDisplay (dpy), M_BITMAPDATA->m_armPixmap); + // See GetLabelPixmap () comment + + // Must be destroyed, because colours can have been changed! + if (M_BITMAPDATA->m_armPixmap) + XmDestroyPixmap (DefaultScreenOfDisplay (dpy), M_BITMAPDATA->m_armPixmap); #endif - char tmp[128]; - sprintf (tmp, "Im%x", (unsigned int) M_BITMAPDATA->m_image); + char tmp[128]; + sprintf (tmp, "Im%x", (unsigned int) M_BITMAPDATA->m_image); - Pixel fg, bg; - Widget widget = (Widget) w; + Pixel fg, bg; + Widget widget = (Widget) w; - XtVaGetValues (widget, XmNarmColor, &bg, NULL); - while (XmIsGadget (widget)) - widget = XtParent (widget); - XtVaGetValues (widget, XmNforeground, &fg, NULL); + XtVaGetValues (widget, XmNarmColor, &bg, NULL); + while (XmIsGadget (widget)) + widget = XtParent (widget); + XtVaGetValues (widget, XmNforeground, &fg, NULL); - M_BITMAPDATA->m_armPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); + M_BITMAPDATA->m_armPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); - return M_BITMAPDATA->m_armPixmap; + return M_BITMAPDATA->m_armPixmap; } WXPixmap wxBitmap::GetInsensPixmap (WXWidget w) { - Display *dpy = (Display*) M_BITMAPDATA->m_display; + Display *dpy = (Display*) M_BITMAPDATA->m_display; - if (M_BITMAPDATA->m_insensPixmap) - return M_BITMAPDATA->m_insensPixmap; - - if (!w) - { - M_BITMAPDATA->m_insensPixmap = (WXPixmap) XCreateInsensitivePixmap(dpy, (Pixmap) M_BITMAPDATA->m_pixmap); if (M_BITMAPDATA->m_insensPixmap) - return M_BITMAPDATA->m_insensPixmap; - else - return M_BITMAPDATA->m_pixmap; - } + return M_BITMAPDATA->m_insensPixmap; - if (M_BITMAPDATA->m_insensImage == (WXPixmap) 0) - return M_BITMAPDATA->m_pixmap; + if (!w) + { + M_BITMAPDATA->m_insensPixmap = (WXPixmap) XCreateInsensitivePixmap(dpy, (Pixmap) M_BITMAPDATA->m_pixmap); + if (M_BITMAPDATA->m_insensPixmap) + return M_BITMAPDATA->m_insensPixmap; + else + return M_BITMAPDATA->m_pixmap; + } + + if (M_BITMAPDATA->m_insensImage == (WXPixmap) 0) + return M_BITMAPDATA->m_pixmap; #ifdef FOO - See GetLabelPixmap () comment - // Must be destroyed, because colours can have been changed! - if (M_BITMAPDATA->m_insensPixmap) - XmDestroyPixmap (DefaultScreenOfDisplay (dpy), (Pixmap) M_BITMAPDATA->m_insensPixmap); + See GetLabelPixmap () comment + // Must be destroyed, because colours can have been changed! + if (M_BITMAPDATA->m_insensPixmap) + XmDestroyPixmap (DefaultScreenOfDisplay (dpy), (Pixmap) M_BITMAPDATA->m_insensPixmap); #endif - char tmp[128]; - sprintf (tmp, "Not%x", (unsigned int) M_BITMAPDATA->m_insensImage); + char tmp[128]; + sprintf (tmp, "Not%x", (unsigned int) M_BITMAPDATA->m_insensImage); - Pixel fg, bg; - Widget widget = (Widget) w; + Pixel fg, bg; + Widget widget = (Widget) w; - while (XmIsGadget (widget)) - widget = XtParent (widget); - XtVaGetValues (widget, XmNbackground, &bg, XmNforeground, &fg, NULL); + while (XmIsGadget (widget)) + widget = XtParent (widget); + XtVaGetValues (widget, XmNbackground, &bg, XmNforeground, &fg, NULL); - M_BITMAPDATA->m_insensPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); + M_BITMAPDATA->m_insensPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); - return M_BITMAPDATA->m_insensPixmap; + return M_BITMAPDATA->m_insensPixmap; } // We may need this sometime... /**************************************************************************** -NAME - XCreateInsensitivePixmap - create a grayed-out copy of a pixmap + NAME + XCreateInsensitivePixmap - create a grayed-out copy of a pixmap -SYNOPSIS - Pixmap XCreateInsensitivePixmap( Display *display, Pixmap 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. + 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. + 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(). + 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) + 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 + 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 *****************************************************************************/ @@ -952,8 +989,7 @@ Pixmap XCreateInsensitivePixmap( Display *display, Pixmap pixmap ) { -static - char stipple_data[] = + static char stipple_data[] = { 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, 0x55, 0x55, 0xAA, 0xAA, @@ -971,51 +1007,51 @@ static ipixmap = 0; if ( NULL == display || 0 == pixmap ) - return ipixmap; + return ipixmap; if ( 0 == XGetGeometry( display, pixmap, &window, &x, &y, &width, &height, &border, &depth ) ) - return ipixmap; /* BadDrawable: probably an invalid pixmap */ + 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 ) + gc = XCreateGC( display, pixmap, (XtGCMask)0, (XGCValues*)NULL ); + if ( NULL != gc ) { - /* 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 ); + /* 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 ); } - XFreeGC( display, gc ); - } - XFreePixmap( display, stipple ); + XFreePixmap( display, stipple ); } return ipixmap; } // Creates a bitmap with transparent areas drawn in // the given colour. -wxBitmap wxCreateMaskedBitmap(wxBitmap& bitmap, wxColour& colour) +wxBitmap wxCreateMaskedBitmap(const wxBitmap& bitmap, wxColour& colour) { wxBitmap newBitmap(bitmap.GetWidth(), - bitmap.GetHeight(), - bitmap.GetDepth()); + bitmap.GetHeight(), + bitmap.GetDepth()); wxMemoryDC destDC; wxMemoryDC srcDC; srcDC.SelectObject(bitmap);