From: Stefan Csomor Date: Tue, 25 Jan 2011 18:47:12 +0000 (+0000) Subject: supporting a null cgimage so that we don't get exceptions, only an wxbitmap that... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/554b2800c6fc00d86a96233be740c38c91caa4b5 supporting a null cgimage so that we don't get exceptions, only an wxbitmap that is !Ok() git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@66761 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/src/osx/core/bitmap.cpp b/src/osx/core/bitmap.cpp index 5bc3d9fb25..72ba979c41 100644 --- a/src/osx/core/bitmap.cpp +++ b/src/osx/core/bitmap.cpp @@ -291,35 +291,38 @@ wxBitmapRefData::wxBitmapRefData(CGImageRef image) bool wxBitmapRefData::Create(CGImageRef image) { - m_width = CGImageGetWidth(image); - m_height = CGImageGetHeight(image); - m_depth = 32; - m_hBitmap = NULL; - - m_bytesPerRow = GetBestBytesPerRow( m_width * 4 ) ; - size_t size = m_bytesPerRow * m_height ; - void* data = m_memBuf.GetWriteBuf( size ) ; - if ( data != NULL ) + if ( image != NULL ) { - memset( data , 0 , size ) ; - m_memBuf.UngetWriteBuf( size ) ; - CGImageAlphaInfo alpha = CGImageGetAlphaInfo(image); - if ( alpha == kCGImageAlphaNone || alpha == kCGImageAlphaNoneSkipLast || alpha == kCGImageAlphaNoneSkipLast ) - { - m_hBitmap = CGBitmapContextCreate((char*) data, m_width, m_height, 8, m_bytesPerRow, wxMacGetGenericRGBColorSpace(), kCGImageAlphaNoneSkipFirst ); - } - else - { - m_hasAlpha = true; - m_hBitmap = CGBitmapContextCreate((char*) data, m_width, m_height, 8, m_bytesPerRow, wxMacGetGenericRGBColorSpace(), kCGImageAlphaPremultipliedFirst ); - } - CGRect rect = {{0,0},{m_width,m_height}}; - CGContextDrawImage(m_hBitmap, rect, image); + m_width = CGImageGetWidth(image); + m_height = CGImageGetHeight(image); + m_depth = 32; + m_hBitmap = NULL; - wxASSERT_MSG( m_hBitmap , wxT("Unable to create CGBitmapContext context") ) ; - CGContextTranslateCTM( m_hBitmap, 0, m_height ); - CGContextScaleCTM( m_hBitmap, 1, -1 ); - } /* data != NULL */ + m_bytesPerRow = GetBestBytesPerRow( m_width * 4 ) ; + size_t size = m_bytesPerRow * m_height ; + void* data = m_memBuf.GetWriteBuf( size ) ; + if ( data != NULL ) + { + memset( data , 0 , size ) ; + m_memBuf.UngetWriteBuf( size ) ; + CGImageAlphaInfo alpha = CGImageGetAlphaInfo(image); + if ( alpha == kCGImageAlphaNone || alpha == kCGImageAlphaNoneSkipLast || alpha == kCGImageAlphaNoneSkipLast ) + { + m_hBitmap = CGBitmapContextCreate((char*) data, m_width, m_height, 8, m_bytesPerRow, wxMacGetGenericRGBColorSpace(), kCGImageAlphaNoneSkipFirst ); + } + else + { + m_hasAlpha = true; + m_hBitmap = CGBitmapContextCreate((char*) data, m_width, m_height, 8, m_bytesPerRow, wxMacGetGenericRGBColorSpace(), kCGImageAlphaPremultipliedFirst ); + } + CGRect rect = {{0,0},{m_width,m_height}}; + CGContextDrawImage(m_hBitmap, rect, image); + + wxASSERT_MSG( m_hBitmap , wxT("Unable to create CGBitmapContext context") ) ; + CGContextTranslateCTM( m_hBitmap, 0, m_height ); + CGContextScaleCTM( m_hBitmap, 1, -1 ); + } /* data != NULL */ + } m_ok = ( m_hBitmap != NULL ) ; return m_ok ;