X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/452418c4b0763eb611432e84f077c9766e282057..b3adca1e989f5520461c1e63ee6fcafcd0c7cd8e:/src/cocoa/bitmap.mm diff --git a/src/cocoa/bitmap.mm b/src/cocoa/bitmap.mm index 08f4af5204..cddc8c192f 100644 --- a/src/cocoa/bitmap.mm +++ b/src/cocoa/bitmap.mm @@ -125,6 +125,16 @@ wxBitmap::wxBitmap(int w, int h, int d) (void)Create(w, h, d); } +wxBitmap::wxBitmap(NSImage* cocoaNSImage) +{ + (void) Create(cocoaNSImage); +} + +wxBitmap::wxBitmap(NSBitmapImageRep* cocoaNSBitmapImageRep) +{ + (void) Create(cocoaNSBitmapImageRep); +} + wxBitmap::wxBitmap(const void* data, wxBitmapType type, int width, int height, int depth) { (void) Create(data, type, width, height, depth); @@ -244,7 +254,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; } @@ -348,6 +358,33 @@ bool wxBitmap::LoadFile(const wxString& filename, wxBitmapType type) return true; } +bool wxBitmap::Create(NSImage* cocoaNSImage) +{ + wxAutoNSAutoreleasePool pool; + NSBitmapImageRep *bitmapImageRep = [NSBitmapImageRep imageRepWithData:[cocoaNSImage TIFFRepresentation]]; + return Create(bitmapImageRep); +} + +bool wxBitmap::Create(NSBitmapImageRep *imageRep) +{ + UnRef(); + m_refData = new wxBitmapRefData; + if(imageRep != nil) + { + M_BITMAPDATA->m_width = [imageRep pixelsWide]; + M_BITMAPDATA->m_height = [imageRep pixelsHigh]; + M_BITMAPDATA->m_depth = [imageRep bitsPerPixel]; + M_BITMAPDATA->m_ok = true; + M_BITMAPDATA->m_numColors = 0; + M_BITMAPDATA->m_quality = 0; + M_BITMAPDATA->m_cocoaNSBitmapImageRep = [imageRep retain]; + M_BITMAPDATA->m_bitmapMask = NULL; + return true; + } + else + return false; +} + bool wxBitmap::Create(const void* data, wxBitmapType type, int width, int height, int depth) { UnRef(); @@ -364,6 +401,9 @@ bool wxBitmap::SaveFile(const wxString& filename, wxBitmapType type, const wxPal bool wxBitmap::CopyFromIcon(const wxIcon& icon) { + // Pool here due to lack of one during wx init phase + wxAutoNSAutoreleasePool pool; + UnRef(); if(!icon.GetNSImage()); [icon.GetNSImage() lockFocus]; @@ -483,10 +523,6 @@ void wxBitmap::UngetRawData(wxPixelDataBase& data) { // TODO } -void wxBitmap::UseAlpha() -{ // TODO -} - // ======================================================================== // wxMask // ======================================================================== @@ -523,6 +559,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 +575,7 @@ wxMask::~wxMask() bool wxMask::Create(const wxBitmap& bitmap) { // TODO + wxLogDebug(wxT("Cannot yet create a mask from a mono bitmap")); return FALSE; } @@ -540,6 +584,7 @@ bool wxMask::Create(const wxBitmap& bitmap) bool wxMask::Create(const wxBitmap& bitmap, int paletteIndex) { // TODO + wxLogDebug(wxT("Cannot yet create a mask from a palette bitmap")); return FALSE; } @@ -646,6 +691,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")); }