]> git.saurik.com Git - wxWidgets.git/blobdiff - src/mac/carbon/bitmap.cpp
cleanup for 10.5
[wxWidgets.git] / src / mac / carbon / bitmap.cpp
index 706db8ac401b3cf61387c77a152644f183f58263..16d4ea6873469b7bdf07686d898236efae6b6021 100644 (file)
@@ -551,16 +551,38 @@ CGImageRef wxBitmapRefData::CGImageCreate() const
 
             membuf = new wxMemoryBuffer( m_memBuf ) ;
         }
-
-        CGColorSpaceRef colorSpace = wxMacGetGenericRGBColorSpace();
-        CGDataProviderRef dataProvider =
-            CGDataProviderCreateWithData(
-                membuf , (const void *)membuf->GetData() , imageSize,
-                wxMacMemoryBufferReleaseProc );
-        image =
+        
+        CGDataProviderRef dataProvider = NULL ;
+        if ( m_depth == 1 )
+        {
+            wxMemoryBuffer* maskBuf = new wxMemoryBuffer( m_width * m_height );
+            unsigned char * maskBufData = (unsigned char *) maskBuf->GetData();
+            unsigned char * bufData = (unsigned char *) membuf->GetData() ;
+            // copy one color component
+            for( int i = 0 ; i < m_width * m_height ; ++i )
+                maskBufData[i] = bufData[i*4+3];
+            dataProvider =
+                CGDataProviderCreateWithData(
+                    maskBuf , (const void *) maskBufData , m_width * m_height,
+                    wxMacMemoryBufferReleaseProc );
+            // as we are now passing the mask buffer to the data provider, we have
+            // to release the membuf ourselves
+            delete membuf ;
+
+            image = ::CGImageMaskCreate( w, h, 8, 8, m_width , dataProvider, NULL, false );
+        }
+        else
+        {
+            CGColorSpaceRef colorSpace = wxMacGetGenericRGBColorSpace();
+            dataProvider =
+                CGDataProviderCreateWithData(
+                    membuf , (const void *)membuf->GetData() , imageSize,
+                    wxMacMemoryBufferReleaseProc );
+            image =
             ::CGImageCreate(
                 w, h, 8 , 32 , 4 * m_width , colorSpace, alphaInfo ,
                 dataProvider, NULL , false , kCGRenderingIntentDefault );
+        }
         CGDataProviderRelease( dataProvider);
     }
     else
@@ -811,7 +833,7 @@ wxBitmap::wxBitmap(const char bits[], int the_width, int the_height, int no_bits
                 bit = x % 8 ;
                 mask = 1 << bit ;
 
-                if ( !(linestart[index] & mask ) )
+                if ( linestart[index] & mask )
                 {
                     *destination++ = 0xFF ;
                     *destination++ = 0 ;