X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/148af7c534dcd3cf129c10db13fc37828d0f3cc1..ba808e1178c352621456baeb229847d733142d32:/src/cocoa/bitmap.mm diff --git a/src/cocoa/bitmap.mm b/src/cocoa/bitmap.mm index d075f0a56d..7d04461049 100644 --- a/src/cocoa/bitmap.mm +++ b/src/cocoa/bitmap.mm @@ -46,6 +46,8 @@ public: wxBitmapRefData( const wxBitmapRefData& data ); virtual ~wxBitmapRefData(); + virtual bool IsOk() const { return m_ok; } + protected: int m_width; int m_height; @@ -125,6 +127,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); @@ -135,12 +147,12 @@ wxBitmap::wxBitmap(const wxString& filename, wxBitmapType type) LoadFile(filename, type); } -wxObjectRefData *wxBitmap::CreateRefData() const +wxGDIRefData *wxBitmap::CreateGDIRefData() const { return new wxBitmapRefData; } -wxObjectRefData *wxBitmap::CloneRefData(const wxObjectRefData *data) const +wxGDIRefData *wxBitmap::CloneGDIRefData(const wxGDIRefData *data) const { return new wxBitmapRefData(*(wxBitmapRefData*)data); } @@ -244,11 +256,6 @@ void wxBitmap::SetMask(wxMask *mask) M_BITMAPDATA->m_bitmapMask = mask ; } -bool wxBitmap::IsOk() const -{ - return m_refData && M_BITMAPDATA->m_ok; -} - wxPalette* wxBitmap::GetPalette() const { if(!m_refData) @@ -348,6 +355,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(); @@ -389,9 +423,26 @@ bool wxBitmap::CopyFromIcon(const wxIcon& icon) return true; } -wxBitmap wxBitmap::GetSubBitmap(wxRect const&) const +wxBitmap wxBitmap::GetSubBitmap(const wxRect& rect) const { - return wxNullBitmap; + wxAutoNSAutoreleasePool pool; + if(!Ok()) + return wxNullBitmap; + NSImage *nsimage = GetNSImage(false); + + [nsimage lockFocus]; + NSRect imageRect = {{0,0}, [nsimage size]}; + imageRect.origin.x = imageRect.size.width * rect.x / GetWidth(); + imageRect.origin.y = imageRect.size.height * rect.y / GetHeight(); + imageRect.size.width *= wx_static_cast(CGFloat, rect.width) / GetWidth(); + imageRect.size.height *= wx_static_cast(CGFloat, rect.height) / GetHeight(); + + NSBitmapImageRep *newBitmapRep = [[NSBitmapImageRep alloc] initWithFocusedViewRect:imageRect]; + [nsimage unlockFocus]; + + wxBitmap newBitmap(newBitmapRep); + + return (newBitmap); } wxImage wxBitmap::ConvertToImage() const