X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54c7aaca2355973dd33359210b280b4d79d54593..4a9dba0e561d2485d9235eab7b51aac8729f1b10:/src/motif/bitmap.cpp diff --git a/src/motif/bitmap.cpp b/src/motif/bitmap.cpp index fe00dc46fa..d9bb25a96d 100644 --- a/src/motif/bitmap.cpp +++ b/src/motif/bitmap.cpp @@ -36,7 +36,7 @@ #pragma message enable nosimpint #endif -#include "wx/motif/private.h" +// #include "wx/motif/private.h" #if wxHAVE_LIB_XPM #include @@ -53,27 +53,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 +89,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,14 +120,13 @@ wxBitmapRefData::~wxBitmapRefData() XFreeColors((Display*) m_display, cmp, &m_freeColors[llp], 1, 0L); delete m_freeColors; }; +#endif if (m_bitmapMask) delete m_bitmapMask; m_bitmapMask = NULL; } -wxList wxBitmap::sm_handlers; - #define M_BMPDATA ((wxBitmapRefData *)m_refData) wxBitmap::wxBitmap() @@ -138,14 +150,15 @@ wxBitmap::wxBitmap(int w, int h, int d) (void)Create(w, h, d); } -wxBitmap::wxBitmap(void *data, long type, int width, int height, int depth) +wxBitmap::wxBitmap(void *data, wxBitmapType type, + int width, int height, int depth) { (void) Create(data, type, width, height, depth); } -wxBitmap::wxBitmap(const wxString& filename, int type) +wxBitmap::wxBitmap(const wxString& filename, wxBitmapType type) { - LoadFile(filename, (int)type); + LoadFile(filename, type); } // Create from XPM data @@ -185,7 +198,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(); @@ -198,7 +211,7 @@ bool wxBitmap::Create(int w, int h, int d) return M_BITMAPDATA->m_ok; } -bool wxBitmap::LoadFile(const wxString& filename, long type) +bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type) { UnRef(); @@ -211,7 +224,7 @@ bool wxBitmap::LoadFile(const wxString& filename, long type) if (!image.LoadFile( filename, type )) return FALSE; if (image.Ok()) { - *this = image.ConvertToBitmap(); + *this = wxBitmap(image); return TRUE; } else return FALSE; @@ -220,7 +233,8 @@ bool wxBitmap::LoadFile(const wxString& filename, long type) return handler->LoadFile(this, filename, type, -1, -1); } -bool wxBitmap::Create(void *data, long type, int width, int height, int depth) +bool wxBitmap::Create(void *data, wxBitmapType type, + int width, int height, int depth) { UnRef(); @@ -229,7 +243,8 @@ bool wxBitmap::Create(void *data, long type, int width, int height, int depth) wxBitmapHandler *handler = FindHandler(type); if ( handler == NULL ) { - wxLogWarning("no data bitmap handler for type %ld defined.", type); + wxLogWarning("no data bitmap handler for type %ld defined.", + (long)type); return FALSE; } @@ -237,12 +252,13 @@ bool wxBitmap::Create(void *data, long type, int width, int height, int depth) return handler->Create(this, data, type, width, height, depth); } -bool wxBitmap::SaveFile(const wxString& filename, int type, const wxPalette *palette) +bool wxBitmap::SaveFile(const wxString& filename, wxBitmapType type, + const wxPalette *palette) const { wxBitmapHandler *handler = FindHandler(type); if ( handler == NULL ) { // try wxImage - wxImage image( *this ); + wxImage image = this->ConvertToImage(); if (image.Ok()) return image.SaveFile( filename, type ); else return FALSE; } @@ -274,6 +290,9 @@ void wxBitmap::SetDepth(int d) M_BITMAPDATA->m_depth = d; } +#if 0 + +// XXX void wxBitmap::SetQuality(int q) { if (!M_BITMAPDATA) @@ -282,6 +301,8 @@ void wxBitmap::SetQuality(int q) M_BITMAPDATA->m_quality = q; } +#endif + void wxBitmap::SetOk(bool isOk) { if (!M_BITMAPDATA) @@ -320,68 +341,6 @@ wxBitmap wxBitmap::GetSubBitmap( const wxRect& rect) const return ret; } -void wxBitmap::AddHandler(wxBitmapHandler *handler) -{ - sm_handlers.Append(handler); -} - -void wxBitmap::InsertHandler(wxBitmapHandler *handler) -{ - sm_handlers.Insert(handler); -} - -bool wxBitmap::RemoveHandler(const wxString& name) -{ - wxBitmapHandler *handler = FindHandler(name); - if ( handler ) - { - sm_handlers.DeleteObject(handler); - return TRUE; - } - else - return FALSE; -} - -wxBitmapHandler *wxBitmap::FindHandler(const wxString& name) -{ - wxNode *node = sm_handlers.First(); - while ( node ) - { - wxBitmapHandler *handler = (wxBitmapHandler *)node->Data(); - if ( handler->GetName() == name ) - return handler; - node = node->Next(); - } - return NULL; -} - -wxBitmapHandler *wxBitmap::FindHandler(const wxString& extension, long bitmapType) -{ - wxNode *node = sm_handlers.First(); - while ( node ) - { - wxBitmapHandler *handler = (wxBitmapHandler *)node->Data(); - if ( handler->GetExtension() == extension && - (bitmapType == -1 || handler->GetType() == bitmapType) ) - return handler; - node = node->Next(); - } - return NULL; -} - -wxBitmapHandler *wxBitmap::FindHandler(long bitmapType) -{ - wxNode *node = sm_handlers.First(); - while ( node ) - { - wxBitmapHandler *handler = (wxBitmapHandler *)node->Data(); - if (handler->GetType() == bitmapType) - return handler; - node = node->Next(); - } - return NULL; -} - /* * wxMask */ @@ -453,24 +412,6 @@ bool wxMask::Create(const wxBitmap& WXUNUSED(bitmap), const wxColour& WXUNUSED(c 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)) -{ - return FALSE; -} - -bool wxBitmapHandler::LoadFile(wxBitmap *WXUNUSED(bitmap), const wxString& WXUNUSED(name), long WXUNUSED(type), - 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)) -{ - return FALSE; -} - /* * Standard handlers */ @@ -487,14 +428,17 @@ 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)) +bool wxXBMFileHandler::LoadFile(wxBitmap *bitmap, const wxString& name, + long WXUNUSED(flags), + int WXUNUSED(desiredWidth), + int WXUNUSED(desiredHeight)) { - M_BITMAPHANDLERDATA->m_freePixmap = TRUE; + // M_BITMAPHANDLERDATA->m_freePixmap = TRUE; int hotX, hotY; unsigned int w, h; @@ -504,7 +448,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); + wxConstCast(name.c_str(), char), &w, &h, &pixmap, &hotX, &hotY); M_BITMAPHANDLERDATA->m_width = w; M_BITMAPHANDLERDATA->m_height = h; M_BITMAPHANDLERDATA->m_depth = 1; @@ -534,17 +478,19 @@ public: m_type = wxBITMAP_TYPE_XBM_DATA; }; - virtual bool Create(wxBitmap *bitmap, void *data, long flags, int width, int height, int depth = 1); + virtual bool Create(wxBitmap *bitmap, void *data, long flags, + int width, int height, int depth = 1); }; 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; 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; @@ -552,6 +498,7 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags 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)); @@ -602,6 +549,9 @@ bool wxXBMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags M_BITMAPHANDLERDATA->m_image = (WXImage*) image; M_BITMAPHANDLERDATA->m_insensImage = (WXImage*) insensImage; +#endif + + return TRUE; } @@ -619,14 +569,17 @@ public: }; virtual bool LoadFile(wxBitmap *bitmap, const wxString& name, long flags, - int desiredWidth, int desiredHeight); - virtual bool SaveFile(wxBitmap *bitmap, const wxString& name, int type, const wxPalette *palette = NULL); + int desiredWidth, int desiredHeight); + virtual bool SaveFile(const wxBitmap *bitmap, const wxString& name, + wxBitmapType 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) ) +bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, + long WXUNUSED(flags), + int WXUNUSED(desiredWidth), + int WXUNUSED(desiredHeight) ) { Display *dpy = (Display*) wxGetDisplay(); M_BITMAPHANDLERDATA->m_display = (WXDisplay*) dpy; @@ -639,7 +592,8 @@ bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, long WX xpmAttr.valuemask = XpmReturnInfos | XpmCloseness; xpmAttr.closeness = 40000; int errorStatus = XpmReadFileToPixmap(dpy, - RootWindow(dpy, DefaultScreen(dpy)), (char*) (const char*) name, + RootWindow(dpy, DefaultScreen(dpy)), + wxConstCast(name.c_str(), char), &pixmap, &mask, &xpmAttr); if (errorStatus == XpmSuccess) @@ -673,7 +627,7 @@ bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, long WX M_BITMAPHANDLERDATA->m_depth = depthRet; - M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; + // M_BITMAPHANDLERDATA->m_numColors = xpmAttr.npixels; XpmFreeAttributes(&xpmAttr); @@ -687,13 +641,15 @@ bool wxXPMFileHandler::LoadFile( wxBitmap *bitmap, const wxString& name, long WX } } -bool wxXPMFileHandler::SaveFile( wxBitmap *bitmap, const wxString& name, int WXUNUSED(type), - const wxPalette *WXUNUSED(palette)) +bool wxXPMFileHandler::SaveFile( const wxBitmap *bitmap, const wxString& name, + wxBitmapType 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, + int errorStatus = XpmWriteFileFromPixmap(dpy, + wxConstCast(name.c_str(), char), (Pixmap) M_BITMAPHANDLERDATA->m_pixmap, (M_BITMAPHANDLERDATA->m_bitmapMask ? (Pixmap) M_BITMAPHANDLERDATA->m_bitmapMask->GetPixmap() : (Pixmap) 0), (XpmAttributes *) NULL); @@ -717,17 +673,19 @@ public: m_type = wxBITMAP_TYPE_XPM_DATA; }; - virtual bool Create(wxBitmap *bitmap, void *data, long flags, int width, int height, int depth = 1); + virtual bool Create(wxBitmap *bitmap, void *data, long flags, + int width, int height, int depth = 1); }; IMPLEMENT_DYNAMIC_CLASS(wxXPMDataHandler, wxBitmapHandler) -bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags), +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; 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; @@ -751,7 +709,7 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags xpmAttr.valuemask |= XpmColorSymbols; // add flag } - Pixmap pixmap; + Pixmap pixmap = 0; Pixmap mask = 0; int ErrorStatus = XpmCreatePixmapFromData(dpy, RootWindow(dpy, DefaultScreen(dpy)), (char**) data, &pixmap, &mask, &xpmAttr); @@ -780,7 +738,7 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags 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; @@ -800,19 +758,6 @@ bool wxXPMDataHandler::Create( wxBitmap *bitmap, void *data, long WXUNUSED(flags #endif // wxHAVE_LIB_XPM -void wxBitmap::CleanUpHandlers() -{ - wxNode *node = sm_handlers.First(); - while ( node ) - { - wxBitmapHandler *handler = (wxBitmapHandler *)node->Data(); - wxNode *next = node->Next(); - delete handler; - delete node; - node = next; - } -} - void wxBitmap::InitStandardHandlers() { // Initialize all standard bitmap or derived class handlers here. @@ -827,13 +772,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 @@ -872,13 +819,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 @@ -902,6 +851,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) @@ -922,9 +872,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! @@ -945,7 +896,9 @@ WXPixmap wxBitmap::GetInsensPixmap (WXWidget w) M_BITMAPDATA->m_insensPixmap = (WXPixmap) XmGetPixmap (DefaultScreenOfDisplay (dpy), tmp, fg, bg); return M_BITMAPDATA->m_insensPixmap; +#endif } +#endif // We may need this sometime... @@ -1153,8 +1106,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 ) @@ -1286,12 +1239,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; @@ -1310,6 +1262,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();