]> git.saurik.com Git - wxWidgets.git/blobdiff - src/osx/core/bitmap.cpp
Fix bug in ribbon bar label size calculation.
[wxWidgets.git] / src / osx / core / bitmap.cpp
index 72226536d80202de932f6e769905b70bc3a98f2a..b88d13ff95378d16dd39ee45e907ffad18cd7bdd 100644 (file)
@@ -306,7 +306,7 @@ bool wxBitmapRefData::Create(CGImageRef image)
             memset( data , 0 , size ) ;
             m_memBuf.UngetWriteBuf( size ) ;
             CGImageAlphaInfo alpha = CGImageGetAlphaInfo(image);
-            if ( alpha == kCGImageAlphaNone || alpha == kCGImageAlphaNoneSkipLast || alpha == kCGImageAlphaNoneSkipLast )
+            if ( alpha == kCGImageAlphaNone || alpha == kCGImageAlphaNoneSkipFirst || alpha == kCGImageAlphaNoneSkipLast )
             {
                 m_hBitmap = CGBitmapContextCreate((char*) data, m_width, m_height, 8, m_bytesPerRow, wxMacGetGenericRGBColorSpace(), kCGImageAlphaNoneSkipFirst );
             }
@@ -315,7 +315,7 @@ bool wxBitmapRefData::Create(CGImageRef image)
                 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}}; 
+            CGRect rect = CGRectMake(0,0,m_width,m_height);
             CGContextDrawImage(m_hBitmap, rect, image);
             
             wxASSERT_MSG( m_hBitmap , wxT("Unable to create CGBitmapContext context") ) ;
@@ -747,7 +747,6 @@ void wxBitmapRefData::Free()
 #ifndef __LP64__
     if ( m_pictHandle )
     {
-        KillPicture( m_pictHandle ) ;
         m_pictHandle = NULL ;
     }
 #endif
@@ -1036,20 +1035,23 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const
     {
         unsigned char *sourcedata = (unsigned char*) GetRawAccess() ;
         unsigned char *destdata = (unsigned char*) ret.BeginRawAccess() ;
-        wxASSERT( (sourcedata != NULL) && (destdata != NULL) ) ;
+        wxASSERT((sourcedata != NULL) && (destdata != NULL));
 
-        int sourcelinesize = GetBitmapData()->GetBytesPerRow() ;
-        int destlinesize = ret.GetBitmapData()->GetBytesPerRow() ;
-        unsigned char *source = sourcedata + rect.x * 4 + rect.y * sourcelinesize ;
-        unsigned char *dest = destdata ;
-
-        for (int yy = 0; yy < destheight; ++yy, source += sourcelinesize , dest += destlinesize)
+        if ( (sourcedata != NULL) && (destdata != NULL) )
         {
-            memcpy( dest , source , destlinesize ) ;
+            int sourcelinesize = GetBitmapData()->GetBytesPerRow() ;
+            int destlinesize = ret.GetBitmapData()->GetBytesPerRow() ;
+            unsigned char *source = sourcedata + rect.x * 4 + rect.y * sourcelinesize ;
+            unsigned char *dest = destdata ;
+
+            for (int yy = 0; yy < destheight; ++yy, source += sourcelinesize , dest += destlinesize)
+            {
+                memcpy( dest , source , destlinesize ) ;
+            }
         }
+        ret.EndRawAccess() ;
     }
 
-    ret.EndRawAccess() ;
 
     if ( M_BITMAPDATA->m_bitmapMask )
     {
@@ -1064,15 +1066,18 @@ wxBitmap wxBitmap::GetSubBitmap(const wxRect &rect) const
         unsigned char *destdata = (unsigned char * ) maskbuf.GetWriteBuf( maskbufsize ) ;
         wxASSERT( (source != NULL) && (destdata != NULL) ) ;
 
-        source += rect.x * kMaskBytesPerPixel + rect.y * sourcelinesize ;
-        unsigned char *dest = destdata ;
-
-        for (int yy = 0; yy < destheight; ++yy, source += sourcelinesize , dest += destlinesize)
+        if ( (source != NULL) && (destdata != NULL) )
         {
-            memcpy( dest , source , destlinesize ) ;
-        }
+            source += rect.x * kMaskBytesPerPixel + rect.y * sourcelinesize ;
+            unsigned char *dest = destdata ;
+
+            for (int yy = 0; yy < destheight; ++yy, source += sourcelinesize , dest += destlinesize)
+            {
+                memcpy( dest , source , destlinesize ) ;
+            }
 
-        maskbuf.UngetWriteBuf( maskbufsize ) ;
+            maskbuf.UngetWriteBuf( maskbufsize ) ;
+        }
         ret.SetMask( new wxMask( maskbuf , destwidth , destheight , rowBytes ) ) ;
     }
     else if ( HasAlpha() )
