diff --git a/include/wx/cocoa/bitmap.h b/include/wx/cocoa/bitmap.h index 0cd2cd66b1..3976d79f3e 100644 --- a/include/wx/cocoa/bitmap.h +++ b/include/wx/cocoa/bitmap.h @@ -43,6 +43,9 @@ public: // Construct a mask from a mono bitmap (copies the bitmap). wxMask(const wxBitmap& bitmap); + // Copy constructor + wxMask(const wxMask& src); + virtual ~wxMask(); bool Create(const wxBitmap& bitmap, const wxColour& colour); diff --git a/src/cocoa/bitmap.mm b/src/cocoa/bitmap.mm index 452a92cbee..d492f0d3bb 100644 --- a/src/cocoa/bitmap.mm +++ b/src/cocoa/bitmap.mm @@ -523,6 +523,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]; @@ -532,6 +539,7 @@ wxMask::~wxMask() bool wxMask::Create(const wxBitmap& bitmap) { // TODO + wxLogDebug("Cannot yet create a mask from a mono bitmap"); return FALSE; } @@ -540,6 +548,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; } @@ -646,6 +655,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")); }