X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0bca03736369e836cce9297509505c5972e775dd..5a1e0e91a1ca5ec98b0eeb335cda757d1261ed08:/src/cocoa/bitmap.mm diff --git a/src/cocoa/bitmap.mm b/src/cocoa/bitmap.mm index 08e8d435fe..b16ba01087 100644 --- a/src/cocoa/bitmap.mm +++ b/src/cocoa/bitmap.mm @@ -19,9 +19,9 @@ #include "wx/palette.h" #include "wx/icon.h" #include "wx/colour.h" + #include "wx/image.h" #endif //WX_PRECOMP -#include "wx/image.h" #include "wx/xpmdecod.h" #include "wx/rawbmp.h" @@ -33,6 +33,8 @@ #import #import +IMPLEMENT_ABSTRACT_CLASS(wxBitmapHandler, wxBitmapHandlerBase) + // ======================================================================== // wxBitmapRefData // ======================================================================== @@ -123,7 +125,7 @@ wxBitmap::wxBitmap(int w, int h, int d) (void)Create(w, h, d); } -wxBitmap::wxBitmap(void *data, wxBitmapType type, int width, int height, int depth) +wxBitmap::wxBitmap(const void* data, wxBitmapType type, int width, int height, int depth) { (void) Create(data, type, width, height, depth); } @@ -242,7 +244,7 @@ void wxBitmap::SetMask(wxMask *mask) M_BITMAPDATA->m_bitmapMask = mask ; } -bool wxBitmap::Ok() const +bool wxBitmap::IsOk() const { return m_refData && M_BITMAPDATA->m_ok; } @@ -346,7 +348,7 @@ bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type) return true; } -bool wxBitmap::Create(void *data, wxBitmapType type, int width, int height, int depth) +bool wxBitmap::Create(const void* data, wxBitmapType type, int width, int height, int depth) { UnRef(); @@ -413,24 +415,6 @@ wxImage wxBitmap::ConvertToImage() const return newImage; } -bool wxBitmap::CreateFromXpm(const char **xpm) -{ -#if wxUSE_IMAGE && wxUSE_XPM - UnRef(); - - wxCHECK_MSG( xpm, false, wxT("invalid XPM data") ); - - wxXPMDecoder decoder; - wxImage img = decoder.ReadData(xpm); - wxCHECK_MSG( img.Ok(), false, wxT("invalid XPM data") ); - - *this = wxBitmap(img); - return true; -#else - return false; -#endif -} - bool wxBitmap::CreateFromImage(const wxImage& image, int depth) { UnRef(); @@ -499,10 +483,6 @@ void wxBitmap::UngetRawData(wxPixelDataBase& data) { // TODO } -void wxBitmap::UseAlpha() -{ // TODO -} - // ======================================================================== // wxMask // ======================================================================== @@ -539,6 +519,13 @@ wxMask::wxMask(const wxBitmap& bitmap) Create(bitmap); } +// Copy constructor +wxMask::wxMask(const wxMask& src) +: wxObject(src) +, m_cocoaNSBitmapImageRep([src.m_cocoaNSBitmapImageRep retain]) +{ +} + wxMask::~wxMask() { [m_cocoaNSBitmapImageRep release]; @@ -548,6 +535,7 @@ wxMask::~wxMask() bool wxMask::Create(const wxBitmap& bitmap) { // TODO + wxLogDebug("Cannot yet create a mask from a mono bitmap"); return FALSE; } @@ -556,6 +544,7 @@ bool wxMask::Create(const wxBitmap& bitmap) bool wxMask::Create(const wxBitmap& bitmap, int paletteIndex) { // TODO + wxLogDebug("Cannot yet create a mask from a palette bitmap"); return FALSE; } @@ -662,6 +651,14 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour) wxCHECK_MSG(wxMask_CreateFromBitmapData(pixelData, colour, dstData), false, wxT("Unable to access raw data")); } + else if([srcBitmapRep bitsPerPixel]==8 && [srcBitmapRep bitsPerSample]==8 && [srcBitmapRep samplesPerPixel]==1 && [srcBitmapRep hasAlpha]==NO) + // 8-bpp Grayscale, no alpha + { // Force all RGB to access the same grayscale component + typedef wxPixelFormat PixelFormat; + wxPixelData pixelData(const_cast(bitmap)); + wxCHECK_MSG(wxMask_CreateFromBitmapData(pixelData, colour, dstData), + false, wxT("Unable to access raw data")); + } else { wxCHECK_MSG(false,false,wxT("Unimplemented pixel format")); }