@@ -1608,31 +1613,32 @@ bool wxMask::Create(const wxBitmap& bitmap, const wxColour& colour)
     size_t size = m_bytesPerRow * m_height ;
     unsigned char * destdatabase = (unsigned char*) m_memBuf.GetWriteBuf( size ) ;
     wxASSERT( destdatabase != NULL ) ;
-
-    memset( destdatabase , 0 , size ) ;
-    unsigned char * srcdatabase = (unsigned char*) bitmap.GetRawAccess() ;
-    size_t sourceBytesRow = bitmap.GetBitmapData()->GetBytesPerRow();
-
-    for ( int y = 0 ; y < m_height ; ++y , srcdatabase+= sourceBytesRow, destdatabase += m_bytesPerRow)
+    if ( destdatabase != NULL)
     {
-        unsigned char *srcdata = srcdatabase ;
-        unsigned char *destdata = destdatabase ;
-        unsigned char r, g, b;
+        memset( destdatabase , 0 , size ) ;
+        unsigned char * srcdatabase = (unsigned char*) bitmap.GetRawAccess() ;
+        size_t sourceBytesRow = bitmap.GetBitmapData()->GetBytesPerRow();
 
-        for ( int x = 0 ; x < m_width ; ++x )
+        for ( int y = 0 ; y < m_height ; ++y , srcdatabase+= sourceBytesRow, destdatabase += m_bytesPerRow)
         {
-            srcdata++ ;
-            r = *srcdata++ ;
-            g = *srcdata++ ;
-            b = *srcdata++ ;
+            unsigned char *srcdata = srcdatabase ;
+            unsigned char *destdata = destdatabase ;
+            unsigned char r, g, b;
 
-            if ( colour == wxColour( r , g , b ) )
-                *destdata++ = 0xFF ;
-            else
-                *destdata++ = 0x00 ;
+            for ( int x = 0 ; x < m_width ; ++x )
+            {
+                srcdata++ ;
+                r = *srcdata++ ;
+                g = *srcdata++ ;
+                b = *srcdata++ ;
+
+                if ( colour == wxColour( r , g , b ) )
+                    *destdata++ = 0xFF ;
+                else
+                    *destdata++ = 0x00 ;
+            }
         }
     }
-
     m_memBuf.UngetWriteBuf( size ) ;
     RealizeNative() ;
 
@@ -1730,65 +1736,8 @@ bool wxBundleResourceHandler::LoadFile(wxBitmap *bitmap,
     return false ;
 }
 
-#if !defined( __LP64__ ) && !defined(__WXOSX_IPHONE__)
-
-class WXDLLEXPORT wxPICTResourceHandler: public wxBitmapHandler
-{
-    DECLARE_DYNAMIC_CLASS(wxPICTResourceHandler)
-
-public:
-    inline wxPICTResourceHandler()
-    {
-        SetName(wxT("Macintosh Pict resource"));
-        SetExtension(wxEmptyString);
-        SetType(wxBITMAP_TYPE_PICT_RESOURCE);
-    };
-
-    virtual bool LoadFile(wxBitmap *bitmap,
-                          const wxString& name,
-                          wxBitmapType type,
-                          int desiredWidth,
-                          int desiredHeight);
-};
-
-IMPLEMENT_DYNAMIC_CLASS(wxPICTResourceHandler, wxBitmapHandler)
-
-
-bool wxPICTResourceHandler::LoadFile(wxBitmap *bitmap,
-                                     const wxString& name,
-                                     wxBitmapType WXUNUSED(type),
-                                     int WXUNUSED(desiredWidth),
-                                     int WXUNUSED(desiredHeight))
-{
-#if wxUSE_METAFILE
-    Str255 theName ;
-    wxMacStringToPascal( name , theName ) ;
-
-    PicHandle thePict = (PicHandle ) GetNamedResource( 'PICT' , theName ) ;
-    if ( thePict )
-    {
-        wxMetafile mf ;
-
-        mf.SetPICT( thePict ) ;
-        bitmap->Create( mf.GetWidth() , mf.GetHeight() ) ;
-        wxMemoryDC dc ;
-        dc.SelectObject( *bitmap ) ;
-        mf.Play( &dc ) ;
-        dc.SelectObject( wxNullBitmap ) ;
-
-        return true ;
-    }
-#endif
-
-    return false ;
-}
-#endif
-
 void wxBitmap::InitStandardHandlers()
 {
-#if !defined( __LP64__ ) && !defined(__WXOSX_IPHONE__)
-    AddHandler( new wxPICTResourceHandler ) ;
-#endif
 #if wxOSX_USE_COCOA_OR_CARBON
     AddHandler( new wxICONResourceHandler ) ;
 #endif